Add a counter to track physical shard creation throuogh moves
This commit is contained in:
parent
b839489661
commit
ada51ff12b
|
@ -687,6 +687,9 @@ struct DDQueue : public IDDRelocationQueue {
|
|||
|
||||
Reference<EventCacheHolder> movedKeyServersEventHolder;
|
||||
|
||||
int moveReusePhysicalShard;
|
||||
int moveCreateNewPhysicalShard;
|
||||
|
||||
void startRelocation(int priority, int healthPriority) {
|
||||
// Although PRIORITY_TEAM_REDUNDANT has lower priority than split and merge shard movement,
|
||||
// we must count it into unhealthyRelocations; because team removers relies on unhealthyRelocations to
|
||||
|
@ -750,7 +753,8 @@ struct DDQueue : public IDDRelocationQueue {
|
|||
output(output), input(input), getShardMetrics(getShardMetrics), getTopKMetrics(getTopKMetrics), lastInterval(0),
|
||||
suppressIntervals(0), rawProcessingUnhealthy(new AsyncVar<bool>(false)),
|
||||
rawProcessingWiggle(new AsyncVar<bool>(false)), unhealthyRelocations(0),
|
||||
movedKeyServersEventHolder(makeReference<EventCacheHolder>("MovedKeyServers")) {}
|
||||
movedKeyServersEventHolder(makeReference<EventCacheHolder>("MovedKeyServers")), moveReusePhysicalShard(0),
|
||||
moveCreateNewPhysicalShard(0) {}
|
||||
DDQueue() = default;
|
||||
|
||||
void validate() {
|
||||
|
@ -1676,6 +1680,11 @@ ACTOR Future<Void> dataDistributionRelocator(DDQueue* self,
|
|||
// when !rd.isRestore(), dataMoveId is just decided as physicalShardIDCandidate
|
||||
// thus, update the physicalShardIDCandidate to related data structures
|
||||
ASSERT(physicalShardIDCandidate != UID().first());
|
||||
if (self->physicalShardCollection->physicalShardExists(physicalShardIDCandidate)) {
|
||||
self->moveReusePhysicalShard++;
|
||||
} else {
|
||||
self->moveCreateNewPhysicalShard++;
|
||||
}
|
||||
rd.dataMoveId = newShardId(physicalShardIDCandidate, AssignEmptyRange::False);
|
||||
auto inFlightRange = self->inFlight.rangeContaining(rd.keys.begin);
|
||||
inFlightRange.value().dataMoveId = rd.dataMoveId;
|
||||
|
@ -2472,6 +2481,14 @@ ACTOR Future<Void> dataDistributionQueue(Reference<IDDTxnProcessor> db,
|
|||
.trackLatest("MovingData"); // This trace event's trackLatest lifetime is controlled by
|
||||
// DataDistributor::movingDataEventHolder. The track latest
|
||||
// key we use here must match the key used in the holder.
|
||||
|
||||
if (SERVER_KNOBS->SHARD_ENCODE_LOCATION_METADATA && SERVER_KNOBS->ENABLE_DD_PHYSICAL_SHARD) {
|
||||
TraceEvent("PhysicalShardMoveStats")
|
||||
.detail("MoveCreateNewPhysicalShard", self.moveCreateNewPhysicalShard)
|
||||
.detail("MoveReusePhysicalShard", self.moveReusePhysicalShard);
|
||||
self.moveCreateNewPhysicalShard = 0;
|
||||
self.moveReusePhysicalShard = 0;
|
||||
}
|
||||
}
|
||||
when(wait(self.error.getFuture())) {} // Propagate errors from dataDistributionRelocator
|
||||
when(wait(waitForAll(ddQueueFutures))) {}
|
||||
|
|
|
@ -2081,6 +2081,10 @@ void PhysicalShardCollection::logPhysicalShardCollection() {
|
|||
}
|
||||
}
|
||||
|
||||
bool PhysicalShardCollection::physicalShardExists(uint64_t physicalShardID) {
|
||||
return physicalShardInstances.find(physicalShardID) != physicalShardInstances.end();
|
||||
}
|
||||
|
||||
// FIXME: complete this test with non-empty range
|
||||
TEST_CASE("/DataDistributor/Tracker/FetchTopK") {
|
||||
state DataDistributionTracker self;
|
||||
|
|
|
@ -322,6 +322,9 @@ public:
|
|||
// Log physicalShard
|
||||
void logPhysicalShardCollection();
|
||||
|
||||
// Checks if a physical shard exists.
|
||||
bool physicalShardExists(uint64_t physicalShardID);
|
||||
|
||||
private:
|
||||
// Track physicalShard metrics by tracking keyRange metrics
|
||||
void updatePhysicalShardMetricsByKeyRange(KeyRange keyRange,
|
||||
|
|
Loading…
Reference in New Issue