Merge branch 'stable-2.16' into stable-3.0

* stable-2.16:
  Add new documentation for the owners-autoassign plugin
  Allow async assignment of reviewers

Change-Id: I9c241886ffdb02c396df04e57e33220a29430683
diff --git a/WORKSPACE b/WORKSPACE
index 7dc7280..5c0cb74 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "56c9f4ed6dbe3c88f793851c88389637f3714a5d",
+    commit = "7472a1104a37d514799100d6556445836e8efe4c",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
index 7ddd6a7..48f55a5 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
@@ -19,6 +19,7 @@
 import static com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace.IGNORE_NONE;
 
 import com.google.common.collect.Sets;
+import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.extensions.annotations.Listen;
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.ChangeApi;
@@ -39,7 +40,6 @@
 import com.google.gerrit.server.patch.PatchListNotAvailableException;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import java.io.IOException;
@@ -56,11 +56,8 @@
   private final GerritApi api;
 
   private final PatchListCache patchListCache;
-
   private final GitRepositoryManager repositoryManager;
-
   private final Accounts accounts;
-
   private final ReviewerManager reviewerManager;
 
   private final OneOffRequestContext oneOffReqCtx;
@@ -106,7 +103,7 @@
   private void handleGitReferenceUpdatedAsUser(Event event, Account.Id updaterAccountId) {
     try (ManualRequestContext ctx = oneOffReqCtx.openAs(updaterAccountId)) {
       handleGitReferenceUpdated(event);
-    } catch (OrmException e) {
+    } catch (StorageException e) {
       logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e);
     }
   }
@@ -114,7 +111,7 @@
   private void handleGitReferenceUpdatedAsServer(Event event) {
     try (ManualRequestContext ctx = oneOffReqCtx.open()) {
       handleGitReferenceUpdated(event);
-    } catch (OrmException e) {
+    } catch (StorageException e) {
       logger.warn("Unable to process event {} on project {}", event, event.getProjectName(), e);
     }
   }
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java
index e22446d..61e51c4 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java
@@ -26,14 +26,12 @@
 import com.google.gerrit.reviewdb.client.Account.Id;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.permissions.ChangePermission;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.query.change.ChangeData;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.util.ArrayList;
@@ -77,7 +75,7 @@
         ReviewInput in = new ReviewInput();
         in.reviewers = new ArrayList<>(reviewers.size());
         for (Account.Id account : reviewers) {
-          if (isVisibleTo(ctx.getReviewDbProvider().get(), changeInfo, account)) {
+          if (isVisibleTo(changeInfo, account)) {
             AddReviewerInput addReviewerInput = new AddReviewerInput();
             addReviewerInput.reviewer = account.toString();
             in.reviewers.add(addReviewerInput);
@@ -90,16 +88,16 @@
         }
         gApi.changes().id(changeInfo.id).current().review(in);
       }
-    } catch (RestApiException | OrmException e) {
+    } catch (RestApiException e) {
       log.error("Couldn't add reviewers to the change", e);
       throw new ReviewerManagerException(e);
     }
   }
 
-  private boolean isVisibleTo(ReviewDb reviewDb, ChangeInfo changeInfo, Id account) {
+  private boolean isVisibleTo(ChangeInfo changeInfo, Id account) {
     ChangeData changeData =
         changeDataFactory.create(
-            reviewDb, new Project.NameKey(changeInfo.project), new Change.Id(changeInfo._number));
+            new Project.NameKey(changeInfo.project), new Change.Id(changeInfo._number));
     return permissionBackend
         .user(userFactory.create(account))
         .change(changeData)
diff --git a/owners-autoassign/src/test/java/com/googlesource/gerrit/owners/common/GitRefListenerIT.java b/owners-autoassign/src/test/java/com/googlesource/gerrit/owners/common/GitRefListenerIT.java
index 88216a7..2a9c406 100644
--- a/owners-autoassign/src/test/java/com/googlesource/gerrit/owners/common/GitRefListenerIT.java
+++ b/owners-autoassign/src/test/java/com/googlesource/gerrit/owners/common/GitRefListenerIT.java
@@ -21,11 +21,9 @@
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.reviewdb.client.RefNames;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.ThreadLocalRequestContext;
-import com.google.gwtorm.server.SchemaFactory;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.owners.common.ReviewerManager;
@@ -39,7 +37,6 @@
 public class GitRefListenerIT extends LightweightPluginDaemonTest {
 
   @Inject GitRefListenerTest gitRefListener;
-  @Inject SchemaFactory<ReviewDb> schemaFactory;
   @Inject ThreadLocalRequestContext requestContext;
 
   String aRefChange = RefNames.REFS_CHANGES + "01/01/01";
@@ -62,7 +59,7 @@
             anOldObjectId,
             aNewObjectId,
             Type.CREATE,
-            admin.id);
+            admin.id());
 
     gitRefListener.onGitReferenceUpdated(refUpdatedEvent);
     assertEquals(0, gitRefListener.getProcessedEvents());
