findowners: Fix concurrency issue in Config class

The Config class seems to be used in multi-threaded contexts (e.g. via
Cache -> OwnersDb) but is not hardened for multi-threading. We noticed
errors in our logs complaining about concurrent modifications of
projectConfigMap when computeIfAbsent() is called on it. Fix that
immediate issue by switching to a concurrent type for the map.

Change-Id: I1b3f2ae7211787974440444c12c2c703e9d39d9b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/Config.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/Config.java
index 1ae9f93..e3fab58 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/Config.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/Config.java
@@ -25,8 +25,8 @@
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.project.ProjectState;
 import com.google.gerrit.server.query.change.ChangeData;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /** find-owners configuration parameters */
 class Config {
@@ -80,7 +80,7 @@
     this.accountCache = accountCache;
     this.patchListCache = patchListCache;
     this.emails = emails;
-    projectConfigMap = new HashMap<>();
+    projectConfigMap = new ConcurrentHashMap<>();
     if (configFactory == null && config == null) { // When called from integration tests.
       gerritConfig = null;
       return;