From 466ff564688418f24472d707cb1a41a65538720e Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Wed, 7 Jan 2015 15:09:54 +0800 Subject: [PATCH 1/3] Resource exhausted because of unclosed LDAP connection When auth.type is set to LDAP (not LDAP_BIND), there will be two ldap connections. The 1st connection will bind LDAP to find the DN of the login user, and this connection will be closed in the try...finally block. But the 2nd LDAP connection used to validate user password is not closed at all. Too much unclosed TCP connections cause resource exhausted and latter LDAP authentication will fail. Change-Id: Ia5d83cccde8a0e6590d3e2fadc638d67f6e300e8 Reported-by: Wang Yiming Signed-off-by: Jiang Xin (cherry picked from commit 7ac03844b38b7682b16d6b4ae701d410f84b18fe) --- .../com/google/gerrit/server/auth/ldap/LdapAuthBackend.java | 2 +- .../main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java index cf68a8bc39..eb6249c3bf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapAuthBackend.java @@ -89,7 +89,7 @@ public class LdapAuthBackend implements AuthBackend { // We found the user account, but we need to verify // the password matches it before we can continue. // - helper.authenticate(m.getDN(), req.getPassword()); + helper.authenticate(m.getDN(), req.getPassword()).close(); } return new AuthUser(new AuthUser.UUID(username), username); } finally { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java index 7cde019749..da7ebdbd56 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/auth/ldap/LdapRealm.java @@ -206,7 +206,7 @@ public class LdapRealm implements Realm { // We found the user account, but we need to verify // the password matches it before we can continue. // - helper.authenticate(m.getDN(), who.getPassword()); + helper.authenticate(m.getDN(), who.getPassword()).close(); } who.setDisplayName(apply(schema.accountFullName, m)); From 4ecf2efa7a6ca561784d97f70affbf2b3a9c84ec Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Fri, 21 Dec 2018 08:37:51 +0100 Subject: [PATCH 2/3] Update JGit to latest 4.5.x release JGit releases older than 4.5 are known to be prone to issues with MissingObjectExceptions. Change-Id: Ia9099a5ac8fcbaf873e3354b5a47d2178c97444a Signed-off-by: Edwin Kempin --- lib/jgit/BUCK | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK index 050e1c887b..dd962cd964 100644 --- a/lib/jgit/BUCK +++ b/lib/jgit/BUCK @@ -1,13 +1,13 @@ include_defs('//lib/maven.defs') REPO = MAVEN_CENTRAL # Leave here even if set to MAVEN_CENTRAL. -VERS = '4.0.0.201506090130-r' +VERS = '4.5.4.201711221230-r' maven_jar( name = 'jgit', id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS, - bin_sha1 = '859b5dbae0372bc0744503b9593119410c0474f2', - src_sha1 = '5a7b7e179852c20f6af8581b96cf6441b23025a5', + bin_sha1 = 'b30f322c7d441260f4fa454ce5de65cf7e961274', + src_sha1 = '459f648f8bbf10e1aa0b122d4f9919e1779922e9', license = 'jgit', repository = REPO, unsign = True, @@ -22,7 +22,7 @@ maven_jar( maven_jar( name = 'jgit-servlet', id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS, - sha1 = 'd86da25c9e1042612ebe3be1e027cce4d9a8e4c9', + sha1 = '264fac29b6007146127156113ed3d4e0aa922b39', license = 'jgit', repository = REPO, deps = [':jgit'], @@ -36,7 +36,7 @@ maven_jar( maven_jar( name = 'jgit-archive', id = 'org.eclipse.jgit:org.eclipse.jgit.archive:' + VERS, - sha1 = '3b1f5cefdd65bbe81851f638ee1f461c9cb5df20', + sha1 = '6b0b919ee42bf8276193c3c03581634bc3aa7e18', license = 'jgit', repository = REPO, deps = [':jgit', @@ -53,7 +53,7 @@ maven_jar( maven_jar( name = 'junit', id = 'org.eclipse.jgit:org.eclipse.jgit.junit:' + VERS, - sha1 = 'e86c5b8ec06624d3cd2b8c11fd0c528281751329', + sha1 = '58ca0a0fba72f2db6e6b27bd464dc44a946a617c', license = 'DO_NOT_DISTRIBUTE', repository = REPO, unsign = True, From 4a3c2d14caa7355cf9b12a14ff931bab29b539dc Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Thu, 27 Dec 2018 08:49:27 +0100 Subject: [PATCH 3/3] Update JGit to latest 4.5.x release JGit releases older than 4.5 are known to be prone to issues with MissingObjectExceptions. Since this is a major JGit version upgrade some code needs to be adapted to changed JGit API. Change-Id: Ia9099a5ac8fcbaf873e3354b5a47d2178c97444a Signed-off-by: Edwin Kempin --- .../com/google/gerrit/acceptance/GitUtil.java | 2 +- .../acceptance/git/HttpPushForReviewIT.java | 5 +++ .../gerrit/acceptance/git/SubmitOnPushIT.java | 4 +- .../rest/change/AbstractSubmit.java | 6 +-- .../rest/project/CreateProjectIT.java | 4 +- .../google/gerrit/httpd/raw/CatServlet.java | 2 +- .../gerrit/pgm/init/AllProjectsConfig.java | 6 +-- .../com/google/gerrit/server/ChangeUtil.java | 8 ++-- .../gerrit/server/change/ChangeKindCache.java | 4 +- .../server/change/CherryPickChange.java | 4 +- .../google/gerrit/server/change/Files.java | 2 +- .../gerrit/server/change/GetArchive.java | 4 +- .../gerrit/server/change/GetContent.java | 4 +- .../google/gerrit/server/change/GetPatch.java | 4 +- .../gerrit/server/change/GetRelated.java | 2 +- .../gerrit/server/change/IncludedIn.java | 2 +- .../gerrit/server/change/Mergeable.java | 2 +- .../server/changedetail/RebaseChange.java | 4 +- .../google/gerrit/server/git/BanCommit.java | 38 +++++++++---------- .../com/google/gerrit/server/git/MergeOp.java | 4 +- .../google/gerrit/server/git/MergeUtil.java | 23 ++++------- .../gerrit/server/git/NotesBranchUtil.java | 4 +- .../google/gerrit/server/git/SubmoduleOp.java | 4 +- .../com/google/gerrit/server/git/TagSet.java | 4 +- .../gerrit/server/git/VersionedMetaData.java | 6 +-- .../server/index/ChangeBatchIndexer.java | 6 +-- .../gerrit/server/mail/ChangeEmail.java | 2 +- .../mail/PatchSetNotificationSender.java | 2 +- .../gerrit/server/notedb/ChangeNotes.java | 2 +- .../google/gerrit/server/patch/PatchFile.java | 2 +- .../gerrit/server/patch/PatchListLoader.java | 10 ++--- .../server/patch/PatchScriptBuilder.java | 2 +- .../server/patch/PatchSetInfoFactory.java | 2 +- .../google/gerrit/server/project/GetHead.java | 2 +- .../gerrit/server/project/ListDashboards.java | 4 +- .../server/project/PerformCreateProject.java | 2 +- .../server/query/change/ChangeData.java | 2 +- .../query/change/ConflictsPredicate.java | 2 +- .../server/query/change/RevWalkPredicate.java | 2 +- .../main/java/gerrit/PRED_commit_edits_2.java | 2 +- .../server/change/IncludedInResolverTest.java | 2 +- .../gerrit/server/notedb/ChangeNotesTest.java | 8 ++-- .../server/tools/hooks/CommitMsgHookTest.java | 4 +- lib/jgit/BUCK | 13 ++++--- plugins/reviewnotes | 2 +- 45 files changed, 112 insertions(+), 113 deletions(-) diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java index 3234ffdf27..0356f72cdc 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/GitUtil.java @@ -184,7 +184,7 @@ public class GitUtil { return ChangeIdUtil.computeChangeId(null, null, i, i, msg); } } finally { - rw.release(); + rw.close(); } } diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java index 465befde49..4d7897c3ed 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/HttpPushForReviewIT.java @@ -15,13 +15,18 @@ package com.google.gerrit.acceptance.git; import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.junit.Before; import java.io.IOException; +import java.net.URISyntaxException; public class HttpPushForReviewIT extends AbstractPushForReview { @Before public void selectHttpUrl() throws GitAPIException, IOException { + CredentialsProvider.setDefault(new UsernamePasswordCredentialsProvider( + admin.username, admin.httpPassword)); selectProtocol(Protocol.HTTP); } } diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java index a73169dc18..763b25fe8e 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmitOnPushIT.java @@ -292,7 +292,7 @@ public class SubmitOnPushIT extends AbstractDaemonTest { assertEquals(admin.email, c.getAuthorIdent().getEmailAddress()); assertEquals(admin.email, c.getCommitterIdent().getEmailAddress()); } finally { - rw.release(); + rw.close(); } } finally { r.close(); @@ -310,7 +310,7 @@ public class SubmitOnPushIT extends AbstractDaemonTest { assertEquals(admin.email, c.getAuthorIdent().getEmailAddress()); assertEquals(serverIdent.getEmailAddress(), c.getCommitterIdent().getEmailAddress()); } finally { - rw.release(); + rw.close(); } } finally { r.close(); diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java index 13901c32e5..fa906a497a 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java @@ -265,7 +265,7 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { repo.getRef("refs/heads/master").getObjectId())); return Lists.newArrayList(rw); } finally { - rw.release(); + rw.close(); } } finally { repo.close(); @@ -278,7 +278,7 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { try { return rw.parseCommit(repo.getRef(name).getObjectId()); } finally { - rw.release(); + rw.close(); } } finally { repo.close(); @@ -300,7 +300,7 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { ObjectId newTreeId = repo.resolve("refs/heads/master^{tree}"); return getLatestDiff(repo, oldTreeId, newTreeId); } finally { - rw.release(); + rw.close(); } } finally { repo.close(); diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java index b59384077e..fe3d3af18f 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/CreateProjectIT.java @@ -232,8 +232,8 @@ public class CreateProjectIT extends AbstractDaemonTest { tw.reset(); } } finally { - tw.release(); - rw.release(); + tw.close(); + rw.close(); repo.close(); } } diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java index 9aec609bdd..756c42762e 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/raw/CatServlet.java @@ -209,7 +209,7 @@ public class CatServlet extends HttpServlet { return; } } finally { - reader.release(); + reader.close(); } } catch (IOException e) { getServletContext().log("Cannot read repository", e); diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java index cd4a0b8840..03f6d1c672 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/AllProjectsConfig.java @@ -136,15 +136,15 @@ public class AllProjectsConfig extends VersionedMetaData { updateRef(repo, ident, newRevision, "commit: " + msg); revision = newRevision; } finally { - rw.release(); + rw.close(); } } finally { if (inserter != null) { - inserter.release(); + inserter.close(); inserter = null; } if (reader != null) { - reader.release(); + reader.close(); reader = null; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java index 939be28583..b8d1e47d81 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java @@ -280,7 +280,7 @@ public class ChangeUtil { oi.flush(); revertCommit = revWalk.parseCommit(id); } finally { - oi.release(); + oi.close(); } RefControl refControl = ctl.getRefControl(); @@ -344,7 +344,7 @@ public class ChangeUtil { return change.getId(); } finally { - revWalk.release(); + revWalk.close(); } } finally { git.close(); @@ -403,7 +403,7 @@ public class ChangeUtil { oi.flush(); newCommit = revWalk.parseCommit(id); } finally { - oi.release(); + oi.close(); } PatchSet.Id id = nextPatchSetId(git, change.currentPatchSetId()); @@ -426,7 +426,7 @@ public class ChangeUtil { return change.getId(); } finally { - revWalk.release(); + revWalk.close(); } } finally { git.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java index f6e57737a6..2c3f4fd2ce 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeKindCache.java @@ -144,7 +144,7 @@ public class ChangeKindCache { // having the same tree as would exist when the prior commit is // cherry-picked onto the next commit's new first parent. ThreeWayMerger merger = MergeUtil.newThreeWayMerger( - key.repo, MergeUtil.createDryRunInserter(), key.strategyName); + key.repo, MergeUtil.createDryRunInserter(key.repo), key.strategyName); merger.setBase(prior.getParent(0)); if (merger.merge(next.getParent(0), prior) && merger.getResultTreeId().equals(next.getTree())) { @@ -154,7 +154,7 @@ public class ChangeKindCache { } } finally { key.repo = null; - walk.release(); + walk.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java index 3ae46025b4..ce025ef8be 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/CherryPickChange.java @@ -146,7 +146,7 @@ public class CherryPickChange { mergeUtilFactory.create(projectState).createCherryPickFromCommit(git, oi, mergeTip, commitToCherryPick, committerIdent, commitMessage, revWalk); } finally { - oi.release(); + oi.close(); } if (cherryPickCommit == null) { @@ -184,7 +184,7 @@ public class CherryPickChange { cherryPickCommit, refControl); } } finally { - revWalk.release(); + revWalk.close(); } } finally { git.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java index 1c404266e2..c4a979d277 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java @@ -267,7 +267,7 @@ class Files implements ChildCollection { db.get().accountPatchReviews().insert(inserts); return pathList; } finally { - reader.release(); + reader.close(); } } finally { git.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java index 9a4ab21213..b0fea3c15b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetArchive.java @@ -79,7 +79,7 @@ class GetArchive implements RestReadView { @Override public void close() throws IOException { - rw.release(); + rw.close(); repo.close(); } }; @@ -92,7 +92,7 @@ class GetArchive implements RestReadView { return bin; } finally { if (close) { - rw.release(); + rw.close(); } } } finally { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java index 86a3da6f4a..f9b9bf6824 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetContent.java @@ -71,10 +71,10 @@ public class GetContent implements RestReadView { }; return result.setContentLength(object.getSize()).base64(); } finally { - tw.release(); + tw.close(); } } finally { - rw.release(); + rw.close(); } } finally { repo.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java index 4a8be84379..4e40d629b0 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetPatch.java @@ -102,7 +102,7 @@ public class GetPatch implements RestReadView { @Override public void close() throws IOException { - rw.release(); + rw.close(); repo.close(); } }; @@ -123,7 +123,7 @@ public class GetPatch implements RestReadView { return bin; } finally { if (close) { - rw.release(); + rw.close(); } } } finally { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java index 81debde27d..1a6b515bf6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java @@ -81,7 +81,7 @@ public class GetRelated implements RestReadView { info.changes = walk(rsrc, rw, ref); return info; } finally { - rw.release(); + rw.close(); } } finally { git.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java index 8df69579f9..e2c8c65c9e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/IncludedIn.java @@ -68,7 +68,7 @@ class IncludedIn implements RestReadView { } return new IncludedInInfo(IncludedInResolver.resolve(r, rw, rev)); } finally { - rw.release(); + rw.close(); } } finally { r.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java index fb8c4e4bfb..a4de1dc59d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java @@ -201,7 +201,7 @@ public class Mergeable implements RestReadView { "Cannot merge test change %d", change.getId().get()), e); return false; } finally { - rw.release(); + rw.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java index 286d178089..f87619e3f1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RebaseChange.java @@ -139,10 +139,10 @@ public class RebaseChange { throw new IOException(e.getMessage()); } finally { if (inserter != null) { - inserter.release(); + inserter.close(); } if (rw != null) { - rw.release(); + rw.close(); } if (git != null) { git.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java index 329e7e0261..2276d201c8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/BanCommit.java @@ -59,24 +59,24 @@ public class BanCommit { */ public static NoteMap loadRejectCommitsMap(Repository repo) throws IOException { - try { - Ref ref = repo.getRef(RefNames.REFS_REJECT_COMMITS); - if (ref == null) { - return NoteMap.newEmptyMap(); - } + try { + Ref ref = repo.getRef(RefNames.REFS_REJECT_COMMITS); + if (ref == null) { + return NoteMap.newEmptyMap(); + } - RevWalk rw = new RevWalk(repo); - try { - RevCommit map = rw.parseCommit(ref.getObjectId()); - return NoteMap.read(rw.getObjectReader(), map); - } finally { - rw.release(); - } - } catch (IOException badMap) { - throw new IOException("Cannot load " - + RefNames.REFS_REJECT_COMMITS, badMap); - } - } + RevWalk rw = new RevWalk(repo); + try { + RevCommit map = rw.parseCommit(ref.getObjectId()); + return NoteMap.read(rw.getObjectReader(), map); + } finally { + rw.close(); + } + } catch (IOException badMap) { + throw new IOException("Cannot load " + RefNames.REFS_REJECT_COMMITS, + badMap); + } + } private final Provider currentUser; private final GitRepositoryManager repoManager; @@ -139,8 +139,8 @@ public class BanCommit { } return result; } finally { - revWalk.release(); - inserter.release(); + revWalk.close(); + inserter.close(); } } finally { repo.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java index abb3be6554..da72009647 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeOp.java @@ -297,10 +297,10 @@ public class MergeOp { throw new MergeException("Cannot query the database", e); } finally { if (inserter != null) { - inserter.release(); + inserter.close(); } if (rw != null) { - rw.release(); + rw.close(); } if (repo != null) { repo.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java index b9624fea26..a005742fd9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java @@ -394,7 +394,7 @@ public class MergeUtil { return false; } - final ThreeWayMerger m = newThreeWayMerger(repo, createDryRunInserter()); + final ThreeWayMerger m = newThreeWayMerger(repo, createDryRunInserter(repo)); try { return m.merge(new AnyObjectId[] {mergeTip, toMerge}); } catch (NoMergeBaseException e) { @@ -441,7 +441,7 @@ public class MergeUtil { // try { final ThreeWayMerger m = - newThreeWayMerger(repo, createDryRunInserter()); + newThreeWayMerger(repo, createDryRunInserter(repo)); m.setBase(toMerge.getParent(0)); return m.merge(mergeTip, toMerge); } catch (IOException e) { @@ -468,28 +468,21 @@ public class MergeUtil { } } - public static ObjectInserter createDryRunInserter() { - return new ObjectInserter() { + public static ObjectInserter createDryRunInserter(Repository db) { + final ObjectInserter delegate = db.newObjectInserter(); + return new ObjectInserter.Filter() { @Override - public ObjectId insert(int objectType, long length, InputStream in) - throws IOException { - return idFor(objectType, length, in); + protected ObjectInserter delegate() { + return delegate; } - @Override public PackParser newPackParser(InputStream in) throws IOException { throw new UnsupportedOperationException(); } - @Override public void flush() throws IOException { // Do nothing. } - - @Override - public void release() { - // Do nothing. - } }; } @@ -668,7 +661,7 @@ public class MergeUtil { } @Override - public void release() { + public void close() { } }); return (ThreeWayMerger) m; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java index f1b0a78de7..fb96a6b5de 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/NotesBranchUtil.java @@ -153,8 +153,8 @@ public class NotesBranchUtil { } updateRef(notesBranch); } finally { - revWalk.release(); - reader.release(); + revWalk.close(); + reader.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java index e4e059bfc0..b91eadc56b 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java @@ -380,7 +380,7 @@ public class SubmoduleOp { + subscriber.get(), e); } finally { if (recRw != null) { - recRw.release(); + recRw.close(); } if (pdb != null) { pdb.close(); @@ -400,7 +400,7 @@ public class SubmoduleOp { b.finish(); return dc; } finally { - rw.release(); + rw.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java index 3eb927394e..99c7bdcfaf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/TagSet.java @@ -147,7 +147,7 @@ class TagSet { } } finally { if (rw != null) { - rw.release(); + rw.close(); } } } @@ -189,7 +189,7 @@ class TagSet { } catch (IOException e) { log.warn("Error building tags for repository " + projectName, e); } finally { - rw.release(); + rw.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java index c665d67293..e531f5f021 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/VersionedMetaData.java @@ -117,7 +117,7 @@ public abstract class VersionedMetaData { revision = id != null ? new RevWalk(reader).parseCommit(id) : null; onLoad(); } finally { - reader.release(); + reader.close(); reader = null; } } @@ -299,12 +299,12 @@ public abstract class VersionedMetaData { newTree = null; if (inserter != null) { - inserter.release(); + inserter.close(); inserter = null; } if (reader != null) { - reader.release(); + reader.close(); reader = null; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java index 5ee240b8a6..aeacac5120 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/ChangeBatchIndexer.java @@ -310,7 +310,7 @@ public class ChangeBatchIndexer { getPathsAndIndex(id); } } finally { - walk.release(); + walk.close(); } return null; } @@ -344,7 +344,7 @@ public class ChangeBatchIndexer { } } } finally { - df.release(); + df.close(); } } catch (Exception e) { fail("Failed to index commit " + b.name(), false, e); @@ -389,7 +389,7 @@ public class ChangeBatchIndexer { oi.flush(); return id; } finally { - oi.release(); + oi.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java index 4e51a730c6..8e2dc03d5a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java @@ -407,7 +407,7 @@ public abstract class ChangeEmail extends NotificationEmail { log.error("Cannot format patch", e); return ""; } finally { - fmt.release(); + fmt.close(); git.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java index 93fc063fc8..8d35165cf8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/PatchSetNotificationSender.java @@ -94,7 +94,7 @@ public class PatchSetNotificationSender { commit = revWalk.parseCommit(ObjectId.fromString( updatedPatchSet.getRevision().get())); } finally { - revWalk.release(); + revWalk.close(); } final PatchSetInfo info = patchSetInfoFactory.get(commit, updatedPatchSet.getId()); final List footerLines = commit.getFooterLines(); 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 286bf4ad80..dbeebedb84 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 @@ -435,7 +435,7 @@ public class ChangeNotes extends VersionedMetaData { this.reviewers = reviewers.build(); submitRecords = ImmutableList.copyOf(parser.submitRecords); } finally { - walk.release(); + walk.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java index 81f435201c..c65262f6f3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchFile.java @@ -75,7 +75,7 @@ public class PatchFile { bTree = bCommit.getTree(); } } finally { - reader.release(); + reader.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java index 744c379402..ea8f1912f0 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchListLoader.java @@ -165,7 +165,7 @@ public class PatchListLoader extends CacheLoader { return new PatchList(a, b, againstParent, entries.toArray(new PatchListEntry[entries.size()])); } finally { - reader.release(); + reader.close(); } } @@ -281,7 +281,7 @@ public class PatchListLoader extends CacheLoader { } @Override - public void release() { + public void close() { } }); @@ -319,7 +319,7 @@ public class PatchListLoader extends CacheLoader { Map resolved = new HashMap(); for (Map.Entry> entry : r.entrySet()) { MergeResult p = entry.getValue(); - TemporaryBuffer buf = new TemporaryBuffer.LocalFile(10 * 1024 * 1024); + TemporaryBuffer buf = new TemporaryBuffer.LocalFile(null, 10 * 1024 * 1024); try { fmt.formatMerge(buf, p, "BASE", oursName, theirsName, "UTF-8"); buf.close(); @@ -381,7 +381,7 @@ public class PatchListLoader extends CacheLoader { } ins.flush(); } finally { - ins.release(); + ins.close(); } if (save) { @@ -400,7 +400,7 @@ public class PatchListLoader extends CacheLoader { oi.flush(); return id; } finally { - oi.release(); + oi.close(); } } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java index 0db7dee1af..d0fb7b1457 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchScriptBuilder.java @@ -119,7 +119,7 @@ class PatchScriptBuilder { try { return build(content, comments, history); } finally { - reader.release(); + reader.close(); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java index 8165bf2124..5180854be8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/patch/PatchSetInfoFactory.java @@ -94,7 +94,7 @@ public class PatchSetInfoFactory { info.setParents(toParentInfos(src.getParents(), rw)); return info; } finally { - rw.release(); + rw.close(); } } catch (IOException e) { throw new PatchSetInfoNotAvailableException(e); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java index af7559acd8..623b8c2901 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetHead.java @@ -69,7 +69,7 @@ public class GetHead implements RestReadView { } throw new AuthException("not allowed to see HEAD"); } finally { - rw.release(); + rw.close(); } } throw new ResourceNotFoundException(Constants.HEAD); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java index fbfcc8f604..658cf13f1a 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ListDashboards.java @@ -100,7 +100,7 @@ class ListDashboards implements RestReadView { } return all; } finally { - rw.release(); + rw.close(); } } finally { git.close(); @@ -134,7 +134,7 @@ class ListDashboards implements RestReadView { } } } finally { - tw.release(); + tw.close(); } return list; } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java index ca006de93c..68f868f8da 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/PerformCreateProject.java @@ -301,7 +301,7 @@ public class PerformCreateProject { + createProjectArgs.getProjectName(), e); throw e; } finally { - oi.release(); + oi.close(); } } } 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 333c343c60..87d456447b 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 @@ -441,7 +441,7 @@ public class ChangeData { commitMessage = c.getFullMessage(); commitFooters = c.getFooterLines(); } finally { - walk.release(); + walk.close(); } } finally { repo.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java index ee6587dce0..b1f8406c92 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/ConflictsPredicate.java @@ -138,7 +138,7 @@ class ConflictsPredicate extends OrPredicate { } catch (NoSuchProjectException e) { throw new IllegalStateException(e); } finally { - rw.release(); + rw.close(); } } finally { repo.close(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java index fd57a44f40..23bbb12e34 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/query/change/RevWalkPredicate.java @@ -109,7 +109,7 @@ public abstract class RevWalkPredicate extends OperatorPredicate { try { return match(repo, rw, args); } finally { - rw.release(); + rw.close(); } } finally { repo.close(); diff --git a/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java b/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java index 2c7949c191..ab632079bf 100644 --- a/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java +++ b/gerrit-server/src/main/java/gerrit/PRED_commit_edits_2.java @@ -130,7 +130,7 @@ public class PRED_commit_edits_2 extends Predicate.P2 { } catch (IOException err) { throw new JavaException(this, 1, err); } finally { - reader.release(); + reader.close(); } return engine.fail(); diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java index ae58819900..9c45267fff 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/change/IncludedInResolverTest.java @@ -127,7 +127,7 @@ public class IncludedInResolverTest extends RepositoryTestCase { @After public void tearDown() throws Exception { - revWalk.release(); + revWalk.close(); super.tearDown(); } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java index f2ad057247..fae6fadd87 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java @@ -208,7 +208,7 @@ public class ChangeNotesTest { assertEquals(author.getWhen(), committer.getWhen()); assertEquals(author.getTimeZone(), committer.getTimeZone()); } finally { - walk.release(); + walk.close(); } } @@ -229,7 +229,7 @@ public class ChangeNotesTest { + "Label: -Code-Review\n", commit.getFullMessage()); } finally { - walk.release(); + walk.close(); } } @@ -277,7 +277,7 @@ public class ChangeNotesTest { assertEquals(author.getWhen(), committer.getWhen()); assertEquals(author.getTimeZone(), committer.getTimeZone()); } finally { - walk.release(); + walk.close(); } } @@ -302,7 +302,7 @@ public class ChangeNotesTest { + "Submitted-with: RULE_ERROR Problem with patch set: 1\n", commit.getFullMessage()); } finally { - walk.release(); + walk.close(); } } diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java index 17fe068581..8d41e0ab2a 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/tools/hooks/CommitMsgHookTest.java @@ -431,7 +431,7 @@ public class CommitMsgHookTest extends HookTestCase { oi.flush(); return e; } finally { - oi.release(); + oi.close(); } } @@ -457,7 +457,7 @@ public class CommitMsgHookTest extends HookTestCase { fail(Constants.HEAD + " did not change: " + ref.getResult()); } } finally { - oi.release(); + oi.close(); } } } diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK index 40cf6e816d..b6dd17d3ac 100644 --- a/lib/jgit/BUCK +++ b/lib/jgit/BUCK @@ -1,12 +1,13 @@ include_defs('//lib/maven.defs') -VERS = '3.4.2.201412180340-r' +REPO = MAVEN_CENTRAL # Leave here even if set to MAVEN_CENTRAL. +VERS = '4.5.4.201711221230-r' maven_jar( name = 'jgit', id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS, - bin_sha1 = 'cc501e3db3f5a00713382753d7260ecf2d1fe7fa', - src_sha1 = '19c71b70882b83f4e15a888ff8ef4f2e0507efa0', + bin_sha1 = 'b30f322c7d441260f4fa454ce5de65cf7e961274', + src_sha1 = '459f648f8bbf10e1aa0b122d4f9919e1779922e9', license = 'jgit', unsign = True, deps = [':ewah'], @@ -20,7 +21,7 @@ maven_jar( maven_jar( name = 'jgit-servlet', id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS, - sha1 = '9965a9cbb9673572848dea6d6eecf51d3e7d360c', + sha1 = '264fac29b6007146127156113ed3d4e0aa922b39', license = 'jgit', deps = [':jgit'], unsign = True, @@ -33,7 +34,7 @@ maven_jar( maven_jar( name = 'jgit-archive', id = 'org.eclipse.jgit:org.eclipse.jgit.archive:' + VERS, - sha1 = '4232b91d3f6e77aff86894170fdfb68d455906a8', + sha1 = '6b0b919ee42bf8276193c3c03581634bc3aa7e18', license = 'jgit', deps = [':jgit', '//lib/commons:compress', @@ -49,7 +50,7 @@ maven_jar( maven_jar( name = 'junit', id = 'org.eclipse.jgit:org.eclipse.jgit.junit:' + VERS, - sha1 = '8e69847e02cea0898c31e3a3066c8b4416938593', + sha1 = '58ca0a0fba72f2db6e6b27bd464dc44a946a617c', license = 'DO_NOT_DISTRIBUTE', unsign = True, deps = [':jgit'], diff --git a/plugins/reviewnotes b/plugins/reviewnotes index b544447649..0fc4b128d2 160000 --- a/plugins/reviewnotes +++ b/plugins/reviewnotes @@ -1 +1 @@ -Subproject commit b544447649d9ee3b3f78a6a1a7f839cb6a361292 +Subproject commit 0fc4b128d290b20c4ef962d30529faae6e89a169