From b5aea604d66085b0636735bcbd679f0efd03e12f Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Fri, 10 Mar 2017 14:02:37 -0500 Subject: [PATCH] Move BatchUpdate *Op and Listener to new files Also make them interfaces, which is a more natural fit. We now have default method implementations, so an abstract class is not required here. Since we have new public interfaces, document them more thoroughly. Change-Id: Ida16b36cbecffffd9170ecdeaf130b4c9294cebb --- .../acceptance/api/change/ChangeIT.java | 3 +- .../rest/change/AbstractSubmit.java | 3 +- .../acceptance/rest/change/DraftChangeIT.java | 5 +- .../server/change/ConsistencyCheckerIT.java | 5 +- .../server/change/GetRelatedIT.java | 3 +- .../server/notedb/ChangeRebuilderIT.java | 5 +- .../gerrit/server/change/ChangeInserter.java | 4 +- .../server/change/CherryPickChange.java | 3 +- .../server/change/ConsistencyChecker.java | 9 ++- .../server/change/CreateDraftComment.java | 3 +- .../gerrit/server/change/DeleteAssignee.java | 3 +- .../gerrit/server/change/DeleteChangeOp.java | 4 +- .../server/change/DeleteDraftComment.java | 3 +- .../server/change/DeleteDraftPatchSet.java | 3 +- .../gerrit/server/change/DeleteReviewer.java | 3 +- .../gerrit/server/change/DeleteVote.java | 3 +- .../com/google/gerrit/server/change/Move.java | 3 +- .../server/change/PatchSetInserter.java | 4 +- .../gerrit/server/change/PostReview.java | 3 +- .../gerrit/server/change/PostReviewers.java | 3 +- .../server/change/PublishDraftPatchSet.java | 3 +- .../gerrit/server/change/PutDescription.java | 3 +- .../gerrit/server/change/PutDraftComment.java | 3 +- .../google/gerrit/server/change/PutTopic.java | 3 +- .../gerrit/server/change/RebaseChangeOp.java | 4 +- .../google/gerrit/server/change/Restore.java | 3 +- .../google/gerrit/server/change/Revert.java | 5 +- .../gerrit/server/change/SetAssigneeOp.java | 4 +- .../gerrit/server/change/SetHashtagsOp.java | 4 +- .../gerrit/server/edit/ChangeEditUtil.java | 3 +- .../google/gerrit/server/git/AbandonOp.java | 4 +- .../gerrit/server/git/ChangeProgressOp.java | 4 +- .../com/google/gerrit/server/git/MergeOp.java | 3 +- .../gerrit/server/git/MergedByPushOp.java | 4 +- .../gerrit/server/git/ReceiveCommits.java | 9 ++- .../google/gerrit/server/git/ReplaceOp.java | 4 +- .../google/gerrit/server/git/SubmoduleOp.java | 7 +- .../git/strategy/SubmitStrategyListener.java | 4 +- .../server/git/strategy/SubmitStrategyOp.java | 4 +- .../server/mail/receive/MailProcessor.java | 3 +- .../server/notedb/PrimaryStorageMigrator.java | 3 +- .../gerrit/server/update/BatchUpdate.java | 80 ++++--------------- .../server/update/BatchUpdateListener.java | 34 ++++++++ .../gerrit/server/update/BatchUpdateOp.java | 38 +++++++++ .../gerrit/server/update/ChangeContext.java | 2 +- .../google/gerrit/server/update/Context.java | 2 +- .../gerrit/server/update/InsertChangeOp.java | 31 +++++++ .../gerrit/server/update/RepoContext.java | 2 +- .../gerrit/server/update/RepoOnlyOp.java | 39 +++++++++ .../gerrit/server/update/BatchUpdateTest.java | 1 - 50 files changed, 254 insertions(+), 134 deletions(-) create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateListener.java create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateOp.java create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/update/InsertChangeOp.java create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/update/RepoOnlyOp.java diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java index de2204e187..3cc7a45f2e 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java @@ -109,6 +109,7 @@ import com.google.gerrit.server.notedb.NoteDbChangeState.PrimaryStorage; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.Util; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.testutil.FakeEmailSender.Message; import com.google.gerrit.testutil.TestTimeUtil; @@ -2510,7 +2511,7 @@ public class ChangeIT extends AbstractDaemonTest { assertThat(changeStatus).isEqualTo(newStatus.asChangeStatus()); } - private static class ChangeStatusUpdateOp extends BatchUpdate.Op { + private static class ChangeStatusUpdateOp implements BatchUpdateOp { private final Change.Status newStatus; ChangeStatusUpdateOp(Change.Status newStatus) { diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java index f29e18c502..f7bc3e9241 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java @@ -70,6 +70,7 @@ import com.google.gerrit.server.git.validators.OnSubmitValidationListener; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.project.Util; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.validators.ValidationException; import com.google.gerrit.testutil.ConfigSuite; @@ -744,7 +745,7 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { updateFactory.create(db, project, userFactory.create(admin.id), TimeUtil.nowTs())) { bu.addOp( change.getChange().getId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws OrmException { ctx.getChange().setStatus(Change.Status.NEW); diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/DraftChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/DraftChangeIT.java index 65ed6e3700..eefd64a9fb 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/DraftChangeIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/DraftChangeIT.java @@ -42,6 +42,7 @@ import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; import com.google.gerrit.server.notedb.PatchSetState; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.testutil.ConfigSuite; import com.google.inject.Inject; @@ -276,7 +277,7 @@ public class DraftChangeIT extends AbstractDaemonTest { return revisionInfos.stream().map(revisionInfo -> revisionInfo.draft).collect(toList()); } - private class MarkChangeAsDraftUpdateOp extends BatchUpdate.Op { + private class MarkChangeAsDraftUpdateOp implements BatchUpdateOp { @Override public boolean updateChange(ChangeContext ctx) throws Exception { Change change = ctx.getChange(); @@ -292,7 +293,7 @@ public class DraftChangeIT extends AbstractDaemonTest { } } - private class DraftStatusOfPatchSetsUpdateOp extends BatchUpdate.Op { + private class DraftStatusOfPatchSetsUpdateOp implements BatchUpdateOp { private final boolean draftStatus; DraftStatusOfPatchSetsUpdateOp(boolean draftStatus) { diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java index 29125966ad..e0346b30a5 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/ConsistencyCheckerIT.java @@ -50,6 +50,7 @@ import com.google.gerrit.server.notedb.ChangeNoteUtil; import com.google.gerrit.server.notedb.NoteDbChangeState.PrimaryStorage; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.RepoContext; import com.google.gerrit.testutil.InMemoryRepositoryManager; @@ -360,7 +361,7 @@ public class ConsistencyCheckerIT extends AbstractDaemonTest { try (BatchUpdate bu = newUpdate(adminId)) { bu.addOp( ctl.getId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws OrmException { ctx.getChange().setStatus(Change.Status.MERGED); @@ -916,7 +917,7 @@ public class ConsistencyCheckerIT extends AbstractDaemonTest { try (BatchUpdate bu = newUpdate(adminId)) { bu.addOp( ctl.getId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public void updateRepo(RepoContext ctx) throws IOException { ctx.addRefUpdate(new ReceiveCommand(oldId, newId, dest)); diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java index f8d1ce8a6c..8d9885cee6 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/change/GetRelatedIT.java @@ -36,6 +36,7 @@ import com.google.gerrit.server.change.GetRelated.ChangeAndCommit; import com.google.gerrit.server.change.GetRelated.RelatedInfo; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.testutil.TestTimeUtil; import com.google.gwtorm.server.OrmException; @@ -580,7 +581,7 @@ public class GetRelatedIT extends AbstractDaemonTest { try (BatchUpdate bu = updateFactory.create(db, project, user(user), TimeUtil.nowTs())) { bu.addOp( psId.getParentKey(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws OrmException { PatchSet ps = psUtil.get(ctx.getDb(), ctx.getNotes(), psId); diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/ChangeRebuilderIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/ChangeRebuilderIT.java index a8d65abb4b..9d15daf118 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/ChangeRebuilderIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/notedb/ChangeRebuilderIT.java @@ -78,6 +78,7 @@ import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException; import com.google.gerrit.server.project.Util; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gerrit.testutil.ConfigSuite; @@ -455,7 +456,7 @@ public class ChangeRebuilderIT extends AbstractDaemonTest { db, project, identifiedUserFactory.create(user.getId()), TimeUtil.nowTs())) { bu.addOp( id, - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws OrmException { PatchSet.Id psId = ctx.getChange().currentPatchSetId(); @@ -1147,7 +1148,7 @@ public class ChangeRebuilderIT extends AbstractDaemonTest { db, project, identifiedUserFactory.create(user.getId()), TimeUtil.nowTs())) { bu.addOp( id, - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws PatchSetInfoNotAvailableException { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java index d8821058dc..da340643c4 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java @@ -57,9 +57,9 @@ import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectControl; import com.google.gerrit.server.project.RefControl; import com.google.gerrit.server.ssh.NoSshInfo; -import com.google.gerrit.server.update.BatchUpdate; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; +import com.google.gerrit.server.update.InsertChangeOp; import com.google.gerrit.server.update.RepoContext; import com.google.gerrit.server.util.RequestScopePropagator; import com.google.gwtorm.server.OrmException; @@ -80,7 +80,7 @@ import org.eclipse.jgit.util.ChangeIdUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ChangeInserter extends BatchUpdate.InsertChangeOp { +public class ChangeInserter implements InsertChangeOp { public interface Factory { ChangeInserter create(Change.Id cid, RevCommit rc, String refName); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java index ca66228e6e..1e5aa453fd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java @@ -48,6 +48,7 @@ import com.google.gerrit.server.project.RefControl; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -279,7 +280,7 @@ public class CherryPickChange { return changeId; } - private static class AddMessageToSourceChangeOp extends BatchUpdate.Op { + private static class AddMessageToSourceChangeOp implements BatchUpdateOp { private final ChangeMessagesUtil cmUtil; private final PatchSet.Id psId; private final String destBranch; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ConsistencyChecker.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ConsistencyChecker.java index 80e64d349c..41845e3422 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ConsistencyChecker.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ConsistencyChecker.java @@ -51,6 +51,7 @@ import com.google.gerrit.server.patch.PatchSetInfoFactory; import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.RepoContext; import com.google.gerrit.server.update.UpdateException; @@ -498,7 +499,7 @@ public class ConsistencyChecker { // PatchSetInserter will reinsert the same ref, making it a no-op. bu.addOp( ctl.getId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public void updateRepo(RepoContext ctx) throws IOException { ctx.addRefUpdate( @@ -536,7 +537,7 @@ public class ConsistencyChecker { } } - private static class FixMergedOp extends BatchUpdate.Op { + private static class FixMergedOp implements BatchUpdateOp { private final ProblemInfo p; private FixMergedOp(ProblemInfo p) { @@ -632,7 +633,7 @@ public class ConsistencyChecker { } } - private class DeletePatchSetFromDbOp extends BatchUpdate.Op { + private class DeletePatchSetFromDbOp implements BatchUpdateOp { private final ProblemInfo p; private final PatchSet.Id psId; @@ -670,7 +671,7 @@ public class ConsistencyChecker { } } - private class UpdateCurrentPatchSetOp extends BatchUpdate.Op { + private class UpdateCurrentPatchSetOp implements BatchUpdateOp { private final Set toDelete; private UpdateCurrentPatchSetOp(List deleteOps) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraftComment.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraftComment.java index 3605e4ba6e..5032e573eb 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraftComment.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CreateDraftComment.java @@ -35,6 +35,7 @@ import com.google.gerrit.server.CommentsUtil; import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -91,7 +92,7 @@ public class CreateDraftComment implements RestModifyView { } } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private Change change; private Account deletedAssignee; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteChangeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteChangeOp.java index 81827fcc4e..9d819b17dc 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteChangeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteChangeOp.java @@ -29,7 +29,7 @@ import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.StarredChangesUtil; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.project.NoSuchChangeException; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.BatchUpdateReviewDb; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Order; @@ -47,7 +47,7 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.ReceiveCommand; -class DeleteChangeOp extends BatchUpdate.Op { +class DeleteChangeOp implements BatchUpdateOp { static boolean allowDrafts(Config cfg) { return cfg.getBoolean("change", "allowDrafts", true); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteDraftComment.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteDraftComment.java index d1e31c0d20..77872600a5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteDraftComment.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteDraftComment.java @@ -30,6 +30,7 @@ import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.change.DeleteDraftComment.Input; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -79,7 +80,7 @@ public class DeleteDraftComment implements RestModifyView patchSetsBeforeDeletion; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java index 47a49c3548..1485d03952 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/DeleteReviewer.java @@ -43,6 +43,7 @@ import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.notedb.NoteDbChangeState.PrimaryStorage; import com.google.gerrit.server.notedb.NotesMigration; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.BatchUpdateReviewDb; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; @@ -125,7 +126,7 @@ public class DeleteReviewer implements RestModifyView return Response.none(); } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final Account.Id accountId; private final String label; private final DeleteVoteInput input; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java index 86b60be0ae..fb6ae0bcc7 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Move.java @@ -39,6 +39,7 @@ import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -99,7 +100,7 @@ public class Move implements RestModifyView { return json.noOptions().format(req.getChange()); } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final MoveInput input; private Change change; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java index 826d9b99b0..7cf62a00b4 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PatchSetInserter.java @@ -45,7 +45,7 @@ import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.patch.PatchSetInfoFactory; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.ssh.NoSshInfo; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.RepoContext; @@ -61,7 +61,7 @@ import org.eclipse.jgit.transport.ReceiveCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PatchSetInserter extends BatchUpdate.Op { +public class PatchSetInserter implements BatchUpdateOp { private static final Logger log = LoggerFactory.getLogger(PatchSetInserter.class); public interface Factory { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java index 70daa93b60..c0b7bac8b2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReview.java @@ -93,6 +93,7 @@ import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.UpdateException; @@ -676,7 +677,7 @@ public class PostReview implements RestModifyView abstract Comment.Range range(); } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final PatchSet.Id psId; private final ReviewInput in; private final ListMultimap accountsToNotify; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java index ff00b79899..7031d51dfb 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java @@ -59,6 +59,7 @@ import com.google.gerrit.server.notedb.NotesMigration; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.UpdateException; @@ -359,7 +360,7 @@ public class PostReviewers implements RestModifyView reviewers; final ReviewerState state; final NotifyHandling notify; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java index 1b071f95be..4cbeaf63c9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PublishDraftPatchSet.java @@ -46,6 +46,7 @@ import com.google.gerrit.server.mail.send.ReplacePatchSetSender; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.patch.PatchSetInfoFactory; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.UpdateException; @@ -149,7 +150,7 @@ public class PublishDraftPatchSet } } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final PatchSet.Id psId; private PatchSet patchSet; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDescription.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDescription.java index 4b3498ab04..3c2633e91b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDescription.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDescription.java @@ -30,6 +30,7 @@ import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -81,7 +82,7 @@ public class PutDescription : Response.ok(op.newDescription); } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final Input input; private final PatchSet.Id psId; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraftComment.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraftComment.java index f2f64120fc..b289da861f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraftComment.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PutDraftComment.java @@ -34,6 +34,7 @@ import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -100,7 +101,7 @@ public class PutDraftComment implements RestModifyView, UiAction : Response.ok(op.newTopicName); } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final Input input; private Change change; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/RebaseChangeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/RebaseChangeOp.java index d913f95e68..c03bb6f60d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/RebaseChangeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/RebaseChangeOp.java @@ -31,7 +31,7 @@ import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectState; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.RepoContext; @@ -46,7 +46,7 @@ import org.eclipse.jgit.merge.ThreeWayMerger; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -public class RebaseChangeOp extends BatchUpdate.Op { +public class RebaseChangeOp implements BatchUpdateOp { public interface Factory { RebaseChangeOp create( ChangeControl ctl, PatchSet originalPatchSet, @Nullable String baseCommitish); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java index d64e26c5b3..b6c4d02b9d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Restore.java @@ -36,6 +36,7 @@ import com.google.gerrit.server.mail.send.RestoredSender; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.UpdateException; @@ -94,7 +95,7 @@ public class Restore return json.noOptions().format(op.change); } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final RestoreInput input; private Change change; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java index 8488749fce..dc3c948a98 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Revert.java @@ -47,6 +47,7 @@ import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectControl; import com.google.gerrit.server.project.RefControl; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.UpdateException; @@ -237,7 +238,7 @@ public class Revert return change != null ? change.getStatus().name().toLowerCase() : "deleted"; } - private class NotifyOp extends BatchUpdate.Op { + private class NotifyOp implements BatchUpdateOp { private final Change change; private final ChangeInserter ins; @@ -261,7 +262,7 @@ public class Revert } } - private class PostRevertedMessageOp extends BatchUpdate.Op { + private class PostRevertedMessageOp implements BatchUpdateOp { private final ObjectId computedChangeId; PostRevertedMessageOp(ObjectId computedChangeId) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java index b613eda0ae..409be9d2b1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetAssigneeOp.java @@ -30,7 +30,7 @@ import com.google.gerrit.server.account.AccountsCollection; import com.google.gerrit.server.extensions.events.AssigneeChanged; import com.google.gerrit.server.mail.send.SetAssigneeSender; import com.google.gerrit.server.notedb.ChangeUpdate; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.validators.AssigneeValidationListener; @@ -42,7 +42,7 @@ import com.google.inject.assistedinject.AssistedInject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class SetAssigneeOp extends BatchUpdate.Op { +public class SetAssigneeOp implements BatchUpdateOp { private static final Logger log = LoggerFactory.getLogger(SetAssigneeOp.class); public interface Factory { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java index b348fc14b9..0e78c18bcc 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/SetHashtagsOp.java @@ -33,7 +33,7 @@ import com.google.gerrit.server.extensions.events.HashtagsEdited; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.notedb.NotesMigration; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.validators.HashtagValidationListener; @@ -46,7 +46,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; -public class SetHashtagsOp extends BatchUpdate.Op { +public class SetHashtagsOp implements BatchUpdateOp { public interface Factory { SetHashtagsOp create(HashtagsInput input); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java index 8112098188..0cfdeedda2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/edit/ChangeEditUtil.java @@ -41,6 +41,7 @@ import com.google.gerrit.server.index.change.ChangeIndexer; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.RepoContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.OrmException; @@ -214,7 +215,7 @@ public class ChangeEditUtil { .setMessage(message.toString())); bu.addOp( change.getId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public void updateRepo(RepoContext ctx) throws Exception { deleteRef(ctx.getRepository(), edit); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/AbandonOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/AbandonOp.java index 9e90ebb645..99b647a069 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/AbandonOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/AbandonOp.java @@ -30,7 +30,7 @@ import com.google.gerrit.server.extensions.events.ChangeAbandoned; import com.google.gerrit.server.mail.send.AbandonedSender; import com.google.gerrit.server.mail.send.ReplyToChangeSender; import com.google.gerrit.server.notedb.ChangeUpdate; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gwtorm.server.OrmException; @@ -39,7 +39,7 @@ import com.google.inject.assistedinject.AssistedInject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class AbandonOp extends BatchUpdate.Op { +public class AbandonOp implements BatchUpdateOp { private static final Logger log = LoggerFactory.getLogger(AbandonOp.class); private final AbandonedSender.Factory abandonedSenderFactory; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeProgressOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeProgressOp.java index a89a13d1c8..1a39a76b93 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeProgressOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ChangeProgressOp.java @@ -14,12 +14,12 @@ package com.google.gerrit.server.git; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import org.eclipse.jgit.lib.ProgressMonitor; /** Trivial op to update a counter during {@code updateChange} */ -class ChangeProgressOp extends BatchUpdate.Op { +class ChangeProgressOp implements BatchUpdateOp { private final ProgressMonitor progress; ChangeProgressOp(ProgressMonitor progress) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java index 9cd87f6572..5b89eda939 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java @@ -64,6 +64,7 @@ import com.google.gerrit.server.project.SubmitRuleOptions; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gerrit.server.util.RequestId; @@ -749,7 +750,7 @@ public class MergeOp implements AutoCloseable { bu.setRequestId(submissionId); bu.addOp( cd.getId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws OrmException { Change change = ctx.getChange(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java index 6061bb35c5..4bdcdf2853 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergedByPushOp.java @@ -29,7 +29,7 @@ import com.google.gerrit.server.extensions.events.ChangeMerged; import com.google.gerrit.server.mail.send.MergedSender; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.patch.PatchSetInfoFactory; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.util.RequestScopePropagator; @@ -49,7 +49,7 @@ import org.eclipse.jgit.revwalk.RevWalk; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class MergedByPushOp extends BatchUpdate.Op { +public class MergedByPushOp implements BatchUpdateOp { private static final Logger log = LoggerFactory.getLogger(MergedByPushOp.class); public interface Factory { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index 66a1451d8d..319801721f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -115,6 +115,7 @@ import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gerrit.server.ssh.SshInfo; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gerrit.server.util.LabelVote; @@ -2187,7 +2188,7 @@ public class ReceiveCommits { if (!Strings.isNullOrEmpty(magicBranch.topic)) { bu.addOp( changeId, - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) { ctx.getUpdate(psId).setTopic(magicBranch.topic); @@ -2197,7 +2198,7 @@ public class ReceiveCommits { } bu.addOp( changeId, - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) { change = ctx.getChange(); @@ -2504,7 +2505,7 @@ public class ReceiveCommits { if (magicBranch != null && magicBranch.edit) { bu.addOp( notes.getChangeId(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws Exception { // return pseudo dirty state to trigger reindexing @@ -2571,7 +2572,7 @@ public class ReceiveCommits { private void addOps(BatchUpdate bu) { bu.addOp( psId.getParentKey(), - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) throws OrmException { PatchSet ps = psUtil.get(ctx.getDb(), ctx.getNotes(), psId); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java index 4a2bcaf406..6ac5da1707 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReplaceOp.java @@ -49,7 +49,7 @@ import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.project.ProjectControl; import com.google.gerrit.server.query.change.ChangeData; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.RepoContext; @@ -76,7 +76,7 @@ import org.eclipse.jgit.transport.ReceiveCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ReplaceOp extends BatchUpdate.Op { +public class ReplaceOp implements BatchUpdateOp { public interface Factory { ReplaceOp create( ProjectControl projectControl, diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java index 719638a488..b94b787d50 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java @@ -31,8 +31,9 @@ import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.project.ProjectState; import com.google.gerrit.server.update.BatchUpdate; -import com.google.gerrit.server.update.BatchUpdate.Listener; +import com.google.gerrit.server.update.BatchUpdateListener; import com.google.gerrit.server.update.RepoContext; +import com.google.gerrit.server.update.RepoOnlyOp; import com.google.gerrit.server.update.UpdateException; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; @@ -70,7 +71,7 @@ import org.slf4j.LoggerFactory; public class SubmoduleOp { /** Only used for branches without code review changes */ - public class GitlinkOp extends BatchUpdate.RepoOnlyOp { + public class GitlinkOp implements RepoOnlyOp { private final Branch.NameKey branch; GitlinkOp(Branch.NameKey branch) { @@ -338,7 +339,7 @@ public class SubmoduleOp { } } BatchUpdate.execute( - orm.batchUpdates(superProjects), Listener.NONE, orm.getSubmissionId(), false); + orm.batchUpdates(superProjects), BatchUpdateListener.NONE, orm.getSubmissionId(), false); } catch (RestApiException | UpdateException | IOException | NoSuchProjectException e) { throw new SubmoduleException("Cannot update gitlinks", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyListener.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyListener.java index 90e34abc9b..819aeb0265 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyListener.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyListener.java @@ -23,14 +23,14 @@ import com.google.gerrit.server.change.Submit.TestSubmitInput; import com.google.gerrit.server.git.CodeReviewCommit; import com.google.gerrit.server.git.IntegrationException; import com.google.gerrit.server.git.MergeOp.CommitStatus; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateListener; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import org.eclipse.jgit.revwalk.RevCommit; -public class SubmitStrategyListener extends BatchUpdate.Listener { +public class SubmitStrategyListener implements BatchUpdateListener { private final Collection strategies; private final CommitStatus commitStatus; private final boolean failAfterRefUpdates; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java index 3c755f3bf7..89bd5608eb 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/SubmitStrategyOp.java @@ -46,7 +46,7 @@ import com.google.gerrit.server.git.ProjectConfig; import com.google.gerrit.server.git.SubmoduleException; import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.project.ProjectState; -import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.RepoContext; @@ -68,7 +68,7 @@ import org.eclipse.jgit.transport.ReceiveCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -abstract class SubmitStrategyOp extends BatchUpdate.Op { +abstract class SubmitStrategyOp implements BatchUpdateOp { private static final Logger log = LoggerFactory.getLogger(SubmitStrategyOp.class); protected final SubmitStrategy.Arguments args; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java index fee090a266..606da440b3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/receive/MailProcessor.java @@ -47,6 +47,7 @@ import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.Context; import com.google.gerrit.server.update.UpdateException; @@ -207,7 +208,7 @@ public class MailProcessor { } } - private class Op extends BatchUpdate.Op { + private class Op implements BatchUpdateOp { private final PatchSet.Id psId; private final List parsedComments; private final String tag; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java index 8a178b0385..3f0db7733d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/PrimaryStorageMigrator.java @@ -50,6 +50,7 @@ import com.google.gerrit.server.project.ChangeControl; import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.InternalChangeQuery; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.BatchUpdateOp; import com.google.gerrit.server.update.ChangeContext; import com.google.gerrit.server.update.UpdateException; import com.google.gwtorm.server.AtomicUpdate; @@ -455,7 +456,7 @@ public class PrimaryStorageMigrator { db.get(), project, internalUserFactory.create(), TimeUtil.nowTs())) { bu.addOp( id, - new BatchUpdate.Op() { + new BatchUpdateOp() { @Override public boolean updateChange(ChangeContext ctx) { ctx.getUpdate(ctx.getChange().currentPatchSetId()).setReadOnlyUntil(new Timestamp(0)); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdate.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdate.java index 67a33c67ca..9c2071fd3f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdate.java @@ -256,58 +256,6 @@ public class BatchUpdate implements AutoCloseable { } } - public static class RepoOnlyOp { - /** - * Override this method to update the repo. - * - * @param ctx context - */ - public void updateRepo(RepoContext ctx) throws Exception {} - - /** - * Override this method to do something after the update e.g. send email or run hooks - * - * @param ctx context - */ - //TODO(dborowitz): Support async operations? - public void postUpdate(Context ctx) throws Exception {} - } - - public static class Op extends RepoOnlyOp { - /** - * Override this method to modify a change. - * - * @param ctx context - * @return whether anything was changed that might require a write to the metadata storage. - */ - public boolean updateChange(ChangeContext ctx) throws Exception { - return false; - } - } - - public abstract static class InsertChangeOp extends Op { - public abstract Change createChange(Context ctx); - } - - /** - * Interface for listening during batch update execution. - * - *

When used during execution of multiple batch updates, the {@code after*} methods are called - * after that phase has been completed for all updates. - */ - public static class Listener { - public static final Listener NONE = new Listener(); - - /** Called after updating all repositories and flushing objects but before updating any refs. */ - public void afterUpdateRepos() throws Exception {} - - /** Called after updating all refs. */ - public void afterRefUpdates() throws Exception {} - - /** Called after updating all changes. */ - public void afterUpdateChanges() throws Exception {} - } - @Singleton private static class Metrics { final Timer1 executeChangeOpsLatency; @@ -357,7 +305,7 @@ public class BatchUpdate implements AutoCloseable { public static void execute( Collection updates, - Listener listener, + BatchUpdateListener listener, @Nullable RequestId requestId, boolean dryrun) throws UpdateException, RestApiException { @@ -472,7 +420,7 @@ public class BatchUpdate implements AutoCloseable { private final Timestamp when; private final TimeZone tz; - private final ListMultimap ops = + private final ListMultimap ops = MultimapBuilder.linkedHashKeys().arrayListValues().build(); private final Map newChanges = new HashMap<>(); private final List> indexFutures = new ArrayList<>(); @@ -568,7 +516,7 @@ public class BatchUpdate implements AutoCloseable { return this; } - /** Execute {@link Op#updateChange(ChangeContext)} in parallel for each change. */ + /** Execute {@link BatchUpdateOp#updateChange(ChangeContext)} in parallel for each change. */ public BatchUpdate updateChangesInParallel() { this.updateChangesInParallel = true; return this; @@ -603,7 +551,7 @@ public class BatchUpdate implements AutoCloseable { return inserter; } - public BatchUpdate addOp(Change.Id id, Op op) { + public BatchUpdate addOp(Change.Id id, BatchUpdateOp op) { checkArgument(!(op instanceof InsertChangeOp), "use insertChange"); checkNotNull(op); ops.put(id, op); @@ -611,7 +559,7 @@ public class BatchUpdate implements AutoCloseable { } public BatchUpdate addRepoOnlyOp(RepoOnlyOp op) { - checkArgument(!(op instanceof Op), "use addOp()"); + checkArgument(!(op instanceof BatchUpdateOp), "use addOp()"); repoOnlyOps.add(op); return this; } @@ -631,10 +579,11 @@ public class BatchUpdate implements AutoCloseable { } public void execute() throws UpdateException, RestApiException { - execute(Listener.NONE); + execute(BatchUpdateListener.NONE); } - public void execute(Listener listener) throws UpdateException, RestApiException { + public void execute(BatchUpdateListener listener) + throws UpdateException, RestApiException { execute(ImmutableList.of(this), listener, requestId, false); } @@ -642,7 +591,7 @@ public class BatchUpdate implements AutoCloseable { try { logDebug("Executing updateRepo on {} ops", ops.size()); RepoContextImpl ctx = new RepoContextImpl(); - for (Op op : ops.values()) { + for (BatchUpdateOp op : ops.values()) { op.updateRepo(ctx); } @@ -728,7 +677,7 @@ public class BatchUpdate implements AutoCloseable { throw new OrmException(NoteDbUpdateManager.CHANGES_READ_ONLY); } List> futures = new ArrayList<>(ops.keySet().size()); - for (Map.Entry> e : ops.asMap().entrySet()) { + for (Map.Entry> e : ops.asMap().entrySet()) { ChangeTask task = new ChangeTask(e.getKey(), e.getValue(), Thread.currentThread(), dryrun); tasks.add(task); @@ -870,7 +819,7 @@ public class BatchUpdate implements AutoCloseable { private class ChangeTask implements Callable { final Change.Id id; - private final Collection changeOps; + private final Collection changeOps; private final Thread mainThread; private final boolean dryrun; @@ -880,7 +829,8 @@ public class BatchUpdate implements AutoCloseable { boolean deleted; private String taskId; - private ChangeTask(Change.Id id, Collection changeOps, Thread mainThread, boolean dryrun) { + private ChangeTask( + Change.Id id, Collection changeOps, Thread mainThread, boolean dryrun) { this.id = id; this.changeOps = changeOps; this.mainThread = mainThread; @@ -929,7 +879,7 @@ public class BatchUpdate implements AutoCloseable { // Call updateChange on each op. logDebug("Calling updateChange on {} ops", changeOps.size()); - for (Op op : changeOps) { + for (BatchUpdateOp op : changeOps) { dirty |= op.updateChange(ctx); } if (!dirty) { @@ -1105,7 +1055,7 @@ public class BatchUpdate implements AutoCloseable { private void executePostOps() throws Exception { ContextImpl ctx = new ContextImpl(); - for (Op op : ops.values()) { + for (BatchUpdateOp op : ops.values()) { op.postUpdate(ctx); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateListener.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateListener.java new file mode 100644 index 0000000000..3a46eed5ec --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateListener.java @@ -0,0 +1,34 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.update; + +/** + * Interface for listening during batch update execution. + * + *

When used during execution of multiple batch updates, the {@code after*} methods are called + * after that phase has been completed for all updates. + */ +public interface BatchUpdateListener { + public static final BatchUpdateListener NONE = new BatchUpdateListener() {}; + + /** Called after updating all repositories and flushing objects but before updating any refs. */ + default void afterUpdateRepos() throws Exception {} + + /** Called after updating all refs. */ + default void afterRefUpdates() throws Exception {} + + /** Called after updating all changes. */ + default void afterUpdateChanges() throws Exception {} +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateOp.java new file mode 100644 index 0000000000..39e25dda74 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/BatchUpdateOp.java @@ -0,0 +1,38 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.update; + +/** + * Interface for {@link BatchUpdate} operations that touch a change. + * + *

Each operation has {@link #updateChange(ChangeContext)} called once the change is read in a + * transaction. Ops are associated with updates via {@link + * BatchUpdate#addOp(com.google.gerrit.reviewdb.client.Change.Id, BatchUpdateOp)}. + * + *

Usually, a single {@code BatchUpdateOp} instance is only associated with a single change, i.e. + * {@code addOp} is only called once with that instance. This allows an instance to communicate + * between phases by storing data in private fields. + */ +public interface BatchUpdateOp extends RepoOnlyOp { + /** + * Override this method to modify a change. + * + * @param ctx context + * @return whether anything was changed that might require a write to the metadata storage. + */ + default boolean updateChange(ChangeContext ctx) throws Exception { + return false; + } +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/ChangeContext.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/ChangeContext.java index 398986c5ba..d619490dd9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/update/ChangeContext.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/ChangeContext.java @@ -23,7 +23,7 @@ import com.google.gerrit.server.notedb.ChangeUpdate; import com.google.gerrit.server.project.ChangeControl; /** - * Context for performing the {@link BatchUpdate.Op#updateChange} phase. + * Context for performing the {@link BatchUpdateOp#updateChange} phase. * *

A single {@code ChangeContext} corresponds to updating a single change; if a {@link * BatchUpdate} spans multiple changes, then multiple {@code ChangeContext} instances will be diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/Context.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/Context.java index f3940664f9..497b7ab270 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/update/Context.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/Context.java @@ -40,7 +40,7 @@ public interface Context { * Get an open repository instance for this project. * *

Will be opened lazily if necessary; callers should not close the repo. In some phases of the - * update, the repository might be read-only; see {@link BatchUpdate.Op} for details. + * update, the repository might be read-only; see {@link BatchUpdateOp} for details. * * @return repository instance. * @throws IOException if an error occurred opening the repo. diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/InsertChangeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/InsertChangeOp.java new file mode 100644 index 0000000000..1a947e63f2 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/InsertChangeOp.java @@ -0,0 +1,31 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.update; + +import com.google.gerrit.reviewdb.client.Change; + +/** + * Specialization of {@link BatchUpdateOp} for creating changes. + * + *

A typical {@code BatchUpdateOp} operates on a change that has been read from a transaction; + * this type, by contrast, is responsible for creating the change from scratch. + * + *

Ops of this type must be used via {@link BatchUpdate#insertChange(InsertChangeOp)}. They may + * be mixed with other {@link BatchUpdateOp}s for the same change, in which case the insert op runs + * first. + */ +public interface InsertChangeOp extends BatchUpdateOp { + Change createChange(Context ctx); +} diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoContext.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoContext.java index 825f6d1604..5009c50b68 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoContext.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoContext.java @@ -18,7 +18,7 @@ import java.io.IOException; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.transport.ReceiveCommand; -/** Context for performing the {@link BatchUpdate.Op#updateRepo} phase. */ +/** Context for performing the {@link BatchUpdateOp#updateRepo} phase. */ public interface RepoContext extends Context { /** * @return inserter for writing to the repo. Callers should not flush; the walk returned by {@link diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoOnlyOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoOnlyOp.java new file mode 100644 index 0000000000..10a6a31f92 --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/update/RepoOnlyOp.java @@ -0,0 +1,39 @@ +// Copyright (C) 2017 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.update; + +/** + * Base interface for operations performed as part of a {@link BatchUpdate}. + * + *

Operations that implement this type only touch the repository; they cannot touch change + * storage, nor are they even associated with a change ID. To modify a change, implement {@link + * BatchUpdateOp} instead. + */ +public interface RepoOnlyOp { + /** + * Override this method to update the repo. + * + * @param ctx context + */ + default void updateRepo(RepoContext ctx) throws Exception {} + + /** + * Override this method to do something after the update e.g. send email or run hooks + * + * @param ctx context + */ + //TODO(dborowitz): Support async operations? + default void postUpdate(Context ctx) throws Exception {} +} diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/update/BatchUpdateTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/update/BatchUpdateTest.java index 0fec8cfc6c..892d037b19 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/update/BatchUpdateTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/update/BatchUpdateTest.java @@ -12,7 +12,6 @@ import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.account.AccountManager; import com.google.gerrit.server.account.AuthRequest; import com.google.gerrit.server.schema.SchemaCreator; -import com.google.gerrit.server.update.BatchUpdate.RepoOnlyOp; import com.google.gerrit.server.util.RequestContext; import com.google.gerrit.server.util.ThreadLocalRequestContext; import com.google.gerrit.testutil.InMemoryDatabase;