summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/session_catalog_mongod.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/mongo/db/session_catalog_mongod.cpp b/src/mongo/db/session_catalog_mongod.cpp
index 1c49cd901d5..f1d3096bfb0 100644
--- a/src/mongo/db/session_catalog_mongod.cpp
+++ b/src/mongo/db/session_catalog_mongod.cpp
@@ -40,6 +40,7 @@
#include "mongo/db/namespace_string.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/ops/write_ops.h"
+#include "mongo/db/repl/repl_server_parameters_gen.h"
#include "mongo/db/repl/storage_interface_impl.h"
#include "mongo/db/service_context.h"
#include "mongo/db/session_txn_record_gen.h"
@@ -212,6 +213,21 @@ void abortInProgressTransactions(OperationContext* opCtx) {
opCtx->resetMultiDocumentTransactionState();
}
}
+
+void createRetryableFindAndModifyTable(OperationContext* opCtx) {
+ auto serviceCtx = opCtx->getServiceContext();
+ CollectionOptions options;
+ auto status = repl::StorageInterface::get(serviceCtx)
+ ->createCollection(opCtx, NamespaceString::kConfigImagesNamespace, options);
+ if (status == ErrorCodes::NamespaceExists) {
+ return;
+ }
+
+ uassertStatusOKWithContext(status,
+ str::stream() << "Failed to create the "
+ << NamespaceString::kConfigImagesNamespace.ns()
+ << " collection");
+}
} // namespace
void MongoDSessionCatalog::onStepUp(OperationContext* opCtx) {
@@ -259,6 +275,9 @@ void MongoDSessionCatalog::onStepUp(OperationContext* opCtx) {
abortInProgressTransactions(opCtx);
createTransactionTable(opCtx);
+ if (repl::gStoreFindAndModifyImagesInSideCollection.load()) {
+ createRetryableFindAndModifyTable(opCtx);
+ }
}
boost::optional<UUID> MongoDSessionCatalog::getTransactionTableUUID(OperationContext* opCtx) {