Merge branch 'stable-3.4' into stable-3.5

* stable-3.4:
  Check for existence of change's target SHA1 for reindexing
  Remove `@NoHttpd` from IT tests that interact with Gerrit Rest API

Also, disable IndexEventHandlerTest as it is known for causing
stack overflow errors. It can be re-enabled in 3.9 since change
I3276ecf9 removes the executor service altogether.

Change-Id: I39ddd2bb9d1acb6611ddaf6a2b776ac36620e290
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java
index 1a2ebf7..a8ba722 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/index/ChangeCheckerImpl.java
@@ -31,6 +31,7 @@
 import java.sql.Timestamp;
 import java.util.Objects;
 import java.util.Optional;
+import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
 
@@ -107,9 +108,9 @@
           return (computedChangeTs.get() > indexEvent.eventCreatedOn)
               || (computedChangeTs.get() == indexEvent.eventCreatedOn)
                   && (Objects.isNull(indexEvent.targetSha)
-                      || Objects.equals(getBranchTargetSha(), indexEvent.targetSha))
-                  && (Objects.isNull(indexEvent.metaSha)
-                      || Objects.equals(getMetaSha(repo), indexEvent.metaSha));
+                      || repositoryHas(repo, indexEvent.targetSha))
+                  && (Objects.isNull(indexEvent.targetSha)
+                      || repositoryHas(repo, indexEvent.metaSha));
         }
       }
       return true;
@@ -161,6 +162,16 @@
     }
   }
 
+  private boolean repositoryHas(Repository repo, String sha1ToCheck) {
+    try {
+      return repo.parseCommit(ObjectId.fromString(sha1ToCheck)) != null;
+    } catch (IOException e) {
+      log.atWarning().withCause(e).log(
+          "Unable to find SHA1 %s for change %s", sha1ToCheck, changeId);
+      return false;
+    }
+  }
+
   private Optional<Long> computeLastChangeTs() {
     return getChangeNotes().map(this::getTsFromChangeAndDraftComments);
   }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java
index 98cdce5..36c775c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/cache/ProjectListIT.java
@@ -26,7 +26,6 @@
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
-import com.google.gerrit.acceptance.NoHttpd;
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.acceptance.config.GlobalPluginConfig;
@@ -37,7 +36,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-@NoHttpd
 @TestPlugin(
     name = "high-availability",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java
index 11ae77d..e838cb3 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/ProjectListRestApiServletIT.java
@@ -17,14 +17,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
-import com.google.gerrit.acceptance.NoHttpd;
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.restapi.Url;
 import org.junit.Test;
 
-@NoHttpd
 @TestPlugin(
     name = "high-availability",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java
index 0092902..2406443 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/RestForwarderServletModuleIT.java
@@ -17,14 +17,12 @@
 import com.ericsson.gerrit.plugins.highavailability.forwarder.TestEvent;
 import com.google.common.base.Joiner;
 import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
-import com.google.gerrit.acceptance.NoHttpd;
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.server.events.Event;
 import javax.servlet.http.HttpServletResponse;
 import org.junit.Test;
 
-@NoHttpd
 @TestPlugin(
     name = "high-availability",
     sysModule = "com.ericsson.gerrit.plugins.highavailability.Module",
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 578dc17..4793678 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
@@ -60,6 +60,7 @@
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -67,6 +68,7 @@
 import org.mockito.junit.MockitoJUnitRunner;
 
 @RunWith(MockitoJUnitRunner.class)
+@Ignore
 public class IndexEventHandlerTest {
   private static final String PLUGIN_NAME = "high-availability";
   private static final String PROJECT_NAME = "test/project";