Merge "Update metrics for either CREATED/REPLACED or AUTOCLOSED"
diff --git a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
index 882f208..abbba86 100644
--- a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
@@ -39,6 +39,7 @@
import com.google.gerrit.server.git.MultiProgressMonitor;
import com.google.gerrit.server.git.ProjectRunnable;
import com.google.gerrit.server.git.TransferConfig;
+import com.google.gerrit.server.git.receive.ResultChangeIds.Key;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackend.RefFilterOptions;
import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -341,17 +342,21 @@
long deltaNanos = System.nanoTime() - startNanos;
int totalChanges = 0;
- for (ResultChangeIds.Key key : ResultChangeIds.Key.values()) {
- List<Change.Id> ids = resultChangeIds.get(key);
- metrics.changes.record(key, ids.size());
- totalChanges += ids.size();
+
+ if (resultChangeIds.isMagicPush()) {
+ List<Change.Id> created = resultChangeIds.get(Key.CREATED);
+ metrics.changes.record(Key.CREATED, created.size());
+ List<Change.Id> replaced = resultChangeIds.get(Key.REPLACED);
+ metrics.changes.record(Key.REPLACED, replaced.size());
+ totalChanges += replaced.size() + created.size();
+ } else {
+ List<Change.Id> autoclosed = resultChangeIds.get(Key.AUTOCLOSED);
+ metrics.changes.record(Key.AUTOCLOSED, autoclosed.size());
}
if (totalChanges > 0) {
metrics.latencyPerChange.record(
- resultChangeIds.get(ResultChangeIds.Key.AUTOCLOSED).isEmpty()
- ? "CREATE_REPLACE"
- : ResultChangeIds.Key.AUTOCLOSED.name(),
+ resultChangeIds.isMagicPush() ? "CREATE_REPLACE" : ResultChangeIds.Key.AUTOCLOSED.name(),
deltaNanos / totalChanges,
NANOSECONDS);
}
diff --git a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
index 32fbd36..3a9a170 100644
--- a/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/ReceiveCommits.java
@@ -631,6 +631,7 @@
private void handleRegularCommands(List<ReceiveCommand> cmds, MultiProgressMonitor progress)
throws PermissionBackendException, IOException, NoSuchProjectException {
+ resultChangeIds.setMagicPush(false);
for (ReceiveCommand cmd : cmds) {
parseRegularCommand(cmd);
}
@@ -1825,6 +1826,7 @@
if (validateConnected(magicBranch.cmd, magicBranch.dest, tip)) {
this.magicBranch = magicBranch;
+ this.resultChangeIds.setMagicPush(true);
}
}
diff --git a/java/com/google/gerrit/server/git/receive/ResultChangeIds.java b/java/com/google/gerrit/server/git/receive/ResultChangeIds.java
index bbf8d95..e326141 100644
--- a/java/com/google/gerrit/server/git/receive/ResultChangeIds.java
+++ b/java/com/google/gerrit/server/git/receive/ResultChangeIds.java
@@ -33,6 +33,7 @@
AUTOCLOSED,
}
+ private boolean isMagicPush;
private final Map<Key, List<Change.Id>> ids;
ResultChangeIds() {
@@ -43,16 +44,24 @@
}
/** Record a change ID update as having completed. Thread-safe. */
- public void add(Key key, Change.Id id) {
- synchronized (this) {
- ids.get(key).add(id);
- }
+ public synchronized void add(Key key, Change.Id id) {
+ ids.get(key).add(id);
}
- /** Returns change IDs of the given type for which the BatchUpdate succeeded. Thread-safe. */
- public List<Change.Id> get(Key key) {
- synchronized (this) {
- return ImmutableList.copyOf(ids.get(key));
- }
+ /** Indicate that the ReceiveCommits call involved a magic branch. */
+ public synchronized void setMagicPush(boolean magic) {
+ isMagicPush = magic;
+ }
+
+ public synchronized boolean isMagicPush() {
+ return isMagicPush;
+ }
+
+ /**
+ * Returns change IDs of the given type for which the BatchUpdate succeeded, or empty list if
+ * there are none. Thread-safe.
+ */
+ public synchronized List<Change.Id> get(Key key) {
+ return ImmutableList.copyOf(ids.get(key));
}
}