summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2017-11-21 13:43:29 -0500
committerRandolph Tan <randolph@10gen.com>2017-11-30 14:04:49 -0500
commitaa196ccd7598335cd75344f46ff98d47b78c70d7 (patch)
tree59b5327f9735025b9084925e8c4a90d748548fd0
parent2f6366d0d8cf92728ebe9090481f05b9bdc1f248 (diff)
downloadmongo-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.cpp32
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") {