Fix eviction of change when not found on ReviewDb
Whenever the lookup of a change on ReviewDb throws NoSuchChangeException
the corresponding index needs to be removed on Lucene as well.
Change-Id: I44695e0551e78f3af66ed0f67d39662c0e85272f
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java
index 77baf15..ff6391a 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServlet.java
@@ -50,20 +50,23 @@
void index(Change.Id id, Operation operation) throws IOException, OrmException {
switch (operation) {
case INDEX:
+ Change change = null;
try (ReviewDb db = schemaFactory.open()) {
- Change change = db.changes().get(id);
- if (change == null) {
- indexer.delete(id);
- return;
+ change = db.changes().get(id);
+ if (change != null) {
+ indexer.index(db, change);
+ logger.debug("Change {} successfully indexed", id);
}
- indexer.index(db, change);
- logger.debug("Change {} successfully indexed", id);
} catch (Exception e) {
if (!isCausedByNoSuchChangeException(e)) {
throw e;
}
logger.debug("Change {} was deleted, aborting forwarded indexing the change.", id.get());
}
+ if (change == null) {
+ indexer.delete(id);
+ logger.debug("Change {} not found, deleted from index", id);
+ }
break;
case DELETE:
indexer.delete(id);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
index 15069b3..2e63fa7 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/IndexChangeRestApiServletTest.java
@@ -103,6 +103,7 @@
public void indexerThrowsNoSuchChangeExceptionTryingToPostChange() throws Exception {
doThrow(new NoSuchChangeException(id)).when(schemaFactory).open();
indexRestApiServlet.doPost(req, rsp);
+ verify(indexer, times(1)).delete(id);
verify(rsp).setStatus(SC_NO_CONTENT);
}
@@ -111,6 +112,7 @@
OrmException e = new OrmException("test", new NoSuchChangeException(id));
doThrow(e).when(schemaFactory).open();
indexRestApiServlet.doPost(req, rsp);
+ verify(indexer, times(1)).delete(id);
verify(rsp).setStatus(SC_NO_CONTENT);
}