Don't leak Repository and RevWalk instances during notedb parsing
Change-Id: Ia8d99f0387206295678234a549dc22a062e5655b
This commit is contained in:
@@ -44,8 +44,8 @@ import com.google.gerrit.reviewdb.client.Account;
|
|||||||
import com.google.gerrit.reviewdb.client.Change;
|
import com.google.gerrit.reviewdb.client.Change;
|
||||||
import com.google.gerrit.reviewdb.client.ChangeMessage;
|
import com.google.gerrit.reviewdb.client.ChangeMessage;
|
||||||
import com.google.gerrit.reviewdb.client.PatchLineComment;
|
import com.google.gerrit.reviewdb.client.PatchLineComment;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
|
||||||
import com.google.gerrit.reviewdb.client.PatchLineComment.Status;
|
import com.google.gerrit.reviewdb.client.PatchLineComment.Status;
|
||||||
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSet.Id;
|
import com.google.gerrit.reviewdb.client.PatchSet.Id;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||||
import com.google.gerrit.reviewdb.client.PatchSetApproval.LabelId;
|
import com.google.gerrit.reviewdb.client.PatchSetApproval.LabelId;
|
||||||
@@ -152,7 +152,7 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class Parser {
|
private static class Parser implements AutoCloseable {
|
||||||
private final Change.Id changeId;
|
private final Change.Id changeId;
|
||||||
private final ObjectId tip;
|
private final ObjectId tip;
|
||||||
private final RevWalk walk;
|
private final RevWalk walk;
|
||||||
@@ -184,6 +184,11 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> {
|
|||||||
commentsForBase = ArrayListMultimap.create();
|
commentsForBase = ArrayListMultimap.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
repo.close();
|
||||||
|
}
|
||||||
|
|
||||||
private void parseAll() throws ConfigInvalidException, IOException, ParseException {
|
private void parseAll() throws ConfigInvalidException, IOException, ParseException {
|
||||||
walk.markStart(walk.parseCommit(tip));
|
walk.markStart(walk.parseCommit(tip));
|
||||||
for (RevCommit commit : walk) {
|
for (RevCommit commit : walk) {
|
||||||
@@ -626,9 +631,7 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RevWalk walk = new RevWalk(reader);
|
RevWalk walk = new RevWalk(reader);
|
||||||
try {
|
try (Parser parser = new Parser(change, rev, walk, repoManager)) {
|
||||||
Change change = getChange();
|
|
||||||
Parser parser = new Parser(change, rev, walk, repoManager);
|
|
||||||
parser.parseAll();
|
parser.parseAll();
|
||||||
|
|
||||||
if (parser.status != null) {
|
if (parser.status != null) {
|
||||||
|
@@ -68,7 +68,7 @@ public class DraftCommentNotes extends AbstractChangeNotes<DraftCommentNotes> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class Parser {
|
private static class Parser implements AutoCloseable {
|
||||||
private final Change.Id changeId;
|
private final Change.Id changeId;
|
||||||
private final ObjectId tip;
|
private final ObjectId tip;
|
||||||
private final RevWalk walk;
|
private final RevWalk walk;
|
||||||
@@ -92,6 +92,11 @@ public class DraftCommentNotes extends AbstractChangeNotes<DraftCommentNotes> {
|
|||||||
draftPsComments = ArrayListMultimap.create();
|
draftPsComments = ArrayListMultimap.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
repo.close();
|
||||||
|
}
|
||||||
|
|
||||||
private void parseDraftComments() throws IOException, ConfigInvalidException {
|
private void parseDraftComments() throws IOException, ConfigInvalidException {
|
||||||
walk.markStart(walk.parseCommit(tip));
|
walk.markStart(walk.parseCommit(tip));
|
||||||
noteMap = CommentsInNotesUtil.parseCommentsFromNotes(repo,
|
noteMap = CommentsInNotesUtil.parseCommentsFromNotes(repo,
|
||||||
@@ -167,13 +172,16 @@ public class DraftCommentNotes extends AbstractChangeNotes<DraftCommentNotes> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RevWalk walk = new RevWalk(reader);
|
RevWalk walk = new RevWalk(reader);
|
||||||
Parser parser = new Parser(getChangeId(), walk, rev, repoManager,
|
try (Parser parser = new Parser(getChangeId(), walk, rev, repoManager,
|
||||||
draftsProject, author);
|
draftsProject, author)) {
|
||||||
parser.parseDraftComments();
|
parser.parseDraftComments();
|
||||||
|
|
||||||
buildCommentTable(draftBaseComments, parser.draftBaseComments);
|
buildCommentTable(draftBaseComments, parser.draftBaseComments);
|
||||||
buildCommentTable(draftPsComments, parser.draftPsComments);
|
buildCommentTable(draftPsComments, parser.draftPsComments);
|
||||||
noteMap = parser.noteMap;
|
noteMap = parser.noteMap;
|
||||||
|
} finally {
|
||||||
|
walk.release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user