List:Commits« Previous MessageNext Message »
From:lars-erik.bjork Date:May 9 2009 11:25am
Subject:bzr commit into mysql-6.0-falcon-team branch (lars-erik.bjork:2701) Bug#43630
View as plain text  
#At file:///home/lb200670/mysql/43630/ based on revid:olav.sandstaa@stripped

 2701 lars-erik.bjork@stripped	2009-05-09
      This is one of at least two patches for bug#43630 
      'A SELECT using ORDER BY and LIMIT sometimes returns no rows'
      The index walker logic does not handle if an index page is empty. In
      loads with lots of updates, we may get empty pages. When walking the
      index we will stop at the first empty index page, even though this is
      not the end of the level. In this test, this has often been the first
      page, resulting in no rows returned.
      This patch makes the search proceed to the next page when an empty
      index page that is not the end of the level is encountered.
      === modified file 'storage/falcon/WalkIndex.cpp'
      WalkIndex::getNextNode has been changed to reposition the index to the
      next page when an index page with BUCKET_END as it first node is

=== modified file 'storage/falcon/WalkIndex.cpp'
--- a/storage/falcon/WalkIndex.cpp	2009-03-02 08:16:53 +0000
+++ b/storage/falcon/WalkIndex.cpp	2009-05-09 11:25:17 +0000
@@ -88,9 +88,21 @@ int32 WalkIndex::getNextNode(void)
 			recordNumber = node.getNumber();
 			if (recordNumber >= 0)
+				{
 				return recordNumber;
-			else if (recordNumber == END_LEVEL || recordNumber == END_BUCKET)
+				}
+			else if (recordNumber == END_BUCKET)
+				{
+				// This page is empty, proceed to next page
+				IndexRootPage::repositionIndex(index->dbb, index->indexId, this);
+				continue;
+				}
+			else if (recordNumber == END_LEVEL)
+				{
 				return -1;
+				}
+			ASSERT (false);

bzr commit into mysql-6.0-falcon-team branch (lars-erik.bjork:2701) Bug#43630lars-erik.bjork9 May
  • Re: bzr commit into mysql-6.0-falcon-team branch(lars-erik.bjork:2701) Bug#43630Kevin Lewis9 May