summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/btree.h2
-rw-r--r--db/btreecursor.cpp12
2 files changed, 7 insertions, 7 deletions
diff --git a/db/btree.h b/db/btree.h
index 12221481361..420869f55a1 100644
--- a/db/btree.h
+++ b/db/btree.h
@@ -374,7 +374,7 @@ namespace mongo {
/* Our btrees may (rarely) have "unused" keys when items are deleted.
Skip past them.
*/
- bool skipUnusedKeys();
+ bool skipUnusedKeys( bool mayJump );
bool skipOutOfRangeKeysAndCheckEnd();
void skipAndCheck();
void checkEnd();
diff --git a/db/btreecursor.cpp b/db/btreecursor.cpp
index a4694d4e0da..3c8c8f44d8d 100644
--- a/db/btreecursor.cpp
+++ b/db/btreecursor.cpp
@@ -130,7 +130,7 @@ namespace mongo {
}
void BtreeCursor::skipAndCheck() {
- skipUnusedKeys();
+ skipUnusedKeys( true );
if ( !_independentFieldRanges ) {
checkEnd();
return;
@@ -140,14 +140,14 @@ namespace mongo {
break;
}
while( skipOutOfRangeKeysAndCheckEnd() );
- if ( !skipUnusedKeys() ) {
+ if ( !skipUnusedKeys( true ) ) {
break;
}
}
}
/* skip unused keys. */
- bool BtreeCursor::skipUnusedKeys() {
+ bool BtreeCursor::skipUnusedKeys( bool mayJump ) {
int u = 0;
while ( 1 ) {
if ( !ok() )
@@ -158,7 +158,7 @@ namespace mongo {
break;
bucket = b->advance(bucket, keyOfs, direction, "skipUnusedKeys");
u++;
- if ( u % 10 == 0 ) {
+ if ( mayJump && ( u % 10 == 0 ) ) {
skipOutOfRangeKeysAndCheckEnd();
}
}
@@ -316,7 +316,7 @@ namespace mongo {
/* we were deleted but still exist as an unused
marker key. advance.
*/
- skipUnusedKeys();
+ skipUnusedKeys( false );
}
return;
}
@@ -340,7 +340,7 @@ namespace mongo {
bucket = indexDetails.head.btree()->locate(indexDetails, indexDetails.head, keyAtKeyOfs, _ordering, keyOfs, found, locAtKeyOfs, direction);
RARELY log() << " key seems to have moved in the index, refinding. found:" << found << endl;
if ( ! bucket.isNull() )
- skipUnusedKeys();
+ skipUnusedKeys( false );
}