Allow async receive-commits to have a thread-local cache

Git receive-commits are executed in a background thread of the
ReceiveCommits pool. The thread-local cache allocated on the
client caller thread isn't used in the execution of the command
making multiple operations (e.g. ACL evaluation, events propagation)
slower because of the missed caching activity.

Release-Notes: Improve caching when merging changes through git push
Change-Id: I34a6e1485294f3156c7f35261fedfc280af1ed43
diff --git a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
index 882f208..fa4ba4c 100644
--- a/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
+++ b/java/com/google/gerrit/server/git/receive/AsyncReceiveCommits.java
@@ -32,6 +32,7 @@
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.UsedAt;
+import com.google.gerrit.server.cache.PerThreadCache;
 import com.google.gerrit.server.config.ConfigUtil;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.ReceiveCommitsExecutor;
@@ -125,7 +126,9 @@
 
     @Override
     public void run() {
-      receiveCommits.processCommands(commands, progress);
+      try (PerThreadCache threadLocalCache = PerThreadCache.create(null)) {
+        receiveCommits.processCommands(commands, progress);
+      }
     }
 
     @Override