More reliably get futures returned by ChangeIndexer

Convert futures to be CheckedFuture<?, IOException>s so calling
checkedGet() does not result in too many extra exception types. Rename
the methods to {index,delete}Async so it is clear that these just
launch a future. For all usages, make sure checkedGet() is invoked on
the future, either immediately or after another block of non-Change-
mutating code.

Change-Id: I18b55b0b03b2be0a70995a0b08a4fc3193db96e3
This commit is contained in:
Dave Borowitz
2013-10-01 19:43:39 -07:00
parent 7e057414e2
commit c3b436de36
17 changed files with 187 additions and 80 deletions

View File

@@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.gerrit.common.ChangeHooks;
import com.google.gerrit.common.data.GroupDescription;
import com.google.gerrit.common.errors.EmailException;
@@ -151,7 +152,7 @@ public class PostReviewers implements RestModifyView<ChangeResource, Input> {
}
private PostResult putAccount(ReviewerResource rsrc) throws OrmException,
EmailException {
EmailException, IOException {
PostResult result = new PostResult();
addReviewers(rsrc, result, ImmutableSet.of(rsrc.getUser()));
return result;
@@ -219,7 +220,8 @@ public class PostReviewers implements RestModifyView<ChangeResource, Input> {
}
private void addReviewers(ChangeResource rsrc, PostResult result,
Set<IdentifiedUser> reviewers) throws OrmException, EmailException {
Set<IdentifiedUser> reviewers)
throws OrmException, EmailException, IOException {
if (reviewers.isEmpty()) {
result.reviewers = ImmutableList.of();
return;
@@ -259,9 +261,10 @@ public class PostReviewers implements RestModifyView<ChangeResource, Input> {
db.rollback();
}
indexer.index(rsrc.getChange());
CheckedFuture<?, IOException> indexFuture = indexer.indexAsync(rsrc.getChange());
accountLoaderFactory.create(true).fill(result.reviewers);
postAdd(rsrc.getChange(), result);
indexFuture.checkedGet();
}
private void postAdd(Change change, PostResult result)