Merge "Extract UpdateHeadCommand"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueueMetrics.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueueMetrics.java
index b0fa7e9..abb01b7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueueMetrics.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueueMetrics.java
@@ -35,6 +35,7 @@
public class ReplicationQueueMetrics {
private static final String EVENTS = "events";
private static final String TASKS = "tasks";
+ private static final String REFS = "refs";
public static final String REPLICATION_QUEUE_METRICS = "ReplicationQueueMetrics";
private final Counter1<String> tasksScheduled;
@@ -52,6 +53,10 @@
private final Counter1<String> tasksStarted;
private final Set<RegistrationHandle> metricsHandles;
+ private final Counter1<String> refsFetchStarted;
+ private final Counter1<String> refsFetchCompleted;
+ private final Counter1<String> refsFetchFailed;
+
public class RunnableWithMetrics implements Runnable {
private final Source source;
private final Runnable runnable;
@@ -64,13 +69,17 @@
@Override
public void run() {
incrementTaskStarted(source);
+ incrementFetchRefsStarted(source, runnable);
+
runnable.run();
if (runnable instanceof Completable) {
Completable completedRunnable = (Completable) runnable;
if (completedRunnable.hasSucceeded()) {
incrementTaskCompleted(source);
+ incrementFetchRefsCompleted(source, runnable);
} else {
incrementTaskFailed(source);
+ incrementFetchRefsFailed(source, runnable);
}
}
}
@@ -170,6 +179,31 @@
.setUnit(TASKS),
sourceField));
+ refsFetchStarted =
+ registerMetric(
+ metricMaker.newCounter(
+ "fetch/refs/started",
+ new Description("Refs for which fetch operation have started")
+ .setCumulative()
+ .setUnit(REFS),
+ sourceField));
+ refsFetchCompleted =
+ registerMetric(
+ metricMaker.newCounter(
+ "fetch/refs/completed",
+ new Description("Refs for which fetch operation have completed")
+ .setCumulative()
+ .setUnit(REFS),
+ sourceField));
+ refsFetchFailed =
+ registerMetric(
+ metricMaker.newCounter(
+ "fetch/refs/failed",
+ new Description("Refs for which fetch operation have failed")
+ .setCumulative()
+ .setUnit(REFS),
+ sourceField));
+
this.metricMaker = metricMaker;
}
@@ -269,6 +303,25 @@
tasksStarted.increment(source.getRemoteConfigName());
}
+ public void incrementFetchRefsStarted(Source source, Runnable runnableTask) {
+ incrementFetchRefsCounter(source, runnableTask, refsFetchStarted);
+ }
+
+ public void incrementFetchRefsCompleted(Source source, Runnable runnableTask) {
+ incrementFetchRefsCounter(source, runnableTask, refsFetchCompleted);
+ }
+
+ public void incrementFetchRefsFailed(Source source, Runnable runnableTask) {
+ incrementFetchRefsCounter(source, runnableTask, refsFetchFailed);
+ }
+
+ private void incrementFetchRefsCounter(
+ Source source, Runnable runnableTask, Counter1<String> counter) {
+ if (runnableTask instanceof FetchOne) {
+ counter.incrementBy(source.getRemoteConfigName(), ((FetchOne) runnableTask).getRefs().size());
+ }
+ }
+
public Runnable runWithMetrics(Source source, Runnable runnableTask) {
if (runnableTask instanceof RunnableWithMetrics) {
return runnableTask;
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 9984a03..98e8d1d 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
@@ -678,6 +678,7 @@
: RefUpdate.Result.REJECTED_OTHER_REASON;
postReplicationFailedEvent(fetchOp, trackingRefUpdate);
queueMetrics.incrementTaskFailed(this);
+ queueMetrics.incrementFetchRefsFailed(this, fetchOp);
if (fetchOp.setToRetry()) {
postReplicationScheduledEvent(fetchOp);
diff --git a/src/main/resources/Documentation/metrics.md b/src/main/resources/Documentation/metrics.md
index ac1539c..76861d4 100644
--- a/src/main/resources/Documentation/metrics.md
+++ b/src/main/resources/Documentation/metrics.md
@@ -63,6 +63,22 @@
- `failed_max_retries`: (counter) number of tasks that have reached their maximum
retry count but never succeeded.
+### plugins/@PLUGIN@/fetch/refs/<metric>/<source>
+
+Cumulative number of refs included in the Git fetch operation.
+
+The `<metric>` field can have one of the values described here below,
+while the `<source>` represents the replication source endpoint name.
+
+- `started`: (counter) number of refs for which fetch operation have started.
+
+- `completed`: (counter) number of refs for which fetch operation have completed.
+
+- `failed`: (counter) number of refs for which fetch operation have failed.
+
+> Bear in mind that the fetch with special `..all..` ref spec will be counted
+> as 1 even if the fetch cause multiple refs to be fetched.
+
### plugins/@PLUGIN@
- `apply_object_latency`: (timer) execution time statistics for the