List:Commits« Previous MessageNext Message »
From:Vladislav Vaintroub Date:April 9 2009 7:06am
Subject:bzr commit into mysql-6.0-falcon-team branch (vvaintroub:3110)
Bug#43765
View as plain text  
#At file:///G:/bzr/mysql-6.0-falcon-team/ based on revid:vvaintroub@stripped

 3110 Vladislav Vaintroub	2009-04-09
      Bug #43765 falcon_bug_22173a crashes in IndexPage::findNodeInLeaf
      
      Falcon crashes with assertion (level==0)in high-concurrent
      index updates
      
      Reason is that recent code refactoring in IndexPage code introduced a 
      regression.
      
      When index is small and consists of a single root page only, findInsertionLeaf(), would check lock the root page with shared lock, check if the root page level is 0 (page is a leaf),  unlock the page, lock it again excusively and return this page. The problem is that during the gap while page was not locked, it could have beens spli. In this case returning root page is wrong, as it is not a "insertion leaf", and generally  not leaf page at all. 
      
      The fix is not to return from the function prematurely, when reacquiring lock in the root and root page changes the level from 0 to greater number.

    modified:
      storage/falcon/IndexRootPage.cpp
=== modified file 'storage/falcon/IndexRootPage.cpp'
--- a/storage/falcon/IndexRootPage.cpp	2009-04-06 11:44:49 +0000
+++ b/storage/falcon/IndexRootPage.cpp	2009-04-09 07:06:45 +0000
@@ -283,9 +283,11 @@ Bdb* IndexRootPage::findInsertionLeaf(Db
 		page = (IndexPage*) bdb->buffer;
 		
 		if (page->level == 0)
+			{
 			if (isRoot)
 				*isRoot = true;
 			return bdb;
+			}
 		}
 		
 	while (page->level > 0)


Attachment: [text/bzr-bundle] bzr/vvaintroub@mysql.com-20090409070645-katx7bwydr9y6ftt.bundle
Thread
bzr commit into mysql-6.0-falcon-team branch (vvaintroub:3110)Bug#43765Vladislav Vaintroub9 Apr