From: Christopher Powers Date: March 14 2011 4:30pm Subject: bzr push into mysql-trunk branch (chris.powers:3254 to 3256) WL#4896 List-Archive: http://lists.mysql.com/commits/132932 Message-Id: <20110314163039.D047C1DB0335@xeno.mysql.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0257238247556707520==" --===============0257238247556707520== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3256 Christopher Powers 2011-03-14 WL#4896 "Performance Schema Net IO" - API change: Updated ps_abi_v1.h.pp modified: include/mysql/psi/psi_abi_v1.h.pp 3255 cpowers 2011-03-14 WL#4896 "Performance Schema Net IO" - Replaced get_thread_id() API with set_socket_owner() - Replaced PFS_socket.m_thread_id with m_thread_owner - SOCKET_INSTANCES.THREAD_ID displays owning thread id if availble, else NULL modified: include/mysql/psi/mysql_socket.h include/mysql/psi/psi.h storage/perfschema/pfs.cc storage/perfschema/pfs_instr.h storage/perfschema/table_socket_instances.cc 3254 cpowers 2011-03-11 WL#4896 "Performance Schema Net IO" - Added get_thread_id API - Set corresponding thread_id during socket create modified: include/mysql/psi/mysql_socket.h include/mysql/psi/psi.h storage/perfschema/pfs.cc === modified file 'include/mysql/psi/mysql_socket.h' --- a/include/mysql/psi/mysql_socket.h 2011-03-12 00:00:13 +0000 +++ b/include/mysql/psi/mysql_socket.h 2011-03-14 16:11:25 +0000 @@ -400,22 +400,16 @@ inline_mysql_socket_socket int domain, int type, int protocol) { MYSQL_SOCKET mysql_socket; - ulong thread_id; mysql_socket.fd= socket(domain, type, protocol); #ifdef HAVE_PSI_INTERFACE - mysql_socket.m_psi = PSI_server ? PSI_server->init_socket(key, &mysql_socket.fd) - : NULL; + mysql_socket.m_psi = PSI_server ? + PSI_server->init_socket(key, &mysql_socket.fd) : NULL; if (likely(PSI_server != NULL && mysql_socket.m_psi != NULL && mysql_socket.fd != -1)) - { - thread_id= PSI_server->get_thread_id(); - PSI_server->set_socket_info(mysql_socket.m_psi, &mysql_socket.fd, - NULL, 0, thread_id); - } - + PSI_server->set_socket_info(mysql_socket.m_psi, &mysql_socket.fd, NULL, 0); #endif return mysql_socket; } @@ -800,22 +794,18 @@ inline_mysql_socket_accept MYSQL_SOCKET socket_listen, struct sockaddr *addr, socklen_t *addr_len) { MYSQL_SOCKET socket_accept = MYSQL_INVALID_SOCKET; - ulong thread_id; socket_accept.fd= accept(socket_listen.fd, addr, addr_len); /** Initialize the instrument with the new socket descriptor and address */ #ifdef HAVE_PSI_INTERFACE socket_accept.m_psi = PSI_server ? - PSI_server->init_socket(key, (const void *)&socket_accept.fd) : NULL; + PSI_server->init_socket(key, (const my_socket*)&socket_accept.fd) : NULL; if (likely(PSI_server != NULL && socket_accept.m_psi != NULL && socket_accept.fd != -1)) - { - thread_id= PSI_server->get_thread_id(); - PSI_server->set_socket_info(socket_accept.m_psi, &socket_accept.fd, - addr, addr_len, thread_id); - } + PSI_server->set_socket_info(socket_accept.m_psi, &socket_accept.fd, + addr, addr_len); #endif return socket_accept; } === modified file 'include/mysql/psi/psi.h' --- a/include/mysql/psi/psi.h 2011-03-12 00:00:13 +0000 +++ b/include/mysql/psi/psi.h 2011-03-14 16:11:25 +0000 @@ -826,7 +826,7 @@ typedef void (*destroy_cond_v1_t)(struct @return an instrumented socket */ typedef struct PSI_socket* (*init_socket_v1_t) - (PSI_socket_key key, const void *identity); + (PSI_socket_key key, const my_socket *fd); /** socket instrumentation destruction API. @@ -928,15 +928,6 @@ typedef void (*set_thread_id_v1_t)(struc typedef struct PSI_thread* (*get_thread_v1_t)(void); /** - Get the thread id of the running thread. - For this function to return a result, - the thread instrumentation must have been attached to the - running thread using @c set_thread() - @return the thread id of the running thread -*/ -typedef ulong (*get_thread_id_v1_t)(void); - -/** Assign a user name to the instrumented thread. @param user the user name @param user_len the user name length @@ -1333,8 +1324,15 @@ typedef void (*set_socket_address_v1_t)( typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket, my_socket *fd, const struct sockaddr *addr, - socklen_t *addr_len, - ulong thread_id); + socklen_t *addr_len); + +/** + Set the id of the thread owning the socket. + @param socket instrumented socket + @param thread instrumented thread +*/ +typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket, + struct PSI_thread *thread); /** Performance Schema Interface, version 1. @@ -1390,8 +1388,6 @@ struct PSI_v1 set_thread_id_v1_t set_thread_id; /** @sa get_thread_v1_t. */ get_thread_v1_t get_thread; - /** @sa get_thread_id_v1_t. */ - get_thread_id_v1_t get_thread_id; /** @sa set_thread_user_v1_t. */ set_thread_user_v1_t set_thread_user; /** @sa set_thread_user_host_v1_t. */ @@ -1483,6 +1479,8 @@ struct PSI_v1 set_socket_address_v1_t set_socket_address; /** @sa set_socket_info_v1_t. */ set_socket_info_v1_t set_socket_info; + /** @sa set_socket_thread_owner_v1_t. */ + set_socket_thread_owner_v1_t set_socket_thread_owner; }; /** @} (end of group Group_PSI_v1) */ === modified file 'include/mysql/psi/psi_abi_v1.h.pp' --- a/include/mysql/psi/psi_abi_v1.h.pp 2011-03-09 23:28:32 +0000 +++ b/include/mysql/psi/psi_abi_v1.h.pp 2011-03-14 16:29:27 +0000 @@ -225,7 +225,7 @@ typedef struct PSI_cond* (*init_cond_v1_ (PSI_cond_key key, const void *identity); typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); typedef struct PSI_socket* (*init_socket_v1_t) - (PSI_socket_key key, const void *identity); + (PSI_socket_key key, const my_socket *fd); typedef void (*destroy_socket_v1_t)(struct PSI_socket *socket); typedef struct PSI_table_share* (*get_table_share_v1_t) (my_bool temporary, struct TABLE_SHARE *share); @@ -343,6 +343,8 @@ typedef void (*set_socket_info_v1_t)(str my_socket *fd, const struct sockaddr *addr, socklen_t *addr_len); +typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket, + struct PSI_thread *thread); struct PSI_v1 { register_mutex_v1_t register_mutex; @@ -415,6 +417,7 @@ struct PSI_v1 set_socket_descriptor_v1_t set_socket_descriptor; set_socket_address_v1_t set_socket_address; set_socket_info_v1_t set_socket_info; + set_socket_thread_owner_v1_t set_socket_thread_owner; }; typedef struct PSI_v1 PSI; typedef struct PSI_mutex_info_v1 PSI_mutex_info; === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2011-03-12 00:00:13 +0000 +++ b/storage/perfschema/pfs.cc 2011-03-14 16:11:25 +0000 @@ -1370,12 +1370,12 @@ static void close_table_v1(PSI_table *ta } static PSI_socket* -init_socket_v1(PSI_socket_key key, const void *identity) +init_socket_v1(PSI_socket_key key, const my_socket *fd) { - INIT_BODY_V1(socket, key, identity); + INIT_BODY_V1(socket, key, fd); } -static void destroy_socket_v1(PSI_socket* socket) +static void destroy_socket_v1(PSI_socket *socket) { PFS_socket *pfs= reinterpret_cast (socket); destroy_socket(pfs); @@ -1554,17 +1554,6 @@ get_thread_v1(void) /** Implementation of the thread instrumentation interface. - @sa PSI_v1::get_thread. -*/ -static ulong -get_thread_id_v1(void) -{ - PFS_thread *pfs= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS); - return (likely(pfs != NULL) ? pfs->m_thread_id : 0); -} - -/** - Implementation of the thread instrumentation interface. @sa PSI_v1::set_thread_user. */ static void set_thread_user_v1(const char *user, int user_len) @@ -3816,8 +3805,7 @@ static void set_socket_address_v1(PSI_so static void set_socket_info_v1(PSI_socket *socket, my_socket *fd, const struct sockaddr *addr, - socklen_t *addr_len, - ulong thread_id) + socklen_t *addr_len) { DBUG_ASSERT(socket); PFS_socket *pfs= reinterpret_cast(socket); @@ -3838,9 +3826,19 @@ static void set_socket_info_v1(PSI_socke if (likely(pfs->m_sock_len > 0)) memcpy(&pfs->m_sock_addr, addr, pfs->m_sock_len); } +} - /** Set thread id associated with this socket */ - pfs->m_thread_id= thread_id; +/** + Implementation of the socket instrumentation interface. + @sa PSI_v1::set_socket_info. +*/ +static void set_socket_thread_owner_v1(PSI_socket *socket, PSI_thread *thread) +{ + if (likely(socket != NULL && thread != NULL)) + { + PFS_socket *pfs_socket= reinterpret_cast(socket); + pfs_socket->m_thread_owner= my_pthread_getspecific_ptr(PFS_thread*, THR_PFS); + } } /** @@ -3873,7 +3871,6 @@ PSI_v1 PFS_v1= new_thread_v1, set_thread_id_v1, get_thread_v1, - get_thread_id_v1, set_thread_user_v1, set_thread_user_host_v1, set_thread_db_v1, @@ -3918,7 +3915,8 @@ PSI_v1 PFS_v1= end_socket_wait_v1, set_socket_descriptor_v1, set_socket_address_v1, - set_socket_info_v1 + set_socket_info_v1, + set_socket_thread_owner_v1 }; static void* get_interface(int version) === modified file 'storage/perfschema/pfs_instr.h' --- a/storage/perfschema/pfs_instr.h 2011-03-09 21:28:05 +0000 +++ b/storage/perfschema/pfs_instr.h 2011-03-14 16:11:25 +0000 @@ -202,8 +202,8 @@ struct PFS_socket : public PFS_instr /** Socket identity, typically int */ const void *m_identity; - /** Thread identifier */ - uint m_thread_id; + /** Owning thread, if applicable */ + PFS_thread *m_thread_owner; /** Socket file descriptor */ uint m_fd; /** Raw socket address */ === modified file 'storage/perfschema/table_socket_instances.cc' --- a/storage/perfschema/table_socket_instances.cc 2011-03-09 21:28:05 +0000 +++ b/storage/perfschema/table_socket_instances.cc 2011-03-14 16:11:25 +0000 @@ -154,9 +154,13 @@ void table_socket_instances::make_row(PF m_row.m_event_name= safe_class->m_name; m_row.m_event_name_length= safe_class->m_name_length; m_row.m_identity= pfs->m_identity; - m_row.m_thread_id= pfs->m_thread_id; m_row.m_fd= pfs->m_fd; + PFS_thread *safe_thread= sanitize_thread(pfs->m_thread_owner); + + if (safe_thread != NULL) + m_row.m_thread_id= safe_thread->m_thread_id; + if (pfs->m_lock.end_optimistic_lock(&lock)) m_row_exists= true; } @@ -187,7 +191,10 @@ int table_socket_instances::read_row_val set_field_ulonglong(f, (intptr)m_row.m_identity); break; case 2: /* THREAD_ID */ - set_field_ulong(f, m_row.m_thread_id); + if (m_row.m_thread_id != 0) // TBD: use flag to indicate valid thread id? + set_field_ulong(f, m_row.m_thread_id); + else + f->set_null(); break; case 3: /* SOCKET_ID */ set_field_ulong(f, m_row.m_fd); --===============0257238247556707520== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/chris.powers@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: chris.powers@stripped # target_branch: file:///home/cpowers/work/dev/base_mysql-trunk-\ # wl4896/ # testament_sha1: 0f4177a68a5fed221ecf7a443ecbecef5ef7a213 # timestamp: 2011-03-14 11:30:39 -0500 # base_revision_id: cpowers@tma-1-20110312000013-bj8sh7ifftb6awxh # # Begin bundle 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 HVO+uPZI/4u5IpwoSGmqOxYA --===============0257238247556707520==--