diff options
author | Randolph Tan <randolph@10gen.com> | 2017-11-21 13:43:29 -0500 |
---|---|---|
committer | Randolph Tan <randolph@10gen.com> | 2017-11-30 14:04:49 -0500 |
commit | aa196ccd7598335cd75344f46ff98d47b78c70d7 (patch) | |
tree | 59b5327f9735025b9084925e8c4a90d748548fd0 | |
parent | 2f6366d0d8cf92728ebe9090481f05b9bdc1f248 (diff) | |
download | mongo-aa196ccd7598335cd75344f46ff98d47b78c70d7.tar.gz |
SERVER-32055 Do not take ShardingState mutex when updating config.transactions
(cherry picked from commit b821d0c6a2c4fcbb3b8947e4969b48921f920897)
-rw-r--r-- | src/mongo/db/op_observer_impl.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/mongo/db/op_observer_impl.cpp b/src/mongo/db/op_observer_impl.cpp index 6da9b7f9599..1272cd4e82a 100644 --- a/src/mongo/db/op_observer_impl.cpp +++ b/src/mongo/db/op_observer_impl.cpp @@ -313,13 +313,15 @@ void OpObserverImpl::onInserts(OperationContext* opCtx, const auto opTimeList = repl::logInsertOps(opCtx, nss, uuid, session, begin, end, fromMigrate, lastWriteDate); - auto css = CollectionShardingState::get(opCtx, nss.ns()); + auto css = (nss == NamespaceString::kSessionTransactionsTableNamespace || fromMigrate) + ? nullptr + : CollectionShardingState::get(opCtx, nss.ns()); size_t index = 0; for (auto it = begin; it != end; it++, index++) { AuthorizationManager::get(opCtx->getServiceContext()) ->logOp(opCtx, "i", nss, it->doc, nullptr); - if (!fromMigrate) { + if (css) { auto opTime = opTimeList.empty() ? repl::OpTime() : opTimeList[index]; css->onInsertOp(opCtx, it->doc, opTime); } @@ -374,14 +376,16 @@ void OpObserverImpl::onUpdate(OperationContext* opCtx, const OplogUpdateEntryArg AuthorizationManager::get(opCtx->getServiceContext()) ->logOp(opCtx, "u", args.nss, args.update, &args.criteria); - auto css = CollectionShardingState::get(opCtx, args.nss); - if (!args.fromMigrate) { - css->onUpdateOp(opCtx, - args.criteria, - args.update, - args.updatedDoc, - opTime.writeOpTime, - opTime.prePostImageOpTime); + if (args.nss != NamespaceString::kSessionTransactionsTableNamespace) { + if (!args.fromMigrate) { + auto css = CollectionShardingState::get(opCtx, args.nss); + css->onUpdateOp(opCtx, + args.criteria, + args.update, + args.updatedDoc, + opTime.writeOpTime, + opTime.prePostImageOpTime); + } } if (args.nss.coll() == "system.js") { @@ -428,9 +432,11 @@ void OpObserverImpl::onDelete(OperationContext* opCtx, AuthorizationManager::get(opCtx->getServiceContext()) ->logOp(opCtx, "d", nss, deleteState.documentKey, nullptr); - auto css = CollectionShardingState::get(opCtx, nss.ns()); - if (!fromMigrate) { - css->onDeleteOp(opCtx, deleteState, opTime.writeOpTime, opTime.prePostImageOpTime); + if (nss != NamespaceString::kSessionTransactionsTableNamespace) { + if (!fromMigrate) { + auto css = CollectionShardingState::get(opCtx, nss.ns()); + css->onDeleteOp(opCtx, deleteState, opTime.writeOpTime, opTime.prePostImageOpTime); + } } if (nss.coll() == "system.js") { |