Remove DatabaseDeleteHandler since ReviewDb is gone
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I3e362f58b6deb9878e76dcfb225fef086753e4e9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
index 040f7e4..2092a28 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
@@ -16,12 +16,10 @@
import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.server.CurrentUser;
-import com.google.gerrit.server.notedb.NotesMigration;
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.googlesource.gerrit.plugins.deleteproject.cache.CacheDeleteHandler;
-import com.googlesource.gerrit.plugins.deleteproject.database.DatabaseDeleteHandler;
import com.googlesource.gerrit.plugins.deleteproject.fs.FilesystemDeleteHandler;
public class DeleteAction extends DeleteProject implements UiAction<ProjectResource> {
@@ -30,25 +28,21 @@
@Inject
DeleteAction(
ProtectedProjects protectedProjects,
- DatabaseDeleteHandler dbHandler,
FilesystemDeleteHandler fsHandler,
CacheDeleteHandler cacheHandler,
Provider<CurrentUser> userProvider,
DeleteLog deleteLog,
DeletePreconditions preConditions,
Configuration cfg,
- HideProject hideProject,
- NotesMigration migration) {
+ HideProject hideProject) {
super(
- dbHandler,
fsHandler,
cacheHandler,
userProvider,
deleteLog,
preConditions,
cfg,
- hideProject,
- migration);
+ hideProject);
this.protectedProjects = protectedProjects;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteCommand.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteCommand.java
index 9fc119e..460ef3e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteCommand.java
@@ -19,7 +19,6 @@
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 java.io.IOException;
import org.kohsuke.args4j.Argument;
@@ -90,7 +89,7 @@
preConditions.assertCanBeDeleted(rsrc, input);
deleteProject.doDelete(rsrc, input);
- } catch (RestApiException | OrmException | IOException e) {
+ } catch (RestApiException | IOException e) {
throw die(e);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
index e3fa6b9..4ffd01c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
@@ -21,15 +21,12 @@
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.notedb.NotesMigration;
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;
import com.googlesource.gerrit.plugins.deleteproject.DeleteProject.Input;
import com.googlesource.gerrit.plugins.deleteproject.cache.CacheDeleteHandler;
-import com.googlesource.gerrit.plugins.deleteproject.database.DatabaseDeleteHandler;
import com.googlesource.gerrit.plugins.deleteproject.fs.FilesystemDeleteHandler;
import java.io.IOException;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
@@ -43,27 +40,22 @@
protected final DeletePreconditions preConditions;
- private final DatabaseDeleteHandler dbHandler;
private final FilesystemDeleteHandler fsHandler;
private final CacheDeleteHandler cacheHandler;
private final Provider<CurrentUser> userProvider;
private final DeleteLog deleteLog;
private final Configuration cfg;
private final HideProject hideProject;
- private NotesMigration migration;
@Inject
DeleteProject(
- DatabaseDeleteHandler dbHandler,
FilesystemDeleteHandler fsHandler,
CacheDeleteHandler cacheHandler,
Provider<CurrentUser> userProvider,
DeleteLog deleteLog,
DeletePreconditions preConditions,
Configuration cfg,
- HideProject hideProject,
- NotesMigration migration) {
- this.dbHandler = dbHandler;
+ HideProject hideProject) {
this.fsHandler = fsHandler;
this.cacheHandler = cacheHandler;
this.userProvider = userProvider;
@@ -71,12 +63,10 @@
this.preConditions = preConditions;
this.cfg = cfg;
this.hideProject = hideProject;
- this.migration = migration;
}
@Override
- public Object apply(ProjectResource rsrc, Input input)
- throws OrmException, IOException, RestApiException {
+ public Object apply(ProjectResource rsrc, Input input) throws IOException, RestApiException {
preConditions.assertDeletePermission(rsrc);
preConditions.assertCanBeDeleted(rsrc, input);
@@ -84,16 +74,12 @@
return Response.none();
}
- public void doDelete(ProjectResource rsrc, Input input)
- throws OrmException, IOException, RestApiException {
+ public void doDelete(ProjectResource rsrc, Input input) throws IOException, RestApiException {
Project project = rsrc.getProjectState().getProject();
boolean preserve = input != null && input.preserve;
Exception ex = null;
try {
if (!preserve || !cfg.projectOnPreserveHidden()) {
- if (!migration.disableChangeReviewDb()) {
- dbHandler.delete(project);
- }
try {
fsHandler.delete(project, preserve);
} catch (RepositoryNotFoundException e) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Module.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Module.java
index 4826666..7a91b29 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Module.java
@@ -26,7 +26,6 @@
import com.google.inject.Inject;
import com.google.inject.internal.UniqueAnnotations;
import com.googlesource.gerrit.plugins.deleteproject.cache.CacheDeleteHandler;
-import com.googlesource.gerrit.plugins.deleteproject.database.DatabaseDeleteHandler;
import com.googlesource.gerrit.plugins.deleteproject.fs.ArchiveRepositoryRemover;
import com.googlesource.gerrit.plugins.deleteproject.fs.DeleteTrashFolders;
import com.googlesource.gerrit.plugins.deleteproject.fs.FilesystemDeleteHandler;
@@ -53,7 +52,6 @@
bind(CapabilityDefinition.class)
.annotatedWith(Exports.named(DELETE_OWN_PROJECT))
.to(DeleteOwnProjectCapability.class);
- bind(DatabaseDeleteHandler.class);
bind(FilesystemDeleteHandler.class);
bind(DeletePreconditions.class);
if (scheduleCleaning) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
deleted file mode 100644
index fa4296d..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright (C) 2013 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.googlesource.gerrit.plugins.deleteproject.database;
-
-import static java.util.Collections.singleton;
-
-import com.google.gerrit.extensions.registration.DynamicItem;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.reviewdb.server.ReviewDbUtil;
-import com.google.gerrit.server.StarredChangesUtil;
-import com.google.gerrit.server.UserInitiated;
-import com.google.gerrit.server.account.AccountState;
-import com.google.gerrit.server.account.AccountsUpdate;
-import com.google.gerrit.server.account.ProjectWatches.ProjectWatchKey;
-import com.google.gerrit.server.change.AccountPatchReviewStore;
-import com.google.gerrit.server.index.change.ChangeIndexer;
-import com.google.gerrit.server.project.NoSuchChangeException;
-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.ResultSet;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class DatabaseDeleteHandler {
- private static final Logger log = LoggerFactory.getLogger(DatabaseDeleteHandler.class);
-
- private final Provider<ReviewDb> dbProvider;
- private final StarredChangesUtil starredChangesUtil;
- private final DynamicItem<AccountPatchReviewStore> accountPatchReviewStore;
- private final ChangeIndexer indexer;
- private final Provider<InternalAccountQuery> accountQueryProvider;
- private final Provider<AccountsUpdate> accountsUpdateProvider;
-
- @Inject
- public DatabaseDeleteHandler(
- Provider<ReviewDb> dbProvider,
- StarredChangesUtil starredChangesUtil,
- DynamicItem<AccountPatchReviewStore> accountPatchReviewStore,
- ChangeIndexer indexer,
- Provider<InternalAccountQuery> accountQueryProvider,
- @UserInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
- this.dbProvider = dbProvider;
- this.starredChangesUtil = starredChangesUtil;
- this.accountPatchReviewStore = accountPatchReviewStore;
- this.indexer = indexer;
- this.accountQueryProvider = accountQueryProvider;
- this.accountsUpdateProvider = accountsUpdateProvider;
- }
-
- public void delete(Project project) throws OrmException {
- ReviewDb db = ReviewDbUtil.unwrapDb(dbProvider.get());
- Connection conn = ((JdbcSchema) db).getConnection();
- try {
- conn.setAutoCommit(false);
- try {
- atomicDelete(db, project, getChangesList(project, conn));
- conn.commit();
- } finally {
- conn.setAutoCommit(true);
- }
- } catch (SQLException e) {
- try {
- conn.rollback();
- } catch (SQLException ex) {
- throw new OrmException(ex);
- }
- throw new OrmException(e);
- }
- }
-
- private List<Change.Id> getChangesList(Project project, Connection conn) throws SQLException {
- try (PreparedStatement changesForProject =
- conn.prepareStatement("SELECT change_id FROM changes WHERE dest_project_name = ?")) {
- changesForProject.setString(1, project.getName());
- try (java.sql.ResultSet resultSet = changesForProject.executeQuery()) {
- List<Change.Id> changeIds = new ArrayList<>();
- while (resultSet.next()) {
- changeIds.add(new Change.Id(resultSet.getInt(1)));
- }
- return changeIds;
- }
- } catch (SQLException e) {
- throw new SQLException("Unable to get list of changes for project " + project.getName(), e);
- }
- }
-
- private void deleteChanges(ReviewDb db, Project.NameKey project, List<Change.Id> changeIds)
- throws OrmException {
-
- for (Change.Id id : changeIds) {
- try {
- starredChangesUtil.unstarAll(project, id);
- } catch (NoSuchChangeException e) {
- // we can ignore the exception during delete
- }
- ResultSet<PatchSet> patchSets = db.patchSets().byChange(id);
- if (patchSets != null) {
- deleteFromPatchSets(db, patchSets);
- }
-
- // In the future, use schemaVersion to decide what to delete.
- db.patchComments().delete(db.patchComments().byChange(id));
- db.patchSetApprovals().delete(db.patchSetApprovals().byChange(id));
-
- db.changeMessages().delete(db.changeMessages().byChange(id));
- db.changes().deleteKeys(Collections.singleton(id));
-
- // Delete from the secondary index
- try {
- indexer.delete(id);
- } catch (IOException e) {
- log.error("Failed to delete change {} from index", id, e);
- }
- }
- }
-
- private void deleteFromPatchSets(ReviewDb db, ResultSet<PatchSet> patchSets) throws OrmException {
- for (PatchSet patchSet : patchSets) {
- accountPatchReviewStore.get().clearReviewed(patchSet.getId());
- db.patchSets().delete(Collections.singleton(patchSet));
- }
- }
-
- public void atomicDelete(ReviewDb db, Project project, List<Change.Id> changeIds)
- throws OrmException {
-
- deleteChanges(db, project.getNameKey(), changeIds);
-
- for (AccountState a : accountQueryProvider.get().byWatchedProject(project.getNameKey())) {
- Account.Id accountId = a.getAccount().getId();
- for (ProjectWatchKey watchKey : a.getProjectWatches().keySet()) {
- if (project.getNameKey().equals(watchKey.project())) {
- try {
- accountsUpdateProvider
- .get()
- .update(
- "Delete Project Watches via API",
- accountId,
- u -> u.deleteProjectWatches(singleton(watchKey)));
- } catch (IOException | ConfigInvalidException e) {
- log.error(
- "Removing watch entry for user {} in project {} failed.",
- a.getUserName(),
- project.getName(),
- e);
- }
- }
- }
- }
- }
-}