summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/resharding
diff options
context:
space:
mode:
authorBrett Nawrocki <brett.nawrocki@mongodb.com>2022-03-23 20:55:11 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-04-06 23:12:01 +0000
commitecbaddb63705f5ac10f299a539a584d24fcfa20c (patch)
tree7bcf09ebc588ee9c661b4b6d92621fd6c39bd3a6 /src/mongo/db/s/resharding
parentaa55e7488440311dd86f4ff60286fb23241ecc59 (diff)
downloadmongo-ecbaddb63705f5ac10f299a539a584d24fcfa20c.tar.gz
SERVER-64372 Add parity $currentOp resharding donor fields
Track and report the following fields in ShardingDataTransformInstanceMetrics for resharding $currentOp: countWritesDuringCriticalSection totalCriticalSectionTimeElapsedSecs
Diffstat (limited to 'src/mongo/db/s/resharding')
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service.cpp10
-rw-r--r--src/mongo/db/s/resharding/resharding_coordinator_service.h3
-rw-r--r--src/mongo/db/s/resharding/resharding_donor_service.cpp16
-rw-r--r--src/mongo/db/s/resharding/resharding_donor_service.h5
4 files changed, 34 insertions, 0 deletions
diff --git a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
index 99f98abf0a7..4b48ec91761 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
+++ b/src/mongo/db/s/resharding/resharding_coordinator_service.cpp
@@ -977,6 +977,10 @@ 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>([] {
@@ -1259,6 +1263,9 @@ 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
@@ -1685,6 +1692,9 @@ 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 a24569ecc44..280abbac2f3 100644
--- a/src/mongo/db/s/resharding/resharding_coordinator_service.h
+++ b/src/mongo/db/s/resharding/resharding_coordinator_service.h
@@ -33,6 +33,7 @@
#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"
@@ -506,6 +507,8 @@ 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 722cd4453ce..2eff19e9c0f 100644
--- a/src/mongo/db/s/resharding/resharding_donor_service.cpp
+++ b/src/mongo/db/s/resharding/resharding_donor_service.cpp
@@ -204,6 +204,9 @@ 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()},
@@ -378,6 +381,9 @@ ExecutorFuture<void> ReshardingDonorService::DonorStateMachine::_finishReshardin
ShardingCatalogClient::kLocalWriteConcern);
_metrics()->leaveCriticalSection(getCurrentTime());
+ if (ShardingDataTransformMetrics::isEnabled()) {
+ _metricsNew->onCriticalSectionEnd();
+ }
}
auto opCtx = _cancelableOpCtxFactory->makeOperationContext(&cc());
@@ -512,6 +518,13 @@ void ReshardingDonorService::DonorStateMachine::onReshardingFieldsChanges(
}
}
+void ReshardingDonorService::DonorStateMachine::onWriteDuringCriticalSection() {
+ if (!ShardingDataTransformMetrics::isEnabled()) {
+ return;
+ }
+ _metricsNew->onWriteDuringCriticalSection();
+}
+
SharedSemiFuture<void> ReshardingDonorService::DonorStateMachine::awaitCriticalSectionAcquired() {
return _critSecWasAcquired.getFuture();
}
@@ -673,6 +686,9 @@ 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 b50c88b6af5..6b7316150f7 100644
--- a/src/mongo/db/s/resharding/resharding_donor_service.h
+++ b/src/mongo/db/s/resharding/resharding_donor_service.h
@@ -33,6 +33,7 @@
#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 {
@@ -101,6 +102,8 @@ public:
void onReshardingFieldsChanges(OperationContext* opCtx,
const TypeCollectionReshardingFields& reshardingFields);
+ void onWriteDuringCriticalSection();
+
SharedSemiFuture<void> awaitCriticalSectionAcquired();
SharedSemiFuture<void> awaitCriticalSectionPromoted();
@@ -221,6 +224,8 @@ 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;