diff --git a/fdbserver/CommitProxyServer.actor.cpp b/fdbserver/CommitProxyServer.actor.cpp index 18e255f03c..f1add616f1 100644 --- a/fdbserver/CommitProxyServer.actor.cpp +++ b/fdbserver/CommitProxyServer.actor.cpp @@ -685,6 +685,11 @@ bool canReject(const std::vector& trs) { return true; } +double computeReleaseDelay(CommitBatchContext* self, double latencyBucket) { + return std::min(SERVER_KNOBS->MAX_PROXY_COMPUTE, + self->batchOperations * self->pProxyCommitData->commitComputePerOperation[latencyBucket]); +} + ACTOR Future preresolutionProcessing(CommitBatchContext* self) { state ProxyCommitData* const pProxyCommitData = self->pProxyCommitData; @@ -737,10 +742,7 @@ ACTOR Future preresolutionProcessing(CommitBatchContext* self) { return Void(); } - self->releaseDelay = - delay(std::min(SERVER_KNOBS->MAX_PROXY_COMPUTE, - self->batchOperations * pProxyCommitData->commitComputePerOperation[latencyBucket]), - TaskPriority::ProxyMasterVersionReply); + self->releaseDelay = delay(computeReleaseDelay(self, latencyBucket), TaskPriority::ProxyMasterVersionReply); if (debugID.present()) { g_traceBatch.addEvent( @@ -1388,6 +1390,22 @@ ACTOR Future postResolution(CommitBatchContext* self) { if (self->batchOperations > 0) { double computePerOperation = std::min(SERVER_KNOBS->MAX_COMPUTE_PER_OPERATION, self->computeDuration / self->batchOperations); + + double estimatedDelay = computeReleaseDelay(self, self->latencyBucket); + if (estimatedDelay >= SERVER_KNOBS->MAX_COMPUTE_DURATION_LOG_CUTOFF || + self->computeDuration >= SERVER_KNOBS->MAX_COMPUTE_DURATION_LOG_CUTOFF) { + TraceEvent(SevInfo, "LongComputeDuration") + .suppressFor(5.0) + .detail("EstimatedComputeDuration", estimatedDelay) + .detail("ComputeDuration", self->computeDuration) + .detail("ComputePerOperation", computePerOperation) + .detail("LatencyBucket", self->latencyBucket) + .detail("UpdatedComputePerOperationEstimate", + pProxyCommitData->commitComputePerOperation[self->latencyBucket]) + .detail("BatchBytes", self->batchBytes) + .detail("BatchOperations", self->batchOperations); + } + if (computePerOperation <= pProxyCommitData->commitComputePerOperation[self->latencyBucket]) { pProxyCommitData->commitComputePerOperation[self->latencyBucket] = computePerOperation; } else { @@ -1402,18 +1420,6 @@ ACTOR Future postResolution(CommitBatchContext* self) { pProxyCommitData->stats.minComputeNS = std::min(pProxyCommitData->stats.minComputeNS, 1e9 * pProxyCommitData->commitComputePerOperation[self->latencyBucket]); - - if (self->computeDuration >= SERVER_KNOBS->MAX_COMPUTE_DURATION_LOG_CUTOFF) { - TraceEvent(SevInfo, "LongComputeDuration") - .suppressFor(5.0) - .detail("ComputeDuration", self->computeDuration) - .detail("ComputePerOperation", computePerOperation) - .detail("LatencyBucket", self->latencyBucket) - .detail("UpdatedComputePerOperationEstimate", - pProxyCommitData->commitComputePerOperation[self->latencyBucket]) - .detail("BatchBytes", self->batchBytes) - .detail("BatchOperations", self->batchOperations); - } } pProxyCommitData->stats.processingMutationDist->sampleSeconds(now() - postResolutionQueuing);