Merge "Gracefully handle OrmException caused by NoSuchChangeException"
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java
index 284e9ed..8d847e9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeSuperSet.java
@@ -32,6 +32,7 @@
import com.google.gerrit.server.change.Submit;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.index.change.ChangeField;
+import com.google.gerrit.server.project.NoSuchChangeException;
import com.google.gerrit.server.project.SubmitRuleEvaluator;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.InternalChangeQuery;
@@ -261,11 +262,19 @@
continue;
}
for (ChangeData topicCd : query().byTopicOpen(topic)) {
- topicCd.changeControl(user);
- if (topicCd.changeControl().isVisible(db, topicCd)) {
- visibleChanges.add(topicCd);
- } else {
- nonVisibleChanges.add(topicCd);
+ try {
+ topicCd.changeControl(user);
+ if (topicCd.changeControl().isVisible(db, topicCd)) {
+ visibleChanges.add(topicCd);
+ } else {
+ nonVisibleChanges.add(topicCd);
+ }
+ } catch (OrmException e) {
+ if (e.getCause() instanceof NoSuchChangeException) {
+ // Ignore and skip this change
+ } else {
+ throw e;
+ }
}
}
topicsSeen.add(topic);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
index a260d02..6526d3c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ChangeData.java
@@ -784,8 +784,16 @@
if (c == null) {
currentApprovals = Collections.emptyList();
} else {
- currentApprovals = ImmutableList.copyOf(approvalsUtil.byPatchSet(
- db, changeControl(), c.currentPatchSetId()));
+ try {
+ currentApprovals = ImmutableList.copyOf(approvalsUtil.byPatchSet(
+ db, changeControl(), c.currentPatchSetId()));
+ } catch (OrmException e) {
+ if (e.getCause() instanceof NoSuchChangeException) {
+ currentApprovals = Collections.emptyList();
+ } else {
+ throw e;
+ }
+ }
}
}
return currentApprovals;
@@ -1002,9 +1010,18 @@
mergeable = true;
} else {
PatchSet ps = currentPatchSet();
- if (ps == null || !changeControl().isPatchVisible(ps, db)) {
- return null;
+ try {
+ if (ps == null || !changeControl().isPatchVisible(ps, db)) {
+ return null;
+ }
+ } catch (OrmException e) {
+ if (e.getCause() instanceof NoSuchChangeException) {
+ return null;
+ } else {
+ throw e;
+ }
}
+
try (Repository repo = repoManager.openRepository(project())) {
Ref ref = repo.getRefDatabase().exactRef(c.getDest().get());
SubmitTypeRecord str = submitTypeRecord();