diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java
index aaf8c25..678961a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitrepometrics/GitRepoUpdateListener.java
@@ -27,6 +27,7 @@
 
 class GitRepoUpdateListener implements EventListener {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+  protected static final String REF_REPLICATED_EVENT_SUFFIX = "ref-replicated";
   private final ExecutorService executor;
   private final UpdateGitMetricsTask.Factory updateGitMetricsTaskFactory;
   private final GitRepoMetricsCache gitRepoMetricsCache;
@@ -46,7 +47,7 @@
 
   @Override
   public void onEvent(Event event) {
-    if (event instanceof RefUpdatedEvent || isReplicationDoneEvent(event)) {
+    if (isMyEvent(event) && (isRefUpdatedEvent(event) || isRefReplicatedEvent(event))) {
       String projectName = ((ProjectEvent) event).getProjectNameKey().get();
       logger.atFine().log(
           "Got %s event from %s. Might need to collect metrics for project %s",
@@ -59,12 +60,19 @@
     }
   }
 
-  private boolean isReplicationDoneEvent(Event event) {
+  private boolean isRefReplicatedEvent(Event event) {
     // Check the name of the event instead of checking the class type
     // to avoid importing pull and push replication plugin dependencies
     // only for this check.
-    return event.type != null
-        && !Objects.equals(event.instanceId, instanceId)
-        && event.type.endsWith("-replication-done");
+
+    return event.type.endsWith(REF_REPLICATED_EVENT_SUFFIX);
+  }
+
+  private boolean isRefUpdatedEvent(Event event) {
+    return event.type.equals(RefUpdatedEvent.TYPE);
+  }
+
+  private boolean isMyEvent(Event event) {
+    return event.type != null && Objects.equals(event.instanceId, instanceId);
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
index b046758..72a24a7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/gitrepometrics/GitUpdateListenerTest.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.gitrepometrics;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.googlesource.gerrit.plugins.gitrepometrics.GitRepoUpdateListener.REF_REPLICATED_EVENT_SUFFIX;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.reset;
@@ -57,8 +58,6 @@
   private final String disabledProject = "disabledProject";
   private final Project.NameKey disabledProjectNameKey = Project.nameKey(disabledProject);
   private final String producerInstanceId = "producerInstanceId";
-  private final String consumerInstanceId = "consumerInstanceId";
-  private final String refReplicationDoneType = "ref-replication-done";
 
   @Inject private UpdateGitMetricsTask.Factory updateGitMetricsTaskFactory;
 
@@ -114,35 +113,54 @@
   }
 
   @Test
-  public void shouldUpdateMetricsIfProjectIsEnabledOnRefReplicationDone() {
+  public void shouldNotUpdateMetricsOnRefReplicatedFromOtherNode() {
     gitRepoUpdateListener.onEvent(
-        getRefReplicationEvent(refReplicationDoneType, enabledProject, consumerInstanceId));
+        getRefReplicationEvent(
+            REF_REPLICATED_EVENT_SUFFIX, enabledProject, "another-node-instance-id"));
+    assertMetricsAreNotUpdated();
+  }
+
+  @Test
+  public void shouldNotUpdateMetricsOnRefUpdatedFromOtherNode() {
+    gitRepoUpdateListener.onEvent(getRefUpdatedEvent(enabledProject, "another-node-instance-id"));
+    assertMetricsAreNotUpdated();
+  }
+
+  @Test
+  public void shouldUpdateMetricsIfProjectIsEnabledOnRefReplicated() {
+    gitRepoUpdateListener.onEvent(
+        getRefReplicationEvent(REF_REPLICATED_EVENT_SUFFIX, enabledProject, producerInstanceId));
     assertMetricsAreUpdated();
   }
 
   @Test
-  public void shouldNotUpdateMetricsIfProjectIsDisabledOnReplicationDone() {
+  public void shouldNotUpdateMetricsIfProjectIsDisabledOnOnRefReplicated() {
     gitRepoUpdateListener.onEvent(
-        getRefReplicationEvent(refReplicationDoneType, disabledProject, consumerInstanceId));
+        getRefReplicationEvent(REF_REPLICATED_EVENT_SUFFIX, disabledProject, producerInstanceId));
     assertMetricsAreNotUpdated();
   }
 
   @Test
   public void shouldNotUpdateMetricsOnUnknownEvent() {
     gitRepoUpdateListener.onEvent(
-        getRefReplicationEvent("any-event", enabledProject, consumerInstanceId));
+        getRefReplicationEvent("any-event", enabledProject, producerInstanceId));
     assertMetricsAreNotUpdated();
   }
 
   @Test
-  public void shouldNotUpdateMetricsOnRefReplicationDoneFromSameNode() {
+  public void shouldUpdateMetricsOnRefReplicatedFromSameNode() {
     gitRepoUpdateListener.onEvent(
-        getRefReplicationEvent(refReplicationDoneType, enabledProject, producerInstanceId));
-    assertMetricsAreNotUpdated();
+        getRefReplicationEvent(REF_REPLICATED_EVENT_SUFFIX, enabledProject, producerInstanceId));
+    assertMetricsAreUpdated();
   }
 
   private RefUpdatedEvent getRefUpdatedEvent(String projectName) {
+    return getRefUpdatedEvent(projectName, producerInstanceId);
+  }
+
+  private RefUpdatedEvent getRefUpdatedEvent(String projectName, String instanceId) {
     RefUpdatedEvent refUpdatedEvent = new RefUpdatedEvent();
+    refUpdatedEvent.instanceId = instanceId;
     refUpdatedEvent.refUpdate =
         () -> {
           RefUpdateAttribute attributes = new RefUpdateAttribute();
