diff options
author | Brett Nawrocki <brett.nawrocki@mongodb.com> | 2022-04-08 14:36:33 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-04-08 16:34:58 +0000 |
commit | 1adf91969ad4e216d70c42d6625c6f7096f067f7 (patch) | |
tree | 670b9e97cbedce99713cce0696302788d59388ba /src | |
parent | 9ab71f9b2fac1e384529fafaf2a819ce61834228 (diff) | |
download | mongo-1adf91969ad4e216d70c42d6625c6f7096f067f7.tar.gz |
Revert "SERVER-64372 Add parity $currentOp resharding donor fields"
This reverts commit ecbaddb63705f5ac10f299a539a584d24fcfa20c.
Diffstat (limited to 'src')
8 files changed, 20 insertions, 168 deletions
diff --git a/src/mongo/db/s/collection_sharding_runtime.cpp b/src/mongo/db/s/collection_sharding_runtime.cpp index e3dad0c16fb..a39d3ea92e9 100644 --- a/src/mongo/db/s/collection_sharding_runtime.cpp +++ b/src/mongo/db/s/collection_sharding_runtime.cpp @@ -34,10 +34,7 @@ #include "mongo/base/checked_cast.h" #include "mongo/db/catalog_raii.h" #include "mongo/db/global_settings.h" -#include "mongo/db/repl/primary_only_service.h" #include "mongo/db/s/operation_sharding_state.h" -#include "mongo/db/s/resharding/resharding_donor_recipient_common.h" -#include "mongo/db/s/sharding_data_transform_metrics.h" #include "mongo/db/s/sharding_runtime_d_params_gen.h" #include "mongo/db/s/sharding_state.h" #include "mongo/logv2/log.h" @@ -351,6 +348,21 @@ CollectionShardingRuntime::_getMetadataWithVersionCheckAt( auto csrLock = CSRLock::lockShared(opCtx, this); + { + auto criticalSectionSignal = _critSec.getSignal( + opCtx->lockState()->isWriteLocked() ? ShardingMigrationCriticalSection::kWrite + : ShardingMigrationCriticalSection::kRead); + std::string reason = _critSec.getReason() ? _critSec.getReason()->toString() : "unknown"; + uassert(StaleConfigInfo(_nss, + receivedShardVersion, + boost::none /* wantedVersion */, + ShardingState::get(opCtx)->shardId(), + std::move(criticalSectionSignal)), + str::stream() << "The critical section for " << _nss.ns() + << " is acquired with reason: " << reason, + !criticalSectionSignal); + } + auto optCurrentMetadata = _getCurrentMetadataIfKnown(atClusterTime); uassert(StaleConfigInfo(_nss, receivedShardVersion, @@ -362,51 +374,6 @@ CollectionShardingRuntime::_getMetadataWithVersionCheckAt( const auto& currentMetadata = optCurrentMetadata->get(); - { - auto operationType = opCtx->lockState()->isWriteLocked() - ? ShardingMigrationCriticalSection::kWrite - : ShardingMigrationCriticalSection::kRead; - auto criticalSectionSignal = _critSec.getSignal(operationType); - std::string reason = _critSec.getReason() ? _critSec.getReason()->toString() : "unknown"; - if (criticalSectionSignal) { - [&] { - if (!ShardingDataTransformMetrics::isEnabled()) { - return; - } - if (!currentMetadata.isSharded()) { - return; - } - const auto& reshardingFields = currentMetadata.getReshardingFields(); - if (!reshardingFields) { - return; - } - auto stateMachine = resharding::tryGetReshardingStateMachine< - ReshardingDonorService, - ReshardingDonorService::DonorStateMachine, - ReshardingDonorDocument>(opCtx, reshardingFields->getReshardingUUID()); - if (!stateMachine) { - return; - } - switch (operationType) { - case ShardingMigrationCriticalSection::kWrite: - (*stateMachine)->onWriteDuringCriticalSection(); - return; - case ShardingMigrationCriticalSection::kRead: - return; - } - MONGO_UNREACHABLE; - }(); - - uasserted(StaleConfigInfo(_nss, - receivedShardVersion, - boost::none /* wantedVersion */, - ShardingState::get(opCtx)->shardId(), - std::move(criticalSectionSignal)), - str::stream() << "The critical section for " << _nss.ns() - << " is acquired with reason: " << reason); - } - } - auto wantedShardVersion = currentMetadata.getShardVersion(); if (wantedShardVersion.isWriteCompatibleWith(receivedShardVersion) || diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp index 4b48ec91761..99f98abf0a7 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp +++ b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp @@ -977,10 +977,6 @@ ReshardingCoordinatorService::ReshardingCoordinator::ReshardingCoordinator( : PrimaryOnlyService::TypedInstance<ReshardingCoordinator>(), _id(coordinatorDoc.getReshardingUUID().toBSON()), _coordinatorService(coordinatorService), - _metricsNew{ - ShardingDataTransformMetrics::isEnabled() - ? ReshardingMetricsNew::initializeFrom(coordinatorDoc, getGlobalServiceContext()) - : nullptr}, _metadata(coordinatorDoc.getCommonReshardingMetadata()), _coordinatorDoc(coordinatorDoc), _markKilledExecutor(std::make_shared<ThreadPool>([] { @@ -1263,9 +1259,6 @@ ReshardingCoordinatorService::ReshardingCoordinator::_commitAndFinishReshardOper }) .then([this, executor] { return _awaitAllParticipantShardsDone(executor); }) .then([this, executor] { - if (ShardingDataTransformMetrics::isEnabled()) { - _metricsNew->onCriticalSectionEnd(); - } // Best-effort attempt to trigger a refresh on the participant shards so // they see the collection metadata without reshardingFields and no longer // throw ReshardCollectionInProgress. There is no guarantee this logic ever @@ -1692,9 +1685,6 @@ ReshardingCoordinatorService::ReshardingCoordinator::_awaitAllRecipientsFinished this->_updateCoordinatorDocStateAndCatalogEntries(CoordinatorStateEnum::kBlockingWrites, _coordinatorDoc); - if (ShardingDataTransformMetrics::isEnabled()) { - _metricsNew->onCriticalSectionBegin(); - } }) .then([this] { return _waitForMajority(_ctHolder->getAbortToken()); }) .thenRunOn(**executor) diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.h b/src/mongo/db/s/resharding/resharding_coordinator_service.h index 280abbac2f3..a24569ecc44 100644 --- a/src/mongo/db/s/resharding/resharding_coordinator_service.h +++ b/src/mongo/db/s/resharding/resharding_coordinator_service.h @@ -33,7 +33,6 @@ #include "mongo/db/repl/primary_only_service.h" #include "mongo/db/s/resharding/coordinator_document_gen.h" #include "mongo/db/s/resharding/resharding_coordinator_observer.h" -#include "mongo/db/s/resharding/resharding_metrics_new.h" #include "mongo/platform/mutex.h" #include "mongo/s/catalog/type_chunk.h" #include "mongo/s/catalog/type_collection.h" @@ -507,8 +506,6 @@ private: // The primary-only service instance corresponding to the coordinator instance. Not owned. const ReshardingCoordinatorService* const _coordinatorService; - std::unique_ptr<ReshardingMetricsNew> _metricsNew; - // The in-memory representation of the immutable portion of the document in // config.reshardingOperations. const CommonReshardingMetadata _metadata; diff --git a/src/mongo/db/s/resharding/resharding_donor_service.cpp b/src/mongo/db/s/resharding/resharding_donor_service.cpp index 2eff19e9c0f..722cd4453ce 100644 --- a/src/mongo/db/s/resharding/resharding_donor_service.cpp +++ b/src/mongo/db/s/resharding/resharding_donor_service.cpp @@ -204,9 +204,6 @@ ReshardingDonorService::DonorStateMachine::DonorStateMachine( std::unique_ptr<DonorStateMachineExternalState> externalState) : repl::PrimaryOnlyService::TypedInstance<DonorStateMachine>(), _donorService(donorService), - _metricsNew{ShardingDataTransformMetrics::isEnabled() - ? ReshardingMetricsNew::initializeFrom(donorDoc, getGlobalServiceContext()) - : nullptr}, _metadata{donorDoc.getCommonReshardingMetadata()}, _recipientShardIds{donorDoc.getRecipientShards()}, _donorCtx{donorDoc.getMutableState()}, @@ -381,9 +378,6 @@ ExecutorFuture<void> ReshardingDonorService::DonorStateMachine::_finishReshardin ShardingCatalogClient::kLocalWriteConcern); _metrics()->leaveCriticalSection(getCurrentTime()); - if (ShardingDataTransformMetrics::isEnabled()) { - _metricsNew->onCriticalSectionEnd(); - } } auto opCtx = _cancelableOpCtxFactory->makeOperationContext(&cc()); @@ -518,13 +512,6 @@ void ReshardingDonorService::DonorStateMachine::onReshardingFieldsChanges( } } -void ReshardingDonorService::DonorStateMachine::onWriteDuringCriticalSection() { - if (!ShardingDataTransformMetrics::isEnabled()) { - return; - } - _metricsNew->onWriteDuringCriticalSection(); -} - SharedSemiFuture<void> ReshardingDonorService::DonorStateMachine::awaitCriticalSectionAcquired() { return _critSecWasAcquired.getFuture(); } @@ -686,9 +673,6 @@ void ReshardingDonorService::DonorStateMachine:: ShardingCatalogClient::kLocalWriteConcern); _metrics()->enterCriticalSection(getCurrentTime()); - if (ShardingDataTransformMetrics::isEnabled()) { - _metricsNew->onCriticalSectionBegin(); - } } { diff --git a/src/mongo/db/s/resharding/resharding_donor_service.h b/src/mongo/db/s/resharding/resharding_donor_service.h index 6b7316150f7..b50c88b6af5 100644 --- a/src/mongo/db/s/resharding/resharding_donor_service.h +++ b/src/mongo/db/s/resharding/resharding_donor_service.h @@ -33,7 +33,6 @@ #include "mongo/db/repl/primary_only_service.h" #include "mongo/db/s/resharding/donor_document_gen.h" #include "mongo/db/s/resharding/resharding_metrics.h" -#include "mongo/db/s/resharding/resharding_metrics_new.h" #include "mongo/s/resharding/type_collection_fields_gen.h" namespace mongo { @@ -102,8 +101,6 @@ public: void onReshardingFieldsChanges(OperationContext* opCtx, const TypeCollectionReshardingFields& reshardingFields); - void onWriteDuringCriticalSection(); - SharedSemiFuture<void> awaitCriticalSectionAcquired(); SharedSemiFuture<void> awaitCriticalSectionPromoted(); @@ -224,8 +221,6 @@ private: // The primary-only service instance corresponding to the donor instance. Not owned. const ReshardingDonorService* const _donorService; - std::unique_ptr<ReshardingMetricsNew> _metricsNew; - // The in-memory representation of the immutable portion of the document in // config.localReshardingOperations.donor. const CommonReshardingMetadata _metadata; diff --git a/src/mongo/db/s/sharding_data_transform_instance_metrics.cpp b/src/mongo/db/s/sharding_data_transform_instance_metrics.cpp index 1f14094cca5..27cc2e7e238 100644 --- a/src/mongo/db/s/sharding_data_transform_instance_metrics.cpp +++ b/src/mongo/db/s/sharding_data_transform_instance_metrics.cpp @@ -39,10 +39,6 @@ constexpr auto TEMP_VALUE = "placeholder"; namespace mongo { -namespace { -constexpr auto kNoDate = Date_t::min(); -} - ShardingDataTransformInstanceMetrics::ShardingDataTransformInstanceMetrics( UUID instanceId, BSONObj originalCommand, @@ -82,10 +78,7 @@ ShardingDataTransformInstanceMetrics::ShardingDataTransformInstanceMetrics( _insertsApplied{0}, _updatesApplied{0}, _deletesApplied{0}, - _oplogEntriesApplied{0}, - _criticalSectionStartTime{kNoDate}, - _criticalSectionEndTime{kNoDate}, - _writesDuringCriticalSection{0} {} + _oplogEntriesApplied{0} {} ShardingDataTransformInstanceMetrics::~ShardingDataTransformInstanceMetrics() { if (_deregister) { @@ -140,12 +133,12 @@ BSONObj ShardingDataTransformInstanceMetrics::reportForCurrentOp() const noexcep builder.append(kCoordinatorState, getStateString()); builder.append(kApplyTimeElapsed, TEMP_VALUE); builder.append(kCopyTimeElapsed, TEMP_VALUE); - builder.append(kCriticalSectionTimeElapsed, getCriticalSectionElapsedTimeSecs()); + builder.append(kCriticalSectionTimeElapsed, TEMP_VALUE); break; case Role::kDonor: builder.append(kDonorState, getStateString()); - builder.append(kCriticalSectionTimeElapsed, getCriticalSectionElapsedTimeSecs()); - builder.append(kCountWritesDuringCriticalSection, _writesDuringCriticalSection.load()); + builder.append(kCriticalSectionTimeElapsed, TEMP_VALUE); + builder.append(kCountWritesDuringCriticalSection, TEMP_VALUE); builder.append(kCountReadsDuringCriticalSection, TEMP_VALUE); break; case Role::kRecipient: @@ -187,32 +180,9 @@ void ShardingDataTransformInstanceMetrics::onOplogEntriesApplied(int64_t numEntr _oplogEntriesApplied.addAndFetch(numEntries); } -void ShardingDataTransformInstanceMetrics::onWriteDuringCriticalSection() { - _writesDuringCriticalSection.addAndFetch(1); -} - -void ShardingDataTransformInstanceMetrics::onCriticalSectionBegin() { - _criticalSectionStartTime.store(_clockSource->now()); -} - -void ShardingDataTransformInstanceMetrics::onCriticalSectionEnd() { - _criticalSectionEndTime.store(_clockSource->now()); -} inline int64_t ShardingDataTransformInstanceMetrics::getOperationRunningTimeSecs() const { return durationCount<Seconds>(_clockSource->now() - _startTime); } -int64_t ShardingDataTransformInstanceMetrics::getCriticalSectionElapsedTimeSecs() const { - auto start = _criticalSectionStartTime.load(); - if (start == kNoDate) { - return 0; - } - auto end = _criticalSectionEndTime.load(); - if (end == kNoDate) { - end = _clockSource->now(); - } - return durationCount<Seconds>(end - start); -} - } // namespace mongo diff --git a/src/mongo/db/s/sharding_data_transform_instance_metrics.h b/src/mongo/db/s/sharding_data_transform_instance_metrics.h index 77fd973458e..189f7819036 100644 --- a/src/mongo/db/s/sharding_data_transform_instance_metrics.h +++ b/src/mongo/db/s/sharding_data_transform_instance_metrics.h @@ -68,9 +68,6 @@ public: void onUpdateApplied(); void onDeleteApplied(); void onOplogEntriesApplied(int64_t numEntries); - void onWriteDuringCriticalSection(); - void onCriticalSectionBegin(); - void onCriticalSectionEnd(); Role getRole() const; protected: @@ -112,7 +109,6 @@ protected: private: inline int64_t getOperationRunningTimeSecs() const; - int64_t getCriticalSectionElapsedTimeSecs() const; ClockSource* _clockSource; ObserverPtr _observer; @@ -120,15 +116,10 @@ private: ShardingDataTransformCumulativeMetrics::DeregistrationFunction _deregister; const Date_t _startTime; - AtomicWord<int64_t> _insertsApplied; AtomicWord<int64_t> _updatesApplied; AtomicWord<int64_t> _deletesApplied; AtomicWord<int64_t> _oplogEntriesApplied; - - AtomicWord<Date_t> _criticalSectionStartTime; - AtomicWord<Date_t> _criticalSectionEndTime; - AtomicWord<int64_t> _writesDuringCriticalSection; }; } // namespace mongo diff --git a/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp b/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp index 0ffa17ea88e..6c6a2b0c3d2 100644 --- a/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp +++ b/src/mongo/db/s/sharding_data_transform_instance_metrics_test.cpp @@ -178,6 +178,7 @@ TEST_F(ShardingDataTransformInstanceMetricsTest, OnDeleteAppliedShouldIncrementD ASSERT_EQ(report.getIntField("deletesApplied"), 1); } + TEST_F(ShardingDataTransformInstanceMetricsTest, OnOplogsEntriesAppliedShouldIncrementOplogsEntriesApplied) { auto metrics = createInstanceMetrics(UUID::gen(), Role::kRecipient); @@ -190,49 +191,6 @@ TEST_F(ShardingDataTransformInstanceMetricsTest, ASSERT_EQ(report.getIntField("oplogEntriesApplied"), 100); } -TEST_F(ShardingDataTransformInstanceMetricsTest, DonorIncrementWritesDuringCriticalSection) { - auto metrics = createInstanceMetrics(UUID::gen(), Role::kDonor); - - auto report = metrics->reportForCurrentOp(); - ASSERT_EQ(report.getIntField("countWritesDuringCriticalSection"), 0); - metrics->onWriteDuringCriticalSection(); - - report = metrics->reportForCurrentOp(); - ASSERT_EQ(report.getIntField("countWritesDuringCriticalSection"), 1); -} - -TEST_F(ShardingDataTransformInstanceMetricsTest, CurrentOpReportsCriticalSectionTime) { - const auto roles = {Role::kDonor, Role::kCoordinator}; - for (const auto& role : roles) { - LOGV2(6437200, "CurrentOpReportsCriticalSectionTime", "Role"_attr = role); - constexpr auto kFiveSeconds = Milliseconds(5000); - auto uuid = UUID::gen(); - const auto& clock = getClockSource(); - auto metrics = std::make_unique<ShardingDataTransformInstanceMetrics>( - uuid, kTestCommand, kTestNamespace, role, clock->now(), clock, &_cumulativeMetrics); - - // Reports 0 before critical section entered. - clock->advance(kFiveSeconds); - auto report = metrics->reportForCurrentOp(); - ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 0); - - // Reports time so far during critical section. - metrics->onCriticalSectionBegin(); - clock->advance(kFiveSeconds); - report = metrics->reportForCurrentOp(); - ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 5); - clock->advance(kFiveSeconds); - report = metrics->reportForCurrentOp(); - ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 10); - - // Still reports total time after critical section ends. - metrics->onCriticalSectionEnd(); - clock->advance(kFiveSeconds); - report = metrics->reportForCurrentOp(); - ASSERT_EQ(report.getIntField("totalCriticalSectionTimeElapsedSecs"), 10); - } -} - TEST_F(ShardingDataTransformInstanceMetricsTest, CurrentOpReportsRunningTime) { auto uuid = UUID::gen(); auto now = getClockSource()->now(); |