Use persistent cache provided by libModule for offline reindex

Gerrit offline reindexing ignores persistent cache implementation
provided as libModule and always generates caches using H2
implementation. This fix allows to use a different persistent cache
backend.

Using different cache implementation during the offline reindexing
and at runtime causes situation when Gerrit starts without any
precomputed caches which significantly impacts overall performance.
On the other hand offline reindexing cannot reuse existing caches
which impacts reindexing performance.

Bug: Issue 13464
Change-Id: I36305282e8ea583dfb37f629e41d219762c3b4a3
diff --git a/java/com/google/gerrit/pgm/Reindex.java b/java/com/google/gerrit/pgm/Reindex.java
index 966801f..c8d69f1c 100644
--- a/java/com/google/gerrit/pgm/Reindex.java
+++ b/java/com/google/gerrit/pgm/Reindex.java
@@ -29,6 +29,10 @@
 import com.google.gerrit.lucene.LuceneIndexModule;
 import com.google.gerrit.pgm.util.BatchProgramModule;
 import com.google.gerrit.pgm.util.SiteProgram;
+import com.google.gerrit.server.LibModuleLoader;
+import com.google.gerrit.server.LibModuleType;
+import com.google.gerrit.server.ModuleOverloader;
+import com.google.gerrit.server.cache.h2.H2CacheModule;
 import com.google.gerrit.server.change.ChangeResource;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.index.IndexModule;
@@ -159,6 +163,7 @@
     }
     modules.add(indexModule);
     modules.add(new BatchProgramModule());
+    modules.add(new H2CacheModule());
     modules.add(
         new FactoryModule() {
           @Override
@@ -167,7 +172,9 @@
           }
         });
 
-    return dbInjector.createChildInjector(modules);
+    return dbInjector.createChildInjector(
+        ModuleOverloader.override(
+            modules, LibModuleLoader.loadModules(dbInjector, LibModuleType.SYS_MODULE)));
   }
 
   private void overrideConfig() {
diff --git a/java/com/google/gerrit/pgm/util/BatchProgramModule.java b/java/com/google/gerrit/pgm/util/BatchProgramModule.java
index 35ba3d0..e9c0136 100644
--- a/java/com/google/gerrit/pgm/util/BatchProgramModule.java
+++ b/java/com/google/gerrit/pgm/util/BatchProgramModule.java
@@ -38,7 +38,6 @@
 import com.google.gerrit.server.account.ServiceUserClassifierImpl;
 import com.google.gerrit.server.account.externalids.ExternalIdModule;
 import com.google.gerrit.server.cache.CacheRemovalListener;
-import com.google.gerrit.server.cache.h2.H2CacheModule;
 import com.google.gerrit.server.cache.mem.DefaultMemoryCacheModule;
 import com.google.gerrit.server.change.ChangeAttributeFactory;
 import com.google.gerrit.server.change.ChangeJson;
@@ -153,7 +152,7 @@
     install(new BatchGitModule());
     install(new DefaultPermissionBackendModule());
     install(new DefaultMemoryCacheModule());
-    install(new H2CacheModule());
+
     install(new ExternalIdModule());
     install(new GroupModule());
     install(new NoteDbModule());