From: Christopher Powers Date: February 14 2011 11:28pm Subject: bzr push into mysql-trunk-wl5379 branch (chris.powers:3229 to 3230) WL#4896 List-Archive: http://lists.mysql.com/commits/131240 Message-Id: <20110214232902.DE2DB1DB0333@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6483795494297858588==" --===============6483795494297858588== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3230 cpowers 2011-02-14 WL#4896 "Performance Schema Net IO" - Added events_waits hooks - Added object_name info as ip:port modified: storage/perfschema/pfs.cc storage/perfschema/pfs_events_waits.h storage/perfschema/pfs_instr.h storage/perfschema/table_events_waits.cc storage/perfschema/table_events_waits.h 3229 cpowers 2011-02-11 WL#4896 "Performance Schema Net IO" - Corrected assignment of object_instance_begin field - Added VIEW_SOCKET to events_waits_summary_by_thread_by_event_name - Added VIEW_SOCKET to events_waits_summary_global_by_event_name - Fixed conditions to invoke set_socket_info() in mysql_socket.h modified: include/mysql/psi/mysql_socket.h storage/perfschema/pfs.cc storage/perfschema/pfs_instr.cc storage/perfschema/table_ews_by_thread_by_event_name.cc storage/perfschema/table_ews_global_by_event_name.cc storage/perfschema/table_ews_global_by_event_name.h storage/perfschema/table_socket_instances.cc === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2011-02-12 00:22:15 +0000 +++ b/storage/perfschema/pfs.cc 2011-02-14 23:26:08 +0000 @@ -2573,16 +2573,15 @@ get_thread_socket_locker_v1(PSI_socket_l #ifdef HAVE_NESTED_EVENTS wait->m_nesting_event_id= (wait - 1)->m_event_id; #endif - wait->m_thread= pfs_thread; - wait->m_class= klass; + wait->m_thread= pfs_thread; + wait->m_class= klass; wait->m_timer_start= 0; - wait->m_timer_end= 0; + wait->m_timer_end= 0; wait->m_object_instance_addr= pfs_socket->m_identity; - // wait->m_object_name= pfs_socket->m_ip; // TBD: Where is object_name defined? - // wait->m_object_name_length= pfs_socket->m_ip_length; - wait->m_event_id= pfs_thread->m_event_id++; - wait->m_operation= socket_operation_map[static_cast(op)]; - wait->m_wait_class= WAIT_CLASS_SOCKET; + wait->m_weak_socket= pfs_socket; + wait->m_event_id= pfs_thread->m_event_id++; + wait->m_operation= socket_operation_map[static_cast(op)]; + wait->m_wait_class= WAIT_CLASS_SOCKET; pfs_thread->m_events_waits_count++; } @@ -3701,6 +3700,8 @@ static void set_socket_address_v1(PSI_so DBUG_ASSERT(socket); PFS_socket *pfs= reinterpret_cast(socket); + memset(pfs->m_ip, 0, pfs->m_ip_length); + switch (socket_addr->sa_family) { case AF_INET: @@ -3724,6 +3725,9 @@ static void set_socket_address_v1(PSI_so default: break; } + + /* Adjust IP address string length */ + pfs->m_ip_length= strlen((const char*)pfs->m_ip); } static void set_socket_info_v1(PSI_socket *socket, === modified file 'storage/perfschema/pfs_events_waits.h' --- a/storage/perfschema/pfs_events_waits.h 2011-02-04 22:00:44 +0000 +++ b/storage/perfschema/pfs_events_waits.h 2011-02-14 23:26:08 +0000 @@ -85,6 +85,8 @@ struct PFS_events_waits PFS_table_share *m_weak_table_share; /** File, for file operations only. */ PFS_file *m_weak_file; + /** Socket, for socket operations only. */ + PFS_socket *m_weak_socket; /** For weak pointers, target object version. */ uint32 m_weak_version; /** Address in memory of the object instance waited on. */ === modified file 'storage/perfschema/pfs_instr.h' --- a/storage/perfschema/pfs_instr.h 2011-02-07 19:17:08 +0000 +++ b/storage/perfschema/pfs_instr.h 2011-02-14 23:26:08 +0000 @@ -196,6 +196,9 @@ private: /** Instrumented socket implementation. @see PSI_socket. */ struct PFS_socket : public PFS_instr { + uint32 get_version() + { return m_lock.get_version(); } + /** Socket identity, typically int */ const void *m_identity; /** Thread identifier */ === modified file 'storage/perfschema/table_events_waits.cc' --- a/storage/perfschema/table_events_waits.cc 2011-02-07 19:17:08 +0000 +++ b/storage/perfschema/table_events_waits.cc 2011-02-14 23:26:08 +0000 @@ -25,6 +25,7 @@ #include "pfs_instr.h" #include "pfs_events_waits.h" #include "pfs_timer.h" +#include "m_string.h" THR_LOCK table_events_waits_current::m_table_lock; @@ -279,6 +280,46 @@ int table_events_waits_common::make_file return 0; } +int table_events_waits_common::make_socket_object_columns(volatile PFS_events_waits *wait) +{ + PFS_socket *safe_socket; + + safe_socket= sanitize_socket(wait->m_weak_socket); + if (unlikely(safe_socket == NULL)) + return 1; + + m_row.m_object_type= "SOCKET"; + m_row.m_object_type_length= 6; + m_row.m_object_schema_length= 0; + + if (safe_socket->get_version() == wait->m_weak_version) + { + /* Convert port number to string, include delimiter in port name length */ + char port[128]; + port[0] = ':'; + int port_len= int10_to_str(safe_socket->m_port, (port+1), 10) - port + 1; + + /* OBJECT NAME */ + m_row.m_object_name_length= safe_socket->m_ip_length + port_len; + + if (unlikely((m_row.m_object_name_length == 0) || + (m_row.m_object_name_length > sizeof(m_row.m_object_name)))) + return 1; + + char *name= m_row.m_object_name; + memcpy(name, safe_socket->m_ip, safe_socket->m_ip_length); + memcpy(name + safe_socket->m_ip_length, port, port_len); + } + else + { + m_row.m_object_name_length= 0; + } + + m_row.m_index_name_length= 0; + + return 0; +} + /** Build a row. @param thread_own_wait True if the memory for the wait @@ -352,6 +393,11 @@ void table_events_waits_common::make_row return; safe_class= sanitize_file_class((PFS_file_class*) wait->m_class); break; + case WAIT_CLASS_SOCKET: + if (make_socket_object_columns(wait)) + return; + safe_class= sanitize_socket_class((PFS_socket_class*) wait->m_class); + break; case NO_WAIT_CLASS: default: return; === modified file 'storage/perfschema/table_events_waits.h' --- a/storage/perfschema/table_events_waits.h 2010-12-09 16:17:13 +0000 +++ b/storage/perfschema/table_events_waits.h 2011-02-14 23:26:08 +0000 @@ -141,6 +141,7 @@ protected: void clear_object_columns(); int make_table_object_columns(volatile PFS_events_waits *wait); int make_file_object_columns(volatile PFS_events_waits *wait); + int make_socket_object_columns(volatile PFS_events_waits *wait); void make_row(bool thread_own_wait, PFS_thread *pfs_thread, volatile PFS_events_waits *wait); --===============6483795494297858588== 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-20110214232608-xpt1ohgp4aa8trhw # target_branch: file:///home/cpowers/work/dev/base_mysql-trunk-\ # wl4896/ # testament_sha1: 6e0d9375f952addc0e872eb91e1f4fd7299a5b6e # timestamp: 2011-02-14 17:29:02 -0600 # base_revision_id: cpowers@tma-1-20110212002215-lne86pesxclo411j # # Begin bundle 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 t3sA --===============6483795494297858588==--