From: Christopher Powers Date: March 21 2011 2:09am Subject: bzr push into mysql-trunk branch (chris.powers:3269) List-Archive: http://lists.mysql.com/commits/133387 Message-Id: <20110321020913.5E55C1DB0335@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6140318039079293561==" --===============6140318039079293561== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3269 cpowers 2011-03-20 [merge] merge modified: mysql-test/suite/perfschema/r/pfs_upgrade_lc0.result === modified file 'storage/perfschema/table_socket_instances.h' --- a/storage/perfschema/table_socket_instances.h 2011-03-19 01:36:46 +0000 +++ b/storage/perfschema/table_socket_instances.h 2011-03-21 02:01:31 +0000 @@ -53,7 +53,7 @@ struct row_socket_instances /** Socket state: ACTIVE or IDLE */ PSI_socket_state m_state; - row_socket_instances() {m_thread_id= false;} + row_socket_instances() {m_thread_id_set= false;} }; /** Table PERFORMANCE_SCHEMA.SOCKET_INSTANCES. */ === modified file 'storage/perfschema/unittest/pfs-t.cc' --- a/storage/perfschema/unittest/pfs-t.cc 2011-03-08 17:24:34 +0000 +++ b/storage/perfschema/unittest/pfs-t.cc 2011-03-21 02:01:31 +0000 @@ -87,6 +87,7 @@ void test_bootstrap() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -94,6 +95,7 @@ void test_bootstrap() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -131,6 +133,7 @@ PSI * load_perfschema() param.m_thread_class_sizing= 10; param.m_table_share_sizing= 10; param.m_file_class_sizing= 10; + param.m_socket_class_sizing= 10; param.m_mutex_sizing= 10; param.m_rwlock_sizing= 10; param.m_cond_sizing= 10; @@ -138,6 +141,7 @@ PSI * load_perfschema() param.m_table_sizing= 10; param.m_file_sizing= 10; param.m_file_handle_sizing= 50; + param.m_socket_sizing= 10; param.m_events_waits_history_sizing= 10; param.m_events_waits_history_long_sizing= 10; param.m_setup_actor_sizing= 0; @@ -487,6 +491,72 @@ void test_bad_registration() psi->register_file("X", bad_file_3, 1); ok(dummy_file_key == 2, "assigned key"); + /* + Test that length('wait/io/socket/' (15) + category + '/' (1)) < 32 + --> category can be up to 15 chars for a socket. + */ + + PSI_socket_key dummy_socket_key= 9999; + PSI_socket_info bad_socket_1[]= + { + { & dummy_socket_key, "X", 0} + }; + + psi->register_socket("/", bad_socket_1, 1); + ok(dummy_socket_key == 0, "zero key"); + dummy_socket_key= 9999; + psi->register_socket("a/", bad_socket_1, 1); + ok(dummy_socket_key == 0, "zero key"); + dummy_socket_key= 9999; + psi->register_socket("/b", bad_socket_1, 1); + ok(dummy_socket_key == 0, "zero key"); + dummy_socket_key= 9999; + psi->register_socket("a/b", bad_socket_1, 1); + ok(dummy_socket_key == 0, "zero key"); + dummy_socket_key= 9999; + psi->register_socket("1234567890123456", bad_socket_1, 1); + ok(dummy_socket_key == 0, "zero key"); + dummy_socket_key= 9999; + psi->register_socket("123456789012345", bad_socket_1, 1); + ok(dummy_socket_key == 1, "assigned key"); + + /* + Test that length('wait/io/socket/' (15) + category + '/' (1) + name) <= 128 + --> category + name can be up to 112 chars for a socket. + */ + + dummy_socket_key= 9999; + PSI_socket_info bad_socket_2[]= + { + { & dummy_socket_key, + /* 112 chars name */ + "12345678901234567890123456789012345678901234567890" + "12345678901234567890123456789012345678901234567890" + "123456789012", + 0} + }; + + psi->register_socket("X", bad_socket_2, 1); + ok(dummy_socket_key == 0, "zero key"); + + dummy_socket_key= 9999; + PSI_socket_info bad_socket_3[]= + { + { & dummy_socket_key, + /* 111 chars name */ + "12345678901234567890123456789012345678901234567890" + "12345678901234567890123456789012345678901234567890" + "12345678901", + 0} + }; + + psi->register_socket("XX", bad_socket_3, 1); + ok(dummy_socket_key == 0, "zero key"); + + psi->register_socket("X", bad_socket_3, 1); + ok(dummy_socket_key == 2, "assigned key"); + + shutdown_performance_schema(); } @@ -522,6 +592,12 @@ void test_init_disabled() { & file_key_A, "F-A", 0} }; + PSI_socket_key socket_key_A; + PSI_socket_info all_socket[]= + { + { & socket_key_A, "S-A", 0} + }; + PSI_thread_key thread_key_1; PSI_thread_info all_thread[]= { @@ -532,16 +608,19 @@ void test_init_disabled() psi->register_rwlock("test", all_rwlock, 1); psi->register_cond("test", all_cond, 1); psi->register_file("test", all_file, 1); + psi->register_socket("test", all_socket, 1); psi->register_thread("test", all_thread, 1); PFS_mutex_class *mutex_class_A; PFS_rwlock_class *rwlock_class_A; PFS_cond_class *cond_class_A; PFS_file_class *file_class_A; + PFS_socket_class *socket_class_A; PSI_mutex *mutex_A1; PSI_rwlock *rwlock_A1; PSI_cond *cond_A1; PFS_file *file_A1; + PSI_socket *socket_A1; PSI_thread *thread_1; /* Preparation */ @@ -562,6 +641,9 @@ void test_init_disabled() file_class_A= find_file_class(file_key_A); ok(file_class_A != NULL, "file class A"); + socket_class_A= find_socket_class(socket_key_A); + ok(socket_class_A != NULL, "socket class A"); + /* Pretend thread T-1 is running, and disabled, with thread_instrumentation */ /* ------------------------------------------------------------------------ */ @@ -652,6 +734,26 @@ void test_init_disabled() file_A1= lookup_file_by_name("foo"); ok(file_A1 == NULL, "not instrumented"); + /* disabled S-A + disabled T-1: no instrumentation */ + + socket_class_A->m_enabled= false; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 == NULL, "socket_A1 not instrumented"); + + /* enabled S-A + disabled T-1: instrumentation (for later) */ + + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 != NULL, "socket_A1 instrumented"); + + /* broken key + disabled T-1: no instrumentation */ + + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(0, NULL); + ok(socket_A1 == NULL, "socket key 0 not instrumented"); + socket_A1= psi->init_socket(99, NULL); + ok(socket_A1 == NULL, "broken socket key not instrumented"); + /* Pretend thread T-1 is enabled */ /* ----------------------------- */ @@ -760,6 +862,27 @@ void test_init_disabled() file_A1= lookup_file_by_name("foo"); ok(file_A1 == NULL, "broken file key not instrumented"); + /* disabled S-A + enabled T-1: no instrumentation */ + + socket_class_A->m_enabled= false; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 == NULL, "not instrumented"); + + /* enabled S-A + enabled T-1: instrumentation */ + + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 != NULL, "instrumented"); + psi->destroy_socket(socket_A1); + + /* broken key + enabled T-1: no instrumentation */ + + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(0, NULL); + ok(socket_A1 == NULL, "not instrumented"); + socket_A1= psi->init_socket(99, NULL); + ok(socket_A1 == NULL, "not instrumented"); + /* Pretend the running thread is not instrumented */ /* ---------------------------------------------- */ @@ -849,6 +972,26 @@ void test_init_disabled() file_A1= lookup_file_by_name("foo"); ok(file_A1 == NULL, "not instrumented"); + /* disabled S-A + unknown thread: no instrumentation */ + + socket_class_A->m_enabled= false; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 == NULL, "socket_A1 not instrumented"); + + /* enabled S-A + unknown thread: instrumentation (for later) */ + + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 != NULL, "socket_A1 instrumented"); + + /* broken key + unknown thread: no instrumentation */ + + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(0, NULL); + ok(socket_A1 == NULL, "socket key 0 not instrumented"); + socket_A1= psi->init_socket(99, NULL); + ok(socket_A1 == NULL, "broken socket key not instrumented"); + shutdown_performance_schema(); } @@ -884,6 +1027,12 @@ void test_locker_disabled() { & file_key_A, "F-A", 0} }; + PSI_socket_key socket_key_A; + PSI_socket_info all_socket[]= + { + { & socket_key_A, "S-A", 0} + }; + PSI_thread_key thread_key_1; PSI_thread_info all_thread[]= { @@ -894,16 +1043,19 @@ void test_locker_disabled() psi->register_rwlock("test", all_rwlock, 1); psi->register_cond("test", all_cond, 1); psi->register_file("test", all_file, 1); + psi->register_socket("test", all_socket, 1); psi->register_thread("test", all_thread, 1); PFS_mutex_class *mutex_class_A; PFS_rwlock_class *rwlock_class_A; PFS_cond_class *cond_class_A; PFS_file_class *file_class_A; + PFS_socket_class *socket_class_A; PSI_mutex *mutex_A1; PSI_rwlock *rwlock_A1; PSI_cond *cond_A1; PSI_file *file_A1; + PSI_socket *socket_A1; PSI_thread *thread_1; /* Preparation */ @@ -924,6 +1076,9 @@ void test_locker_disabled() file_class_A= find_file_class(file_key_A); ok(file_class_A != NULL, "file info A"); + socket_class_A= find_socket_class(socket_key_A); + ok(socket_class_A != NULL, "socket info A"); + /* Pretend thread T-1 is running, and enabled */ /* ------------------------------------------ */ @@ -949,6 +1104,10 @@ void test_locker_disabled() file_A1= (PSI_file*) lookup_file_by_name("foo"); ok(file_A1 != NULL, "instrumented"); + socket_class_A->m_enabled= true; + socket_A1= psi->init_socket(socket_key_A, NULL); + ok(socket_A1 != NULL, "instrumented"); + PSI_mutex_locker *mutex_locker; PSI_mutex_locker_state mutex_state; PSI_rwlock_locker *rwlock_locker; @@ -957,6 +1116,8 @@ void test_locker_disabled() PSI_cond_locker_state cond_state; PSI_file_locker *file_locker; PSI_file_locker_state file_state; + PSI_socket_locker *socket_locker; + PSI_socket_locker_state socket_state; /* Pretend thread T-1 is disabled */ /* ------------------------------ */ @@ -967,7 +1128,7 @@ void test_locker_disabled() rwlock_class_A->m_enabled= true; cond_class_A->m_enabled= true; file_class_A->m_enabled= true; - + socket_class_A->m_enabled= true; mutex_locker= psi->get_thread_mutex_locker(&mutex_state, mutex_A1, PSI_MUTEX_LOCK); ok(mutex_locker == NULL, "no locker (T-1 disabled)"); @@ -981,6 +1142,8 @@ void test_locker_disabled() ok(file_locker == NULL, "no locker (T-1 disabled)"); file_locker= psi->get_thread_file_descriptor_locker(&file_state, (File) 12, PSI_FILE_READ); ok(file_locker == NULL, "no locker (T-1 disabled)"); + socket_locker= psi->get_thread_socket_locker(&socket_state, socket_A1, PSI_SOCKET_SEND); + ok(socket_locker == NULL, "no locker (T-1 disabled)"); /* Pretend the global consumer is disabled */ /* --------------------------------------- */ @@ -991,6 +1154,7 @@ void test_locker_disabled() rwlock_class_A->m_enabled= true; cond_class_A->m_enabled= true; file_class_A->m_enabled= true; + socket_class_A->m_enabled= true; mutex_locker= psi->get_thread_mutex_locker(&mutex_state, mutex_A1, PSI_MUTEX_LOCK); ok(mutex_locker == NULL, "no locker (global disabled)"); @@ -1004,6 +1168,8 @@ void test_locker_disabled() ok(file_locker == NULL, "no locker (global disabled)"); file_locker= psi->get_thread_file_descriptor_locker(&file_state, (File) 12, PSI_FILE_READ); ok(file_locker == NULL, "no locker (global disabled)"); + socket_locker= psi->get_thread_socket_locker(&socket_state, socket_A1, PSI_SOCKET_SEND); + ok(socket_locker == NULL, "no locker (global disabled)"); /* Pretent the mode is global, counted only */ /* ---------------------------------------- */ @@ -1019,6 +1185,8 @@ void test_locker_disabled() cond_class_A->m_timed= false; file_class_A->m_enabled= true; file_class_A->m_timed= false; + socket_class_A->m_enabled= true; + socket_class_A->m_timed= false; mutex_locker= psi->get_thread_mutex_locker(&mutex_state, mutex_A1, PSI_MUTEX_LOCK); ok(mutex_locker == NULL, "no locker (global counted)"); @@ -1038,6 +1206,8 @@ void test_locker_disabled() ok(file_locker != NULL, "locker (global counted)"); psi->start_file_wait(file_locker, 10, __FILE__, __LINE__); psi->end_file_wait(file_locker, 10); + socket_locker= psi->get_thread_socket_locker(&socket_state, socket_A1, PSI_SOCKET_SEND); + ok(socket_locker == NULL, "no locker (global counted)"); /* TODO */ @@ -1051,6 +1221,7 @@ void test_locker_disabled() rwlock_class_A->m_enabled= false; cond_class_A->m_enabled= false; file_class_A->m_enabled= false; + socket_class_A->m_enabled= false; mutex_locker= psi->get_thread_mutex_locker(&mutex_state, mutex_A1, PSI_MUTEX_LOCK); ok(mutex_locker == NULL, "no locker"); @@ -1064,6 +1235,8 @@ void test_locker_disabled() ok(file_locker == NULL, "no locker"); file_locker= psi->get_thread_file_descriptor_locker(&file_state, (File) 12, PSI_FILE_READ); ok(file_locker == NULL, "no locker"); + socket_locker= psi->get_thread_socket_locker(&socket_state, socket_A1, PSI_SOCKET_SEND); + ok(socket_locker == NULL, "no locker"); /* Pretend everything is enabled and timed */ /* --------------------------------------- */ @@ -1080,6 +1253,8 @@ void test_locker_disabled() cond_class_A->m_timed= true; file_class_A->m_enabled= true; file_class_A->m_timed= true; + socket_class_A->m_enabled= true; + socket_class_A->m_timed= true; mutex_locker= psi->get_thread_mutex_locker(&mutex_state, mutex_A1, PSI_MUTEX_LOCK); ok(mutex_locker != NULL, "locker"); @@ -1105,6 +1280,10 @@ void test_locker_disabled() ok(file_locker != NULL, "locker"); psi->start_file_wait(file_locker, 10, __FILE__, __LINE__); psi->end_file_wait(file_locker, 10); + socket_locker= psi->get_thread_socket_locker(&socket_state, socket_A1, PSI_SOCKET_SEND); + ok(socket_locker != NULL, "locker"); + psi->start_socket_wait(socket_locker, 10, __FILE__, __LINE__); + psi->end_socket_wait(socket_locker, 10); /* Pretend the running thread is not instrumented */ /* ---------------------------------------------- */ @@ -1115,6 +1294,7 @@ void test_locker_disabled() rwlock_class_A->m_enabled= true; cond_class_A->m_enabled= true; file_class_A->m_enabled= true; + socket_class_A->m_enabled= true; mutex_locker= psi->get_thread_mutex_locker(&mutex_state, mutex_A1, PSI_MUTEX_LOCK); ok(mutex_locker == NULL, "no locker"); @@ -1128,6 +1308,8 @@ void test_locker_disabled() ok(file_locker == NULL, "no locker"); file_locker= psi->get_thread_file_descriptor_locker(&file_state, (File) 12, PSI_FILE_READ); ok(file_locker == NULL, "no locker"); + socket_locker= psi->get_thread_socket_locker(&socket_state, socket_A1, PSI_SOCKET_SEND); + ok(socket_locker == NULL, "no locker"); shutdown_performance_schema(); } @@ -1274,8 +1456,10 @@ void test_event_name_index() param.m_cond_class_sizing= 40; /* Per file info waits should be at [70..149] */ param.m_file_class_sizing= 80; - /* Per table info waits should be at [150] */ - param.m_table_share_sizing= 160; + /* Per socket info waits should be at [150..309] */ + param.m_socket_class_sizing= 160; + /* Per table info waits should be at [310] */ + param.m_table_share_sizing= 320; param.m_thread_class_sizing= 0; @@ -1286,6 +1470,7 @@ void test_event_name_index() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -1364,8 +1549,25 @@ void test_event_name_index() ok(file_class != NULL, "file class 2"); ok(file_class->m_event_name_index == 71, "index 71"); - ok(global_table_io_class.m_event_name_index == 150, "index 150"); - ok(max_instrument_class= 151, "151 event names"); + PFS_socket_class *socket_class; + PSI_socket_key dummy_socket_key_1; + PSI_socket_key dummy_socket_key_2; + PSI_socket_info dummy_sockets[]= + { + { & dummy_socket_key_1, "S-1", 0}, + { & dummy_socket_key_2, "S-2", 0} + }; + + psi->register_socket("X", dummy_sockets, 2); + socket_class= find_socket_class(dummy_socket_key_1); + ok(socket_class != NULL, "socket class 1"); + ok(socket_class->m_event_name_index == 150, "index 150"); + socket_class= find_socket_class(dummy_socket_key_2); + ok(socket_class != NULL, "socket class 2"); + ok(socket_class->m_event_name_index == 151, "index 151"); + + ok(global_table_io_class.m_event_name_index == 310, "index 310"); + ok(max_instrument_class= 313, "313 event names"); // 3 global classes } void do_all_tests() === modified file 'storage/perfschema/unittest/pfs_instr-oom-t.cc' --- a/storage/perfschema/unittest/pfs_instr-oom-t.cc 2011-03-08 17:24:34 +0000 +++ b/storage/perfschema/unittest/pfs_instr-oom-t.cc 2011-03-21 02:01:31 +0000 @@ -38,6 +38,7 @@ void test_oom() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 1000; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -45,6 +46,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -61,6 +63,7 @@ void test_oom() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 1000; param.m_cond_sizing= 0; @@ -68,6 +71,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -84,6 +88,7 @@ void test_oom() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 1000; @@ -91,6 +96,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -107,6 +113,7 @@ void test_oom() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 0; param.m_file_class_sizing= 10; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -114,6 +121,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 1000; param.m_file_handle_sizing= 1000; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -130,6 +138,7 @@ void test_oom() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 10; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -137,6 +146,7 @@ void test_oom() param.m_table_sizing= 1000; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -153,6 +163,7 @@ void test_oom() param.m_thread_class_sizing= 10; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -160,6 +171,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -178,6 +190,7 @@ void test_oom() param.m_thread_class_sizing= 10; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -185,6 +198,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 10; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -202,6 +216,7 @@ void test_oom() param.m_thread_class_sizing= 10; param.m_table_share_sizing= 0; param.m_file_class_sizing= 50; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -209,6 +224,7 @@ void test_oom() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -219,6 +235,31 @@ void test_oom() rc= init_instruments(& param); ok(rc == 1, "oom (per thread wait)"); + param.m_enabled= true; + param.m_mutex_class_sizing= 0; + param.m_rwlock_class_sizing= 0; + param.m_cond_class_sizing= 0; + param.m_thread_class_sizing= 0; + param.m_table_share_sizing= 0; + param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 10; + param.m_mutex_sizing= 0; + param.m_rwlock_sizing= 0; + param.m_cond_sizing= 0; + param.m_thread_sizing= 0; + param.m_table_sizing= 0; + param.m_file_sizing= 0; + param.m_file_handle_sizing= 0; + param.m_socket_sizing= 1000; + param.m_events_waits_history_sizing= 0; + param.m_events_waits_history_long_sizing= 0; + param.m_setup_actor_sizing= 0; + param.m_setup_object_sizing= 0; + + init_event_name_sizing(& param); + rc= init_instruments(& param); + ok(rc == 1, "oom (socket)"); + cleanup_instruments(); } === modified file 'storage/perfschema/unittest/pfs_instr-t.cc' --- a/storage/perfschema/unittest/pfs_instr-t.cc 2011-03-08 17:24:34 +0000 +++ b/storage/perfschema/unittest/pfs_instr-t.cc 2011-03-21 02:01:31 +0000 @@ -37,6 +37,7 @@ void test_no_instruments() param.m_thread_class_sizing= 0; param.m_table_share_sizing= 0; param.m_file_class_sizing= 0; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -44,6 +45,7 @@ void test_no_instruments() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -65,11 +67,13 @@ void test_no_instances() PFS_thread_class dummy_thread_class; PFS_file_class dummy_file_class; PFS_table_share dummy_table_share; + PFS_socket_class dummy_socket_class; PFS_mutex *mutex; PFS_rwlock *rwlock; PFS_cond *cond; PFS_thread *thread; PFS_file *file; + PFS_socket *socket; PFS_table *table; PFS_global_param param; @@ -80,6 +84,7 @@ void test_no_instances() param.m_thread_class_sizing= 1; param.m_table_share_sizing= 1; param.m_file_class_sizing= 1; + param.m_socket_class_sizing= 0; param.m_mutex_sizing= 0; param.m_rwlock_sizing= 0; param.m_cond_sizing= 0; @@ -87,6 +92,7 @@ void test_no_instances() param.m_table_sizing= 0; param.m_file_sizing= 0; param.m_file_handle_sizing= 0; + param.m_socket_sizing= 0; param.m_events_waits_history_sizing= 0; param.m_events_waits_history_long_sizing= 0; param.m_setup_actor_sizing= 0; @@ -158,6 +164,13 @@ void test_no_instances() ok(table == NULL, "no table"); ok(table_lost == 2, "lost 2"); + socket= create_socket(& dummy_socket_class, NULL); + ok(socket == NULL, "no socket"); + ok(socket_lost == 1, "lost 1"); + socket= create_socket(& dummy_socket_class, NULL); + ok(socket == NULL, "no socket"); + ok(socket_lost == 2, "lost 2"); + /* No result to test, just make sure it does not crash */ reset_events_waits_by_instance(); reset_per_thread_wait_stat(); @@ -174,6 +187,7 @@ void test_with_instances() PFS_cond_class dummy_cond_class; PFS_thread_class dummy_thread_class; PFS_file_class dummy_file_class; + PFS_socket_class dummy_socket_class; PFS_table_share dummy_table_share; PFS_mutex *mutex_1; PFS_mutex *mutex_2; @@ -185,6 +199,8 @@ void test_with_instances() PFS_thread *thread_2; PFS_file *file_1; PFS_file *file_2; + PFS_socket *socket_1; + PFS_socket *socket_2; PFS_table *table_1; PFS_table *table_2; PFS_global_param param; @@ -196,6 +212,7 @@ void test_with_instances() param.m_thread_class_sizing= 1; param.m_table_share_sizing= 1; param.m_file_class_sizing= 1; + param.m_socket_class_sizing= 1; param.m_mutex_sizing= 2; param.m_rwlock_sizing= 2; param.m_cond_sizing= 2; @@ -203,6 +220,7 @@ void test_with_instances() param.m_table_sizing= 2; param.m_file_sizing= 2; param.m_file_handle_sizing= 100; + param.m_socket_sizing= 2; param.m_events_waits_history_sizing= 10; param.m_events_waits_history_long_sizing= 10000; param.m_setup_actor_sizing= 0; @@ -216,6 +234,7 @@ void test_with_instances() dummy_rwlock_class.m_event_name_index= 1; dummy_cond_class.m_event_name_index= 2; dummy_file_class.m_event_name_index= 3; + dummy_socket_class.m_event_name_index= 4; mutex_1= create_mutex(& dummy_mutex_class, NULL); ok(mutex_1 != NULL, "mutex"); @@ -309,6 +328,20 @@ void test_with_instances() ok(file_2 == NULL, "no file"); ok(file_lost == 2, "lost"); + socket_1= create_socket(& dummy_socket_class, NULL); + ok(socket_1 != NULL, "socket"); + ok(socket_lost == 0, "not lost"); + socket_2= create_socket(& dummy_socket_class, NULL); + ok(socket_2 != NULL, "socket"); + ok(socket_lost == 0, "not lost"); + socket_2= create_socket(& dummy_socket_class, NULL); + ok(socket_2 == NULL, "no socket"); + ok(socket_lost == 1, "lost 1"); + destroy_socket(socket_1); + socket_2= create_socket(& dummy_socket_class, NULL); + ok(socket_2 != NULL, "socket"); + ok(socket_lost == 1, "no new loss"); + table_1= create_table(& dummy_table_share, & fake_thread, NULL); ok(table_1 != NULL, "table"); ok(table_lost == 0, "not lost"); === modified file 'storage/perfschema/unittest/pfs_instr_class-oom-t.cc' --- a/storage/perfschema/unittest/pfs_instr_class-oom-t.cc 2011-03-08 17:24:34 +0000 +++ b/storage/perfschema/unittest/pfs_instr_class-oom-t.cc 2011-03-21 02:01:31 +0000 @@ -38,11 +38,14 @@ void test_oom() ok(rc == 1, "oom (file)"); rc= init_table_share(1000); ok(rc == 1, "oom (cond)"); + rc= init_socket_class(1000); + ok(rc == 1, "oom (socket)"); cleanup_sync_class(); cleanup_thread_class(); cleanup_file_class(); cleanup_table_share(); + cleanup_socket_class(); } void do_all_tests() === modified file 'storage/perfschema/unittest/pfs_instr_class-t.cc' --- a/storage/perfschema/unittest/pfs_instr_class-t.cc 2011-03-08 17:24:34 +0000 +++ b/storage/perfschema/unittest/pfs_instr_class-t.cc 2011-03-21 02:01:31 +0000 @@ -29,11 +29,13 @@ void test_no_registration() PFS_sync_key key; PFS_thread_key thread_key; PFS_file_key file_key; + PFS_socket_key socket_key; PFS_mutex_class *mutex; PFS_rwlock_class *rwlock; PFS_cond_class *cond; PFS_thread_class *thread; PFS_file_class *file; + PFS_socket_class *socket; /* PFS_table_share *table; */ rc= init_sync_class(0, 0, 0); @@ -42,6 +44,8 @@ void test_no_registration() ok(rc == 0, "zero init (thread)"); rc= init_file_class(0); ok(rc == 0, "zero init (file)"); + rc= init_socket_class(0); + ok(rc == 0, "zero init (socket)"); rc= init_table_share(0); ok(rc == 0, "zero init (table)"); @@ -80,6 +84,13 @@ void test_no_registration() file_key= register_file_class("FOO", 3, 0); ok(file_key == 0, "no file registered"); + socket_key= register_socket_class("FOO", 3, 0); + ok(socket_key == 0, "no socket registered"); + socket_key= register_socket_class("BAR", 3, 0); + ok(socket_key == 0, "no socket registered"); + socket_key= register_socket_class("FOO", 3, 0); + ok(socket_key == 0, "no socket registered"); + PFS_thread fake_thread; fake_thread.m_table_share_hash_pins= NULL; @@ -127,9 +138,17 @@ void test_no_registration() file= find_file_class(9999); ok(file == NULL, "no file key 9999"); + socket= find_socket_class(0); + ok(socket == NULL, "no socket key 0"); + socket= find_socket_class(1); + ok(socket == NULL, "no socket key 1"); + socket= find_socket_class(9999); + ok(socket == NULL, "no socket key 9999"); + cleanup_sync_class(); cleanup_thread_class(); cleanup_file_class(); + cleanup_socket_class(); cleanup_table_share(); } @@ -348,6 +367,53 @@ void test_file_registration() cleanup_file_class(); } +void test_socket_registration() +{ + int rc; + PFS_socket_key key; + PFS_socket_class *socket; + + rc= init_socket_class(5); + ok(rc == 0, "room for 5 socket"); + + key= register_socket_class("FOO", 3, 0); + ok(key == 1, "foo registered"); + key= register_socket_class("BAR", 3, 0); + ok(key == 2, "bar registered"); + key= register_socket_class("FOO", 3, 0); + ok(key == 1, "foo re registered"); + key= register_socket_class("Socket-3", 8, 0); + ok(key == 3, "Socket-3 registered"); + key= register_socket_class("Socket-4", 8, 0); + ok(key == 4, "Socket-4 registered"); + key= register_socket_class("Socket-5", 8, 0); + ok(key == 5, "Socket-5 registered"); + ok(socket_class_lost == 0, "lost nothing"); + key= register_socket_class("Socket-6", 8, 0); + ok(key == 0, "Socket-6 not registered"); + ok(socket_class_lost == 1, "lost 1 socket"); + key= register_socket_class("Socket-7", 8, 0); + ok(key == 0, "Socket-7 not registered"); + ok(socket_class_lost == 2, "lost 2 socket"); + key= register_socket_class("Socket-3", 8, 0); + ok(key == 3, "Socket-3 re registered"); + ok(socket_class_lost == 2, "lost 2 socket"); + key= register_socket_class("Socket-5", 8, 0); + ok(key == 5, "Socket-5 re registered"); + ok(socket_class_lost == 2, "lost 2 socket"); + + socket= find_socket_class(0); + ok(socket == NULL, "no key 0"); + socket= find_socket_class(3); + ok(socket != NULL, "found key 3"); + ok(strncmp(socket->m_name, "Socket-3", 8) == 0, "key 3 is Socket-3"); + ok(socket->m_name_length == 8, "name length 3"); + socket= find_socket_class(9999); + ok(socket == NULL, "no key 9999"); + + cleanup_socket_class(); +} + void test_table_registration() { #ifdef LATER @@ -441,6 +507,7 @@ void test_instruments_reset() int rc; PFS_sync_key key; PFS_file_key file_key; + PFS_socket_key socket_key; PFS_mutex_class *mutex_1; PFS_mutex_class *mutex_2; PFS_mutex_class *mutex_3; @@ -453,6 +520,9 @@ void test_instruments_reset() PFS_file_class *file_1; PFS_file_class *file_2; PFS_file_class *file_3; + PFS_socket_class *socket_1; + PFS_socket_class *socket_2; + PFS_socket_class *socket_3; rc= init_sync_class(3, 3, 3); ok(rc == 0, "init (sync)"); @@ -460,6 +530,8 @@ void test_instruments_reset() ok(rc == 0, "init (thread)"); rc= init_file_class(3); ok(rc == 0, "init (file)"); + rc= init_socket_class(3); + ok(rc == 0, "init (socket)"); key= register_mutex_class("M-1", 3, 0); ok(key == 1, "mutex registered"); @@ -489,6 +561,13 @@ void test_instruments_reset() file_key= register_file_class("F-3", 3, 0); ok(file_key == 3, "file registered"); + socket_key= register_socket_class("S-1", 3, 0); + ok(socket_key == 1, "socket registered"); + socket_key= register_socket_class("S-2", 3, 0); + ok(socket_key == 2, "socket registered"); + socket_key= register_socket_class("S-3", 3, 0); + ok(socket_key == 3, "socket registered"); + mutex_1= find_mutex_class(1); ok(mutex_1 != NULL, "mutex key 1"); mutex_2= find_mutex_class(2); @@ -517,6 +596,13 @@ void test_instruments_reset() file_3= find_file_class(3); ok(file_3 != NULL, "file key 3"); + socket_1= find_socket_class(1); + ok(socket_1 != NULL, "socket key 1"); + socket_2= find_socket_class(2); + ok(socket_2 != NULL, "socket key 2"); + socket_3= find_socket_class(3); + ok(socket_3 != NULL, "socket key 3"); + #ifdef LATER set_wait_stat(mutex_1); set_wait_stat(mutex_2); @@ -562,6 +648,7 @@ void test_instruments_reset() cleanup_sync_class(); cleanup_file_class(); + cleanup_socket_class(); } void do_all_tests() @@ -574,6 +661,7 @@ void do_all_tests() test_cond_registration(); test_thread_registration(); test_file_registration(); + test_socket_registration(); test_table_registration(); test_instruments_reset(); --===============6140318039079293561== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/cpowers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: cpowers@tma-1-20110321020528-xu0od846oak5aoem # target_branch: file:///home/cpowers/work/dev/base_mysql-trunk-\ # wl4896/ # testament_sha1: 2b17ac386e863c5c899720fb792e9f34e3dff474 # timestamp: 2011-03-20 21:09:13 -0500 # base_revision_id: chris.powers@stripped\ # gkycjz4t2n1pv2p6 # # Begin bundle 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 --===============6140318039079293561==--