summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Milanesio <luca.milanesio@gmail.com>2015-10-02 11:21:23 +0100
committerDavid Pursehouse <david.pursehouse@sonymobile.com>2015-11-22 03:35:16 +0000
commitc7163d5efb68ef075db803f73ba78fb80a9d478c (patch)
tree00017423b809afd840040768b8888a84b612429e
parent025c1afee2823ec71349f9908f3b522a7406a17a (diff)
Skip non-existent projects when migrating to schema version 108
When migrating to Schema 108 we can safely skip the projects that do not exist anymore. List the skipped projects to the console so that they can be safely removed from the database at a later time. Change-Id: Ibd84cd96391ceff12777d4ee18204d85849abb5e
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_108.java30
1 files changed, 24 insertions, 6 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_108.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_108.java
index cfafb37841..4e76325347 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_108.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_108.java
@@ -14,14 +14,17 @@
package com.google.gerrit.server.schema;
+import com.google.common.base.Joiner;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.SetMultimap;
+import com.google.common.collect.Sets;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Change.Status;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.client.Project.NameKey;
import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.git.GitRepositoryManager;
@@ -44,6 +47,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
+import java.util.SortedSet;
public class Schema_108 extends SchemaVersion {
private final GitRepositoryManager repoManager;
@@ -59,7 +63,7 @@ public class Schema_108 extends SchemaVersion {
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException {
ui.message("Listing all changes ...");
SetMultimap<Project.NameKey, Change.Id> openByProject =
- getOpenChangesByProject(db);
+ getOpenChangesByProject(db, ui);
ui.message("done");
ui.message("Updating groups for open changes ...");
@@ -140,7 +144,9 @@ public class Schema_108 extends SchemaVersion {
}
private SetMultimap<Project.NameKey, Change.Id> getOpenChangesByProject(
- ReviewDb db) throws OrmException {
+ ReviewDb db, UpdateUI ui) throws OrmException {
+ SortedSet<NameKey> projects = repoManager.list();
+ SortedSet<NameKey> nonExistentProjects = Sets.newTreeSet();
SetMultimap<Project.NameKey, Change.Id> openByProject =
HashMultimap.create();
for (Change c : db.changes().all()) {
@@ -149,10 +155,22 @@ public class Schema_108 extends SchemaVersion {
continue;
}
- // The old "submitted" state is not supported anymore
- // (thus status is null) but it was an opened state and needs
- // to be migrated as such
- openByProject.put(c.getProject(), c.getId());
+ NameKey projectKey = c.getProject();
+ if (!projects.contains(projectKey)) {
+ nonExistentProjects.add(projectKey);
+ } else {
+ // The old "submitted" state is not supported anymore
+ // (thus status is null) but it was an opened state and needs
+ // to be migrated as such
+ openByProject.put(projectKey, c.getId());
+ }
+ }
+
+ if (!nonExistentProjects.isEmpty()) {
+ ui.message("Detected open changes referring to the following non-existent projects:");
+ ui.message(Joiner.on(", ").join(nonExistentProjects));
+ ui.message("It is highly recommended to remove\n"
+ + "the obsolete open changes, comments and patch-sets from your DB.\n");
}
return openByProject;
}