@@ -76,8 +73,7 @@
 
   @Test
   public void shouldRetrieveChangeFromAnonymousContext() throws Exception {
-    try (ManualRequestContext ctx =
-        new ManualRequestContext(new AnonymousUser(), schemaFactory, requestContext)) {
+    try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) {
       gitRefListener.onGitReferenceUpdated(newRefUpdateEvent());
       assertEquals(1, gitRefListener.getProcessedEvents());
     }
@@ -88,8 +84,7 @@
     ReferenceUpdatedEventTest refUpdateWithoutAccountId =
         new ReferenceUpdatedEventTest(
             project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, null);
-    try (ManualRequestContext ctx =
-        new ManualRequestContext(new AnonymousUser(), schemaFactory, requestContext)) {
+    try (ManualRequestContext ctx = new ManualRequestContext(new AnonymousUser(), requestContext)) {
       gitRefListener.onGitReferenceUpdated(refUpdateWithoutAccountId);
       assertEquals(1, gitRefListener.getProcessedEvents());
     }
@@ -97,6 +92,6 @@
 
   private ReferenceUpdatedEventTest newRefUpdateEvent() {
     return new ReferenceUpdatedEventTest(
-        project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, admin.id);
+        project, aRefChange, anOldObjectId, aNewObjectId, Type.CREATE, admin.id());
   }
 }
diff --git a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
index e83269a..b5c1f90 100644
--- a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
@@ -32,7 +32,6 @@
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
-import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import java.io.IOException;
 import java.util.Collections;
@@ -94,7 +93,7 @@
       return groupMembers.listAccounts(group.get().getGroupUUID(), null).stream()
           .map(Account::getId)
           .collect(Collectors.toSet());
-    } catch (NoSuchProjectException | OrmException | IOException e) {
+    } catch (NoSuchProjectException | IOException e) {
       log.error("Unable to list accounts in group " + group, e);
       return Collections.emptySet();
     }
@@ -102,7 +101,7 @@
 
   private Set<Account.Id> findUserOrEmail(String nameOrEmail) {
     try (ManualRequestContext ctx = oneOffRequestContext.open()) {
-      Set<Id> accountIds = resolver.findAll(nameOrEmail);
+      Set<Id> accountIds = resolver.resolve(nameOrEmail).asIdSet();
       if (accountIds.isEmpty()) {
         log.warn("User '{}' does not resolve to any account.", nameOrEmail);
         return accountIds;
@@ -133,7 +132,7 @@
       }
 
       return accountIds;
-    } catch (OrmException | IOException | ConfigInvalidException e) {
+    } catch (IOException | ConfigInvalidException e) {
       log.error("Error trying to resolve user " + nameOrEmail, e);
       return Collections.emptySet();
     }
diff --git a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
index 2f5c5c0..dcdd9f7 100644
--- a/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
@@ -43,7 +43,7 @@
       final OwnersConfig ret = new OwnersConfig();
       JsonNode jsonNode = new ObjectMapper(new YAMLFactory()).readValue(yamlBytes, JsonNode.class);
       Boolean inherited =
-          Optional.ofNullable(jsonNode.get("inherited")).map(JsonNode::asBoolean).orElse(false);
+          Optional.ofNullable(jsonNode.get("inherited")).map(JsonNode::asBoolean).orElse(true);
       ret.setInherited(inherited);
       addClassicMatcher(jsonNode, ret);
       addMatchers(jsonNode, ret);