summaryrefslogtreecommitdiff
path: root/db/btree.cpp
diff options
context:
space:
mode:
authorDwight <dmerriman@gmail.com>2007-12-02 11:33:59 -0500
committerDwight <dmerriman@gmail.com>2007-12-02 11:33:59 -0500
commit0df2998769cbfc6b16a39285e033bee528f20a51 (patch)
tree14cc58c0d5bc78aa5d1309b04641f283ba2caaf1 /db/btree.cpp
parentbcfc3b7b2253a8f881a8d43cebac4eacef2da0c0 (diff)
downloadmongo-0df2998769cbfc6b16a39285e033bee528f20a51.tar.gz
unindex bug
Diffstat (limited to 'db/btree.cpp')
-rw-r--r--db/btree.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/db/btree.cpp b/db/btree.cpp
index 772027b83a7..42a1e6b1518 100644
--- a/db/btree.cpp
+++ b/db/btree.cpp
@@ -9,6 +9,7 @@ const int BucketSize = 8192;
const int KeyMax = BucketSize / 8;
int ninserts = 0;
+extern int otherTraceLevel;
inline KeyNode::KeyNode(BucketBasics& bb, _KeyNode &k) :
prevChildBucket(k.prevChildBucket), recordLoc(k.recordLoc), key(bb.data+k.keyDataOfs) { }
@@ -31,7 +32,13 @@ void BucketBasics::assertValid() {
JSObj k1 = keyNode(i).key;
JSObj k2 = keyNode(i+1).key;
int z = k1.woCompare(k2);
- assert( z <= 0 );
+ if( z > 0 ) {
+ cout << "ERROR: btree key order corrupt. Keys:" << endl;
+ for( int j = 0; j < n; j++ ) {
+ cout << " " << keyNode(j).key.toString() << endl;
+ }
+ assert(false);
+ }
}
}
else {
@@ -168,6 +175,7 @@ bool BtreeBucket::find(JSObj& key, int& pos) {
pos = m;
return true;
}
+ x = key.woCompare(M.key);
}
// not found
pos = l;
@@ -183,8 +191,17 @@ bool BtreeBucket::find(JSObj& key, int& pos) {
bool BtreeBucket::unindex(JSObj& key ) {
int pos;
+ cout << key.toString() << endl;
+ if( otherTraceLevel >= 10 )
+ dump();
if( find(key, pos) ) {
+ if( otherTraceLevel >= 2 )
+ cout << "unindex(): found key to delete:" << key.toString() << endl;
del(pos);
+ if( otherTraceLevel >= 10 ) {
+ cout << "AFTER delete:" << endl;
+ dump();
+ }
assertValid();
return true;
}
@@ -406,6 +423,12 @@ BtreeCursor::BtreeCursor(DiskLoc head, JSObj k, int _direction, bool sm) :
direction(_direction), stopmiss(sm)
{
bool found;
+
+ if( otherTraceLevel >= 12 ) {
+ cout << "BTreeCursor(). dumping head bucket" << endl;
+ head.btree()->dump();
+ }
+
bucket = head.btree()->locate(head, k, keyOfs, found, direction);
}