#accesslog_rotate_max_filesize = 100M
#accesslog_rotate_rotation_timing = month
#accesslog_rotate_rotation_timing_value = "1 23:59"
+ #session_thread_pool_size = 32
accesslog_rotate_max_filesize => undef,
accesslog_rotate_rotation_timing => undef,
accesslog_rotate_rotation_timing_value => undef,
+ session_thread_pool_size => undef,
other_virtual_key => undef,
# can override
checkcount => undef,
config_error($line, 'ERR0129', $config);
}
}
+ elsif ($name eq 'session_thread_pool_size') {
+ if (!defined $value || $value !~ /^\d+$/ || $value == 0 ) {
+ config_error($line, 'ERR0101', $config);
+ }
+ }
}
return ($name, $value);
if ( $option_key_flag == 0 ) {
$v->{other_virtual_key} .= ' none';
}
+ if ( defined $v->{session_thread_pool_size} ) {
+ $v->{option}{flags} .= ' --session-thread-pool-size ' . $v->{session_thread_pool_size};
+ $v->{other_virtual_key} .= ' ' . $v->{session_thread_pool_size};
+ }
+ else {
+ $v->{other_virtual_key} .= ' none';
+ }
}
if ( !defined $v->{fallback} && defined $CONFIG{fallback} ) {
FORMAT: B<"mm">
+Defines the size each of session_thread_pool_size.
+Default is session_thread_pool_size parameter at l7vs.cf.
+
+=item B<session_thread_pool_size = >I<n>
+
=back
=back
bool parse_opt_vs_access_log_logrotate_func(int &, int, char*[]);
//! virtualservice option socket option function
bool parse_opt_vs_socket_func(int &, int, char*[]);
+ //! virtualservice option session thread pool size function
+ bool parse_opt_vs_session_thread_pool_size_func(int &, int, char*[]);
// realserver option function
//! realserver weight set
bool parse_opt_rs_weight_func(int &, int, char*[]);
unsigned long long qos_downstream;
unsigned long long throughput_upstream;
unsigned long long throughput_downstream;
+ unsigned long long session_thread_pool_size;
std::string ssl_file_name;
qos_downstream(0ULL),
throughput_upstream(0ULL),
throughput_downstream(0ULL),
+ session_thread_pool_size(0),
access_log_flag(0),
socket_option_tcp_defer_accept(0),
socket_option_tcp_nodelay(0),
qos_downstream(in.qos_downstream),
throughput_upstream(in.throughput_upstream),
throughput_downstream(in.throughput_downstream),
+ session_thread_pool_size(in.session_thread_pool_size),
ssl_file_name(in.ssl_file_name),
access_log_flag(in.access_log_flag),
access_log_file_name(in.access_log_file_name),
qos_downstream = in.qos_downstream;
throughput_upstream = in.throughput_upstream;
throughput_downstream = in.throughput_downstream;
+ session_thread_pool_size = in.session_thread_pool_size;
access_log_flag = in.access_log_flag;
ssl_file_name = in.ssl_file_name;
access_log_file_name = in.access_log_file_name;
elem1.qos_downstream == elem2.qos_downstream &&
elem1.throughput_upstream == elem2.throughput_upstream &&
elem1.throughput_downstream == elem2.throughput_downstream &&
+ elem1.session_thread_pool_size == elem2.session_thread_pool_size &&
elem1.access_log_flag == elem2.access_log_flag &&
elem1.ssl_file_name == elem2.ssl_file_name &&
elem1.access_log_file_name == elem2.access_log_file_name &&
elem1.qos_downstream == elem2.qos_downstream &&
elem1.throughput_upstream == elem2.throughput_upstream &&
elem1.throughput_downstream == elem2.throughput_downstream &&
+ elem1.session_thread_pool_size == elem2.session_thread_pool_size &&
elem1.access_log_flag == elem2.access_log_flag &&
elem1.ssl_file_name == elem2.ssl_file_name &&
elem1.access_log_file_name == elem2.access_log_file_name &&
"qos_downstream=%d, "
"throughput_upstream=%d, "
"throughput_downstream=%d, "
+ "session_thread_pool_size=%d, "
"access_log_flag=%d, "
"ssl_file_name=%s, "
"access_log_file_name=%s, "
% elem.qos_downstream
% elem.throughput_upstream
% elem.throughput_downstream
+ % elem.session_thread_pool_size
% elem.access_log_flag
% elem.ssl_file_name
% elem.access_log_file_name
ar &qos_downstream;
ar &throughput_upstream;
ar &throughput_downstream;
+ ar &session_thread_pool_size;
ar &access_log_flag;
ar &ssl_file_name;
ar &access_log_file_name;
return true;
}
+//! virtualservice option session_thread_pool_size function
+//! @param[in] argument position
+//! @param[in] argument count
+//! @param[in] argument value
+bool l7vs::l7vsadm::parse_opt_vs_session_thread_pool_size_func(int &pos, int argc, char *argv[])
+{
+ Logger logger(LOG_CAT_L7VSADM_COMMON, 10, "l7vsadm::parse_opt_vs_session_thread_pool_size_func", __FILE__, __LINE__);
+ if (++pos >= argc) {
+ // session_thread_pool_size is not specified.
+ std::string buf("session_thread_pool_size is not specified.(--session-thread-pool-size)");
+ l7vsadm_err.setter(true, buf);
+ Logger::putLogError(LOG_CAT_L7VSADM_PARSE, /* fix me */999, buf, __FILE__, __LINE__);
+ return false;
+ }
+ try {
+ virtualservice_element &elem = request.vs_element; // request virtualservice element reference get.
+ std::string tmp = argv[pos];
+ unsigned long long ullval = boost::lexical_cast<unsigned long long> (argv[pos]);
+ if (ullval < 1) {
+ std::string buf("session-thread-pool-size is too small.(--session-thread-pool-size)");
+ l7vsadm_err.setter(true, buf);
+ Logger::putLogError(LOG_CAT_L7VSADM_PARSE, /* fix me */999, buf, __FILE__, __LINE__);
+ return false;
+ }
+ elem.session_thread_pool_size = ullval; // set session_thread_pool_size
+ } catch (boost::bad_lexical_cast &ex) {
+ std::string buf("invalid session-thread-pool-size.(--session-thiread-pool-size)");
+ l7vsadm_err.setter(true, buf);
+ Logger::putLogError(LOG_CAT_L7VSADM_PARSE, /* fix me */999, buf, __FILE__, __LINE__);
+ return false;
+ }
+ return true;
+}
+
//! realserver command parsing.
//! @param[in] request command
//! @param[in] argument count
" --access-log -L access-log-flag access log flag 0(none) or 1(output)\n"
" --access-log-name -a access-log-file access log file\n"
" [logrotate-args]\n"
+ " --session-thread-pool-size val-size set session_thread_pool_size\n"
" --real-server -r server-address server-address is host:port\n"
" --weight -w weight scheduling weight set to real server\n"
" --tproxy set real server connection to IP transparent mode.\n"
" [-s scheduler] [-u connection-count] [-b sorry-server] [--masq|tproxy]\n"
" [-f sorry-flag] [-Q QoSval-up] [-q QoSval-down] [-z ssl-config-file]\n"
" [-O socket-option] [-L access-log-flag] [-a access-log-file [logrotate-args]]\n"
+ " [--session-thread-pool-size val-size]\n"
" l7vsadm -E -t service-address -m proto-module [module-args]\n"
" [-s scheduler] [-u connection-count] [-b sorry-server] [--masq|tproxy]\n"
" [-f sorry-flag] [-Q QoSval-up] [-q QoSval-down] [-L access-log-flag]\n"
vs_option_dic["--access-log"] = boost::bind(&l7vsadm::parse_opt_vs_access_log_func, this, _1, _2, _3);
vs_option_dic["-a"] = boost::bind(&l7vsadm::parse_opt_vs_access_log_logrotate_func, this, _1, _2, _3);
vs_option_dic["--access-log-name"] = boost::bind(&l7vsadm::parse_opt_vs_access_log_logrotate_func, this, _1, _2, _3);
+ vs_option_dic["--session-thread-pool-size"] = boost::bind(&l7vsadm::parse_opt_vs_session_thread_pool_size_func, this, _1, _2, _3);
// create realserver option dictionary
rs_option_dic["-t"] = boost::bind(&l7vsadm::parse_opt_vs_target_func, this, _1, _2, _3);
//create session pool
{
- for (int i = 0; i < param_data.session_pool_size; ++i) {
+ int session_pool_size;
+ if (element.session_thread_pool_size > 0) {
+ session_pool_size = element.session_thread_pool_size;
+ } else {
+ session_pool_size = param_data.session_pool_size;
+ }
+ for (int i = 0; i < session_pool_size; ++i) {
try {
tcp_session *sess = new tcp_session(*this,
*dispatcher,