Merge branch 'stable-2.16' into stable-3.0
* stable-2.16:
Fix JDBC connection not terminated after project rename
Change-Id: I2e6efd46f8d8742d444316999ce1a6a8b8e235ed
diff --git a/.bazelversion b/.bazelversion
index fd2a018..7c69a55 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-3.1.0
+3.7.0
diff --git a/WORKSPACE b/WORKSPACE
index 27db984..c42a339 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,26 +3,15 @@
load("//:bazlets.bzl", "load_bazlets")
load_bazlets(
- commit = "6c39deb06f58bb62162ccb6865964f531739f512",
+ commit = "a029d8e41d6211c8b23052aa0a0c2c7649577e85",
#local_path = "/home/<user>/projects/bazlets",
)
-# Snapshot Plugin API
-#load(
-# "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-# "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
load(
"@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
"gerrit_api",
)
-# Load release Plugin API
gerrit_api()
load("//:external_plugin_deps.bzl", "external_plugin_deps")
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
index 04426bc..170e0d6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
@@ -28,17 +28,22 @@
public class LockUnlockProject {
private final MetaDataUpdate.Server metaDataUpdateFactory;
private final ProjectCache projectCache;
+ private final ProjectConfig.Factory projectConfigFactory;
@Inject
- LockUnlockProject(MetaDataUpdate.Server metaDataUpdateFactory, ProjectCache projectCache) {
+ LockUnlockProject(
+ MetaDataUpdate.Server metaDataUpdateFactory,
+ ProjectCache projectCache,
+ ProjectConfig.Factory projectConfigFactory) {
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.projectCache = projectCache;
+ this.projectConfigFactory = projectConfigFactory;
}
public void lock(Project.NameKey key) throws IOException, ConfigInvalidException {
MetaDataUpdate md = metaDataUpdateFactory.create(key);
- ProjectConfig projectConfig = ProjectConfig.read(md);
+ ProjectConfig projectConfig = projectConfigFactory.read(md);
Project p = projectConfig.getProject();
p.setState(ProjectState.READ_ONLY);
@@ -50,7 +55,7 @@
public void unlock(Project.NameKey key) throws IOException, ConfigInvalidException {
MetaDataUpdate md = metaDataUpdateFactory.create(key);
- ProjectConfig projectConfig = ProjectConfig.read(md);
+ ProjectConfig projectConfig = projectConfigFactory.read(md);
Project p = projectConfig.getProject();
p.setState(ProjectState.ACTIVE);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
index 50f86d7..9883858 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
@@ -22,11 +22,10 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
-import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectResource;
+import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
-import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.googlesource.gerrit.plugins.renameproject.monitor.CommandProgressMonitor;
@@ -44,7 +43,7 @@
@CommandMetaData(name = "rename", description = "Rename project")
public final class RenameCommand extends SshCommand {
@Argument(index = 0, required = true, metaVar = "OLDPROJECT", usage = "project to rename")
- private String projectControl;
+ private ProjectState projectState;
@Argument(index = 1, required = true, metaVar = "NEWNAME", usage = "new name for the project")
private String newProjectName;
@@ -54,16 +53,11 @@
private static final Logger log = LoggerFactory.getLogger(RenameCommand.class);
private final RenameProject renameProject;
- private final Provider<ProjectCache> projectCacheProvider;
private final Provider<CurrentUser> self;
@Inject
- protected RenameCommand(
- RenameProject renameProject,
- Provider<ProjectCache> projectCacheProvider,
- Provider<CurrentUser> self) {
+ protected RenameCommand(RenameProject renameProject, Provider<CurrentUser> self) {
this.renameProject = renameProject;
- this.projectCacheProvider = projectCacheProvider;
this.self = self;
}
@@ -72,18 +66,12 @@
try {
RenameProject.Input input = new RenameProject.Input();
input.name = newProjectName;
- ProjectResource rsrc =
- new ProjectResource(
- projectCacheProvider.get().get(new Project.NameKey(projectControl)), self.get());
-
- if (rsrc.getProjectState() == null) {
- throw new CannotRenameProjectException("Project does not exist");
- }
+ ProjectResource rsrc = new ProjectResource(projectState, self.get());
if (replication) {
if (renameProject.isAdmin()) {
renameProject.fsRenameStep(
- rsrc.getNameKey(), new Project.NameKey(newProjectName), Optional.empty());
+ rsrc.getNameKey(), Project.nameKey(newProjectName), Optional.empty());
} else {
throw new AuthException("Not allowed to replicate rename");
}
@@ -100,7 +88,7 @@
}
}
}
- } catch (RestApiException | OrmException | IOException | CannotRenameProjectException e) {
+ } catch (RestApiException | IOException e) {
throw die(e);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java
index 88c0e3b..6449cba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLog.java
@@ -17,10 +17,10 @@
import com.google.common.collect.ListMultimap;
import com.google.common.collect.MultimapBuilder;
import com.google.gerrit.extensions.systemstatus.ServerInformation;
+import com.google.gerrit.json.OutputFormat;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.AuditEvent;
import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.OutputFormat;
import com.google.gerrit.server.audit.AuditService;
import com.google.gerrit.server.util.PluginLogFile;
import com.google.gerrit.server.util.SystemLog;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLogLayout.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLogLayout.java
index 5a11a17..053e8b9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLogLayout.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameLogLayout.java
@@ -33,8 +33,8 @@
* +0100] INFO 1000000 admin OK \ myProject {"name": newName}
*
* <p>The log entry for a failed project rename will look like this: [2015-03-05 12:14:30,180
- * +0100] ERROR 1000000 admin FAIL \ myProject {"name": newName}
- * com.google.gwtorm.server.OrmException: \ Failed to access the database
+ * +0100] ERROR 1000000 admin FAIL \ myProject {"name": newName} TODO(mmiller): \ Failed to access
+ * the database
*/
@Override
public String format(LoggingEvent event) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
index 2cbe0e4..aae93b2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
@@ -28,6 +28,7 @@
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestModifyView;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.Change.Id;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
@@ -37,7 +38,6 @@
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.permissions.ProjectPermission;
import com.google.gerrit.server.project.ProjectResource;
-import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -66,9 +66,9 @@
@Override
public Object apply(ProjectResource resource, Input input)
throws IOException, AuthException, BadRequestException, ResourceConflictException,
- InterruptedException, ConfigInvalidException, OrmException {
+ InterruptedException, ConfigInvalidException, RenameRevertException {
assertCanRename(resource, input, Optional.empty());
- List<Change.Id> changeIds = getChanges(resource, Optional.empty());
+ List<Id> changeIds = getChanges(resource, Optional.empty());
if (changeIds == null || changeIds.size() <= WARNING_LIMIT || input.continueWithRename) {
doRename(changeIds, resource, input, Optional.empty());
@@ -205,7 +205,7 @@
void doRename(
List<Change.Id> changeIds, ProjectResource rsrc, Input input, Optional<ProgressMonitor> pm)
- throws InterruptedException, OrmException, ConfigInvalidException, IOException {
+ throws InterruptedException, ConfigInvalidException, IOException, RenameRevertException {
Project.NameKey oldProjectKey = rsrc.getNameKey();
Project.NameKey newProjectKey = new Project.NameKey(input.name);
Exception ex = null;
@@ -276,9 +276,8 @@
Project.NameKey oldProjectKey,
Project.NameKey newProjectKey,
Optional<ProgressMonitor> pm)
- throws OrmException {
- List<Change.Id> updatedChangeIds =
- dbHandler.rename(changeIds, oldProjectKey, newProjectKey, pm);
+ throws IOException, ConfigInvalidException, RenameRevertException {
+ List<Change.Id> updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, pm);
logPerformedStep(Step.DATABASE, newProjectKey, oldProjectKey);
return updatedChangeIds;
}
@@ -324,7 +323,7 @@
}
List<Change.Id> getChanges(ProjectResource rsrc, Optional<ProgressMonitor> opm)
- throws OrmException, IOException {
+ throws IOException {
opm.ifPresent(pm -> pm.beginTask("Retrieving the list of changes from DB"));
Project.NameKey oldProjectKey = rsrc.getNameKey();
return dbHandler.getChangeIds(oldProjectKey);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameRevertException.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameRevertException.java
index 0cb6256..b0e467a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameRevertException.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameRevertException.java
@@ -13,10 +13,8 @@
// limitations under the License.
package com.googlesource.gerrit.plugins.renameproject;
-import com.google.gwtorm.server.OrmException;
-
/** Add cause for exception during revert operation */
-public class RenameRevertException extends OrmException {
+public class RenameRevertException extends Exception {
private static final long serialVersionUID = 1L;
public RenameRevertException(Throwable revertException, Throwable cause) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
index 4d61a49..0671c71 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
@@ -17,7 +17,6 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Id;
import com.google.gerrit.reviewdb.client.Project;
-import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.renameproject.RenameProject.Step;
import com.googlesource.gerrit.plugins.renameproject.cache.CacheRenameHandler;
@@ -29,6 +28,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import org.eclipse.jgit.errors.ConfigInvalidException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -58,7 +58,7 @@
Project.NameKey oldProjectKey,
Project.NameKey newProjectKey,
Optional<ProgressMonitor> opm)
- throws IOException, OrmException {
+ throws IOException, RenameRevertException, ConfigInvalidException {
opm.ifPresent(pm -> pm.beginTask("Reverting the rename procedure."));
List<Change.Id> updatedChangeIds = Collections.emptyList();
if (stepsPerformed.contains(Step.FILESYSTEM)) {
@@ -77,12 +77,12 @@
}
if (stepsPerformed.contains(Step.DATABASE)) {
try {
- updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, oldProjectKey, opm);
+ updatedChangeIds = dbHandler.rename(changeIds, newProjectKey, opm);
log.debug(
"Reverted the changes in DB successfully from project {} to project {}.",
newProjectKey.get(),
oldProjectKey.get());
- } catch (OrmException e) {
+ } catch (RenameRevertException | ConfigInvalidException e) {
log.error(
"Failed to revert changes in DB for project {}. Secondary indexes not reverted. Exception caught: {}",
oldProjectKey.get(),
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
index 9efa51d..3e30f6e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
@@ -28,7 +28,6 @@
import com.google.gerrit.server.submit.MergeOpRepoManager;
import com.google.gerrit.server.submit.SubmoduleException;
import com.google.gerrit.server.submit.SubmoduleOp;
-import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -102,7 +101,7 @@
log.error(message);
throw new CannotRenameProjectException(message);
}
- } catch (PermissionBackendException | OrmException | RestApiException e) {
+ } catch (PermissionBackendException | RestApiException e) {
throw new CannotRenameProjectException(e);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
index d19f792..2ed4ad5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
@@ -19,7 +19,6 @@
import com.google.gerrit.reviewdb.client.Account;
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.ServerInitiated;
import com.google.gerrit.server.account.AccountState;
import com.google.gerrit.server.account.AccountsUpdate;
@@ -28,21 +27,13 @@
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.notedb.ChangeNotes.Factory.ChangeNotesResult;
-import com.google.gerrit.server.notedb.NotesMigration;
import com.google.gerrit.server.query.account.InternalAccountQuery;
-import com.google.gwtorm.jdbc.JdbcSchema;
-import com.google.gwtorm.server.OrmException;
-import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.renameproject.RenameRevertException;
import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
import java.io.IOException;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -59,69 +50,37 @@
public class DatabaseRenameHandler {
private static final Logger log = LoggerFactory.getLogger(DatabaseRenameHandler.class);
- private final SchemaFactory<ReviewDb> schemaFactory;
- private final ChangeNotes.Factory schemaFactoryNoteDb;
+ private final ChangeNotes.Factory schemaFactory;
private final GitRepositoryManager repoManager;
private final Provider<InternalAccountQuery> accountQueryProvider;
private final Provider<AccountsUpdate> accountsUpdateProvider;
- private NotesMigration migration;
+
+ private Project.NameKey oldProjectKey;
@Inject
public DatabaseRenameHandler(
- SchemaFactory<ReviewDb> schemaFactory,
- ChangeNotes.Factory schemaFactoryNoteDb,
+ ChangeNotes.Factory schemaFactory,
GitRepositoryManager repoManager,
- NotesMigration migration,
Provider<InternalAccountQuery> accountQueryProvider,
@ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
this.accountQueryProvider = accountQueryProvider;
this.schemaFactory = schemaFactory;
- this.schemaFactoryNoteDb = schemaFactoryNoteDb;
this.repoManager = repoManager;
this.accountsUpdateProvider = accountsUpdateProvider;
- this.migration = migration;
}
- public List<Change.Id> getChangeIds(Project.NameKey oldProjectKey)
- throws OrmException, IOException {
+ public List<Change.Id> getChangeIds(Project.NameKey oldProjectKey) throws IOException {
log.debug("Starting to retrieve changes from the DB for project {}", oldProjectKey.get());
- ReviewDb db = schemaFactory.open();
- return (isNoteDb())
- ? getChangeIdsFromNoteDb(oldProjectKey, db)
- : getChangeIdsFromReviewDb(oldProjectKey, db);
- }
+ this.oldProjectKey = oldProjectKey;
- private List<Change.Id> getChangeIdsFromReviewDb(Project.NameKey oldProjectKey, ReviewDb db)
- throws OrmException {
- List<Change.Id> changeIds = new ArrayList<>();
- String query =
- "select change_id from changes where dest_project_name ='" + oldProjectKey.get() + "';";
- try (Connection conn = ((JdbcSchema) db).getConnection();
- Statement stmt = conn.createStatement();
- ResultSet changes = stmt.executeQuery(query)) {
- while (changes != null && changes.next()) {
- Change.Id changeId = new Change.Id(changes.getInt(1));
- changeIds.add(changeId);
- }
- log.debug(
- "Number of changes in reviewDb related to project {} are {}",
- oldProjectKey.get(),
- changeIds.size());
- return changeIds;
- } catch (SQLException e) {
- throw new OrmException(e);
- }
- }
-
- private List<Change.Id> getChangeIdsFromNoteDb(Project.NameKey oldProjectKey, ReviewDb db)
- throws IOException {
List<Change.Id> changeIds = new ArrayList<>();
Stream<ChangeNotesResult> changes =
- schemaFactoryNoteDb.scan(repoManager.openRepository(oldProjectKey), db, oldProjectKey);
+ schemaFactory.scan(repoManager.openRepository(oldProjectKey), oldProjectKey);
Iterator<ChangeNotesResult> iterator = changes.iterator();
while (iterator.hasNext()) {
ChangeNotesResult change = iterator.next();
- changeIds.add(change.id());
+ Change.Id changeId = change.id();
+ changeIds.add(changeId);
}
log.debug(
"Number of changes in noteDb related to project {} are {}",
@@ -130,101 +89,21 @@
return changeIds;
}
- private boolean isNoteDb() {
- return migration.disableChangeReviewDb();
- }
-
public List<Change.Id> rename(
- List<Change.Id> changes,
- Project.NameKey oldProjectKey,
- Project.NameKey newProjectKey,
- Optional<ProgressMonitor> opm)
- throws OrmException, RenameRevertException {
+ List<Change.Id> changes, Project.NameKey newProjectKey, Optional<ProgressMonitor> opm)
+ throws RenameRevertException, IOException, ConfigInvalidException {
opm.ifPresent(pm -> pm.beginTask("Updating changes in the database"));
- ReviewDb db = schemaFactory.open();
- return (isNoteDb())
- ? renameInNoteDb(changes, oldProjectKey, newProjectKey)
- : renameInReviewDb(changes, oldProjectKey, newProjectKey, db);
- }
-
- private List<Change.Id> renameInReviewDb(
- List<Change.Id> changes,
- Project.NameKey oldProjectKey,
- Project.NameKey newProjectKey,
- ReviewDb db)
- throws OrmException {
- try (Connection conn = ((JdbcSchema) db).getConnection();
- Statement stmt = conn.createStatement()) {
- conn.setAutoCommit(false);
- try {
- try {
- log.debug("Updating the changes in reviewDb related to project {}", oldProjectKey.get());
- for (Change.Id cd : changes) {
- stmt.addBatch(
- "update changes set dest_project_name='"
- + newProjectKey.get()
- + "' where change_id ="
- + cd.id
- + ";");
- }
- stmt.executeBatch();
- conn.commit();
- } catch (SQLException e) {
- throw new OrmException(e);
- }
- updateWatchEntries(oldProjectKey, newProjectKey);
- log.debug(
- "Successfully updated the changes in reviewDb related to project {}",
- oldProjectKey.get());
- return changes;
- } catch (OrmException e) {
- try {
- log.error(
- "Failed to update changes in reviewDb for project {}, exception caught: {}. Rolling back the operation.",
- oldProjectKey.get(),
- e.toString());
- conn.rollback();
- } catch (SQLException revertEx) {
- log.error(
- "Failed to rollback changes in reviewDb from project {} to project {}, exception caught: {}",
- newProjectKey.get(),
- oldProjectKey.get(),
- revertEx.toString());
- throw new RenameRevertException(revertEx, e);
- }
- try {
- updateWatchEntries(newProjectKey, oldProjectKey);
- } catch (OrmException revertEx) {
- log.error(
- "Failed to update watched changes in reviewDb from project {} to project {}, exception caught: {}",
- newProjectKey.get(),
- oldProjectKey.get(),
- revertEx.toString());
- throw new RenameRevertException(revertEx, e);
- }
- throw e;
- } finally {
- conn.setAutoCommit(true);
- }
- } catch (SQLException e) {
- throw new OrmException(e);
- }
- }
-
- private List<Change.Id> renameInNoteDb(
- List<Change.Id> changes, Project.NameKey oldProjectKey, Project.NameKey newProjectKey)
- throws OrmException {
log.debug("Updating the changes in noteDb related to project {}", oldProjectKey.get());
try {
- updateWatchEntries(oldProjectKey, newProjectKey);
- } catch (OrmException e) {
+ updateWatchEntries(newProjectKey);
+ } catch (Exception e) {
log.error(
"Failed to update changes in noteDb for project {}, exception caught: {}. Rolling back the operation.",
oldProjectKey.get(),
e.toString());
try {
- updateWatchEntries(newProjectKey, oldProjectKey);
- } catch (OrmException revertEx) {
+ updateWatchEntries(newProjectKey);
+ } catch (Exception revertEx) {
log.error(
"Failed to rollback changes in noteDb from project {} to project {}, exception caught: {}",
newProjectKey.get(),
@@ -240,8 +119,8 @@
return changes;
}
- private void updateWatchEntries(Project.NameKey oldProjectKey, Project.NameKey newProjectKey)
- throws OrmException {
+ private void updateWatchEntries(Project.NameKey newProjectKey)
+ throws IOException, ConfigInvalidException {
for (AccountState a : accountQueryProvider.get().byWatchedProject(oldProjectKey)) {
Account.Id accountId = a.getAccount().getId();
ImmutableMap<ProjectWatchKey, ImmutableSet<NotifyType>> projectWatches =
@@ -275,14 +154,14 @@
a.getUserName(),
newProjectKey.get(),
e);
- throw new OrmException(e);
+ throw e;
} catch (IOException e) {
log.error(
"Updating watch entry for user {} in project {} failed.",
a.getUserName(),
newProjectKey.get(),
e);
- throw new OrmException(e);
+ throw e;
}
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
index 37745ff..f75b784 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
@@ -17,15 +17,11 @@
import com.google.common.util.concurrent.ThreadFactoryBuilder;
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.index.change.ChangeIndexer;
-import com.google.gwtorm.server.OrmException;
-import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.renameproject.Configuration;
import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -41,14 +37,11 @@
public class IndexUpdateHandler {
private static final Logger log = LoggerFactory.getLogger(IndexUpdateHandler.class);
- private final SchemaFactory<ReviewDb> schemaFactory;
private final ChangeIndexer indexer;
private final Configuration config;
@Inject
- public IndexUpdateHandler(
- SchemaFactory<ReviewDb> schemaFactory, ChangeIndexer indexer, Configuration config) {
- this.schemaFactory = schemaFactory;
+ public IndexUpdateHandler(ChangeIndexer indexer, Configuration config) {
this.indexer = indexer;
this.config = config;
}
@@ -102,14 +95,9 @@
@Override
public Boolean call() throws Exception {
- try (ReviewDb db = schemaFactory.open()) {
- indexer.index(db, newProjectKey, changeId);
- monitor.ifPresent(monitor -> monitor.update(1));
- return Boolean.TRUE;
- } catch (OrmException | IOException e) {
- log.error("Failed to reindex change {} from index, Cause: {}", changeId, e);
- throw e;
- }
+ indexer.index(newProjectKey, changeId);
+ monitor.ifPresent(monitor -> monitor.update(1));
+ return Boolean.TRUE;
}
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
index a9bea02..41c36d3 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RenameIT.java
@@ -29,6 +29,7 @@
import com.google.gerrit.acceptance.TestPlugin;
import com.google.gerrit.acceptance.UseLocalDisk;
import com.google.gerrit.acceptance.UseSsh;
+import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
import com.google.gerrit.extensions.client.ProjectWatchInfo;
import com.google.gerrit.reviewdb.client.Change.Id;
import com.google.gerrit.reviewdb.client.Project;
@@ -57,6 +58,8 @@
private static final String REPLICATION_OPTION = "--replication";
private static final String URL = "ssh://localhost:29418";
+ @Inject private RequestScopeOperations requestScopeOperations;
+
@Inject
@Named(CACHE_NAME)
private Cache<Id, String> changeIdProjectCache;
@@ -135,7 +138,7 @@
adminSshSession.exec(
PLUGIN_NAME + " " + NON_EXISTING_NAME + " " + project.get() + " " + REPLICATION_OPTION);
- assertThat(adminSshSession.getError()).contains("Project does not exist");
+ assertThat(adminSshSession.getError()).contains("project " + NON_EXISTING_NAME + " not found");
adminSshSession.assertFailure();
}
@@ -145,19 +148,20 @@
createChange();
adminSshSession.exec(PLUGIN_NAME + " " + NON_EXISTING_NAME + " " + project.get());
- assertThat(adminSshSession.getError()).contains("Project does not exist");
+ assertThat(adminSshSession.getError()).contains("project " + NON_EXISTING_NAME + " not found");
adminSshSession.assertFailure();
}
@Test
@UseLocalDisk
public void testRenameSubscribedFail() throws Exception {
- NameKey superProject = createProject("super-project");
+ NameKey superProject = createProjectOverAPI("super-project", null, true, null);
TestRepository<?> superRepo = cloneProject(superProject);
- NameKey subProject = createProject("subscribed-to-project");
+ NameKey subProject = createProjectOverAPI("subscribed-to-project", null, true, null);
SubmoduleUtil.allowSubmoduleSubscription(
metaDataUpdateFactory,
projectCache,
+ projectConfigFactory,
subProject,
"refs/heads/master",
superProject,
@@ -231,10 +235,10 @@
RestResponse r = renameProjectTo(NEW_PROJECT_NAME);
r.assertOK();
- ProjectState projectState = projectCache.get(new Project.NameKey(NEW_PROJECT_NAME));
+ ProjectState projectState = projectCache.get(Project.nameKey(NEW_PROJECT_NAME));
assertThat(projectState).isNotNull();
assertThat(queryProvider.get().byProject(project)).isEmpty();
- assertThat(queryProvider.get().byProject(new Project.NameKey(NEW_PROJECT_NAME))).isNotEmpty();
+ assertThat(queryProvider.get().byProject(Project.nameKey(NEW_PROJECT_NAME))).isNotEmpty();
}
@Test
@@ -245,12 +249,12 @@
RestResponse r = renameProjectTo(newProjectName);
r.assertBadRequest();
- ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
+ ProjectState projectState = projectCache.get(Project.nameKey(newProjectName));
assertThat(projectState).isNull();
}
private RestResponse renameProjectTo(String newName) throws Exception {
- setApiUser(user);
+ requestScopeOperations.setApiUser(user.id());
sender.clear();
String endPoint = "/projects/" + project.get() + "/" + PLUGIN_NAME + "~rename";
Input i = new Input();
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
index e6fcdd1..68515c4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
@@ -45,6 +45,7 @@
static void allowSubmoduleSubscription(
Server metaDataUpdateFactory,
ProjectCache projectCache,
+ ProjectConfig.Factory projectConfigFactory,
NameKey sub,
String subBranch,
NameKey superName,
@@ -54,7 +55,7 @@
try (MetaDataUpdate md = metaDataUpdateFactory.create(sub)) {
md.setMessage("Added superproject subscription");
SubscribeSection s;
- ProjectConfig pc = ProjectConfig.read(md);
+ ProjectConfig pc = projectConfigFactory.read(md);
if (pc.getSubscribeSections().containsKey(superName)) {
s = pc.getSubscribeSections().get(superName);
} else {
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala b/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala
index 744f245..36665ee 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/renameproject/scenarios/RenameProject.scala
@@ -23,18 +23,18 @@
class RenameProject extends GerritSimulation {
private val data: FeederBuilder = jsonFile(resource).convert(keys).queue
- private val default = name
- private val renamedTo = unique
+ private val projectName = className
+ private val renamedTo = uniqueName
override def replaceOverride(in: String): String = {
- val next = replaceKeyWith("_project", default, in)
+ val next = replaceKeyWith("_project", projectName, in)
replaceKeyWith("_renamed", renamedTo, next)
}
- private val createProject = new CreateProject(default)
+ private val createProject = new CreateProject(projectName)
private val deleteProject = new DeleteProject(renamedTo)
- private val test: ScenarioBuilder = scenario(unique)
+ private val test: ScenarioBuilder = scenario(uniqueName)
.feed(data)
.exec(httpRequest.body(ElFileBody(body)).asJson)