From: Mikael Ronstrom Date: September 14 2012 1:02pm Subject: bzr push into mysql-5.5-cluster-7.2 branch (mikael.ronstrom:3971 to 3974) List-Archive: http://lists.mysql.com/commits/144773 Message-Id: <201209141303.q8ED3cjs018210@dator6> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3974 Mikael Ronstrom 2012-09-14 Removed debug printouts modified: sql/ha_ndbcluster.cc 3973 Mikael Ronstrom 2012-09-14 More tests added, fixed bug added: mysql-test/suite/ndb/r/ndb_recv_thread_activation_threshold_basic.result mysql-test/suite/ndb/t/ndb_recv_thread_activation_threshold_basic.test modified: mysql-test/suite/ndb/t/ndb_recv_thread_cpu_mask_basic.test sql/ha_ndbcluster.cc storage/ndb/src/ndbapi/TransporterFacade.cpp 3972 Mikael Ronstrom 2012-09-14 Remove parameter for number of receive threads which isn't used modified: sql/ha_ndbcluster.cc 3971 Mikael Ronstrom 2012-09-13 Added support for unlocking receive threads from locking to CPUs modified: mysql-test/suite/ndb/r/ndb_recv_thread_cpu_mask_basic.result mysql-test/suite/ndb/t/ndb_recv_thread_cpu_mask_basic.test sql/ha_ndbcluster.cc sql/ha_ndbcluster_connection.cc storage/ndb/include/ndbapi/ndb_cluster_connection.hpp storage/ndb/include/portlib/NdbThread.h storage/ndb/src/ndbapi/TransporterFacade.cpp storage/ndb/src/ndbapi/TransporterFacade.hpp storage/ndb/src/ndbapi/ndb_cluster_connection.cpp === added file 'mysql-test/suite/ndb/r/ndb_recv_thread_activation_threshold_basic.result' --- a/mysql-test/suite/ndb/r/ndb_recv_thread_activation_threshold_basic.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/ndb/r/ndb_recv_thread_activation_threshold_basic.result revid:mikael.ronstrom@stripped @@ -0,0 +1,81 @@ +SET @global_start_value = @@global.ndb_recv_thread_activation_threshold; +SELECT @global_start_value; +@global_start_value +8 +'#--------------------FN_DYNVARS_183_01------------------------#' +SET @@global.ndb_recv_thread_activation_threshold = 1; +SET @@global.ndb_recv_thread_activation_threshold = DEFAULT; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +1 +'#---------------------FN_DYNVARS_183_02-------------------------#' +SET @@global.ndb_recv_thread_activation_threshold = NULL; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +SET @@global.ndb_recv_thread_activation_threshold = ''; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +'#--------------------FN_DYNVARS_183_03------------------------#' +SET @@global.ndb_recv_thread_activation_threshold = 0; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +0 +SET @@global.ndb_recv_thread_activation_threshold = 4; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +4 +SET @@global.ndb_recv_thread_activation_threshold = 8; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +8 +SET @@global.ndb_recv_thread_activation_threshold = 12; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +12 +SET @@global.ndb_recv_thread_activation_threshold = 16; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +16 +'#--------------------FN_DYNVARS_183_04-------------------------#' +SET @@global.ndb_recv_thread_activation_threshold = -1; +ERROR 42000: Variable 'ndb_recv_thread_activation_threshold' can't be set to the value of '-1' +SET @@global.ndb_recv_thread_activation_threshold = 17; +ERROR 42000: Variable 'ndb_recv_thread_activation_threshold' can't be set to the value of '17' +SET @@global.ndb_recv_thread_activation_threshold = READUNCOMMITTED; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +SET @@global.ndb_recv_thread_activation_threshold = 'REPEATABLE'; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +SET @@global.ndb_recv_thread_activation_threshold = OFF; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +SET @@global.ndb_recv_thread_activation_threshold = ON; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +SET @@global.ndb_recv_thread_activation_threshold = 'NON-SERIALIZABLE'; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +'#----------------------FN_DYNVARS_183_06------------------------#' +SELECT @@global.ndb_recv_thread_activation_threshold = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='ndb_recv_thread_activation_threshold'; +@@global.ndb_recv_thread_activation_threshold = VARIABLE_VALUE +1 +'#---------------------FN_DYNVARS_183_07-------------------------#' +SET @@global.ndb_recv_thread_activation_threshold = 0; +SET @@global.ndb_recv_thread_activation_threshold = 1; +SET @@global.ndb_recv_thread_activation_threshold = 2; +SET @@global.ndb_recv_thread_activation_threshold = 0.4; +ERROR 42000: Incorrect argument type to variable 'ndb_recv_thread_activation_threshold' +'#---------------------FN_DYNVARS_183_08----------------------#' +SET @@global.ndb_recv_thread_activation_threshold = TRUE; +SET @@global.ndb_recv_thread_activation_threshold = FALSE; +'#---------------------FN_DYNVARS_183_09----------------------#' +SET ndb_recv_thread_activation_threshold = 1; +ERROR HY000: Variable 'ndb_recv_thread_activation_threshold' is a GLOBAL variable and should be set with SET GLOBAL +SET global.ndb_recv_thread_activation_threshold = 3; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ndb_recv_thread_activation_threshold = 3' at line 1 +SET session ndb_recv_thread_activation_threshold = 4; +ERROR HY000: Variable 'ndb_recv_thread_activation_threshold' is a GLOBAL variable and should be set with SET GLOBAL +SET global ndb_recv_thread_activation_threshold = 5; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +5 +SET @@global.ndb_recv_thread_activation_threshold = @global_start_value; +SELECT @@global.ndb_recv_thread_activation_threshold; +@@global.ndb_recv_thread_activation_threshold +8 === added file 'mysql-test/suite/ndb/t/ndb_recv_thread_activation_threshold_basic.test' --- a/mysql-test/suite/ndb/t/ndb_recv_thread_activation_threshold_basic.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/ndb/t/ndb_recv_thread_activation_threshold_basic.test revid:mikael.ronstrom@stripped @@ -0,0 +1,164 @@ +## mysql-test\suite\ndb\t\ndb_recv_thread_activation_threshold_basic.test ##### +# # +# Variable Name: ndb_recv_thread_activation_threshold_basic # +# Scope: GLOBAL # +# Access Type: Dynamic # +# Data Type:integer # +# Default Value: 8 # +# Valid Values: 0-16 # +# # +# # +# Creation Date: 2012-09-14 # +# Author: Mikael Ronstrom # +# # +# Description: Test Cases of Dynamic System Variable # +# ndb_recv_thread_activation_threshold # +# that checks the behavior of this variable in the following ways# +# * Default Value # +# * Valid & Invalid values # +# * Scope & Access method # +# * Data Integrity # +# # +# Reference: http://dev.mysql.com/doc/refman/5.5/en/ # +# mysql-cluster-params-overview.html +# # +############################################################################### + +--source include/load_sysvars.inc + +######################################################################## +# START OF ndb_recv_thread_activation_threshold TESTS # +######################################################################## + + +############################################################################## +# Saving initial value of ndb_recv_thread_activation_threshold in a # +# temporary variable # +############################################################################## + +SET @global_start_value = @@global.ndb_recv_thread_activation_threshold; +SELECT @global_start_value; + +--echo '#--------------------FN_DYNVARS_183_01------------------------#' +#################################################################### +# Display the DEFAULT value of ndb_recv_thread_activation_threshold# +#################################################################### + +SET @@global.ndb_recv_thread_activation_threshold = 1; +SET @@global.ndb_recv_thread_activation_threshold = DEFAULT; +SELECT @@global.ndb_recv_thread_activation_threshold; + +--echo '#---------------------FN_DYNVARS_183_02-------------------------#' +######################################################### +# Check if NULL or empty value is accepted # +######################################################### + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = NULL; + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = ''; + +--echo '#--------------------FN_DYNVARS_183_03------------------------#' +##################################################################### +# Change the value of ndb_recv_thread_activation_threshold to a # +# valid value # +##################################################################### + +SET @@global.ndb_recv_thread_activation_threshold = 0; +SELECT @@global.ndb_recv_thread_activation_threshold; + +SET @@global.ndb_recv_thread_activation_threshold = 4; +SELECT @@global.ndb_recv_thread_activation_threshold; + +SET @@global.ndb_recv_thread_activation_threshold = 8; +SELECT @@global.ndb_recv_thread_activation_threshold; + +SET @@global.ndb_recv_thread_activation_threshold = 12; +SELECT @@global.ndb_recv_thread_activation_threshold; + +SET @@global.ndb_recv_thread_activation_threshold = 16; +SELECT @@global.ndb_recv_thread_activation_threshold; + +--echo '#--------------------FN_DYNVARS_183_04-------------------------#' +####################################################################### +# Change the value of ndb_recv_thread_activation_threshold to invalid # +# value # +####################################################################### + +# for global scope +--Error ER_WRONG_VALUE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = -1; +--Error ER_WRONG_VALUE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = 17; +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = READUNCOMMITTED; +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = 'REPEATABLE'; +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = OFF; +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = ON; +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = 'NON-SERIALIZABLE'; + +--echo '#----------------------FN_DYNVARS_183_06------------------------#' +######################################################################### +# Check if the value in GLOBAL Table matches value in variable # +######################################################################### + +SELECT @@global.ndb_recv_thread_activation_threshold = VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME='ndb_recv_thread_activation_threshold'; + +--echo '#---------------------FN_DYNVARS_183_07-------------------------#' +################################################################### +# Check if numbers can be used on variable # +################################################################### + +# test if variable accepts 0,1,2 +SET @@global.ndb_recv_thread_activation_threshold = 0; + +SET @@global.ndb_recv_thread_activation_threshold = 1; + +SET @@global.ndb_recv_thread_activation_threshold = 2; + +--Error ER_WRONG_TYPE_FOR_VAR +SET @@global.ndb_recv_thread_activation_threshold = 0.4; + +--echo '#---------------------FN_DYNVARS_183_08----------------------#' +################################################################### +# Check if TRUE and FALSE values can be used on variable # +################################################################### + +SET @@global.ndb_recv_thread_activation_threshold = TRUE; +SET @@global.ndb_recv_thread_activation_threshold = FALSE; + +--echo '#---------------------FN_DYNVARS_183_09----------------------#' +######################################################################## +# Check if ndb_recv_thread_activation_threshold can be accessed with # +# and without @@ sign # +######################################################################## + +--Error ER_GLOBAL_VARIABLE +SET ndb_recv_thread_activation_threshold = 1; + +--Error ER_PARSE_ERROR +SET global.ndb_recv_thread_activation_threshold = 3; +#using SET SESSION|GLOBAL syntax +--Error ER_GLOBAL_VARIABLE +SET session ndb_recv_thread_activation_threshold = 4; + +SET global ndb_recv_thread_activation_threshold = 5; +SELECT @@global.ndb_recv_thread_activation_threshold; + +############################## +# Restore initial value # +############################## + +SET @@global.ndb_recv_thread_activation_threshold = @global_start_value; +SELECT @@global.ndb_recv_thread_activation_threshold; + +#################################################################### +# END OF ndb_recv_thread_activation_threshold TESTS # +#################################################################### === modified file 'mysql-test/suite/ndb/t/ndb_recv_thread_cpu_mask_basic.test' --- a/mysql-test/suite/ndb/t/ndb_recv_thread_cpu_mask_basic.test revid:mikael.ronstrom@stripped +++ b/mysql-test/suite/ndb/t/ndb_recv_thread_cpu_mask_basic.test revid:mikael.ronstrom@stripped @@ -40,7 +40,7 @@ SELECT @global_start_value; --echo '#--------------------FN_DYNVARS_183_01------------------------#' #################################################################### -# Display the DEFAULT value of tx_isolation # +# Display the DEFAULT value of ndb_recv_thread_cpu_mask # #################################################################### SET @@global.ndb_recv_thread_cpu_mask = '1'; @@ -75,7 +75,7 @@ SELECT @@global.ndb_recv_thread_cpu_mask --echo '#--------------------FN_DYNVARS_183_04-------------------------#' ####################################################################### -# Change the value of tx_isolation to invalid value # +# Change the value of ndb_recv_thread_cpu_mask to invalid value # ####################################################################### # for global scope @@ -134,7 +134,8 @@ SET @@global.ndb_recv_thread_cpu_mask = --echo '#---------------------FN_DYNVARS_183_09----------------------#' ######################################################################## -# Check if tx_isolation can be accessed with and without @@ sign # +# Check if ndb_recv_thread_cpu_mask can be accessed with and without # +# @@ sign # ######################################################################## --Error ER_GLOBAL_VARIABLE @@ -159,4 +160,3 @@ SELECT @@global.ndb_recv_thread_cpu_mask #################################################################### # END OF ndb_recv_thread_cpu_mask TESTS # #################################################################### - === modified file 'sql/ha_ndbcluster.cc' --- a/sql/ha_ndbcluster.cc revid:mikael.ronstrom@stripped +++ b/sql/ha_ndbcluster.cc revid:mikael.ronstrom@stripped @@ -75,7 +75,6 @@ static ulong opt_ndb_wait_connected; ulong opt_ndb_wait_setup; static ulong opt_ndb_cache_check_time; static uint opt_ndb_cluster_connection_pool; -static uint opt_ndb_num_recv_threads; static uint opt_ndb_recv_thread_activation_threshold; static char* opt_ndb_recv_thread_cpu_mask; static char* opt_ndb_index_stat_option; @@ -11943,7 +11942,7 @@ static int ndbcluster_init(void *p) (global_opti_node_select & 1), opt_ndb_connectstring, opt_ndb_nodeid, - opt_ndb_num_recv_threads, + 1, opt_ndb_recv_thread_activation_threshold)) { DBUG_PRINT("error", ("Could not initiate connection to cluster")); @@ -17116,19 +17115,29 @@ static MYSQL_SYSVAR_UINT( 0 /* block */ ); -#define MAX_NUM_RECV_THREADS 4 -static MYSQL_SYSVAR_UINT( - num_recv_threads, /* name */ - opt_ndb_num_recv_threads,/* var */ - PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, - "Number of receive threads per cluster connection", - NULL, /* check func. */ - NULL, /* update func. */ - 1, /* default */ - 1, /* min */ - MAX_NUM_RECV_THREADS, /* max */ - 0 /* block */ -); +#define MIN_ACTIVATION_THRESHOLD 0 +#define MAX_ACTIVATION_THRESHOLD 16 + +static +int +ndb_recv_thread_activation_threshold_check(MYSQL_THD thd, + struct st_mysql_sys_var *var, + void *save, + struct st_mysql_value *value) +{ + long long int_buf; + int val = (int)value->val_int(value, &int_buf); + int new_val = (int)int_buf; + + if (val != 0 || + new_val < MIN_ACTIVATION_THRESHOLD || + new_val > MAX_ACTIVATION_THRESHOLD) + { + return 1; + } + opt_ndb_recv_thread_activation_threshold = new_val; + return 0; +} static void @@ -17148,11 +17157,11 @@ static MYSQL_SYSVAR_UINT( "Activation threshold when receive thread takes over the polling " "of the cluster connection (measured in concurrently active " "threads)", - NULL, /* check func. */ + ndb_recv_thread_activation_threshold_check, /* check func. */ ndb_recv_thread_activation_threshold_update, /* update func. */ 8, /* default */ - 0, /* min */ - 16, /* max */ + MIN_ACTIVATION_THRESHOLD, /* min */ + MAX_ACTIVATION_THRESHOLD, /* max */ 0 /* block */ ); @@ -17160,7 +17169,7 @@ static MYSQL_SYSVAR_UINT( /* Definitions needed for receive thread cpu mask config variable */ static const int ndb_recv_thread_cpu_mask_option_buf_size = 512; char ndb_recv_thread_cpu_mask_option_buf[ndb_recv_thread_cpu_mask_option_buf_size]; -Uint16 recv_thread_cpuid_array[MAX_NUM_RECV_THREADS * MAX_CLUSTER_CONNECTIONS]; +Uint16 recv_thread_cpuid_array[1 * MAX_CLUSTER_CONNECTIONS]; static int @@ -17201,7 +17210,7 @@ ndb_recv_thread_cpu_mask_check_str(const i = bitmask.find(i + 1)) { if (recv_thread_num_cpus == - MAX_NUM_RECV_THREADS * MAX_CLUSTER_CONNECTIONS) + 1 * MAX_CLUSTER_CONNECTIONS) { sql_print_information("Trying to set too many CPU's in " "ndb_recv_thread_cpu_mask, ignored" @@ -17221,7 +17230,7 @@ void ndb_recv_thread_cpu_mask_update() { ndb_set_recv_thread_cpu(recv_thread_cpuid_array, - opt_ndb_num_recv_threads, + 1, recv_thread_num_cpus); } @@ -17523,7 +17532,6 @@ static struct st_mysql_sys_var* system_v MYSQL_SYSVAR(wait_connected), MYSQL_SYSVAR(wait_setup), MYSQL_SYSVAR(cluster_connection_pool), - MYSQL_SYSVAR(num_recv_threads), MYSQL_SYSVAR(recv_thread_activation_threshold), MYSQL_SYSVAR(recv_thread_cpu_mask), MYSQL_SYSVAR(report_thresh_binlog_mem_usage), === modified file 'storage/ndb/src/ndbapi/TransporterFacade.cpp' --- a/storage/ndb/src/ndbapi/TransporterFacade.cpp revid:mikael.ronstrom@stripped +++ b/storage/ndb/src/ndbapi/TransporterFacade.cpp revid:mikael.ronstrom@stripped @@ -653,7 +653,6 @@ TransporterFacade::become_poll_owner(trp unlock_poll_mutex(); if (poll_owner) { - clnt->m_poll.m_poll_owner = true; return true; } return false; @@ -768,7 +767,7 @@ void TransporterFacade::threadMainReceiv { /* We only take the step to become poll owner in receive thread if - we are sufficiently active, at least 16 threads active. + we are sufficiently active, at least e.g. 16 threads active. */ if (m_num_active_clients > min_active_clients_recv_thread) { No bundle (reason: useless for push emails).