Eager initialize Owners Prolog Predicates

Allow having the Owners plugin early on in the Gerrit startup
sequence so that *every* operation, including online reindexing,
can benefit and use the additional Prolog predicates.

Change-Id: I665ab13c70f7f65835301d382802b74d6b1a8d74
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java b/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
index a1fc7b0..e685ffd 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
+++ b/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
@@ -20,7 +20,6 @@
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Account.Id;
 import com.google.gerrit.reviewdb.client.AccountGroup;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.AccountResolver;
@@ -44,7 +43,7 @@
 public class AccountsImpl implements Accounts {
   private static final Logger log = LoggerFactory.getLogger(AccountsImpl.class);
 
-  private final ReviewDb db;
+  private final OneOffRequestContext requestCtx;
   private final AccountResolver resolver;
   private final AccountCache byId;
   private final GroupCache groupCache;
@@ -56,14 +55,14 @@
   public AccountsImpl(
       AccountResolver resolver,
       AccountCache byId,
-      ReviewDb db,
+      OneOffRequestContext requestCtx,
       GroupCache groupCache,
       GroupMembers.Factory groupMembersFactory,
       OneOffRequestContext oneOffRequestContext,
       IdentifiedUser.GenericFactory userFactory) {
     this.resolver = resolver;
     this.byId = byId;
-    this.db = db;
+    this.requestCtx = requestCtx;
     this.groupCache = groupCache;
     this.groupMembers = groupMembersFactory;
     this.adminUser = userFactory.create(new Account.Id(1000000));
@@ -102,8 +101,8 @@
   }
 
   private Set<Account.Id> findUserOrEmail(String nameOrEmail) {
-    try {
-      Set<Id> accountIds = resolver.findAll(db, nameOrEmail);
+    try (ManualRequestContext ctx = oneOffRequestContext.open()) {
+      Set<Id> accountIds = resolver.findAll(ctx.getReviewDbProvider().get(), nameOrEmail);
       if (accountIds.isEmpty()) {
         log.warn("User '{}' does not resolve to any account.", nameOrEmail);
         return accountIds;
diff --git a/owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java b/owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java
index 3b5b567..c4a5f80 100644
--- a/owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java
+++ b/owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java
@@ -22,6 +22,8 @@
 public class OwnersModule extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), PredicateProvider.class).to(OwnerPredicateProvider.class);
+    DynamicSet.bind(binder(), PredicateProvider.class)
+        .to(OwnerPredicateProvider.class)
+        .asEagerSingleton();
   }
 }