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();
}
}