summaryrefslogtreecommitdiff
path: root/src/mongo/db/op_observer_impl.cpp
diff options
context:
space:
mode:
authorMaria van Keulen <maria@mongodb.com>2018-05-17 15:12:05 -0400
committerMaria van Keulen <maria@mongodb.com>2018-06-06 16:54:44 -0400
commit7c12245583958023e35bce05d6b2212dcd7f24e3 (patch)
tree4cfa8bb4915cef1973b208d33fa6023b1c5cdb65 /src/mongo/db/op_observer_impl.cpp
parent0b001ed1ab7e8443213db38030cf17d2a6f5be2c (diff)
downloadmongo-7c12245583958023e35bce05d6b2212dcd7f24e3.tar.gz
SERVER-34615 Make UUIDCatalog updates for renameCollection atomic
Diffstat (limited to 'src/mongo/db/op_observer_impl.cpp')
-rw-r--r--src/mongo/db/op_observer_impl.cpp44
1 files changed, 37 insertions, 7 deletions
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp
index 40173774735..aa85d823222 100644
--- a/src/mongo/db/op_observer_impl.cpp
+++ b/src/mongo/db/op_observer_impl.cpp
@@ -766,12 +766,13 @@ void OpObserverImpl::onDropIndex(OperationContext* opCtx,
->logOp(opCtx, "c", cmdNss, cmdObj, &indexInfo);
}
-repl::OpTime OpObserverImpl::onRenameCollection(OperationContext* const opCtx,
- const NamespaceString& fromCollection,
- const NamespaceString& toCollection,
- OptionalCollectionUUID uuid,
- OptionalCollectionUUID dropTargetUUID,
- bool stayTemp) {
+
+repl::OpTime OpObserverImpl::preRenameCollection(OperationContext* const opCtx,
+ const NamespaceString& fromCollection,
+ const NamespaceString& toCollection,
+ OptionalCollectionUUID uuid,
+ OptionalCollectionUUID dropTargetUUID,
+ bool stayTemp) {
const auto cmdNss = fromCollection.getCommandNS();
BSONObjBuilder builder;
@@ -796,6 +797,27 @@ repl::OpTime OpObserverImpl::onRenameCollection(OperationContext* const opCtx,
kUninitializedStmtId,
{});
+ return {};
+}
+
+void OpObserverImpl::postRenameCollection(OperationContext* const opCtx,
+ const NamespaceString& fromCollection,
+ const NamespaceString& toCollection,
+ OptionalCollectionUUID uuid,
+ OptionalCollectionUUID dropTargetUUID,
+ bool stayTemp) {
+ const auto cmdNss = fromCollection.getCommandNS();
+
+ BSONObjBuilder builder;
+ builder.append("renameCollection", fromCollection.ns());
+ builder.append("to", toCollection.ns());
+ builder.append("stayTemp", stayTemp);
+ if (dropTargetUUID) {
+ dropTargetUUID->appendToBuilder(&builder, "dropTarget");
+ }
+
+ const auto cmdObj = builder.done();
+
if (fromCollection.isSystemDotViews())
DurableViewCatalog::onExternalChange(opCtx, fromCollection);
if (toCollection.isSystemDotViews())
@@ -810,8 +832,16 @@ repl::OpTime OpObserverImpl::onRenameCollection(OperationContext* const opCtx,
cache.evictNamespace(toCollection);
opCtx->recoveryUnit()->onRollback(
[&cache, toCollection]() { cache.evictNamespace(toCollection); });
+}
- return {};
+void OpObserverImpl::onRenameCollection(OperationContext* const opCtx,
+ const NamespaceString& fromCollection,
+ const NamespaceString& toCollection,
+ OptionalCollectionUUID uuid,
+ OptionalCollectionUUID dropTargetUUID,
+ bool stayTemp) {
+ preRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
+ postRenameCollection(opCtx, fromCollection, toCollection, uuid, dropTargetUUID, stayTemp);
}
void OpObserverImpl::onApplyOps(OperationContext* opCtx,