Fix issue with stream events handling
Stream events topic contains not only RefUpdatedEvent. Add check if
event is a subclass of ProjectEvent, if yes do a project filtering if
not accept the event.
Bug: Issue 14835
Change-Id: I354e5ae7e31c81fd5403c7ca2961d41b3891250f
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriber.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriber.java
index f6e3064..ab64651 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriber.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriber.java
@@ -18,7 +18,7 @@
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.server.config.GerritInstanceId;
import com.google.gerrit.server.events.Event;
-import com.google.gerrit.server.events.RefUpdatedEvent;
+import com.google.gerrit.server.events.ProjectEvent;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.multisite.Configuration;
@@ -50,6 +50,9 @@
@Override
protected Boolean shouldConsumeEvent(Event event) {
- return projectsFilter.matches(((RefUpdatedEvent) event).getProjectNameKey().get());
+ if (event instanceof ProjectEvent) {
+ return projectsFilter.matches(((ProjectEvent) event).getProjectNameKey().get());
+ }
+ return true;
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriberTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriberTest.java
index cd15bb7..edd9fdc 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriberTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/consumer/StreamEventSubscriberTest.java
@@ -15,20 +15,35 @@
package com.googlesource.gerrit.plugins.multisite.consumer;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import com.google.common.collect.ImmutableList;
import com.google.gerrit.entities.Project.NameKey;
import com.google.gerrit.server.events.Event;
import com.google.gerrit.server.events.RefUpdatedEvent;
+import com.google.gerrit.server.permissions.PermissionBackendException;
+import com.googlesource.gerrit.plugins.multisite.forwarder.CacheNotFoundException;
+import com.googlesource.gerrit.plugins.multisite.forwarder.events.AccountIndexEvent;
+import com.googlesource.gerrit.plugins.multisite.forwarder.events.IndexEvent;
import com.googlesource.gerrit.plugins.multisite.forwarder.router.ForwardedEventRouter;
import com.googlesource.gerrit.plugins.multisite.forwarder.router.StreamEventRouter;
+import com.googlesource.gerrit.plugins.replication.events.RefReplicatedEvent;
+import com.googlesource.gerrit.plugins.replication.events.RefReplicationDoneEvent;
+import com.googlesource.gerrit.plugins.replication.events.ReplicationScheduledEvent;
+import java.io.IOException;
import java.util.List;
+import org.junit.Test;
import org.mockito.Mock;
public class StreamEventSubscriberTest extends AbstractSubscriberTestBase {
private static final NameKey PROJECT_NAME_KEY = NameKey.parse(PROJECT_NAME);
- private @Mock RefUpdatedEvent event;
+ private @Mock RefUpdatedEvent refUpdatedEvent;
+ private @Mock RefReplicationDoneEvent refReplicationDoneEvent;
+ private @Mock ReplicationScheduledEvent replicationScheduledEvent;
+ private @Mock RefReplicatedEvent refReplicatedEvent;
@SuppressWarnings("rawtypes")
@Override
@@ -38,9 +53,30 @@
@Override
protected List<Event> events() {
- when(event.getProjectNameKey()).thenReturn(PROJECT_NAME_KEY);
- event.instanceId = INSTANCE_ID;
- return ImmutableList.of(event);
+ when(refUpdatedEvent.getProjectNameKey()).thenReturn(PROJECT_NAME_KEY);
+ refUpdatedEvent.instanceId = INSTANCE_ID;
+ when(refReplicationDoneEvent.getProjectNameKey()).thenReturn(PROJECT_NAME_KEY);
+ refReplicationDoneEvent.instanceId = INSTANCE_ID;
+ when(replicationScheduledEvent.getProjectNameKey()).thenReturn(PROJECT_NAME_KEY);
+ replicationScheduledEvent.instanceId = INSTANCE_ID;
+ when(refReplicatedEvent.getProjectNameKey()).thenReturn(PROJECT_NAME_KEY);
+ refReplicatedEvent.instanceId = INSTANCE_ID;
+
+ return ImmutableList.of(
+ refUpdatedEvent, refReplicationDoneEvent, replicationScheduledEvent, refReplicatedEvent);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void shouldNoPProjectEventTypes()
+ throws IOException, PermissionBackendException, CacheNotFoundException {
+ IndexEvent event = new AccountIndexEvent(1, INSTANCE_ID);
+
+ objectUnderTest.getConsumer().accept(event);
+
+ verify(projectsFilter, never()).matches(PROJECT_NAME);
+ verify(eventRouter, times(1)).route(event);
+ verify(droppedEventListeners, never()).onEventDropped(event);
}
@Override