Merge branch 'stable-3.2' into stable-3.3

* stable-3.2:
  Handle missing unknown during loading of change notes
  IndexEventHandler: Fix FloggerFormatString warning
  GroupReindexRunnable: Fix FloggerFormatString warning
  RestForwarder: Add missing override annotation
  AbstractIndexRestApiServlet: Fix resource leak warning
  Upgrade bazlets to latest stable-3.1 to build with 3.1.12 API

Change-Id: Icc50364daa7cb00d0775f2bae485aa51a317e117
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java
index fbb0a8f..c21ccae 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java
@@ -109,7 +109,7 @@
                 .max(Comparator.naturalOrder());
 
         if (groupLastTs.isPresent() && groupLastTs.get().after(sinceTs)) {
-          log.atInfo().log("Index {}/{}/{}", g.getUUID(), g.getName(), groupLastTs.get());
+          log.atInfo().log("Index %s/%s/%s", g.getUUID(), g.getName(), groupLastTs.get());
           indexer.index(g.getUUID(), Operation.INDEX, Optional.empty());
           return groupLastTs;
         }
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 064783c..91e5a02 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
@@ -21,6 +21,7 @@
 import com.ericsson.gerrit.plugins.highavailability.index.ForwardedIndexExecutor;
 import com.google.common.base.Splitter;
 import com.google.gerrit.entities.Change;
+import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.server.index.change.ChangeIndexer;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.project.NoSuchChangeException;
@@ -74,7 +75,13 @@
       throws IOException {
     try {
       ChangeChecker checker = changeCheckerFactory.create(id);
-      Optional<ChangeNotes> changeNotes = checker.getChangeNotes();
+      Optional<ChangeNotes> changeNotes;
+      try {
+        changeNotes = checker.getChangeNotes();
+      } catch (StorageException e) {
+        log.atWarning().withCause(e).log("Change %s: cannot load change notes", id);
+        changeNotes = Optional.empty();
+      }
       if (changeNotes.isPresent()) {
         ChangeNotes notes = changeNotes.get();
         reindex(notes);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
index 4456064..f9ec516 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/AbstractIndexRestApiServlet.java
@@ -26,6 +26,7 @@
 import com.google.gson.Gson;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.Reader;
 import java.util.Optional;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -99,9 +100,9 @@
   protected Optional<IndexEvent> parseBody(HttpServletRequest req) throws IOException {
     String contentType = req.getContentType();
     if (contentType != null && contentType.contains("application/json")) {
-      return Optional.ofNullable(
-          gson.fromJson(
-              new InputStreamReader(req.getInputStream(), Charsets.UTF_8), IndexEvent.class));
+      try (Reader reader = new InputStreamReader(req.getInputStream(), Charsets.UTF_8)) {
+        return Optional.ofNullable(gson.fromJson(reader, IndexEvent.class));
+      }
     }
     return Optional.empty();
   }
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 ea4ad10..c0eb6ae 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
@@ -83,6 +83,7 @@
         event);
   }
 
+  @Override
   public CompletableFuture<Boolean> batchIndexChange(
       String projectName, int changeId, IndexEvent event) {
     return execute(
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 73e842f..4f77508 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
@@ -116,7 +116,7 @@
                   }
                 });
       } catch (Exception e) {
-        log.atWarning().withCause(e).log("Unable to create task to reindex change {}", changeId);
+        log.atWarning().withCause(e).log("Unable to create task to reindex change %s", changeId);
       }
     }
   }