]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Fix slow no-io iterator
authorIgor Canadi <icanadi@fb.com>
Wed, 6 Nov 2013 22:11:52 +0000 (14:11 -0800)
committerIgor Canadi <icanadi@fb.com>
Wed, 6 Nov 2013 22:11:52 +0000 (14:11 -0800)
Summary:
This fixes #3130525. Dhruba's suggestion and Tnovak's implementation :)

The issue was with SkipEmptyDataBlocksForward(), but I also changed SkipEmptyDataBlocksBackward(). Is that OK?

Test Plan: Run the logdevice test

Reviewers: dhruba

Reviewed By: dhruba

CC: leveldb
Differential Revision: https://reviews.facebook.net/D13911

table/two_level_iterator.cc

index 965aa65a158d02a8a51a70b9415af63303a5337d..ac2d8d3d986bc9083a3529b9827cd9d8ffce577c 100644 (file)
@@ -139,7 +139,8 @@ void TwoLevelIterator::Prev() {
 
 
 void TwoLevelIterator::SkipEmptyDataBlocksForward() {
-  while (data_iter_.iter() == nullptr || !data_iter_.Valid()) {
+  while (data_iter_.iter() == nullptr || (!data_iter_.Valid() &&
+        !data_iter_.status().IsIncomplete())) {
     // Move to next block
     if (!index_iter_.Valid()) {
       SetDataIterator(nullptr);
@@ -152,7 +153,8 @@ void TwoLevelIterator::SkipEmptyDataBlocksForward() {
 }
 
 void TwoLevelIterator::SkipEmptyDataBlocksBackward() {
-  while (data_iter_.iter() == nullptr || !data_iter_.Valid()) {
+  while (data_iter_.iter() == nullptr || (!data_iter_.Valid() &&
+        !data_iter_.status().IsIncomplete())) {
     // Move to next block
     if (!index_iter_.Valid()) {
       SetDataIterator(nullptr);