Adapt to project-specific deletion of changes from index Change-Id: I0e519ecd232651f424a0d3a32df2db7483a1ff1f
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java index dc3e8ef..8e29fcf 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/NoForwarder.java
@@ -50,7 +50,8 @@ } @Override - public CompletableFuture<Result> deleteChangeFromIndex(int changeId, IndexEvent indexEvent) { + public CompletableFuture<Result> deleteChangeFromIndex( + String projectName, int changeId, IndexEvent indexEvent) { return recoverableFailure(EventType.INDEX_CHANGE_DELETION); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java index 75a9681..23a568e 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/IndexTs.java
@@ -146,7 +146,7 @@ } @Override - public void onChangeDeleted(int id) { + public void onChangeDeleted(String projectName, int id) { currCtx.onlyWithContext((ctx) -> update(IndexName.CHANGE, LocalDateTime.now())); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java index 80aa836..5a2c14d 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandler.java
@@ -105,7 +105,7 @@ } catch (Exception e) { if (isCausedByNoSuchChangeException(e)) { - indexer.delete(parseChangeId(id)); + indexer.delete(parseProject(id), parseChangeId(id)); log.atWarning().withCause(e).log("Error trying to index Change %s. Deleted from index", id); return true; } @@ -122,8 +122,8 @@ @Override protected CompletableFuture<Boolean> doDelete(String id, Optional<IndexEvent> indexEvent) throws IOException { + Project.NameKey projectName = parseProject(id); if (ALL_CHANGES_FOR_PROJECT.equals(extractChangeId(id))) { - Project.NameKey projectName = parseProject(id); try { indexer.deleteAllForProject(projectName); log.atFine().log("All %s changes successfully deleted from index", projectName.get()); @@ -134,7 +134,7 @@ } } else { try { - indexer.delete(parseChangeId(id)); + indexer.delete(projectName, parseChangeId(id)); log.atFine().log("Change %s successfully deleted from index", id); } catch (RuntimeException e) { log.atFine().log("Change %s could not be deleted from index", id);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java index 3bf08b4..088f0fa 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/Forwarder.java
@@ -68,7 +68,8 @@ * @return {@link CompletableFuture} of true if successful, otherwise {@link CompletableFuture} of * false. */ - CompletableFuture<Result> deleteChangeFromIndex(int changeId, IndexEvent indexEvent); + CompletableFuture<Result> deleteChangeFromIndex( + String projectName, int changeId, IndexEvent indexEvent); /** * Forward a group indexing event to the other primary.
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java index 990ae8e..df79eca 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/commands/IndexChange.java
@@ -58,10 +58,6 @@ public static class Delete extends IndexChange { static final EventType TYPE = EventType.INDEX_CHANGE_DELETION; - public Delete(int id, Instant eventCreatedOn) { - this("", id, eventCreatedOn); - } - public Delete(String projectName, int id, Instant eventCreatedOn) { super(TYPE, projectName, id, false, eventCreatedOn); }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java index 1c004f7..225738f 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/jgroups/JGroupsForwarder.java
@@ -97,8 +97,9 @@ } @Override - public CompletableFuture<Result> deleteChangeFromIndex(int changeId, IndexEvent indexEvent) { - return execute(new IndexChange.Delete(changeId, indexEvent.eventCreatedOn)); + public CompletableFuture<Result> deleteChangeFromIndex( + String projectName, int changeId, IndexEvent indexEvent) { + return execute(new IndexChange.Delete(projectName, changeId, indexEvent.eventCreatedOn)); } @Override
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java index ea783a6..06df702 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarder.java
@@ -120,13 +120,14 @@ } @Override - public CompletableFuture<Result> deleteChangeFromIndex(final int changeId, IndexEvent event) { + public CompletableFuture<Result> deleteChangeFromIndex( + String projectName, final int changeId, IndexEvent event) { return execute( RequestMethod.DELETE, EventType.INDEX_CHANGE_DELETION, "delete change", "index/change", - buildIndexEndpoint(changeId), + buildIndexEndpoint(projectName, changeId), event, event.eventCreatedOn); } @@ -143,10 +144,6 @@ event.eventCreatedOn); } - private String buildIndexEndpoint(int changeId) { - return buildIndexEndpoint("", changeId); - } - private String buildIndexEndpoint(String projectName, int changeId) { String escapedProjectName = Url.encode(projectName); return escapedProjectName + '~' + changeId;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java index 0b1ff7f..d69bb42 100644 --- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java +++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandler.java
@@ -94,9 +94,9 @@ } @Override - public void onChangeDeleted(int id) { + public void onChangeDeleted(String projectName, int id) { if (!Context.isForwardedEvent()) { - forwarder.get().deleteChangeFromIndex(id, new IndexEvent()); + forwarder.get().deleteChangeFromIndex(projectName, id, new IndexEvent()); } }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java index 6a3a348..ea936bf 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/ForwardedIndexChangeHandlerTest.java
@@ -64,7 +64,6 @@ @Mock private ChangeIndexer indexerMock; @Mock private ChangeNotes changeNotes; - @Mock private Project.NameKey projectName; @Mock(answer = RETURNS_DEEP_STUBS) private Configuration configMock; @@ -76,10 +75,12 @@ @Mock private ForwardedIndexExecutorProvider indexExecutorProviderMock; private ForwardedIndexChangeHandler handler; private Change.Id id; + private Project.NameKey projectName; @Before public void setUp() throws Exception { id = Change.id(TEST_CHANGE_NUMBER); + projectName = Project.nameKey(TEST_PROJECT); when(configMock.index().threadPoolSize()).thenReturn(4); when(configMock.index().maxTries()).thenReturn(3); when(configMock.index().retryInterval()).thenReturn(Duration.ofMillis(10)); @@ -110,7 +111,7 @@ @Test public void changeIsDeletedFromIndex() throws Exception { handler.index(TEST_CHANGE_ID, Operation.DELETE, Optional.empty()).get(10, SECONDS); - verify(indexerMock, times(1)).delete(id); + verify(indexerMock, times(1)).delete(projectName, id); } @Test @@ -125,7 +126,7 @@ public void changeToIndexDoesNotExist() throws Exception { setupChangeAccessRelatedMocks(CHANGE_DOES_NOT_EXIST, CHANGE_OUTDATED); handler.index(TEST_CHANGE_ID, Operation.INDEX, Optional.empty()).get(10, SECONDS); - verify(indexerMock, times(0)).delete(id); + verify(indexerMock, times(0)).delete(projectName, id); } @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java index 78d21ef..88318bc 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderTest.java
@@ -82,8 +82,6 @@ PLUGIN_NAME, "index/change/batch", PROJECT_NAME_URL_END + "~" + CHANGE_NUMBER); - private static final String DELETE_CHANGE_ENDPOINT = - Joiner.on("/").join(URL, PLUGINS, PLUGIN_NAME, "index/change", "~" + CHANGE_NUMBER); private static final String DELETE_ALL_CHANGES_ENDPOINT = Joiner.on("/") .join( @@ -283,11 +281,11 @@ @Test public void testChangeDeletedFromIndexOK() throws Exception { - when(httpSessionMock.delete(eq(DELETE_CHANGE_ENDPOINT), any())) + when(httpSessionMock.delete(eq(INDEX_CHANGE_ENDPOINT), any())) .thenReturn(new HttpResult(SUCCESSFUL, EMPTY_MSG)); assertThat( forwarder - .deleteChangeFromIndex(CHANGE_NUMBER, new IndexEvent()) + .deleteChangeFromIndex(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent()) .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS) .result()) .isTrue(); @@ -307,11 +305,11 @@ @Test public void testChangeDeletedFromIndexFailed() throws Exception { - when(httpSessionMock.delete(eq(DELETE_CHANGE_ENDPOINT), any())) + when(httpSessionMock.delete(eq(INDEX_CHANGE_ENDPOINT), any())) .thenReturn(new HttpResult(FAILED, EMPTY_MSG)); assertThat( forwarder - .deleteChangeFromIndex(CHANGE_NUMBER, new IndexEvent()) + .deleteChangeFromIndex(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent()) .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS) .result()) .isFalse(); @@ -319,10 +317,10 @@ @Test public void testChangeDeletedFromThrowsException() throws Exception { - when(httpSessionMock.delete(eq(DELETE_CHANGE_ENDPOINT), any())).thenThrow(IOException.class); + when(httpSessionMock.delete(eq(INDEX_CHANGE_ENDPOINT), any())).thenThrow(IOException.class); assertThat( forwarder - .deleteChangeFromIndex(CHANGE_NUMBER, new IndexEvent()) + .deleteChangeFromIndex(PROJECT_NAME, CHANGE_NUMBER, new IndexEvent()) .get(TEST_TIMEOUT, TEST_TIMEOUT_UNITS) .result()) .isFalse();
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java index 22c2eb0..95e627b 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/index/IndexEventHandlerTest.java
@@ -82,7 +82,7 @@ when(forwarder.indexAccount(eq(ACCOUNT_ID), any())) .thenReturn( CompletableFuture.completedFuture(new Result(EventType.INDEX_ACCOUNT_UPDATE, true))); - when(forwarder.deleteChangeFromIndex(eq(CHANGE_ID), any())) + when(forwarder.deleteChangeFromIndex(eq(PROJECT_NAME), eq(CHANGE_ID), any())) .thenReturn( CompletableFuture.completedFuture(new Result(EventType.INDEX_CHANGE_DELETION, true))); when(forwarder.indexGroup(eq(UUID), any())) @@ -141,8 +141,8 @@ @Test public void shouldDeleteFromIndexInRemoteOnChangeDeletedEvent() throws Exception { - indexEventHandler.onChangeDeleted(changeId.get()); - verify(forwarder).deleteChangeFromIndex(eq(CHANGE_ID), any()); + indexEventHandler.onChangeDeleted(PROJECT_NAME, changeId.get()); + verify(forwarder).deleteChangeFromIndex(eq(PROJECT_NAME), eq(CHANGE_ID), any()); verifyNoInteractions(changeCheckerMock); // Deleted changes should not be checked against NoteDb } @@ -156,7 +156,7 @@ public void shouldNotCallRemoteWhenChangeEventIsForwarded() throws Exception { Context.setForwardedEvent(true); indexEventHandler.onChangeIndexed(PROJECT_NAME, changeId.get()); - indexEventHandler.onChangeDeleted(changeId.get()); + indexEventHandler.onChangeDeleted(PROJECT_NAME, changeId.get()); Context.unsetForwardedEvent(); verifyNoInteractions(forwarder); }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProviderTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProviderTest.java index a098be6..1e64918 100644 --- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProviderTest.java +++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/peers/jgroups/JGroupsPeerInfoProviderTest.java
@@ -169,7 +169,7 @@ public void testStop() throws Exception { jGroupsPeerInfoProvider.addPeer(peerAddress, peerInfo); jGroupsPeerInfoProvider.stop(); - assertThat(jGroupsPeerInfoProvider.getPeers().isEmpty()); + assertThat(jGroupsPeerInfoProvider.getPeers()).isEmpty(); Set<PeerInfo> testPeerInfoSet = jGroupsPeerInfoProvider.get(); assertThat(testPeerInfoSet).isEmpty(); }