[Commits] 6c5181d: MDEV-7728 - Improve xid cache scalability by using lock-free hash

svoj at mariadb.org svoj at mariadb.org
Mon Mar 16 16:55:18 EET 2015


revision-id: 6c5181d23fd4a0c453136871588ba65ff36943a6
parent(s): 2f71fb80d9e40338e0dd38ec8641e2a1af585a58
committer: Sergey Vojtovich
branch nick: 10.1
timestamp: 2015-03-16 18:54:45 +0400
message:

MDEV-7728 - Improve xid cache scalability by using lock-free hash

Spider support for new xid cache implementation.

---
 storage/spider/spd_table.cc |  6 ++++--
 storage/spider/spd_trx.cc   | 15 +++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc
index 36768ae..411c7ae 100644
--- a/storage/spider/spd_table.cc
+++ b/storage/spider/spd_table.cc
@@ -41,11 +41,13 @@
 #include "spd_malloc.h"
 
 ulong *spd_db_att_thread_id;
+#if MYSQL_VERSION_ID < 100103
 #ifdef XID_CACHE_IS_SPLITTED
 uint *spd_db_att_xid_cache_split_num;
 #endif
 pthread_mutex_t *spd_db_att_LOCK_xid_cache;
 HASH *spd_db_att_xid_cache;
+#endif
 struct charset_info_st *spd_charset_utf8_bin;
 const char **spd_defaults_extra_file;
 const char **spd_defaults_file;
@@ -6263,7 +6265,7 @@ int spider_db_init(
       "?LOCK_xid_cache@@3PAUst_mysql_mutex@@A"));
   spd_db_att_xid_cache = *((HASH **)
     GetProcAddress(current_module, "?xid_cache@@3PAUst_hash@@A"));
-#else
+#elif MYSQL_VERSION_ID < 100103
   spd_db_att_LOCK_xid_cache = (pthread_mutex_t *)
 #if MYSQL_VERSION_ID < 50500
     GetProcAddress(current_module,
@@ -6289,7 +6291,7 @@ int spider_db_init(
   spd_db_att_xid_cache_split_num = &opt_xid_cache_split_num;
   spd_db_att_LOCK_xid_cache = LOCK_xid_cache;
   spd_db_att_xid_cache = xid_cache;
-#else
+#elif MYSQL_VERSION_ID < 100103
   spd_db_att_LOCK_xid_cache = &LOCK_xid_cache;
   spd_db_att_xid_cache = &xid_cache;
 #endif
diff --git a/storage/spider/spd_trx.cc b/storage/spider/spd_trx.cc
index a66fa5a..1b02bb8 100644
--- a/storage/spider/spd_trx.cc
+++ b/storage/spider/spd_trx.cc
@@ -38,11 +38,13 @@
 #include "spd_ping_table.h"
 #include "spd_malloc.h"
 
+#if MYSQL_VERSION_ID < 100103
 #ifdef XID_CACHE_IS_SPLITTED
 extern uint *spd_db_att_xid_cache_split_num;
 #endif
 extern pthread_mutex_t *spd_db_att_LOCK_xid_cache;
 extern HASH *spd_db_att_xid_cache;
+#endif
 extern struct charset_info_st *spd_charset_utf8_bin;
 
 extern handlerton *spider_hton_ptr;
@@ -1641,6 +1643,13 @@ int spider_xa_lock(
   int error_num;
   const char *old_proc_info;
   DBUG_ENTER("spider_xa_lock");
+#if MYSQL_VERSION_ID >= 100103
+  old_proc_info = thd_proc_info(thd, "Locking xid by Spider");
+  error_num= 0;
+  if (xid_cache_insert(thd, xid_state))
+    error_num= thd->get_stmt_da()->sql_errno() == ER_XAER_DUPID ?
+               ER_SPIDER_XA_LOCKED_NUM : HA_ERR_OUT_OF_MEM;
+#else
 #ifdef SPIDER_HAS_HASH_VALUE_TYPE
   my_hash_value_type hash_value = my_calc_hash(spd_db_att_xid_cache,
     (uchar*) xid_state->xid.key(), xid_state->xid.key_length());
@@ -1699,6 +1708,7 @@ int spider_xa_lock(
 #else
   pthread_mutex_unlock(spd_db_att_LOCK_xid_cache);
 #endif
+#endif
   thd_proc_info(thd, old_proc_info);
   DBUG_RETURN(error_num);
 }
@@ -1709,6 +1719,10 @@ int spider_xa_unlock(
   THD *thd = current_thd;
   const char *old_proc_info;
   DBUG_ENTER("spider_xa_unlock");
+#if MYSQL_VERSION_ID >= 100103
+  old_proc_info = thd_proc_info(thd, "Unlocking xid by Spider");
+  xid_cache_delete(thd, xid_state);
+#else
 #if defined(SPIDER_HAS_HASH_VALUE_TYPE) && defined(HASH_UPDATE_WITH_HASH_VALUE)
   my_hash_value_type hash_value = my_calc_hash(spd_db_att_xid_cache,
     (uchar*) xid_state->xid.key(), xid_state->xid.key_length());
@@ -1738,6 +1752,7 @@ int spider_xa_unlock(
 #else
   pthread_mutex_unlock(spd_db_att_LOCK_xid_cache);
 #endif
+#endif
   thd_proc_info(thd, old_proc_info);
   DBUG_RETURN(0);
 }


More information about the commits mailing list