diff options
author | Cheahuychou Mao <mao.cheahuychou@gmail.com> | 2021-05-21 04:59:02 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-05-24 18:36:21 +0000 |
commit | 13ce090d81c8ad14fd9bf9792ed081f55034192e (patch) | |
tree | 682d1d032ed38c4fc643f78573233e16efdd7c56 | |
parent | fd52ab20494c1e767c3f2e824bba80f69fb4a566 (diff) | |
download | mongo-13ce090d81c8ad14fd9bf9792ed081f55034192e.tar.gz |
SERVER-57132 Remove OperationType in TenantMigrationAccessBlocker
(cherry picked from commit 90827ec44f3787be928b6ec0849160ab48f1fbfe)
8 files changed, 11 insertions, 27 deletions
diff --git a/src/mongo/db/commands/write_commands.cpp b/src/mongo/db/commands/write_commands.cpp index 2e3caeb78dd..e44b8d4b85c 100644 --- a/src/mongo/db/commands/write_commands.cpp +++ b/src/mongo/db/commands/write_commands.cpp @@ -318,8 +318,7 @@ boost::optional<BSONObj> generateError(OperationContext* opCtx, auto mtab = migrationConflictInfo->getTenantMigrationAccessBlocker(); - auto migrationStatus = - mtab->waitUntilCommittedOrAborted(opCtx, migrationConflictInfo->getOperationType()); + auto migrationStatus = mtab->waitUntilCommittedOrAborted(opCtx); mtab->recordTenantMigrationError(migrationStatus); error.append("code", static_cast<int>(migrationStatus.code())); diff --git a/src/mongo/db/repl/tenant_migration_access_blocker.h b/src/mongo/db/repl/tenant_migration_access_blocker.h index 0740d1561af..06a78bb3584 100644 --- a/src/mongo/db/repl/tenant_migration_access_blocker.h +++ b/src/mongo/db/repl/tenant_migration_access_blocker.h @@ -52,18 +52,13 @@ public: TenantMigrationAccessBlocker(BlockerType type) : _type(type) {} virtual ~TenantMigrationAccessBlocker() = default; - /** - * The operation type determines the states during which we need to block. - */ - enum OperationType { kWrite, kIndexBuild }; - // // Called by all writes and reads against the database. // virtual Status checkIfCanWrite() = 0; - virtual Status waitUntilCommittedOrAborted(OperationContext* opCtx, - OperationType operationType) = 0; + virtual Status waitUntilCommittedOrAborted(OperationContext* opCtx) = 0; + virtual Status checkIfLinearizableReadWasAllowed(OperationContext* opCtx) = 0; virtual SharedSemiFuture<void> getCanReadFuture(OperationContext* opCtx, diff --git a/src/mongo/db/repl/tenant_migration_access_blocker_util.cpp b/src/mongo/db/repl/tenant_migration_access_blocker_util.cpp index 7184c018a6a..54985fb0afc 100644 --- a/src/mongo/db/repl/tenant_migration_access_blocker_util.cpp +++ b/src/mongo/db/repl/tenant_migration_access_blocker_util.cpp @@ -374,8 +374,7 @@ void handleTenantMigrationConflict(OperationContext* opCtx, Status status) { invariant(migrationConflictInfo); auto mtab = migrationConflictInfo->getTenantMigrationAccessBlocker(); invariant(mtab); - auto migrationStatus = - mtab->waitUntilCommittedOrAborted(opCtx, migrationConflictInfo->getOperationType()); + auto migrationStatus = mtab->waitUntilCommittedOrAborted(opCtx); mtab->recordTenantMigrationError(migrationStatus); uassertStatusOK(migrationStatus); } diff --git a/src/mongo/db/repl/tenant_migration_conflict_info.h b/src/mongo/db/repl/tenant_migration_conflict_info.h index aa7ab16fa5e..4f9c9c087e1 100644 --- a/src/mongo/db/repl/tenant_migration_conflict_info.h +++ b/src/mongo/db/repl/tenant_migration_conflict_info.h @@ -41,10 +41,8 @@ public: static constexpr auto code = ErrorCodes::TenantMigrationConflict; TenantMigrationConflictInfo(const std::string tenantId, - std::shared_ptr<TenantMigrationAccessBlocker> mtab = nullptr, - TenantMigrationAccessBlocker::OperationType operationType = - TenantMigrationAccessBlocker::kWrite) - : _tenantId(std::move(tenantId)), _mtab(std::move(mtab)), _operationType(operationType){}; + std::shared_ptr<TenantMigrationAccessBlocker> mtab = nullptr) + : _tenantId(std::move(tenantId)), _mtab(std::move(mtab)){}; const auto& getTenantId() const { return _tenantId; @@ -54,17 +52,12 @@ public: return _mtab; } - TenantMigrationAccessBlocker::OperationType getOperationType() const { - return _operationType; - } - void serialize(BSONObjBuilder* bob) const override; static std::shared_ptr<const ErrorExtraInfo> parse(const BSONObj&); private: std::string _tenantId; std::shared_ptr<TenantMigrationAccessBlocker> _mtab; - TenantMigrationAccessBlocker::OperationType _operationType; }; using TenantMigrationConflictException = ExceptionFor<ErrorCodes::TenantMigrationConflict>; using TenantMigrationCommittedException = ExceptionFor<ErrorCodes::TenantMigrationCommitted>; diff --git a/src/mongo/db/repl/tenant_migration_donor_access_blocker.cpp b/src/mongo/db/repl/tenant_migration_donor_access_blocker.cpp index 248fab51faa..33ad03a196c 100644 --- a/src/mongo/db/repl/tenant_migration_donor_access_blocker.cpp +++ b/src/mongo/db/repl/tenant_migration_donor_access_blocker.cpp @@ -99,8 +99,7 @@ Status TenantMigrationDonorAccessBlocker::checkIfCanWrite() { } } -Status TenantMigrationDonorAccessBlocker::waitUntilCommittedOrAborted(OperationContext* opCtx, - OperationType operationType) { +Status TenantMigrationDonorAccessBlocker::waitUntilCommittedOrAborted(OperationContext* opCtx) { // Source to cancel the timeout if the operation completed in time. CancellationSource cancelTimeoutSource; auto executor = getAsyncBlockingOperationsExecutor(); @@ -200,7 +199,7 @@ Status TenantMigrationDonorAccessBlocker::checkIfCanBuildIndex() { case BlockerState::State::kAllow: case BlockerState::State::kBlockWrites: case BlockerState::State::kBlockWritesAndReads: - return {TenantMigrationConflictInfo(_tenantId, shared_from_this(), kIndexBuild), + return {TenantMigrationConflictInfo(_tenantId, shared_from_this()), "Index build must block until tenant migration is committed or aborted."}; case BlockerState::State::kReject: return {ErrorCodes::TenantMigrationCommitted, diff --git a/src/mongo/db/repl/tenant_migration_donor_access_blocker.h b/src/mongo/db/repl/tenant_migration_donor_access_blocker.h index 7cc22eca265..6c04bc2308a 100644 --- a/src/mongo/db/repl/tenant_migration_donor_access_blocker.h +++ b/src/mongo/db/repl/tenant_migration_donor_access_blocker.h @@ -188,7 +188,7 @@ public: // Status checkIfCanWrite() final; - Status waitUntilCommittedOrAborted(OperationContext* opCtx, OperationType operationType) final; + Status waitUntilCommittedOrAborted(OperationContext* opCtx) final; Status checkIfLinearizableReadWasAllowed(OperationContext* opCtx) final; SharedSemiFuture<void> getCanReadFuture(OperationContext* opCtx, StringData command) final; diff --git a/src/mongo/db/repl/tenant_migration_recipient_access_blocker.cpp b/src/mongo/db/repl/tenant_migration_recipient_access_blocker.cpp index 5c698e21154..3bd49d79934 100644 --- a/src/mongo/db/repl/tenant_migration_recipient_access_blocker.cpp +++ b/src/mongo/db/repl/tenant_migration_recipient_access_blocker.cpp @@ -71,8 +71,7 @@ Status TenantMigrationRecipientAccessBlocker::checkIfCanWrite() { return Status::OK(); } -Status TenantMigrationRecipientAccessBlocker::waitUntilCommittedOrAborted( - OperationContext* opCtx, OperationType operationType) { +Status TenantMigrationRecipientAccessBlocker::waitUntilCommittedOrAborted(OperationContext* opCtx) { // Recipient nodes will not throw TenantMigrationConflict errors and so we should never need // to wait for a migration to commit/abort on the recipient set. MONGO_UNREACHABLE; diff --git a/src/mongo/db/repl/tenant_migration_recipient_access_blocker.h b/src/mongo/db/repl/tenant_migration_recipient_access_blocker.h index 7decbe897b9..4b17dfdac88 100644 --- a/src/mongo/db/repl/tenant_migration_recipient_access_blocker.h +++ b/src/mongo/db/repl/tenant_migration_recipient_access_blocker.h @@ -82,7 +82,7 @@ public: // Status checkIfCanWrite() final; - Status waitUntilCommittedOrAborted(OperationContext* opCtx, OperationType operationType) final; + Status waitUntilCommittedOrAborted(OperationContext* opCtx) final; Status checkIfLinearizableReadWasAllowed(OperationContext* opCtx) final; SharedSemiFuture<void> getCanReadFuture(OperationContext* opCtx, StringData command) final; |