diff options
Diffstat (limited to 'src/mongo/db/concurrency/d_concurrency_test.cpp')
-rw-r--r-- | src/mongo/db/concurrency/d_concurrency_test.cpp | 69 |
1 files changed, 28 insertions, 41 deletions
diff --git a/src/mongo/db/concurrency/d_concurrency_test.cpp b/src/mongo/db/concurrency/d_concurrency_test.cpp index 2be5c7c33d5..145f4f31846 100644 --- a/src/mongo/db/concurrency/d_concurrency_test.cpp +++ b/src/mongo/db/concurrency/d_concurrency_test.cpp @@ -37,6 +37,7 @@ #include "mongo/db/concurrency/global_lock_acquisition_tracker.h" #include "mongo/db/concurrency/lock_manager_test_help.h" #include "mongo/db/concurrency/write_conflict_exception.h" +#include "mongo/db/service_context_d_test_fixture.h" #include "mongo/db/storage/recovery_unit_noop.h" #include "mongo/stdx/functional.h" #include "mongo/stdx/future.h" @@ -77,19 +78,8 @@ private: }; -class DConcurrencyTestFixture : public unittest::Test { +class DConcurrencyTestFixture : public ServiceContextMongoDTest { public: - DConcurrencyTestFixture() : _client(getGlobalServiceContext()->makeClient("testClient")) {} - ~DConcurrencyTestFixture() {} - - /** - * Constructs and returns a new OperationContext. - */ - ServiceContext::UniqueOperationContext makeOpCtx() const { - auto opCtx = _client->makeOperationContext(); - return opCtx; - } - /** * Returns a vector of Clients of length 'k', each of which has an OperationContext with its * lockState set to a DefaultLockerImpl. @@ -101,8 +91,8 @@ public: clients; clients.reserve(k); for (int i = 0; i < k; ++i) { - auto client = getGlobalServiceContext()->makeClient( - str::stream() << "test client for thread " << i); + auto client = + getServiceContext()->makeClient(str::stream() << "test client for thread " << i); auto opCtx = client->makeOperationContext(); opCtx->swapLockState(stdx::make_unique<LockerType>()); clients.emplace_back(std::move(client), std::move(opCtx)); @@ -129,20 +119,17 @@ public: return result; } - -private: - ServiceContext::UniqueClient _client; }; TEST_F(DConcurrencyTestFixture, WriteConflictRetryInstantiatesOK) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); writeConflictRetry(opCtx.get(), "", "", [] {}); } TEST_F(DConcurrencyTestFixture, WriteConflictRetryRetriesFunctionOnWriteConflictException) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto&& opDebug = CurOp::get(opCtx.get())->debug(); ASSERT_EQUALS(0LL, opDebug.writeConflicts); @@ -156,7 +143,7 @@ TEST_F(DConcurrencyTestFixture, WriteConflictRetryRetriesFunctionOnWriteConflict } TEST_F(DConcurrencyTestFixture, WriteConflictRetryPropagatesNonWriteConflictException) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); ASSERT_THROWS_CODE(writeConflictRetry(opCtx.get(), "", @@ -171,7 +158,7 @@ TEST_F(DConcurrencyTestFixture, WriteConflictRetryPropagatesNonWriteConflictExce TEST_F(DConcurrencyTestFixture, WriteConflictRetryPropagatesWriteConflictExceptionIfAlreadyInAWriteUnitOfWork) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::GlobalWrite globalWrite(opCtx.get()); WriteUnitOfWork wuow(opCtx.get()); @@ -262,21 +249,21 @@ TEST_F(DConcurrencyTestFixture, ResourceMutex) { } TEST_F(DConcurrencyTestFixture, GlobalRead) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::GlobalRead globalRead(opCtx.get()); ASSERT(opCtx->lockState()->isR()); } TEST_F(DConcurrencyTestFixture, GlobalWrite) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::GlobalWrite globalWrite(opCtx.get()); ASSERT(opCtx->lockState()->isW()); } TEST_F(DConcurrencyTestFixture, GlobalWriteAndGlobalRead) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); @@ -293,7 +280,7 @@ TEST_F(DConcurrencyTestFixture, GlobalWriteAndGlobalRead) { TEST_F(DConcurrencyTestFixture, GlobalWriteRequiresExplicitDowngradeToIntentWriteModeIfDestroyedWhileHoldingDatabaseLock) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); @@ -341,7 +328,7 @@ TEST_F(DConcurrencyTestFixture, TEST_F(DConcurrencyTestFixture, GlobalWriteRequiresSupportsDowngradeToIntentWriteModeWhileHoldingDatabaseLock) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); @@ -388,7 +375,7 @@ TEST_F(DConcurrencyTestFixture, TEST_F(DConcurrencyTestFixture, NestedGlobalWriteSupportsDowngradeToIntentWriteModeWhileHoldingDatabaseLock) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); @@ -595,7 +582,7 @@ TEST_F(DConcurrencyTestFixture, GlobalLockX_TimeoutDueToGlobalLockX) { } TEST_F(DConcurrencyTestFixture, TempReleaseGlobalWrite) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); Lock::GlobalWrite globalWrite(opCtx.get()); @@ -609,7 +596,7 @@ TEST_F(DConcurrencyTestFixture, TempReleaseGlobalWrite) { } TEST_F(DConcurrencyTestFixture, TempReleaseRecursive) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); Lock::GlobalWrite globalWrite(opCtx.get()); @@ -825,7 +812,7 @@ TEST_F(DConcurrencyTestFixture, DBLockWaitIsNotInterruptibleWithLockGuard) { TEST_F(DConcurrencyTestFixture, DBLockTakesS) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock dbRead(opCtx.get(), "db", MODE_S); @@ -834,7 +821,7 @@ TEST_F(DConcurrencyTestFixture, DBLockTakesS) { } TEST_F(DConcurrencyTestFixture, DBLockTakesX) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock dbWrite(opCtx.get(), "db", MODE_X); @@ -843,7 +830,7 @@ TEST_F(DConcurrencyTestFixture, DBLockTakesX) { } TEST_F(DConcurrencyTestFixture, DBLockTakesISForAdminIS) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock dbRead(opCtx.get(), "admin", MODE_IS); @@ -851,7 +838,7 @@ TEST_F(DConcurrencyTestFixture, DBLockTakesISForAdminIS) { } TEST_F(DConcurrencyTestFixture, DBLockTakesSForAdminS) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock dbRead(opCtx.get(), "admin", MODE_S); @@ -859,7 +846,7 @@ TEST_F(DConcurrencyTestFixture, DBLockTakesSForAdminS) { } TEST_F(DConcurrencyTestFixture, DBLockTakesXForAdminIX) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock dbWrite(opCtx.get(), "admin", MODE_IX); @@ -867,7 +854,7 @@ TEST_F(DConcurrencyTestFixture, DBLockTakesXForAdminIX) { } TEST_F(DConcurrencyTestFixture, DBLockTakesXForAdminX) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock dbWrite(opCtx.get(), "admin", MODE_X); @@ -875,7 +862,7 @@ TEST_F(DConcurrencyTestFixture, DBLockTakesXForAdminX) { } TEST_F(DConcurrencyTestFixture, MultipleWriteDBLocksOnSameThread) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); Lock::DBLock r1(opCtx.get(), "db1", MODE_X); Lock::DBLock r2(opCtx.get(), "db1", MODE_X); @@ -884,7 +871,7 @@ TEST_F(DConcurrencyTestFixture, MultipleWriteDBLocksOnSameThread) { } TEST_F(DConcurrencyTestFixture, MultipleConflictingDBLocksOnSameThread) { - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); Lock::DBLock r1(opCtx.get(), "db1", MODE_X); @@ -897,7 +884,7 @@ TEST_F(DConcurrencyTestFixture, MultipleConflictingDBLocksOnSameThread) { TEST_F(DConcurrencyTestFixture, IsDbLockedForSMode) { const std::string dbName("db"); - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); Lock::DBLock dbLock(opCtx.get(), dbName, MODE_S); @@ -911,7 +898,7 @@ TEST_F(DConcurrencyTestFixture, IsDbLockedForSMode) { TEST_F(DConcurrencyTestFixture, IsDbLockedForXMode) { const std::string dbName("db"); - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); Lock::DBLock dbLock(opCtx.get(), dbName, MODE_X); @@ -925,7 +912,7 @@ TEST_F(DConcurrencyTestFixture, IsDbLockedForXMode) { TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IS) { const std::string ns("db1.coll"); - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); @@ -956,7 +943,7 @@ TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IS) { TEST_F(DConcurrencyTestFixture, IsCollectionLocked_DB_Locked_IX) { const std::string ns("db1.coll"); - auto opCtx = makeOpCtx(); + auto opCtx = makeOperationContext(); opCtx->swapLockState(stdx::make_unique<MMAPV1LockerImpl>()); auto lockState = opCtx->lockState(); |