Use SchemaFactory instead of Provider in DbGroupMemberAuditListener
Using Provider<ReviewDb> causes ProvisionException when running the
tests:
Automatic ReviewDb only available in request scope
Change it to SchemaFactory<ReviewDb>.
Change-Id: I342bce45ac66a5d6c602f92059bed15abdbf4f11
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/group/DbGroupMemberAuditListener.java b/gerrit-server/src/main/java/com/google/gerrit/server/group/DbGroupMemberAuditListener.java
index afc0d84..9e261f9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/group/DbGroupMemberAuditListener.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/group/DbGroupMemberAuditListener.java
@@ -29,8 +29,8 @@
import com.google.gerrit.server.account.GroupCache;
import com.google.gerrit.server.account.UniversalGroupBackend;
import com.google.gwtorm.server.OrmException;
+import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
-import com.google.inject.Provider;
import org.slf4j.Logger;
@@ -43,16 +43,16 @@
private static final Logger log = org.slf4j.LoggerFactory
.getLogger(DbGroupMemberAuditListener.class);
- private final Provider<ReviewDb> db;
+ private final SchemaFactory<ReviewDb> schema;
private final AccountCache accountCache;
private final GroupCache groupCache;
private final UniversalGroupBackend groupBackend;
@Inject
- public DbGroupMemberAuditListener(Provider<ReviewDb> db,
+ public DbGroupMemberAuditListener(SchemaFactory<ReviewDb> schema,
AccountCache accountCache, GroupCache groupCache,
UniversalGroupBackend groupBackend) {
- this.db = db;
+ this.schema = schema;
this.accountCache = accountCache;
this.groupCache = groupCache;
this.groupBackend = groupBackend;
@@ -68,7 +68,12 @@
auditInserts.add(audit);
}
try {
- db.get().accountGroupMembersAudit().insert(auditInserts);
+ ReviewDb db = schema.open();
+ try {
+ db.accountGroupMembersAudit().insert(auditInserts);
+ } finally {
+ db.close();
+ }
} catch (OrmException e) {
logOrmExceptionForAccounts(
"Cannot log add accounts to group event performed by user", me,
@@ -81,29 +86,33 @@
Collection<AccountGroupMember> removed) {
List<AccountGroupMemberAudit> auditInserts = Lists.newLinkedList();
List<AccountGroupMemberAudit> auditUpdates = Lists.newLinkedList();
- ReviewDb reviewDB = db.get();
try {
- for (AccountGroupMember m : removed) {
- AccountGroupMemberAudit audit = null;
- for (AccountGroupMemberAudit a : reviewDB.accountGroupMembersAudit()
- .byGroupAccount(m.getAccountGroupId(), m.getAccountId())) {
- if (a.isActive()) {
- audit = a;
- break;
+ ReviewDb db = schema.open();
+ try {
+ for (AccountGroupMember m : removed) {
+ AccountGroupMemberAudit audit = null;
+ for (AccountGroupMemberAudit a : db.accountGroupMembersAudit()
+ .byGroupAccount(m.getAccountGroupId(), m.getAccountId())) {
+ if (a.isActive()) {
+ audit = a;
+ break;
+ }
+ }
+
+ if (audit != null) {
+ audit.removed(me, TimeUtil.nowTs());
+ auditUpdates.add(audit);
+ } else {
+ audit = new AccountGroupMemberAudit(m, me, TimeUtil.nowTs());
+ audit.removedLegacy();
+ auditInserts.add(audit);
}
}
-
- if (audit != null) {
- audit.removed(me, TimeUtil.nowTs());
- auditUpdates.add(audit);
- } else {
- audit = new AccountGroupMemberAudit(m, me, TimeUtil.nowTs());
- audit.removedLegacy();
- auditInserts.add(audit);
- }
+ db.accountGroupMembersAudit().update(auditUpdates);
+ db.accountGroupMembersAudit().insert(auditInserts);
+ } finally {
+ db.close();
}
- reviewDB.accountGroupMembersAudit().update(auditUpdates);
- reviewDB.accountGroupMembersAudit().insert(auditInserts);
} catch (OrmException e) {
logOrmExceptionForAccounts(
"Cannot log delete accounts from group event performed by user", me,
@@ -121,7 +130,12 @@
includesAudit.add(audit);
}
try {
- db.get().accountGroupByIdAud().insert(includesAudit);
+ ReviewDb db = schema.open();
+ try {
+ db.accountGroupByIdAud().insert(includesAudit);
+ } finally {
+ db.close();
+ }
} catch (OrmException e) {
logOrmExceptionForGroups(
"Cannot log add groups to group event performed by user", me, added,
@@ -134,22 +148,27 @@
Collection<AccountGroupById> removed) {
final List<AccountGroupByIdAud> auditUpdates = Lists.newLinkedList();
try {
- for (final AccountGroupById g : removed) {
- AccountGroupByIdAud audit = null;
- for (AccountGroupByIdAud a : db.get().accountGroupByIdAud()
- .byGroupInclude(g.getGroupId(), g.getIncludeUUID())) {
- if (a.isActive()) {
- audit = a;
- break;
+ ReviewDb db = schema.open();
+ try {
+ for (final AccountGroupById g : removed) {
+ AccountGroupByIdAud audit = null;
+ for (AccountGroupByIdAud a : db.accountGroupByIdAud()
+ .byGroupInclude(g.getGroupId(), g.getIncludeUUID())) {
+ if (a.isActive()) {
+ audit = a;
+ break;
+ }
+ }
+
+ if (audit != null) {
+ audit.removed(me, TimeUtil.nowTs());
+ auditUpdates.add(audit);
}
}
-
- if (audit != null) {
- audit.removed(me, TimeUtil.nowTs());
- auditUpdates.add(audit);
- }
+ db.accountGroupByIdAud().update(auditUpdates);
+ } finally {
+ db.close();
}
- db.get().accountGroupByIdAud().update(auditUpdates);
} catch (OrmException e) {
logOrmExceptionForGroups(
"Cannot log delete groups from group event performed by user", me,