Use SharedRefDatabaseWrapper in MultisiteReplicationPushFilter
Every interaction with shared-ref db should go through the wrapper.
This will allow us centrally capture those interactions in logs.
Change-Id: Ieb22ee45b8e8f9584c50141667880e82fa1cf299
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/MultisiteReplicationPushFilter.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/MultisiteReplicationPushFilter.java
index 6b4f4cc..f55a458 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/MultisiteReplicationPushFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/MultisiteReplicationPushFilter.java
@@ -14,8 +14,10 @@
package com.googlesource.gerrit.plugins.multisite.validation;
+import com.google.gerrit.extensions.registration.DynamicItem;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.multisite.SharedRefDatabaseWrapper;
import com.googlesource.gerrit.plugins.multisite.validation.dfsrefdb.SharedLockException;
import com.googlesource.gerrit.plugins.multisite.validation.dfsrefdb.SharedRefDatabase;
import com.googlesource.gerrit.plugins.replication.ReplicationPushFilter;
@@ -33,10 +35,10 @@
static final String REPLICATION_LOG_NAME = "replication_log";
static final Logger repLog = LoggerFactory.getLogger(REPLICATION_LOG_NAME);
- private final SharedRefDatabase sharedRefDb;
+ private final SharedRefDatabaseWrapper sharedRefDb;
@Inject
- public MultisiteReplicationPushFilter(SharedRefDatabase sharedRefDb) {
+ public MultisiteReplicationPushFilter(SharedRefDatabaseWrapper sharedRefDb) {
this.sharedRefDb = sharedRefDb;
}
@@ -50,8 +52,10 @@
refUpdate -> {
String ref = refUpdate.getSrcRef();
try {
- if (sharedRefDb.isUpToDate(
- projectName, SharedRefDatabase.newRef(ref, refUpdate.getNewObjectId()))) {
+ if (sharedRefDb
+ .isUpToDate(
+ projectName,
+ SharedRefDatabase.newRef(ref, refUpdate.getNewObjectId()))) {
return true;
}
repLog.warn(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/MultisiteReplicationPushFilterTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/MultisiteReplicationPushFilterTest.java
index 1332dd1..91459d8 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/MultisiteReplicationPushFilterTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/MultisiteReplicationPushFilterTest.java
@@ -19,12 +19,18 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
+import com.google.gerrit.extensions.registration.DynamicItem;
+import com.googlesource.gerrit.plugins.multisite.SharedRefDatabaseWrapper;
+import com.googlesource.gerrit.plugins.multisite.validation.DisabledSharedRefLogger;
import com.googlesource.gerrit.plugins.multisite.validation.MultisiteReplicationPushFilter;
+import com.googlesource.gerrit.plugins.multisite.validation.ZkConnectionConfig;
+import com.googlesource.gerrit.plugins.multisite.validation.dfsrefdb.zookeeper.ZkSharedRefDatabase;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.apache.curator.retry.RetryNTimes;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectIdRef;
import org.eclipse.jgit.lib.Ref;
@@ -37,7 +43,7 @@
@RunWith(MockitoJUnitRunner.class)
public class MultisiteReplicationPushFilterTest {
- @Mock SharedRefDatabase sharedRefDatabaseMock;
+ @Mock SharedRefDatabaseWrapper sharedRefDatabaseMock;
String project = "fooProject";
@@ -48,7 +54,8 @@
doReturn(true).when(sharedRefDatabaseMock).isUpToDate(eq(project), any());
MultisiteReplicationPushFilter pushFilter =
- new MultisiteReplicationPushFilter(sharedRefDatabaseMock);
+ new MultisiteReplicationPushFilter(
+ sharedRefDatabaseMock);
List<RemoteRefUpdate> filteredRefUpdates = pushFilter.filter(project, refUpdates);
assertThat(filteredRefUpdates).containsExactlyElementsIn(refUpdates);
@@ -59,10 +66,11 @@
RemoteRefUpdate refUpToDate = refUpdate("refs/heads/uptodate");
RemoteRefUpdate outdatedRef = refUpdate("refs/heads/outdated");
List<RemoteRefUpdate> refUpdates = Arrays.asList(refUpToDate, outdatedRef);
- SharedRefDatabase sharedRefDatabase = newSharedRefDatabase(outdatedRef.getSrcRef());
+ SharedRefDatabaseWrapper sharedRefDatabase = newSharedRefDatabase(outdatedRef.getSrcRef());
MultisiteReplicationPushFilter pushFilter =
- new MultisiteReplicationPushFilter(sharedRefDatabase);
+ new MultisiteReplicationPushFilter(
+ sharedRefDatabase);
List<RemoteRefUpdate> filteredRefUpdates = pushFilter.filter(project, refUpdates);
assertThat(filteredRefUpdates).containsExactly(refUpToDate);
@@ -76,7 +84,7 @@
RemoteRefUpdate changeRef = refUpdate("refs/changes/12/4512/1");
List<RemoteRefUpdate> refUpdates =
Arrays.asList(refUpToDate, refChangeUpToDate, changeMetaRef, changeRef);
- SharedRefDatabase sharedRefDatabase = newSharedRefDatabase(changeMetaRef.getSrcRef());
+ SharedRefDatabaseWrapper sharedRefDatabase = newSharedRefDatabase(changeMetaRef.getSrcRef());
MultisiteReplicationPushFilter pushFilter =
new MultisiteReplicationPushFilter(sharedRefDatabase);
@@ -85,7 +93,7 @@
assertThat(filteredRefUpdates).containsExactly(refUpToDate, refChangeUpToDate);
}
- private SharedRefDatabase newSharedRefDatabase(String... rejectedRefs) {
+ private SharedRefDatabaseWrapper newSharedRefDatabase(String... rejectedRefs) {
Set<String> rejectedSet = new HashSet<>();
rejectedSet.addAll(Arrays.asList(rejectedRefs));
@@ -116,7 +124,11 @@
return false;
}
};
- return sharedRefDatabase;
+ return new SharedRefDatabaseWrapper(
+ DynamicItem.itemOf(
+ SharedRefDatabase.class,
+ sharedRefDatabase),
+ new DisabledSharedRefLogger());
}
private RemoteRefUpdate refUpdate(String refName) throws IOException {