Merge "Add support for Elasticsearch version 7.5.*" into stable-2.16
diff --git a/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java b/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java
index 169fd2e..d8390b7 100644
--- a/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java
+++ b/java/com/google/gerrit/server/notedb/ChangeDraftUpdate.java
@@ -174,7 +174,6 @@
Map<RevId, RevisionNoteBuilder> builders = cache.getBuilders();
boolean touchedAnyRevs = false;
- boolean hasComments = false;
for (Map.Entry<RevId, RevisionNoteBuilder> e : builders.entrySet()) {
updatedRevs.add(e.getKey());
ObjectId id = ObjectId.fromString(e.getKey().get());
@@ -185,7 +184,6 @@
if (data.length == 0) {
rnm.noteMap.remove(id);
} else {
- hasComments = true;
ObjectId dataBlob = ins.insert(OBJ_BLOB, data);
rnm.noteMap.set(id, dataBlob);
}
@@ -198,10 +196,9 @@
return NO_OP_UPDATE;
}
- // If we touched every revision and there are no comments left, tell the
+ // If there are no comments left, tell the
// caller to delete the entire ref.
- boolean touchedAllRevs = updatedRevs.equals(rnm.revisionNotes.keySet());
- if (touchedAllRevs && !hasComments) {
+ if (!rnm.noteMap.iterator().hasNext()) {
return null;
}
diff --git a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
index 7455419..fb2441b 100644
--- a/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/change/CommentsIT.java
@@ -47,6 +47,7 @@
import com.google.gerrit.extensions.restapi.TopLevelResource;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Patch;
+import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.server.change.ChangeResource;
import com.google.gerrit.server.change.RevisionResource;
import com.google.gerrit.server.notedb.ChangeNoteUtil;
@@ -69,6 +70,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.notes.NoteMap;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -288,6 +290,45 @@
}
@Test
+ public void postCommentsUnreachableData() throws Exception {
+ String file = "file";
+ PushOneCommit push =
+ pushFactory.create(db, admin.getIdent(), testRepo, "first subject", file, "l1\nl2\n");
+
+ String dest = "refs/for/master";
+ PushOneCommit.Result r1 = push.to(dest);
+ r1.assertOkStatus();
+ String changeId = r1.getChangeId();
+ String revId = r1.getCommit().getName();
+
+ PushOneCommit.Result r2 = amendChange(r1.getChangeId());
+ r2.assertOkStatus();
+
+ String draftRefName = RefNames.refsDraftComments(r1.getChange().getId(), admin.getId());
+
+ DraftInput draft = newDraft(file, Side.REVISION, 1, "comment");
+ addDraft(changeId, "1", draft);
+ ReviewInput reviewInput = new ReviewInput();
+ reviewInput.drafts = DraftHandling.PUBLISH;
+ reviewInput.message = "foo";
+ gApi.changes().id(r1.getChangeId()).revision(1).review(reviewInput);
+
+ addDraft(changeId, "2", newDraft(file, Side.REVISION, 2, "comment2"));
+ reviewInput = new ReviewInput();
+ reviewInput.drafts = DraftHandling.PUBLISH_ALL_REVISIONS;
+ reviewInput.message = "bar";
+ gApi.changes().id(r1.getChangeId()).revision(2).review(reviewInput);
+
+ Map<String, List<CommentInfo>> drafts = getDraftComments(changeId, revId);
+ assertThat(drafts.isEmpty()).isTrue();
+
+ try (Repository repo = repoManager.openRepository(allUsers)) {
+ Ref ref = repo.exactRef(draftRefName);
+ assertThat(ref).isNull();
+ }
+ }
+
+ @Test
public void listComments() throws Exception {
String file = "file";
PushOneCommit push =