Avoid NullPointerException when calling ChangeNotes
So far, when calling loadChangeFromDb(), if for any reason the change
does not exist in the database and reading from NoteDb is not enabled, a
NullPointerException was thrown.
As a consequence, some callers, as for example delete-project plugin,
are broken. In this case, the plugin is already handling the
NoSuchChangeException but not expecting a NullPointerException which
leads to a 500 error in the UI and a 'fatal: internal server error' when
invoked from ssh.
Change-Id: If7930a769ac88fc235537703b03b23b9a60e7a6b
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
index 4993a5d..d35fd12 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
@@ -159,22 +159,18 @@
checkArgument(project != null, "project is required");
Change change = readOneReviewDbChange(db, changeId);
- if (change == null && args.migration.readChanges()) {
- // Change isn't in ReviewDb, but its primary storage might be in NoteDb.
- // Prepopulate the change exists with proper noteDbState field.
- change = newNoteDbOnlyChange(project, changeId);
- } else {
- checkNotNull(change, "change %s not found in ReviewDb", changeId);
- checkArgument(
- change.getProject().equals(project),
- "passed project %s when creating ChangeNotes for %s, but actual project is %s",
- project,
- changeId,
- change.getProject());
+ if (change == null) {
+ if (args.migration.readChanges()) {
+ return newNoteDbOnlyChange(project, changeId);
+ }
+ throw new NoSuchChangeException(changeId);
}
-
- // TODO: Throw NoSuchChangeException when the change is not found in the
- // database
+ checkArgument(
+ change.getProject().equals(project),
+ "passed project %s when creating ChangeNotes for %s, but actual project is %s",
+ project,
+ changeId,
+ change.getProject());
return change;
}