summaryrefslogtreecommitdiff
path: root/src/mongo/db/repair_database.cpp
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2015-05-18 18:01:38 -0400
committerMathias Stearn <mathias@10gen.com>2015-06-09 16:33:22 -0400
commit3b731debe162706cbbfabd9578bbb57ab5a7a7d8 (patch)
tree7b26f5541e5de0060bf75f5563b37cae5a246ee8 /src/mongo/db/repair_database.cpp
parentf50d1d0b7df924926855badd3cd700653f75f0f8 (diff)
downloadmongo-3b731debe162706cbbfabd9578bbb57ab5a7a7d8.tar.gz
SERVER-16444 New API for navigating RecordStores
Diffstat (limited to 'src/mongo/db/repair_database.cpp')
-rw-r--r--src/mongo/db/repair_database.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/mongo/db/repair_database.cpp b/src/mongo/db/repair_database.cpp
index 9bbb8da24de..fccf3ef21e3 100644
--- a/src/mongo/db/repair_database.cpp
+++ b/src/mongo/db/repair_database.cpp
@@ -127,22 +127,21 @@ namespace {
long long dataSize = 0;
RecordStore* rs = collection->getRecordStore();
- boost::scoped_ptr<RecordIterator> it(rs->getIterator(txn));
- while (!it->isEOF()) {
- RecordId id = it->curr();
- RecordData data = it->dataFor(id);
- invariant(id == it->getNext());
+ auto cursor = rs->getCursor(txn);
+ while (auto record = cursor->next()) {
+ RecordId id = record->id;
+ RecordData& data = record->data;
Status status = validateBSON(data.data(), data.size());
if (!status.isOK()) {
log() << "Invalid BSON detected at " << id << ": " << status << ". Deleting.";
- it->saveState();
+ cursor->savePositioned(); // 'data' is no longer valid.
{
WriteUnitOfWork wunit(txn);
rs->deleteRecord(txn, id);
wunit.commit();
}
- it->restoreState(txn);
+ cursor->restore(txn);
continue;
}