summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2016-05-24 16:34:45 -0400
committerAndy Schwerin <schwerin@mongodb.com>2016-06-03 12:48:38 -0400
commit910e782aa5d8329c5e8b2531cf0116052e8a187e (patch)
tree8c7b17d5808ffaf4b8b9c4ff6a973e34d4b851eb /src/mongo/db/repl
parent0b5cbbadf49da830f20fba6e779b7278f211e394 (diff)
downloadmongo-910e782aa5d8329c5e8b2531cf0116052e8a187e.tar.gz
SERVER-23905 Unify lifetime management for LockState on OperationContexts into OperationContext.
This change also moves responsibility for registering OperationContexts to Clients into ServiceContext::makeOperationContext.
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r--src/mongo/db/repl/replication_coordinator_impl_test.cpp50
-rw-r--r--src/mongo/db/repl/service_context_repl_mock.cpp7
2 files changed, 33 insertions, 24 deletions
diff --git a/src/mongo/db/repl/replication_coordinator_impl_test.cpp b/src/mongo/db/repl/replication_coordinator_impl_test.cpp
index c40542ebc5e..368961bc728 100644
--- a/src/mongo/db/repl/replication_coordinator_impl_test.cpp
+++ b/src/mongo/db/repl/replication_coordinator_impl_test.cpp
@@ -847,7 +847,7 @@ TEST_F(ReplCoordTest,
NodeReturnsUnknownReplWriteConcernWhenAwaitReplicationReceivesAnInvalidWriteConcernMode) {
auto service = stdx::make_unique<ServiceContextNoop>();
auto client = service->makeClient("test");
- OperationContextNoop txn(client.get(), 100);
+ auto txn = client->makeOperationContext();
assertStartSuccess(BSON("_id"
<< "mySet"
@@ -879,7 +879,7 @@ TEST_F(ReplCoordTest,
invalidWriteConcern.wMode = "fakemode";
ReplicationCoordinator::StatusAndDuration statusAndDur =
- getReplCoord()->awaitReplication(&txn, time1, invalidWriteConcern);
+ getReplCoord()->awaitReplication(txn.get(), time1, invalidWriteConcern);
ASSERT_EQUALS(ErrorCodes::UnknownReplWriteConcern, statusAndDur.status);
}
@@ -888,7 +888,7 @@ TEST_F(
NodeReturnsWriteConcernFailedUntilASufficientSetOfNodesHaveTheWriteAndTheWriteIsInACommittedSnapshot) {
auto service = stdx::make_unique<ServiceContextNoop>();
auto client = service->makeClient("test");
- OperationContextNoop txn(client.get(), 100);
+ auto txn = client->makeOperationContext();
assertStartSuccess(
BSON("_id"
@@ -963,11 +963,11 @@ TEST_F(
getReplCoord()->setMyLastAppliedOpTime(time1);
getReplCoord()->setMyLastDurableOpTime(time1);
ReplicationCoordinator::StatusAndDuration statusAndDur =
- getReplCoord()->awaitReplication(&txn, time1, majorityWriteConcern);
+ getReplCoord()->awaitReplication(txn.get(), time1, majorityWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, multiDCWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, multiDCWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, multiRackWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, multiRackWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
// Majority satisfied but not either custom mode
@@ -977,46 +977,52 @@ TEST_F(
getReplCoord()->setLastDurableOptime_forTest(2, 2, time1);
getReplCoord()->onSnapshotCreate(time1, SnapshotName(1));
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, majorityWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, majorityWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, multiDCWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, multiDCWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, multiRackWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, multiRackWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
// All modes satisfied
getReplCoord()->setLastAppliedOptime_forTest(2, 3, time1);
getReplCoord()->setLastDurableOptime_forTest(2, 3, time1);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, majorityWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, majorityWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, multiDCWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, multiDCWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time1, multiRackWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time1, multiRackWriteConcern);
ASSERT_OK(statusAndDur.status);
// Majority also waits for the committed snapshot to be newer than all snapshots reserved by
// this operation. Custom modes not affected by this.
- while (getReplCoord()->reserveSnapshotName(&txn) <= SnapshotName(1)) {
+ while (getReplCoord()->reserveSnapshotName(txn.get()) <= SnapshotName(1)) {
// These unittests "cheat" and use SnapshotName(1) without advancing the counter. Reserve
// another name if we didn't get a high enough one.
}
- statusAndDur = getReplCoord()->awaitReplicationOfLastOpForClient(&txn, majorityWriteConcern);
+ statusAndDur =
+ getReplCoord()->awaitReplicationOfLastOpForClient(txn.get(), majorityWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplicationOfLastOpForClient(&txn, multiDCWriteConcern);
+ statusAndDur =
+ getReplCoord()->awaitReplicationOfLastOpForClient(txn.get(), multiDCWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplicationOfLastOpForClient(&txn, multiRackWriteConcern);
+ statusAndDur =
+ getReplCoord()->awaitReplicationOfLastOpForClient(txn.get(), multiRackWriteConcern);
ASSERT_OK(statusAndDur.status);
// All modes satisfied
getReplCoord()->onSnapshotCreate(time1, getReplCoord()->reserveSnapshotName(nullptr));
- statusAndDur = getReplCoord()->awaitReplicationOfLastOpForClient(&txn, majorityWriteConcern);
+ statusAndDur =
+ getReplCoord()->awaitReplicationOfLastOpForClient(txn.get(), majorityWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplicationOfLastOpForClient(&txn, multiDCWriteConcern);
+ statusAndDur =
+ getReplCoord()->awaitReplicationOfLastOpForClient(txn.get(), multiDCWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplicationOfLastOpForClient(&txn, multiRackWriteConcern);
+ statusAndDur =
+ getReplCoord()->awaitReplicationOfLastOpForClient(txn.get(), multiRackWriteConcern);
ASSERT_OK(statusAndDur.status);
// multiDC satisfied but not majority or multiRack
@@ -1025,11 +1031,11 @@ TEST_F(
getReplCoord()->setLastAppliedOptime_forTest(2, 3, time2);
getReplCoord()->setLastDurableOptime_forTest(2, 3, time2);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time2, majorityWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time2, majorityWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time2, multiDCWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time2, multiDCWriteConcern);
ASSERT_OK(statusAndDur.status);
- statusAndDur = getReplCoord()->awaitReplication(&txn, time2, multiRackWriteConcern);
+ statusAndDur = getReplCoord()->awaitReplication(txn.get(), time2, multiRackWriteConcern);
ASSERT_EQUALS(ErrorCodes::WriteConcernFailed, statusAndDur.status);
}
diff --git a/src/mongo/db/repl/service_context_repl_mock.cpp b/src/mongo/db/repl/service_context_repl_mock.cpp
index 8b4e9ed2ee7..4f8a424d274 100644
--- a/src/mongo/db/repl/service_context_repl_mock.cpp
+++ b/src/mongo/db/repl/service_context_repl_mock.cpp
@@ -35,13 +35,16 @@
#include "mongo/db/concurrency/lock_state.h"
#include "mongo/db/concurrency/locker.h"
#include "mongo/db/operation_context_noop.h"
+#include "mongo/stdx/memory.h"
namespace mongo {
namespace repl {
std::unique_ptr<OperationContext> ServiceContextReplMock::_newOpCtx(Client* client, unsigned opId) {
- return std::unique_ptr<OperationContext>(
- new OperationContextNoop(client, opId, new MMAPV1LockerImpl()));
+ auto opCtx = stdx::make_unique<OperationContextNoop>(client, opId);
+ opCtx->releaseLockState();
+ opCtx->setLockState(stdx::make_unique<MMAPV1LockerImpl>());
+ return opCtx;
}
} // namespace repl