Merge "EventDispatcher: Remove db parameter from event firing methods"
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 97bc2e5..0029768 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
@@ -33,6 +33,7 @@
 import com.google.gerrit.server.project.ProjectState;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
 /** Distributes Events to listeners if they are allowed to see them */
@@ -60,21 +61,25 @@
 
   protected final ChangeNotes.Factory notesFactory;
 
+  protected final Provider<ReviewDb> dbProvider;
+
   @Inject
   public EventBroker(DynamicSet<UserScopedEventListener> listeners,
       DynamicSet<EventListener> unrestrictedListeners,
       ProjectCache projectCache,
-      ChangeNotes.Factory notesFactory) {
+      ChangeNotes.Factory notesFactory,
+      Provider<ReviewDb> dbProvider) {
     this.listeners = listeners;
     this.unrestrictedListeners = unrestrictedListeners;
     this.projectCache = projectCache;
     this.notesFactory = notesFactory;
+    this.dbProvider = dbProvider;
   }
 
   @Override
-  public void postEvent(Change change, ChangeEvent event, ReviewDb db)
+  public void postEvent(Change change, ChangeEvent event)
       throws OrmException {
-    fireEvent(change, event, db);
+    fireEvent(change, event);
   }
 
   @Override
@@ -88,8 +93,8 @@
   }
 
   @Override
-  public void postEvent(Event event, ReviewDb db) throws OrmException {
-    fireEvent(event, db);
+  public void postEvent(Event event) throws OrmException {
+    fireEvent(event);
   }
 
   protected void fireEventForUnrestrictedListeners(Event event) {
@@ -98,10 +103,10 @@
     }
   }
 
-  protected void fireEvent(Change change, ChangeEvent event, ReviewDb db)
+  protected void fireEvent(Change change, ChangeEvent event)
       throws OrmException {
     for (UserScopedEventListener listener : listeners) {
-      if (isVisibleTo(change, listener.getUser(), db)) {
+      if (isVisibleTo(change, listener.getUser())) {
         listener.onEvent(event);
       }
     }
@@ -126,9 +131,9 @@
     fireEventForUnrestrictedListeners(event);
   }
 
-  protected void fireEvent(Event event, ReviewDb db) throws OrmException {
+  protected void fireEvent(Event event) throws OrmException {
     for (UserScopedEventListener listener : listeners) {
-      if (isVisibleTo(event, listener.getUser(), db)) {
+      if (isVisibleTo(event, listener.getUser())) {
         listener.onEvent(event);
       }
     }
@@ -143,7 +148,7 @@
     return pe.controlFor(user).isVisible();
   }
 
-  protected boolean isVisibleTo(Change change, CurrentUser user, ReviewDb db)
+  protected boolean isVisibleTo(Change change, CurrentUser user)
       throws OrmException {
     if (change == null) {
       return false;
@@ -153,6 +158,7 @@
       return false;
     }
     ProjectControl pc = pe.controlFor(user);
+    ReviewDb db = dbProvider.get();
     return pc.controlFor(db, change).isVisible(db);
   }
 
@@ -165,16 +171,16 @@
     return pc.controlForRef(branchName).isVisible();
   }
 
-  protected boolean isVisibleTo(Event event, CurrentUser user, ReviewDb db)
+  protected boolean isVisibleTo(Event event, CurrentUser user)
       throws OrmException {
     if (event instanceof RefEvent) {
       RefEvent refEvent = (RefEvent) event;
       String ref = refEvent.getRefName();
       if (PatchSet.isChangeRef(ref)) {
         Change.Id cid = PatchSet.Id.fromRef(ref).getParentKey();
-        Change change = notesFactory
-            .create(db, refEvent.getProjectNameKey(), cid).getChange();
-        return isVisibleTo(change, user, db);
+        Change change = notesFactory.create(
+            dbProvider.get(), refEvent.getProjectNameKey(), cid).getChange();
+        return isVisibleTo(change, user);
       }
       return isVisibleTo(refEvent.getBranchNameKey(), user);
     } else if (event instanceof ProjectEvent) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/EventDispatcher.java b/gerrit-server/src/main/java/com/google/gerrit/common/EventDispatcher.java
index 913fae3..46b979a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/EventDispatcher.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/EventDispatcher.java
@@ -17,7 +17,6 @@
 import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.events.ChangeEvent;
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.ProjectEvent;
@@ -32,10 +31,9 @@
    *
    * @param change The change that the event is related to
    * @param event The event to post
-   * @param db The database
    * @throws OrmException
    */
-  void postEvent(Change change, ChangeEvent event, ReviewDb db)
+  void postEvent(Change change, ChangeEvent event)
       throws OrmException;
 
   /**
@@ -62,7 +60,6 @@
    * for those use cases.
    *
    * @param event The event to post.
-   * @param db The database.
    */
-  void postEvent(Event event, ReviewDb db) throws OrmException;
+  void postEvent(Event event) throws OrmException;
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/common/StreamEventsApiListener.java b/gerrit-server/src/main/java/com/google/gerrit/common/StreamEventsApiListener.java
index 85f4c59..788147f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/common/StreamEventsApiListener.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/common/StreamEventsApiListener.java
@@ -287,7 +287,7 @@
       event.changer = accountAttributeSupplier(ev.getEditor());
       event.oldTopic = ev.getOldTopic();
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -305,7 +305,7 @@
       event.patchSet = patchSetAttributeSupplier(change, patchSet);
       event.uploader = accountAttributeSupplier(ev.getUploader());
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -325,7 +325,7 @@
       event.approvals = approvalsAttributeSupplier(change,
           ev.getNewApprovals(), ev.getOldApprovals());
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -344,7 +344,7 @@
           psUtil.current(db.get(), notes));
       event.reviewer = accountAttributeSupplier(ev.getReviewer());
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -371,7 +371,7 @@
       event.added = hashtagArray(ev.getAddedHashtags());
       event.removed = hashtagArray(ev.getRemovedHashtags());
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -410,7 +410,7 @@
       event.patchSet = patchSetAttributeSupplier(change, ps);
       event.uploader = accountAttributeSupplier(ev.getPublisher());
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -431,7 +431,7 @@
       event.approvals = approvalsAttributeSupplier(
           change, ev.getApprovals(), ev.getOldApprovals());
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -450,7 +450,7 @@
           psUtil.current(db.get(), notes));
       event.reason = ev.getReason();
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -469,7 +469,7 @@
           psUtil.current(db.get(), notes));
       event.newRev = ev.getNewRevisionId();
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
@@ -488,7 +488,7 @@
           psUtil.current(db.get(), notes));
       event.reason = ev.getReason();
 
-      dispatcher.get().postEvent(change, event, db.get());
+      dispatcher.get().postEvent(change, event);
     } catch (OrmException e) {
       log.error("Failed to dispatch event", e);
     }
diff --git a/plugins/replication b/plugins/replication
index a0cf9a2..b9c11b4 160000
--- a/plugins/replication
+++ b/plugins/replication
@@ -1 +1 @@
-Subproject commit a0cf9a2919ba11feef712cf6e6390669a46d24c5
+Subproject commit b9c11b4d4ed37f566e6e2daa11d96e1ca3d23c02