Fix firing change related event for deleted change
Change-Id: I44f40bb3b63a0f7a8e35944dde289dcd4da2d7ab
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/EventBroker.java b/gerrit-server/src/main/java/com/google/gerrit/common/EventBroker.java
index 87cfea1..4603141 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/EventBroker.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/EventBroker.java
@@ -28,6 +28,7 @@
import com.google.gerrit.server.events.ProjectEvent;
import com.google.gerrit.server.events.RefEvent;
import com.google.gerrit.server.notedb.ChangeNotes;
+import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectControl;
import com.google.gerrit.server.project.ProjectState;
@@ -35,10 +36,13 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/** Distributes Events to listeners if they are allowed to see them */
@Singleton
public class EventBroker implements EventDispatcher {
+ private static final Logger log = LoggerFactory.getLogger(EventBroker.class);
public static class Module extends LifecycleModule {
@Override
@@ -172,9 +176,15 @@
String ref = refEvent.getRefName();
if (PatchSet.isChangeRef(ref)) {
Change.Id cid = PatchSet.Id.fromRef(ref).getParentKey();
- Change change =
- notesFactory.create(dbProvider.get(), refEvent.getProjectNameKey(), cid).getChange();
- return isVisibleTo(change, user);
+ try {
+ Change change =
+ notesFactory
+ .createChecked(dbProvider.get(), refEvent.getProjectNameKey(), cid)
+ .getChange();
+ return isVisibleTo(change, user);
+ } catch (NoSuchChangeException e) {
+ log.debug("Change {} cannot be found, falling back on ref visibility check", cid.id);
+ }
}
return isVisibleTo(refEvent.getBranchNameKey(), user);
} else if (event instanceof ProjectEvent) {