summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2019-01-08 18:54:38 -0500
committerBenety Goh <benety@mongodb.com>2019-01-08 18:54:54 -0500
commitecf269ff6494930ae4dfa98f66c4cbd6335cede2 (patch)
treef4b8d60e6a09812b06c6d65ff7645d70efded954 /src/mongo/db
parente2b8d928d796b4b6a6144bc4aa27db6fe95bfdd8 (diff)
downloadmongo-ecf269ff6494930ae4dfa98f66c4cbd6335cede2.tar.gz
SERVER-38800 OpObserver accepts numRecords for drop and rename operations
Diffstat (limited to 'src/mongo/db')
-rw-r--r--src/mongo/db/auth/auth_op_observer.cpp2
-rw-r--r--src/mongo/db/auth/auth_op_observer.h3
-rw-r--r--src/mongo/db/catalog/create_collection.cpp2
-rw-r--r--src/mongo/db/catalog/database_impl.cpp10
-rw-r--r--src/mongo/db/catalog/drop_database_test.cpp5
-rw-r--r--src/mongo/db/catalog/rename_collection.cpp5
-rw-r--r--src/mongo/db/catalog/rename_collection_test.cpp16
-rw-r--r--src/mongo/db/catalog/uuid_catalog.cpp1
-rw-r--r--src/mongo/db/catalog/uuid_catalog.h3
-rw-r--r--src/mongo/db/commands/mr_test.cpp2
-rw-r--r--src/mongo/db/free_mon/free_mon_op_observer.cpp1
-rw-r--r--src/mongo/db/free_mon/free_mon_op_observer.h3
-rw-r--r--src/mongo/db/op_observer.h3
-rw-r--r--src/mongo/db/op_observer_impl.cpp6
-rw-r--r--src/mongo/db/op_observer_impl.h3
-rw-r--r--src/mongo/db/op_observer_impl_test.cpp6
-rw-r--r--src/mongo/db/op_observer_noop.h3
-rw-r--r--src/mongo/db/op_observer_registry.h10
-rw-r--r--src/mongo/db/op_observer_registry_test.cpp14
-rw-r--r--src/mongo/db/repl/replication_recovery_test.cpp1
-rw-r--r--src/mongo/db/repl/rollback_test_fixture.cpp1
-rw-r--r--src/mongo/db/s/config_server_op_observer.cpp1
-rw-r--r--src/mongo/db/s/config_server_op_observer.h3
-rw-r--r--src/mongo/db/s/shard_server_op_observer.cpp1
-rw-r--r--src/mongo/db/s/shard_server_op_observer.h3
-rw-r--r--src/mongo/db/transaction_participant_retryable_writes_test.cpp1
-rw-r--r--src/mongo/db/transaction_participant_test.cpp2
27 files changed, 89 insertions, 22 deletions
diff --git a/src/mongo/db/auth/auth_op_observer.cpp b/src/mongo/db/auth/auth_op_observer.cpp
index 6f45185a47a..061fd1959a5 100644
--- a/src/mongo/db/auth/auth_op_observer.cpp
+++ b/src/mongo/db/auth/auth_op_observer.cpp
@@ -134,6 +134,7 @@ void AuthOpObserver::onDropDatabase(OperationContext* opCtx, const std::string&
repl::OpTime AuthOpObserver::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
const auto cmdNss = collectionName.getCommandNS();
const auto cmdObj = BSON("drop" << collectionName.coll());
@@ -183,6 +184,7 @@ void AuthOpObserver::onRenameCollection(OperationContext* const opCtx,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
postRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
}
diff --git a/src/mongo/db/auth/auth_op_observer.h b/src/mongo/db/auth/auth_op_observer.h
index b0aaa09e0cd..28646565929 100644
--- a/src/mongo/db/auth/auth_op_observer.h
+++ b/src/mongo/db/auth/auth_op_observer.h
@@ -96,6 +96,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) final;
void onDropIndex(OperationContext* opCtx,
@@ -109,6 +110,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) final;
repl::OpTime preRenameCollection(OperationContext* opCtx,
@@ -116,6 +118,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) final {
return repl::OpTime();
}
diff --git a/src/mongo/db/catalog/create_collection.cpp b/src/mongo/db/catalog/create_collection.cpp
index c20e5bf875b..18a0506a680 100644
--- a/src/mongo/db/catalog/create_collection.cpp
+++ b/src/mongo/db/catalog/create_collection.cpp
@@ -227,6 +227,7 @@ Status createCollectionForApplyOps(OperationContext* opCtx,
tmpName,
futureColl->uuid(),
/*dropTargetUUID*/ {},
+ /*numRecords*/ 0U,
stayTemp);
}
@@ -247,6 +248,7 @@ Status createCollectionForApplyOps(OperationContext* opCtx,
newCollName,
uuid,
/*dropTargetUUID*/ {},
+ /*numRecords*/ 0U,
stayTemp);
wunit.commit();
diff --git a/src/mongo/db/catalog/database_impl.cpp b/src/mongo/db/catalog/database_impl.cpp
index 32fbd008eae..1dff3dedc2d 100644
--- a/src/mongo/db/catalog/database_impl.cpp
+++ b/src/mongo/db/catalog/database_impl.cpp
@@ -510,6 +510,8 @@ Status DatabaseImpl::dropCollectionEvenIfSystem(OperationContext* opCtx,
return Status::OK(); // Post condition already met.
}
+ auto numRecords = uint64_t(0);
+
auto uuid = collection->uuid();
auto uuidString = uuid ? uuid.get().toString() : "no UUID";
@@ -543,7 +545,7 @@ Status DatabaseImpl::dropCollectionEvenIfSystem(OperationContext* opCtx,
return status;
}
opObserver->onDropCollection(
- opCtx, fullns, uuid, OpObserver::CollectionDropType::kOnePhase);
+ opCtx, fullns, uuid, numRecords, OpObserver::CollectionDropType::kOnePhase);
return Status::OK();
}
@@ -594,7 +596,8 @@ Status DatabaseImpl::dropCollectionEvenIfSystem(OperationContext* opCtx,
// Log oplog entry for collection drop and proceed to complete rest of two phase drop
// process.
- dropOpTime = opObserver->onDropCollection(opCtx, fullns, uuid, collectionDropType);
+ dropOpTime =
+ opObserver->onDropCollection(opCtx, fullns, uuid, numRecords, collectionDropType);
// The OpObserver should have written an entry to the oplog with a particular op time.
// After writing the oplog entry, all errors are fatal. See getNextOpTime() comments in
@@ -609,7 +612,8 @@ Status DatabaseImpl::dropCollectionEvenIfSystem(OperationContext* opCtx,
// in the context of applying an oplog entry on a secondary.
// OpObserver::onDropCollection() should be returning a null OpTime because we should not be
// writing to the oplog.
- auto opTime = opObserver->onDropCollection(opCtx, fullns, uuid, collectionDropType);
+ auto opTime =
+ opObserver->onDropCollection(opCtx, fullns, uuid, numRecords, collectionDropType);
if (!opTime.isNull()) {
severe() << "dropCollection: " << fullns << " (" << uuidString
<< ") - unexpected oplog entry written to the oplog with optime " << opTime;
diff --git a/src/mongo/db/catalog/drop_database_test.cpp b/src/mongo/db/catalog/drop_database_test.cpp
index 61a62c098af..4fade537724 100644
--- a/src/mongo/db/catalog/drop_database_test.cpp
+++ b/src/mongo/db/catalog/drop_database_test.cpp
@@ -71,6 +71,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
std::set<std::string> droppedDatabaseNames;
@@ -90,9 +91,11 @@ void OpObserverMock::onDropDatabase(OperationContext* opCtx, const std::string&
repl::OpTime OpObserverMock::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
ASSERT_TRUE(opCtx->lockState()->inAWriteUnitOfWork());
- auto opTime = OpObserverNoop::onDropCollection(opCtx, collectionName, uuid, dropType);
+ auto opTime =
+ OpObserverNoop::onDropCollection(opCtx, collectionName, uuid, numRecords, dropType);
invariant(opTime.isNull());
// Do not update 'droppedCollectionNames' if OpObserverNoop::onDropCollection() throws.
droppedCollectionNames.insert(collectionName);
diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp
index 61bb304bfde..bb7bb831c22 100644
--- a/src/mongo/db/catalog/rename_collection.cpp
+++ b/src/mongo/db/catalog/rename_collection.cpp
@@ -278,7 +278,7 @@ Status renameCollectionCommon(OperationContext* opCtx,
// We have to override the provided 'dropTarget' setting for idempotency reasons to
// avoid unintentionally removing a collection on a secondary with the same name as
// the target.
- opObserver->onRenameCollection(opCtx, source, target, sourceUUID, {}, stayTemp);
+ opObserver->onRenameCollection(opCtx, source, target, sourceUUID, {}, 0U, stayTemp);
wunit.commit();
return Status::OK();
}
@@ -331,8 +331,9 @@ Status renameCollectionCommon(OperationContext* opCtx,
}
}
+ auto numRecords = uint64_t(0);
auto renameOpTime = opObserver->preRenameCollection(
- opCtx, source, target, sourceUUID, dropTargetUUID, options.stayTemp);
+ opCtx, source, target, sourceUUID, dropTargetUUID, numRecords, options.stayTemp);
if (!renameOpTimeFromApplyOps.isNull()) {
// 'renameOpTime' must be null because a valid 'renameOpTimeFromApplyOps' implies
diff --git a/src/mongo/db/catalog/rename_collection_test.cpp b/src/mongo/db/catalog/rename_collection_test.cpp
index 982d8d52b6a..e38f5e5ab64 100644
--- a/src/mongo/db/catalog/rename_collection_test.cpp
+++ b/src/mongo/db/catalog/rename_collection_test.cpp
@@ -98,6 +98,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
void onRenameCollection(OperationContext* opCtx,
@@ -105,6 +106,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override;
repl::OpTime preRenameCollection(OperationContext* opCtx,
@@ -112,6 +114,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override;
void postRenameCollection(OperationContext* opCtx,
const NamespaceString& fromCollection,
@@ -182,6 +185,7 @@ void OpObserverMock::onCreateCollection(OperationContext* opCtx,
repl::OpTime OpObserverMock::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
_logOp(opCtx, collectionName, "drop");
// If the oplog is not disabled for this namespace, then we need to reserve an op time for the
@@ -189,7 +193,8 @@ repl::OpTime OpObserverMock::onDropCollection(OperationContext* opCtx,
if (!repl::ReplicationCoordinator::get(opCtx)->isOplogDisabledFor(opCtx, collectionName)) {
OpObserver::Times::get(opCtx).reservedOpTimes.push_back(dropOpTime);
}
- auto noopOptime = OpObserverNoop::onDropCollection(opCtx, collectionName, uuid, dropType);
+ auto noopOptime =
+ OpObserverNoop::onDropCollection(opCtx, collectionName, uuid, numRecords, dropType);
invariant(noopOptime.isNull());
return {};
}
@@ -199,10 +204,12 @@ void OpObserverMock::onRenameCollection(OperationContext* opCtx,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
- preRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ preRenameCollection(
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
OpObserverNoop::onRenameCollection(
- opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
onRenameCollectionCalled = true;
onRenameCollectionDropTarget = dropTargetUUID;
}
@@ -224,11 +231,12 @@ repl::OpTime OpObserverMock::preRenameCollection(OperationContext* opCtx,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
_logOp(opCtx, fromCollection, "rename");
OpObserver::Times::get(opCtx).reservedOpTimes.push_back(renameOpTime);
OpObserverNoop::preRenameCollection(
- opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
return {};
}
void OpObserverMock::_logOp(OperationContext* opCtx,
diff --git a/src/mongo/db/catalog/uuid_catalog.cpp b/src/mongo/db/catalog/uuid_catalog.cpp
index 71dff8b045a..d6b11663e32 100644
--- a/src/mongo/db/catalog/uuid_catalog.cpp
+++ b/src/mongo/db/catalog/uuid_catalog.cpp
@@ -77,6 +77,7 @@ void UUIDCatalogObserver::onCollMod(OperationContext* opCtx,
repl::OpTime UUIDCatalogObserver::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
if (!uuid)
diff --git a/src/mongo/db/catalog/uuid_catalog.h b/src/mongo/db/catalog/uuid_catalog.h
index 4687cb0cf30..ec0adbdae7e 100644
--- a/src/mongo/db/catalog/uuid_catalog.h
+++ b/src/mongo/db/catalog/uuid_catalog.h
@@ -87,6 +87,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
void onDropIndex(OperationContext* opCtx,
const NamespaceString& nss,
@@ -99,6 +100,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
// Do nothing: collection renames don't affect the UUID mapping.
}
@@ -108,6 +110,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
// Do nothing: collection renames don't affect the UUID mapping.
return {};
diff --git a/src/mongo/db/commands/mr_test.cpp b/src/mongo/db/commands/mr_test.cpp
index 6ff0a8bd5a9..d2a969890c8 100644
--- a/src/mongo/db/commands/mr_test.cpp
+++ b/src/mongo/db/commands/mr_test.cpp
@@ -302,6 +302,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
// Hook for onInserts. Defaults to a no-op function but may be overridden to inject exceptions
@@ -338,6 +339,7 @@ void MapReduceOpObserver::onCreateCollection(OperationContext*,
repl::OpTime MapReduceOpObserver::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
// If the oplog is not disabled for this namespace, then we need to reserve an op time for the
// drop.
diff --git a/src/mongo/db/free_mon/free_mon_op_observer.cpp b/src/mongo/db/free_mon/free_mon_op_observer.cpp
index 467960b3c26..a7d35cca1fb 100644
--- a/src/mongo/db/free_mon/free_mon_op_observer.cpp
+++ b/src/mongo/db/free_mon/free_mon_op_observer.cpp
@@ -58,6 +58,7 @@ FreeMonOpObserver::~FreeMonOpObserver() = default;
repl::OpTime FreeMonOpObserver::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
if (collectionName == NamespaceString::kServerConfigurationNamespace) {
auto controller = FreeMonController::get(opCtx->getServiceContext());
diff --git a/src/mongo/db/free_mon/free_mon_op_observer.h b/src/mongo/db/free_mon/free_mon_op_observer.h
index 535b61cacca..be29495b4ef 100644
--- a/src/mongo/db/free_mon/free_mon_op_observer.h
+++ b/src/mongo/db/free_mon/free_mon_op_observer.h
@@ -97,6 +97,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) final;
void onDropIndex(OperationContext* opCtx,
@@ -110,6 +111,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) final {}
repl::OpTime preRenameCollection(OperationContext* opCtx,
@@ -117,6 +119,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) final {
return repl::OpTime();
}
diff --git a/src/mongo/db/op_observer.h b/src/mongo/db/op_observer.h
index 52abe0618b5..91c66abb603 100644
--- a/src/mongo/db/op_observer.h
+++ b/src/mongo/db/op_observer.h
@@ -193,6 +193,7 @@ public:
virtual repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) = 0;
/**
@@ -223,6 +224,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) = 0;
/**
* This function performs all op observer handling for a 'renameCollection' command except for
@@ -246,6 +248,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) = 0;
virtual void onApplyOps(OperationContext* opCtx,
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp
index d9086af8939..7a4a75a1f28 100644
--- a/src/mongo/db/op_observer_impl.cpp
+++ b/src/mongo/db/op_observer_impl.cpp
@@ -668,6 +668,7 @@ void OpObserverImpl::onDropDatabase(OperationContext* opCtx, const std::string&
repl::OpTime OpObserverImpl::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
const auto cmdNss = collectionName.getCommandNS();
const auto cmdObj = BSON("drop" << collectionName.coll());
@@ -734,6 +735,7 @@ repl::OpTime OpObserverImpl::preRenameCollection(OperationContext* const opCtx,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
const auto cmdNss = fromCollection.getCommandNS();
@@ -788,8 +790,10 @@ void OpObserverImpl::onRenameCollection(OperationContext* const opCtx,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
- preRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ preRenameCollection(
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
postRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
}
diff --git a/src/mongo/db/op_observer_impl.h b/src/mongo/db/op_observer_impl.h
index 01b85ce46d0..989b7d8075e 100644
--- a/src/mongo/db/op_observer_impl.h
+++ b/src/mongo/db/op_observer_impl.h
@@ -83,6 +83,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) final;
void onDropIndex(OperationContext* opCtx,
const NamespaceString& nss,
@@ -94,6 +95,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) final;
void postRenameCollection(OperationContext* opCtx,
const NamespaceString& fromCollection,
@@ -106,6 +108,7 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) final;
void onApplyOps(OperationContext* opCtx,
const std::string& dbName,
diff --git a/src/mongo/db/op_observer_impl_test.cpp b/src/mongo/db/op_observer_impl_test.cpp
index d73610ade4b..991b452a1bc 100644
--- a/src/mongo/db/op_observer_impl_test.cpp
+++ b/src/mongo/db/op_observer_impl_test.cpp
@@ -217,7 +217,7 @@ TEST_F(OpObserverTest, OnDropCollectionReturnsDropOpTime) {
AutoGetDb autoDb(opCtx.get(), nss.db(), MODE_X);
WriteUnitOfWork wunit(opCtx.get());
opObserver.onDropCollection(
- opCtx.get(), nss, uuid, OpObserver::CollectionDropType::kTwoPhase);
+ opCtx.get(), nss, uuid, 0U, OpObserver::CollectionDropType::kTwoPhase);
dropOpTime = OpObserver::Times::get(opCtx.get()).reservedOpTimes.front();
wunit.commit();
}
@@ -249,7 +249,7 @@ TEST_F(OpObserverTest, OnRenameCollectionReturnsRenameOpTime) {
AutoGetDb autoDb(opCtx.get(), sourceNss.db(), MODE_X);
WriteUnitOfWork wunit(opCtx.get());
opObserver.onRenameCollection(
- opCtx.get(), sourceNss, targetNss, uuid, dropTargetUuid, stayTemp);
+ opCtx.get(), sourceNss, targetNss, uuid, dropTargetUuid, 0U, stayTemp);
renameOpTime = OpObserver::Times::get(opCtx.get()).reservedOpTimes.front();
wunit.commit();
}
@@ -282,7 +282,7 @@ TEST_F(OpObserverTest, OnRenameCollectionOmitsDropTargetFieldIfDropTargetUuidIsN
{
AutoGetDb autoDb(opCtx.get(), sourceNss.db(), MODE_X);
WriteUnitOfWork wunit(opCtx.get());
- opObserver.onRenameCollection(opCtx.get(), sourceNss, targetNss, uuid, {}, stayTemp);
+ opObserver.onRenameCollection(opCtx.get(), sourceNss, targetNss, uuid, {}, 0U, stayTemp);
wunit.commit();
}
diff --git a/src/mongo/db/op_observer_noop.h b/src/mongo/db/op_observer_noop.h
index 350d6df41bf..469043de57f 100644
--- a/src/mongo/db/op_observer_noop.h
+++ b/src/mongo/db/op_observer_noop.h
@@ -78,6 +78,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) override {
return {};
}
@@ -91,12 +92,14 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {}
repl::OpTime preRenameCollection(OperationContext* opCtx,
const NamespaceString& fromCollection,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
return {};
}
diff --git a/src/mongo/db/op_observer_registry.h b/src/mongo/db/op_observer_registry.h
index 5c8ab409ab7..c64537f5104 100644
--- a/src/mongo/db/op_observer_registry.h
+++ b/src/mongo/db/op_observer_registry.h
@@ -145,10 +145,12 @@ public:
repl::OpTime onDropCollection(OperationContext* const opCtx,
const NamespaceString& collectionName,
const OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) override {
ReservedTimes times{opCtx};
for (auto& observer : this->_observers) {
- auto time = observer->onDropCollection(opCtx, collectionName, uuid, dropType);
+ auto time =
+ observer->onDropCollection(opCtx, collectionName, uuid, numRecords, dropType);
invariant(time.isNull());
}
return _getOpTimeToReturn(times.get().reservedOpTimes);
@@ -170,11 +172,12 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
ReservedTimes times{opCtx};
for (auto& o : _observers)
o->onRenameCollection(
- opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
}
repl::OpTime preRenameCollection(OperationContext* const opCtx,
@@ -182,11 +185,12 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
ReservedTimes times{opCtx};
for (auto& observer : this->_observers) {
const auto time = observer->preRenameCollection(
- opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
invariant(time.isNull());
}
return _getOpTimeToReturn(times.get().reservedOpTimes);
diff --git a/src/mongo/db/op_observer_registry_test.cpp b/src/mongo/db/op_observer_registry_test.cpp
index e7281598601..118b8682ea0 100644
--- a/src/mongo/db/op_observer_registry_test.cpp
+++ b/src/mongo/db/op_observer_registry_test.cpp
@@ -57,6 +57,7 @@ struct TestObserver : public OpObserverNoop {
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
drops++;
OpObserver::Times::get(opCtx).reservedOpTimes.push_back(opTime);
@@ -67,8 +68,10 @@ struct TestObserver : public OpObserverNoop {
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
- preRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ preRenameCollection(
+ opCtx, fromCollection, toCollection, uuid, dropTargetUUID, numRecords, stayTemp);
postRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
}
repl::OpTime preRenameCollection(OperationContext* opCtx,
@@ -76,6 +79,7 @@ struct TestObserver : public OpObserverNoop {
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) {
OpObserver::Times::get(opCtx).reservedOpTimes.push_back(opTime);
return {};
@@ -172,7 +176,7 @@ TEST_F(OpObserverRegistryTest, OnDropCollectionObserverResultReturnsRightTime) {
registry.addObserver(std::make_unique<OpObserverNoop>());
auto op = [&]() -> repl::OpTime {
return registry.onDropCollection(
- &opCtx, testNss, {}, OpObserver::CollectionDropType::kOnePhase);
+ &opCtx, testNss, {}, 0U, OpObserver::CollectionDropType::kOnePhase);
};
checkConsistentOpTime(op);
}
@@ -182,7 +186,7 @@ TEST_F(OpObserverRegistryTest, PreRenameCollectionObserverResultReturnsRightTime
registry.addObserver(std::move(unique1));
registry.addObserver(std::make_unique<OpObserverNoop>());
auto op = [&]() -> repl::OpTime {
- auto opTime = registry.preRenameCollection(&opCtx, testNss, testNss, {}, {}, false);
+ auto opTime = registry.preRenameCollection(&opCtx, testNss, testNss, {}, {}, 0U, false);
registry.postRenameCollection(&opCtx, testNss, testNss, {}, {}, false);
return opTime;
};
@@ -195,7 +199,7 @@ DEATH_TEST_F(OpObserverRegistryTest, OnDropCollectionReturnsInconsistentTime, "i
registry.addObserver(std::move(unique2));
auto op = [&]() -> repl::OpTime {
return registry.onDropCollection(
- &opCtx, testNss, {}, OpObserver::CollectionDropType::kOnePhase);
+ &opCtx, testNss, {}, 0U, OpObserver::CollectionDropType::kOnePhase);
};
checkInconsistentOpTime(op);
}
@@ -205,7 +209,7 @@ DEATH_TEST_F(OpObserverRegistryTest, PreRenameCollectionReturnsInconsistentTime,
registry.addObserver(std::move(unique1));
registry.addObserver(std::move(unique2));
auto op = [&]() -> repl::OpTime {
- auto opTime = registry.preRenameCollection(&opCtx, testNss, testNss, {}, {}, false);
+ auto opTime = registry.preRenameCollection(&opCtx, testNss, testNss, {}, {}, 0U, false);
registry.postRenameCollection(&opCtx, testNss, testNss, {}, {}, false);
return opTime;
};
diff --git a/src/mongo/db/repl/replication_recovery_test.cpp b/src/mongo/db/repl/replication_recovery_test.cpp
index d9d2a46f494..569b76d0a17 100644
--- a/src/mongo/db/repl/replication_recovery_test.cpp
+++ b/src/mongo/db/repl/replication_recovery_test.cpp
@@ -116,6 +116,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) override {
// If the oplog is not disabled for this namespace, then we need to reserve an op time for
// the drop.
diff --git a/src/mongo/db/repl/rollback_test_fixture.cpp b/src/mongo/db/repl/rollback_test_fixture.cpp
index c6644d81249..95a3d1ea635 100644
--- a/src/mongo/db/repl/rollback_test_fixture.cpp
+++ b/src/mongo/db/repl/rollback_test_fixture.cpp
@@ -72,6 +72,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) override {
// If the oplog is not disabled for this namespace, then we need to reserve an op time for
// the drop.
diff --git a/src/mongo/db/s/config_server_op_observer.cpp b/src/mongo/db/s/config_server_op_observer.cpp
index cdf45de44f5..3706b476228 100644
--- a/src/mongo/db/s/config_server_op_observer.cpp
+++ b/src/mongo/db/s/config_server_op_observer.cpp
@@ -66,6 +66,7 @@ void ConfigServerOpObserver::onDelete(OperationContext* opCtx,
repl::OpTime ConfigServerOpObserver::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
if (collectionName == VersionType::ConfigNS) {
if (!repl::ReplicationCoordinator::get(opCtx)->getMemberState().rollback()) {
diff --git a/src/mongo/db/s/config_server_op_observer.h b/src/mongo/db/s/config_server_op_observer.h
index 458d9627955..3b128534f3d 100644
--- a/src/mongo/db/s/config_server_op_observer.h
+++ b/src/mongo/db/s/config_server_op_observer.h
@@ -97,6 +97,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
void onDropIndex(OperationContext* opCtx,
@@ -110,12 +111,14 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {}
repl::OpTime preRenameCollection(OperationContext* opCtx,
const NamespaceString& fromCollection,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
return repl::OpTime();
}
diff --git a/src/mongo/db/s/shard_server_op_observer.cpp b/src/mongo/db/s/shard_server_op_observer.cpp
index 4164864ea6c..c211377f998 100644
--- a/src/mongo/db/s/shard_server_op_observer.cpp
+++ b/src/mongo/db/s/shard_server_op_observer.cpp
@@ -392,6 +392,7 @@ void ShardServerOpObserver::onDelete(OperationContext* opCtx,
repl::OpTime ShardServerOpObserver::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
if (collectionName == NamespaceString::kServerConfigurationNamespace) {
// Dropping system collections is not allowed for end users
diff --git a/src/mongo/db/s/shard_server_op_observer.h b/src/mongo/db/s/shard_server_op_observer.h
index 61e0f0dfca0..5261851bbb3 100644
--- a/src/mongo/db/s/shard_server_op_observer.h
+++ b/src/mongo/db/s/shard_server_op_observer.h
@@ -98,6 +98,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
void onDropIndex(OperationContext* opCtx,
@@ -111,12 +112,14 @@ public:
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {}
repl::OpTime preRenameCollection(OperationContext* opCtx,
const NamespaceString& fromCollection,
const NamespaceString& toCollection,
OptionalCollectionUUID uuid,
OptionalCollectionUUID dropTargetUUID,
+ std::uint64_t numRecords,
bool stayTemp) override {
return repl::OpTime();
}
diff --git a/src/mongo/db/transaction_participant_retryable_writes_test.cpp b/src/mongo/db/transaction_participant_retryable_writes_test.cpp
index 0a7f938b391..a65de737246 100644
--- a/src/mongo/db/transaction_participant_retryable_writes_test.cpp
+++ b/src/mongo/db/transaction_participant_retryable_writes_test.cpp
@@ -125,6 +125,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) override {
// If the oplog is not disabled for this namespace, then we need to reserve an op time for
// the drop.
diff --git a/src/mongo/db/transaction_participant_test.cpp b/src/mongo/db/transaction_participant_test.cpp
index e9271227c3a..3b8e4712f20 100644
--- a/src/mongo/db/transaction_participant_test.cpp
+++ b/src/mongo/db/transaction_participant_test.cpp
@@ -115,6 +115,7 @@ public:
repl::OpTime onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
CollectionDropType dropType) override;
const repl::OpTime dropOpTime = {Timestamp(Seconds(100), 1U), 1LL};
@@ -165,6 +166,7 @@ void OpObserverMock::onTransactionAbort(OperationContext* opCtx,
repl::OpTime OpObserverMock::onDropCollection(OperationContext* opCtx,
const NamespaceString& collectionName,
OptionalCollectionUUID uuid,
+ std::uint64_t numRecords,
const CollectionDropType dropType) {
// If the oplog is not disabled for this namespace, then we need to reserve an op time for the
// drop.