diff options
author | Louis Williams <louis.williams@mongodb.com> | 2018-11-02 10:45:22 -0400 |
---|---|---|
committer | Louis Williams <louis.williams@mongodb.com> | 2018-11-02 13:57:06 -0400 |
commit | dff0e1c4b67412328106d7f2c33c52f5179aa450 (patch) | |
tree | 25df02e1ebfe9386a4966673588d814b4f121352 | |
parent | 63317488e39d1eda2760f6e22654dcbffba152e3 (diff) | |
download | mongo-dff0e1c4b67412328106d7f2c33c52f5179aa450.tar.gz |
SERVER-37784 Repairing the size storer should not fassert
-rw-r--r-- | jstests/disk/wt_repair_missing_files.js | 21 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp | 5 |
2 files changed, 23 insertions, 3 deletions
diff --git a/jstests/disk/wt_repair_missing_files.js b/jstests/disk/wt_repair_missing_files.js index 8529d1f01b3..7e2f2fa2bf8 100644 --- a/jstests/disk/wt_repair_missing_files.js +++ b/jstests/disk/wt_repair_missing_files.js @@ -76,7 +76,24 @@ MongoRunner.stopMongod(mongod); /** - * Test 3. Delete the _mdb_catalog. Verify that repair suceeds in creating an empty catalog and + * Test 3. Delete the sizeStorer. Verify that repair suceeds in recreating it. + */ + + let sizeStorerFile = dbpath + "sizeStorer.wt"; + jsTestLog("deleting size storer file: " + sizeStorerFile); + removeFile(sizeStorerFile); + + assertRepairSucceeds(dbpath, mongod.port); + + mongod = startMongodOnExistingPath(dbpath); + testColl = mongod.getDB(baseName)[collName]; + + assert.eq(testColl.find(doc).itcount(), 1); + assert.eq(testColl.count(), 1); + MongoRunner.stopMongod(mongod); + + /** + * Test 4. Delete the _mdb_catalog. Verify that repair suceeds in creating an empty catalog and * MongoDB starts up normally with no data. */ @@ -94,7 +111,7 @@ assert.eq(testColl.count(), 0); /** - * Test 4. Verify that using repair with --directoryperdb creates a missing directory and its + * Test 5. Verify that using repair with --directoryperdb creates a missing directory and its * files, allowing MongoDB to start up normally. */ diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp index 0f03429204f..7c33e7931ca 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp @@ -569,7 +569,10 @@ WiredTigerKVEngine::WiredTigerKVEngine(const std::string& canonicalName, WiredTigerSession session(_conn); if (!_readOnly && repair && _hasUri(session.getSession(), _sizeStorerUri)) { log() << "Repairing size cache"; - fassertNoTrace(28577, _salvageIfNeeded(_sizeStorerUri.c_str())); + + auto status = _salvageIfNeeded(_sizeStorerUri.c_str()); + if (status.code() != ErrorCodes::DataModifiedByRepair) + fassertNoTrace(28577, status); } _sizeStorer = std::make_unique<WiredTigerSizeStorer>(_conn, _sizeStorerUri, _readOnly); |