diff options
author | Dwight <dmerriman@gmail.com> | 2008-07-16 17:21:47 -0400 |
---|---|---|
committer | Dwight <dmerriman@gmail.com> | 2008-07-16 17:21:47 -0400 |
commit | 7d5c131193f1740e4efe1750b58e1e4c3471b6e7 (patch) | |
tree | d34b53df085329aff15ed8fa449157499c42a7b5 | |
parent | 4bfd28fa4839dfc98aef7c3e7ee0567eefd36b5c (diff) | |
download | mongo-7d5c131193f1740e4efe1750b58e1e4c3471b6e7.tar.gz |
roll back bad bug commited couple hours ago
-rw-r--r-- | db/btree.cpp | 7 | ||||
-rw-r--r-- | db/btree.h | 14 | ||||
-rw-r--r-- | db/pdfile.cpp | 11 |
3 files changed, 12 insertions, 20 deletions
diff --git a/db/btree.cpp b/db/btree.cpp index ec2b28537de..57797e9c3d4 100644 --- a/db/btree.cpp +++ b/db/btree.cpp @@ -113,7 +113,12 @@ void BucketBasics::assertValid(bool force) { break; } else if( z == 0 ) { - wassert( k(i).recordLoc < k(i+1).recordLoc ); + if( !(k(i).recordLoc < k(i+1).recordLoc) ) { + cout << "ERROR: btree key order corrupt (recordloc's wrong). Keys:" << endl; + cout << " k(" << i << "):" << keyNode(i).key.toString() << " RL:" << k(i).recordLoc.toString() << endl; + cout << " k(" << i+1 << "):" << keyNode(i+1).key.toString() << " RL:" << k(i+1).recordLoc.toString() << endl; + wassert( k(i).recordLoc < k(i+1).recordLoc ); + } } } } diff --git a/db/btree.h b/db/btree.h index e719d8e8965..39a1ff1ef4a 100644 --- a/db/btree.h +++ b/db/btree.h @@ -18,16 +18,14 @@ struct _KeyNode { void setKeyDataOfs(short s) { _kdo = s; assert(s>=0); } void setKeyDataOfsSavingUse(short s) { _kdo = s; assert(s>=0); } void setUnused() { - /* setting ofs to 1 is the sentinel. setInvalid sets the - fileno, that is defensive code. + /* Setting ofs to odd is the sentinel for unused, as real recordLoc's are always + even numbers. + Note we need to keep its value basically the same as we use the recordLoc + as part of the key in the index (to handle duplicate keys efficiently). */ - recordLoc.setInvalid(); - recordLoc.GETOFS() = 1; + recordLoc.GETOFS() |= 1; } - /* & 1 for backward compatibility. can be made "== 1" later when we increment - the db data version - */ - int isUnused() { return (recordLoc.getOfs() & 1); } + int isUnused() { return recordLoc.getOfs() & 1; } int isUsed() { return !isUnused(); } }; diff --git a/db/pdfile.cpp b/db/pdfile.cpp index cc61ce903d7..5c81b9998e1 100644 --- a/db/pdfile.cpp +++ b/db/pdfile.cpp @@ -757,17 +757,6 @@ void DataFileMgr::deleteRecord(const char *ns, Record *todelete, const DiskLoc& { d->nrecords--; d->datasize -= todelete->netLength(); -/// DEBUGGING << "temp: dddelrec deleterecord " << ns << endl; -// if( todelete->extentOfs == 0xaca500 ) { -// cout << "break\n"; -// } -/* -TEMP: add deleted rec 0:aca5b0 aca500 -temp: adddelrec deleterecord admin.blog.posts -TEMP: add deleted rec 0:b9e750 b6a500 -temp: adddelrec deleterecord admin.blog.posts -*/ - d->addDeletedRec((DeletedRecord*)todelete, dl); } } |