List:Commits« Previous MessageNext Message »
From:Venkata Sidagam Date:May 16 2012 10:31am
Subject:bzr push into mysql-trunk branch (venkata.sidagam:3851 to 3852)
View as plain text  
 3852 Venkata Sidagam	2012-05-16 [merge]
      Merging the fix from mysql-5.5 to mysql-trunk

    modified:
      storage/myisam/ft_boolean_search.c
      storage/myisam/ft_nlq_search.c
 3851 Annamalai Gurusami	2012-05-16 [merge]
      Null merge from mysql-5.5 to mysql-trunk. 

=== modified file 'storage/myisam/ft_boolean_search.c'
--- a/storage/myisam/ft_boolean_search.c	2012-03-06 14:29:42 +0000
+++ b/storage/myisam/ft_boolean_search.c	2012-05-16 10:28:00 +0000
@@ -354,7 +354,7 @@ static int _ftb_no_dupes_cmp(const void*
 
   returns 1 if the search was finished (must-word wasn't found)
 */
-static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
+static int _ft2_search_no_lock(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
 {
   int r;
   int subkeys=1;
@@ -454,7 +454,7 @@ static int _ft2_search(FTB *ftb, FTB_WOR
     ftbw->key_root=info->s->state.key_root[ftb->keynr];
     ftbw->keyinfo=info->s->keyinfo+ftb->keynr;
     ftbw->off=0;
-    return _ft2_search(ftb, ftbw, 0);
+    return _ft2_search_no_lock(ftb, ftbw, 0);
   }
 
   /* matching key found */
@@ -482,6 +482,18 @@ static int _ft2_search(FTB *ftb, FTB_WOR
   return 0;
 }
 
+static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
+{
+  int r;
+  MYISAM_SHARE *share= ftb->info->s;
+  if (share->concurrent_insert)
+    mysql_rwlock_rdlock(&share->key_root_lock[ftb->keynr]);
+  r= _ft2_search_no_lock(ftb, ftbw, init_search);
+  if (share->concurrent_insert)
+    mysql_rwlock_unlock(&share->key_root_lock[ftb->keynr]);
+  return r;
+}
+
 static void _ftb_init_index_search(FT_INFO *ftb)
 {
   int i;

=== modified file 'storage/myisam/ft_nlq_search.c'
--- a/storage/myisam/ft_nlq_search.c	2012-03-06 14:29:42 +0000
+++ b/storage/myisam/ft_nlq_search.c	2012-05-16 10:28:00 +0000
@@ -69,9 +69,10 @@ static int walk_and_match(FT_WORD *word,
   TREE_ELEMENT *selem;
   double       gweight=1;
   MI_INFO      *info=aio->info;
+  MYISAM_SHARE *share= info->s;
   uchar        *keybuff=aio->keybuff;
   MI_KEYDEF    *keyinfo=info->s->keyinfo+aio->keynr;
-  my_off_t     key_root=info->s->state.key_root[aio->keynr];
+  my_off_t     key_root;
   uint         extra= HA_FT_WLEN + info->s->rec_reflength;
 #if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
   float tmp_weight;
@@ -87,6 +88,11 @@ static int walk_and_match(FT_WORD *word,
   keylen-=HA_FT_WLEN;
   doc_cnt=0;
 
+  if (share->concurrent_insert)
+    mysql_rwlock_rdlock(&share->key_root_lock[aio->keynr]);
+
+  key_root= share->state.key_root[aio->keynr];
+
   /* Skip rows inserted by current inserted */
   for (r=_mi_search(info, keyinfo, keybuff, keylen, SEARCH_FIND, key_root) ;
        !r &&
@@ -96,6 +102,9 @@ static int walk_and_match(FT_WORD *word,
                           info->lastkey_length, SEARCH_BIGGER, key_root))
     ;
 
+  if (share->concurrent_insert)
+    mysql_rwlock_unlock(&share->key_root_lock[aio->keynr]);
+
   info->update|= HA_STATE_AKTIV;              /* for _mi_test_if_changed() */
 
   /* The following should be safe, even if we compare doubles */
@@ -119,6 +128,8 @@ static int walk_and_match(FT_WORD *word,
       keyinfo=& info->s->ft2_keyinfo;
       key_root=info->lastpos;
       keylen=0;
+      if (share->concurrent_insert)
+        mysql_rwlock_rdlock(&share->key_root_lock[aio->keynr]);
       r=_mi_search_first(info, keyinfo, key_root);
       goto do_skip;
     }
@@ -153,6 +164,9 @@ static int walk_and_match(FT_WORD *word,
     if (gweight < 0 || doc_cnt > 2000000)
       gweight=0;
 
+    if (share->concurrent_insert)
+      mysql_rwlock_rdlock(&share->key_root_lock[aio->keynr]);
+
     if (_mi_test_if_changed(info) == 0)
 	r=_mi_search_next(info, keyinfo, info->lastkey, info->lastkey_length,
                           SEARCH_BIGGER, key_root);
@@ -165,6 +179,8 @@ do_skip:
       r= _mi_search_next(info, keyinfo, info->lastkey, info->lastkey_length,
                          SEARCH_BIGGER, key_root);
 
+    if (share->concurrent_insert)
+      mysql_rwlock_unlock(&share->key_root_lock[aio->keynr]);
   }
   word->weight=gweight;
 

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-trunk branch (venkata.sidagam:3851 to 3852) Venkata Sidagam16 May