summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Williams <louis.williams@mongodb.com>2018-11-02 10:45:22 -0400
committerLouis Williams <louis.williams@mongodb.com>2018-11-02 13:57:06 -0400
commitdff0e1c4b67412328106d7f2c33c52f5179aa450 (patch)
tree25df02e1ebfe9386a4966673588d814b4f121352
parent63317488e39d1eda2760f6e22654dcbffba152e3 (diff)
downloadmongo-dff0e1c4b67412328106d7f2c33c52f5179aa450.tar.gz
SERVER-37784 Repairing the size storer should not fassert
-rw-r--r--jstests/disk/wt_repair_missing_files.js21
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp5
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);