summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamon Fernandez <ramon.fernandez@mongodb.com>2015-07-22 13:09:53 -0400
committerRamon Fernandez <ramon.fernandez@mongodb.com>2015-07-22 13:09:53 -0400
commit4829a881dd5eb4f86ff6ba38c29d3abd652481a3 (patch)
tree34afbb78402ea8f980ac770e0629176dee50729c
parent3cff10e6cca2e1b53eb3e7a0622fcd9ac13dad44 (diff)
downloadmongo-4829a881dd5eb4f86ff6ba38c29d3abd652481a3.tar.gz
Revert "Revert "SERVER-19513: Unindex documents when truncating WT capped collections""
This reverts commit afbf47d2dabcdd1c68b5acc065544aec858a9d66.
-rw-r--r--jstests/core/cappedb.js26
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp3
2 files changed, 29 insertions, 0 deletions
diff --git a/jstests/core/cappedb.js b/jstests/core/cappedb.js
new file mode 100644
index 00000000000..3278f394cbf
--- /dev/null
+++ b/jstests/core/cappedb.js
@@ -0,0 +1,26 @@
+/**
+ * Test 'captrunc' command on indexed capped collections
+ */
+(function() {
+ 'use strict';
+
+ db.cappedb.drop();
+ assert.commandWorked(db.runCommand({ create: "cappedb",
+ capped: true,
+ size: 1000,
+ autoIndexId: true }));
+ var t = db.cappedb;
+
+ for (var j = 1; j <= 10; j++) {
+ assert.writeOK(t.insert({x:j}));
+ }
+
+ assert.commandWorked(db.runCommand({ captrunc: "cappedb", n: 5, inc: false }));
+ assert.eq(5, t.count(), "wrong number of documents in capped collection after truncate");
+ assert.eq(5, t.distinct("_id").length, "wrong number of entries in _id index after truncate");
+
+ var last = t.find({},{_id:1}).sort({_id:-1}).next();
+ assert.neq(null, t.findOne({_id: last._id}),
+ tojson(last) + " is in _id index, but not in capped collection after truncate");
+
+})();
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
index 41f646f8c6e..0641857fb86 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store.cpp
@@ -1274,6 +1274,9 @@ namespace {
while( !iter->isEOF() ) {
RecordId loc = iter->getNext();
if ( end < loc || ( inclusive && end == loc ) ) {
+ if (_cappedDeleteCallback)
+ uassertStatusOK(
+ _cappedDeleteCallback->aboutToDeleteCapped(txn, loc, dataFor(txn, loc)));
deleteRecord( txn, loc );
}
}