summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Shuvalov <andrew.shuvalov@mongodb.com>2021-05-21 18:56:42 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-05-24 13:31:57 +0000
commit5c6ba3aeb114334ab037dedfa39ee6e0aa540d4c (patch)
tree8adcf70fa1c13ba48731a1cb1084c1b724727921
parent7e2afe22b658e2724f0a35714c74d171868934b6 (diff)
downloadmongo-5c6ba3aeb114334ab037dedfa39ee6e0aa540d4c.tar.gz
SERVER-56374: BACKPORT-8902 create config.image_collection on StepUp
-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) {