Merge branch 'stable-3.10' into stable-3.11 * stable-3.10: Do not notify failures on collisions Fixed erroneous increment of the rescheduled metric Ensure failures are only incremented in RunnableWithMetrics Change-Id: I60714422558caf9d332fce3f19b8fea66c6c2e9a
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/FetchOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/FetchOne.java index 9f94a6a..b194f2c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/FetchOne.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/FetchOne.java
@@ -95,6 +95,7 @@ private final Set<TransportException> fetchFailures = Sets.newHashSetWithExpectedSize(4); private boolean fetchAllRefs; private Repository git; + private boolean isCollision; private boolean retrying; private int retryCount; private final int maxRetries; @@ -292,7 +293,7 @@ } private void statesCleanUp() { - if (!stateMap.isEmpty() && !isRetrying()) { + if (!stateMap.isEmpty() && !isRetrying() && !isCollision) { for (Map.Entry<FetchRefSpec, ReplicationState> entry : stateMap.entries()) { entry .getValue() @@ -348,6 +349,7 @@ // we start replication (instead a new instance, with the same URI, is // created and scheduled for a future point in time.) // + isCollision = false; if (replicationType == ReplicationType.ASYNC && !pool.requestRunway(this)) { if (!canceled) { repLog.info( @@ -357,6 +359,7 @@ uri, pool.getInFlight(getURI()).map(FetchOne::getTaskIdHex).orElse("<unknown>")); pool.reschedule(this, Source.RetryReason.COLLISION); + isCollision = true; } return; }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/Source.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/Source.java index b1d553d..0a75288 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/Source.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/Source.java
@@ -641,8 +641,6 @@ fetchOp.getTaskIdHex(), fetchOp.getURI(), pendingFetchOp.getTaskIdHex()), fetchOp.getStatesAsArray()); - queueMetrics.incrementTaskRescheduled(this); - } else { // The one pending is one that is NOT retrying, it was just // scheduled believing no problem would happen. The one pending @@ -682,9 +680,8 @@ "[%s] Merging the pending fetch from [%s] with task [%s] and rescheduling", pendingFetchOp.getTaskIdHex(), pendingFetchOp.getURI(), fetchOp.getTaskIdHex()), pendingFetchOp.getStatesAsArray()); - - queueMetrics.incrementTaskMerged(this); } + queueMetrics.incrementTaskMerged(this); } if (pendingFetchOp == null || !pendingFetchOp.isRetrying()) { @@ -705,8 +702,6 @@ ? RefUpdate.Result.NOT_ATTEMPTED : RefUpdate.Result.REJECTED_OTHER_REASON; postReplicationFailedEvent(fetchOp, trackingRefUpdate); - queueMetrics.incrementTaskFailed(this); - queueMetrics.incrementFetchRefsFailed(this, fetchOp); if (fetchOp.setToRetry()) { postReplicationScheduledEvent(fetchOp);