Read change ID sequence from notedb

Change-Id: Ib500a93d6368c7ef134422102afd8b561addd52f
This commit is contained in:
Dave Borowitz
2016-01-14 13:33:36 -05:00
parent 9b82bfdd57
commit b259ed7518
9 changed files with 99 additions and 13 deletions

View File

@@ -30,6 +30,7 @@ import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.account.GroupBackend;
import com.google.gerrit.server.change.ChangeInserter;
import com.google.gerrit.server.change.ChangeResource;
@@ -69,6 +70,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
}
private final ReviewDb db;
private final Sequences seq;
private final IdentifiedUser user;
private final Provider<PostReviewers> reviewersProvider;
private final ProjectCache projectCache;
@@ -88,6 +90,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
ChangeInserter.Factory changeInserterFactory,
BatchUpdate.Factory updateFactory,
Provider<SetParent> setParent,
Sequences seq,
@Assisted("projectName") Project.NameKey projectName,
@Nullable @Assisted ObjectId base,
@@ -98,6 +101,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
allProjects, setParent, projectName, base, sectionList,
parentProjectName, message, false);
this.db = db;
this.seq = seq;
this.user = user;
this.reviewersProvider = reviewersProvider;
this.projectCache = projectCache;
@@ -111,7 +115,7 @@ public class ReviewProjectAccess extends ProjectAccessHandler<Change.Id> {
ProjectConfig config, MetaDataUpdate md, boolean parentProjectUpdate)
throws IOException, OrmException {
md.setInsertChangeId(true);
Change.Id changeId = new Change.Id(db.nextChangeId());
Change.Id changeId = new Change.Id(seq.nextChangeId());
RevCommit commit =
config.commitToNewRef(md, new PatchSet.Id(changeId,
Change.INITIAL_PATCH_SET_ID).toRefName());

View File

@@ -113,8 +113,15 @@ public interface ReviewDb extends Schema {
@Sequence
int nextAccountGroupId() throws OrmException;
/** Next unique id for a {@link Change}. */
@Sequence
int FIRST_CHANGE_ID = 1;
/**
* Next unique id for a {@link Change}.
*
* @deprecated use {@link com.google.gerrit.server.Sequences#nextChangeId()}.
*/
@Sequence(startWith = FIRST_CHANGE_ID)
@Deprecated
int nextChangeId() throws OrmException;
/**

View File

@@ -174,6 +174,7 @@ public class ChangeUtil {
private final Provider<CurrentUser> user;
private final Provider<ReviewDb> db;
private final Sequences seq;
private final Provider<InternalChangeQuery> queryProvider;
private final ChangeControl.GenericFactory changeControlFactory;
private final RevertedSender.Factory revertedSenderFactory;
@@ -186,6 +187,7 @@ public class ChangeUtil {
@Inject
ChangeUtil(Provider<CurrentUser> user,
Provider<ReviewDb> db,
Sequences seq,
Provider<InternalChangeQuery> queryProvider,
ChangeControl.GenericFactory changeControlFactory,
RevertedSender.Factory revertedSenderFactory,
@@ -196,6 +198,7 @@ public class ChangeUtil {
ChangeUpdate.Factory changeUpdateFactory) {
this.user = user;
this.db = db;
this.seq = seq;
this.queryProvider = queryProvider;
this.changeControlFactory = changeControlFactory;
this.revertedSenderFactory = revertedSenderFactory;
@@ -262,7 +265,7 @@ public class ChangeUtil {
RefControl refControl = ctl.getRefControl();
Change change = new Change(
new Change.Key("I" + computedChangeId.name()),
new Change.Id(db.get().nextChangeId()),
new Change.Id(seq.nextChangeId()),
user.get().getAccountId(),
changeToRevert.getDest(),
TimeUtil.nowTs());

View File

@@ -0,0 +1,56 @@
// Copyright (C) 2016 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;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.notedb.NotesMigration;
import com.google.gerrit.server.notedb.RepoSequence;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@Singleton
public class Sequences {
private final Provider<ReviewDb> db;
private final NotesMigration migration;
private final RepoSequence changeSeq;
@Inject
Sequences(Provider<ReviewDb> db,
NotesMigration migration,
GitRepositoryManager repoManager,
AllProjectsName allProjects) {
this.db = db;
this.migration = migration;
if (migration.readChanges()) {
changeSeq = new RepoSequence(
repoManager, allProjects, "changes", ReviewDb.FIRST_CHANGE_ID, 100);
} else {
changeSeq = null;
}
}
@SuppressWarnings("deprecation")
public int nextChangeId() throws OrmException {
if (migration.readChanges()) {
return changeSeq.next();
} else {
return db.get().nextChangeId();
}
}
}

View File

@@ -30,6 +30,7 @@ import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.GerritPersonIdent;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.git.BatchUpdate;
import com.google.gerrit.server.git.CodeReviewCommit;
import com.google.gerrit.server.git.CodeReviewCommit.CodeReviewRevWalk;
@@ -71,6 +72,7 @@ import java.util.TimeZone;
public class CherryPickChange {
private final Provider<ReviewDb> db;
private final Sequences seq;
private final Provider<InternalChangeQuery> queryProvider;
private final GitRepositoryManager gitManager;
private final TimeZone serverTimeZone;
@@ -84,6 +86,7 @@ public class CherryPickChange {
@Inject
CherryPickChange(Provider<ReviewDb> db,
Sequences seq,
Provider<InternalChangeQuery> queryProvider,
@GerritPersonIdent PersonIdent myIdent,
GitRepositoryManager gitManager,
@@ -95,6 +98,7 @@ public class CherryPickChange {
ChangeUpdate.Factory updateFactory,
BatchUpdate.Factory batchUpdateFactory) {
this.db = db;
this.seq = seq;
this.queryProvider = queryProvider;
this.gitManager = gitManager;
this.serverTimeZone = myIdent.getTimeZone();
@@ -233,7 +237,7 @@ public class CherryPickChange {
IdentifiedUser identifiedUser, String topic, Branch.NameKey sourceBranch)
throws RestApiException, UpdateException, OrmException {
Change change =
new Change(changeKey, new Change.Id(db.get().nextChangeId()),
new Change(changeKey, new Change.Id(seq.nextChangeId()),
identifiedUser.getAccountId(), new Branch.NameKey(project,
destRef.getName()), TimeUtil.nowTs());
change.setTopic(topic);

View File

@@ -39,6 +39,7 @@ import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.GerritPersonIdent;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.git.BatchUpdate;
import com.google.gerrit.server.git.GitRepositoryManager;
@@ -77,6 +78,7 @@ public class CreateChange implements
private final Provider<ReviewDb> db;
private final GitRepositoryManager gitManager;
private final Sequences seq;
private final TimeZone serverTimeZone;
private final Provider<CurrentUser> user;
private final ProjectsCollection projectsCollection;
@@ -89,6 +91,7 @@ public class CreateChange implements
@Inject
CreateChange(Provider<ReviewDb> db,
GitRepositoryManager gitManager,
Sequences seq,
@GerritPersonIdent PersonIdent myIdent,
Provider<CurrentUser> user,
ProjectsCollection projectsCollection,
@@ -99,6 +102,7 @@ public class CreateChange implements
@GerritServerConfig Config config) {
this.db = db;
this.gitManager = gitManager;
this.seq = seq;
this.serverTimeZone = myIdent.getTimeZone();
this.user = user;
this.projectsCollection = projectsCollection;
@@ -194,7 +198,7 @@ public class CreateChange implements
Change change = new Change(
getChangeId(id, c),
new Change.Id(db.get().nextChangeId()),
new Change.Id(seq.nextChangeId()),
me.getAccountId(),
new Branch.NameKey(project, refName),
now);

View File

@@ -51,6 +51,7 @@ import com.google.gerrit.server.ApprovalsUtil;
import com.google.gerrit.server.CmdLineParserModule;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.PluginUser;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.account.AccountByEmailCacheImpl;
import com.google.gerrit.server.account.AccountCacheImpl;
import com.google.gerrit.server.account.AccountControl;
@@ -165,6 +166,7 @@ public class GerritGlobalModule extends FactoryModule {
bind(IdGenerator.class);
bind(RulesCache.class);
bind(Sequences.class);
install(authModule);
install(AccountByEmailCacheImpl.module());
install(AccountCacheImpl.module());

View File

@@ -84,6 +84,7 @@ import com.google.gerrit.server.ApprovalsUtil;
import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.ChangeUtil;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountResolver;
import com.google.gerrit.server.change.ChangeInserter;
@@ -284,6 +285,7 @@ public class ReceiveCommits {
private final IdentifiedUser user;
private final ReviewDb db;
private final Sequences seq;
private final Provider<InternalChangeQuery> queryProvider;
private final ChangeData.Factory changeDataFactory;
private final ChangeUpdate.Factory updateFactory;
@@ -355,6 +357,7 @@ public class ReceiveCommits {
@Inject
ReceiveCommits(final ReviewDb db,
final Sequences seq,
final Provider<InternalChangeQuery> queryProvider,
final SchemaFactory<ReviewDb> schemaFactory,
final ChangeData.Factory changeDataFactory,
@@ -401,6 +404,7 @@ public class ReceiveCommits {
final SetHashtagsOp.Factory hashtagsFactory) throws IOException {
this.user = projectControl.getUser().asIdentifiedUser();
this.db = db;
this.seq = seq;
this.queryProvider = queryProvider;
this.changeDataFactory = changeDataFactory;
this.updateFactory = updateFactory;
@@ -1733,7 +1737,7 @@ public class ReceiveCommits {
throws OrmException {
commit = c;
change = new Change(changeKey,
new Change.Id(db.nextChangeId()),
new Change.Id(seq.nextChangeId()),
user.getAccountId(),
magicBranch.dest,
TimeUtil.nowTs());

View File

@@ -51,6 +51,7 @@ import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.Sequences;
import com.google.gerrit.server.account.AccountManager;
import com.google.gerrit.server.account.AuthRequest;
import com.google.gerrit.server.account.GroupCache;
@@ -104,24 +105,25 @@ public abstract class AbstractQueryChangesTest extends GerritServerTests {
}
@Inject protected AccountManager accountManager;
@Inject protected AddMembers addMembers;
@Inject protected BatchUpdate.Factory updateFactory;
@Inject protected ChangeInserter.Factory changeFactory;
@Inject protected PatchSetInserter.Factory patchSetFactory;
@Inject protected ChangeControl.GenericFactory changeControlFactory;
@Inject protected ChangeInserter.Factory changeFactory;
@Inject protected ChangeQueryBuilder queryBuilder;
@Inject protected GerritApi gApi;
@Inject protected GroupCache groupCache;
@Inject protected IdentifiedUser.GenericFactory userFactory;
@Inject protected IndexCollection indexes;
@Inject protected InMemoryDatabase schemaFactory;
@Inject protected InMemoryRepositoryManager repoManager;
@Inject protected InternalChangeQuery internalChangeQuery;
@Inject protected NotesMigration notesMigration;
@Inject protected PatchSetInserter.Factory patchSetFactory;
@Inject protected ProjectControl.GenericFactory projectControlFactory;
@Inject protected ChangeQueryBuilder queryBuilder;
@Inject protected QueryProcessor queryProcessor;
@Inject protected SchemaCreator schemaCreator;
@Inject protected Sequences seq;
@Inject protected ThreadLocalRequestContext requestContext;
@Inject protected GroupCache groupCache;
@Inject protected AddMembers addMembers;
protected LifecycleManager lifecycle;
protected ReviewDb db;
@@ -1396,7 +1398,7 @@ public abstract class AbstractQueryChangesTest extends GerritServerTests {
Project.NameKey project = new Project.NameKey(
repo.getRepository().getDescription().getRepositoryName());
Change.Id id = new Change.Id(db.nextChangeId());
Change.Id id = new Change.Id(seq.nextChangeId());
if (key == null) {
key = "I" + Hashing.sha1().newHasher()
.putInt(id.get())