Flag ref-updates events creating a new ref The creation of a new ref needs a special management in the way it is replicated to the remote endpoints. Store the creation into a flag of the ref-updates in the replication queues so that can be managed differently throughout the chain. Change-Id: I63bcaba70c1be15535d1433406a90ef85b98b63b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java index 495915d..453cbf7 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java
@@ -381,7 +381,8 @@ try { Optional<RevisionData> maybeRevisionData = revReaderProvider.get().read(project, event.objectId(), event.refName(), 0); - return BatchApplyObjectData.create(event.refName(), maybeRevisionData); + return BatchApplyObjectData.create( + event.refName(), maybeRevisionData, event.isDelete(), event.isCreate()); } catch (IOException e) { stateLog.error( String.format( @@ -820,9 +821,10 @@ String refName, ObjectId objectId, long eventCreatedOn, - boolean isDelete) { + boolean isDelete, + boolean isCreate) { return new AutoValue_ReplicationQueue_ReferenceUpdatedEvent( - projectName, refName, objectId, eventCreatedOn, isDelete); + projectName, refName, objectId, eventCreatedOn, isDelete, isCreate); } static ReferenceUpdatedEvent from(RefUpdateAttribute refUpdateAttribute, long eventCreatedOn) { @@ -831,7 +833,8 @@ refUpdateAttribute.refName, ObjectId.fromString(refUpdateAttribute.newRev), eventCreatedOn, - ZEROS_OBJECTID.equals(refUpdateAttribute.newRev)); + ZEROS_OBJECTID.equals(refUpdateAttribute.newRev), + ZEROS_OBJECTID.equals(refUpdateAttribute.oldRev)); } public abstract String projectName(); @@ -843,6 +846,8 @@ public abstract long eventCreatedOn(); public abstract boolean isDelete(); + + public abstract boolean isCreate(); } @FunctionalInterface
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java index 5b17002..95ba9a9 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/data/BatchApplyObjectData.java
@@ -20,9 +20,24 @@ @AutoValue public abstract class BatchApplyObjectData { - public static BatchApplyObjectData create(String refName, Optional<RevisionData> revisionData) + public static BatchApplyObjectData create( + String refName, Optional<RevisionData> revisionData, boolean isDelete, boolean isCreate) throws IllegalArgumentException { - return new AutoValue_BatchApplyObjectData(refName, revisionData, false); + return new AutoValue_BatchApplyObjectData(refName, revisionData, isDelete, isCreate); + } + + public static BatchApplyObjectData newDeleteRef(String refName) throws IllegalArgumentException { + return create(refName, Optional.empty(), true, false); + } + + public static BatchApplyObjectData newUpdateRef( + String refName, Optional<RevisionData> revisionData) throws IllegalArgumentException { + return create(refName, revisionData, false, false); + } + + public static BatchApplyObjectData newCreateRef( + String refName, Optional<RevisionData> revisionData) throws IllegalArgumentException { + return create(refName, revisionData, false, true); } public abstract String refName(); @@ -31,6 +46,8 @@ public abstract boolean isDelete(); + public abstract boolean isCreate(); + @Override public String toString() { return String.format(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java index 7f0df41..cfff177 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/client/FetchRestApiClientBase.java
@@ -624,7 +624,7 @@ List<BatchApplyObjectData> batchApplyObjects = new ArrayList<>(); batchApplyObjects.add( - BatchApplyObjectData.create(refName, Optional.of(createSampleRevisionData("a")))); + BatchApplyObjectData.newUpdateRef(refName, Optional.of(createSampleRevisionData("a")))); objectUnderTest.callBatchSendObject( Project.nameKey("test_repo"), batchApplyObjects, eventCreatedOn, new URIish(api)); @@ -647,8 +647,8 @@ RevisionData revisionA = createSampleRevisionData("a"); RevisionData revisionB = createSampleRevisionData("b"); String refNameB = "refs/heads/b"; - batchApplyObjects.add(BatchApplyObjectData.create(refName, Optional.of(revisionA))); - batchApplyObjects.add(BatchApplyObjectData.create(refNameB, Optional.of(revisionB))); + batchApplyObjects.add(BatchApplyObjectData.newUpdateRef(refName, Optional.of(revisionA))); + batchApplyObjects.add(BatchApplyObjectData.newUpdateRef(refNameB, Optional.of(revisionB))); objectUnderTest.callBatchSendObject( Project.nameKey("test_repo"), batchApplyObjects, eventCreatedOn, new URIish(api));