Split latency metric for computing changed files
The logic to compute the changed files against auto merge and first
parent is quite different, hence latency should be recorded separately.
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: Ice2857a1510f129030f8d6553358122df539f2ec
diff --git a/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java b/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java
index cf88e62..4fdab65 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java
@@ -146,14 +146,12 @@
logger.atFine().log(
"computing changed files for revision %s in project %s", revCommit.name(), project);
- try (Timer0.Context ctx = codeOwnerMetrics.computeChangedFiles.start()) {
- if (revCommit.getParentCount() > 1
- && MergeCommitStrategy.FILES_WITH_CONFLICT_RESOLUTION.equals(mergeCommitStrategy)) {
- return computeByComparingAgainstAutoMerge(project, revCommit);
- }
-
- return computeByComparingAgainstFirstParent(repoConfig, revWalk, revCommit);
+ if (revCommit.getParentCount() > 1
+ && MergeCommitStrategy.FILES_WITH_CONFLICT_RESOLUTION.equals(mergeCommitStrategy)) {
+ return computeByComparingAgainstAutoMerge(project, revCommit);
}
+
+ return computeByComparingAgainstFirstParent(repoConfig, revWalk, revCommit);
}
/**
@@ -171,16 +169,19 @@
checkState(
mergeCommit.getParentCount() > 1, "expected %s to be a merge commit", mergeCommit.name());
- // for merge commits the default base is the auto merge commit
- PatchListKey patchListKey =
- PatchListKey.againstDefaultBase(mergeCommit, Whitespace.IGNORE_NONE);
+ try (Timer0.Context ctx = codeOwnerMetrics.computeChangedFilesAgainstAutoMerge.start()) {
+ // for merge commits the default base is the auto merge commit
+ PatchListKey patchListKey =
+ PatchListKey.againstDefaultBase(mergeCommit, Whitespace.IGNORE_NONE);
- return patchListCache.get(patchListKey, project).getPatches().stream()
- .filter(
- patchListEntry ->
- patchListEntry.getNewName() == null || !Patch.isMagic(patchListEntry.getNewName()))
- .map(ChangedFile::create)
- .collect(toImmutableSet());
+ return patchListCache.get(patchListKey, project).getPatches().stream()
+ .filter(
+ patchListEntry ->
+ patchListEntry.getNewName() == null
+ || !Patch.isMagic(patchListEntry.getNewName()))
+ .map(ChangedFile::create)
+ .collect(toImmutableSet());
+ }
}
/**
@@ -195,25 +196,27 @@
*/
private ImmutableSet<ChangedFile> computeByComparingAgainstFirstParent(
Config repoConfig, RevWalk revWalk, RevCommit revCommit) throws IOException {
- RevCommit baseCommit = revCommit.getParentCount() > 0 ? revCommit.getParent(0) : null;
- logger.atFine().log("baseCommit = %s", baseCommit != null ? baseCommit.name() : "n/a");
+ try (Timer0.Context ctx = codeOwnerMetrics.computeChangedFilesAgainstFirstParent.start()) {
+ RevCommit baseCommit = revCommit.getParentCount() > 0 ? revCommit.getParent(0) : null;
+ logger.atFine().log("baseCommit = %s", baseCommit != null ? baseCommit.name() : "n/a");
- try (DiffFormatter diffFormatter = new DiffFormatter(DisabledOutputStream.INSTANCE)) {
- diffFormatter.setReader(revWalk.getObjectReader(), repoConfig);
- diffFormatter.setDiffComparator(RawTextComparator.DEFAULT);
- diffFormatter.setDetectRenames(true);
- List<DiffEntry> diffEntries = diffFormatter.scan(baseCommit, revCommit);
- ImmutableSet<ChangedFile> changedFiles =
- diffEntries.stream().map(ChangedFile::create).collect(toImmutableSet());
- if (changedFiles.size() <= MAX_CHANGED_FILES_TO_LOG) {
- logger.atFine().log("changed files = %s", changedFiles);
- } else {
- logger.atFine().log(
- "changed files = %s (and %d more)",
- changedFiles.asList().subList(0, MAX_CHANGED_FILES_TO_LOG),
- changedFiles.size() - MAX_CHANGED_FILES_TO_LOG);
+ try (DiffFormatter diffFormatter = new DiffFormatter(DisabledOutputStream.INSTANCE)) {
+ diffFormatter.setReader(revWalk.getObjectReader(), repoConfig);
+ diffFormatter.setDiffComparator(RawTextComparator.DEFAULT);
+ diffFormatter.setDetectRenames(true);
+ List<DiffEntry> diffEntries = diffFormatter.scan(baseCommit, revCommit);
+ ImmutableSet<ChangedFile> changedFiles =
+ diffEntries.stream().map(ChangedFile::create).collect(toImmutableSet());
+ if (changedFiles.size() <= MAX_CHANGED_FILES_TO_LOG) {
+ logger.atFine().log("changed files = %s", changedFiles);
+ } else {
+ logger.atFine().log(
+ "changed files = %s (and %d more)",
+ changedFiles.asList().subList(0, MAX_CHANGED_FILES_TO_LOG),
+ changedFiles.size() - MAX_CHANGED_FILES_TO_LOG);
+ }
+ return changedFiles;
}
- return changedFiles;
}
}
}
diff --git a/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java b/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java
index 8cfc74d..2f3ce40 100644
--- a/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java
+++ b/java/com/google/gerrit/plugins/codeowners/metrics/CodeOwnerMetrics.java
@@ -28,7 +28,8 @@
@Singleton
public class CodeOwnerMetrics {
// latency metrics
- public final Timer0 computeChangedFiles;
+ public final Timer0 computeChangedFilesAgainstAutoMerge;
+ public final Timer0 computeChangedFilesAgainstFirstParent;
public final Timer0 computeFileStatus;
public final Timer0 computeFileStatuses;
public final Timer0 computeOwnedPaths;
@@ -56,8 +57,14 @@
this.metricMaker = metricMaker;
// latency metrics
- this.computeChangedFiles =
- createLatencyTimer("compute_changed_files", "Latency for computing changed files");
+ this.computeChangedFilesAgainstAutoMerge =
+ createLatencyTimer(
+ "compute_changed_files_against_auto_merge",
+ "Latency for computing changed files against auto merge");
+ this.computeChangedFilesAgainstFirstParent =
+ createLatencyTimer(
+ "compute_changed_files_against_first_parent",
+ "Latency for computing changed files against first parent");
this.computeFileStatus =
createLatencyTimer(
"compute_file_status", "Latency for computing the file status of one file");
diff --git a/resources/Documentation/metrics.md b/resources/Documentation/metrics.md
index bc80415..481c61a 100644
--- a/resources/Documentation/metrics.md
+++ b/resources/Documentation/metrics.md
@@ -5,8 +5,10 @@
## <a id="latencyMetrics"> Latency Metrics
-* `compute_changed_files`:
- Latency for computing changed files.
+* `compute_changed_files_against_auto_merge`:
+ Latency for computing changed files against auto merge.
+* `compute_changed_files_against_first_parent`:
+ Latency for computing changed files against first parent.
* `compute_file_status`:
Latency for computing the file status for one file.
* `compute_file_statuses`: