aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* [infer] Fix resource leaks in RebaseCommandMatthias Sohn2016-12-181-7/+9
| | | | | Bug: 509385 Change-Id: I9fbdfda59f7bc577aab55dc92ff897b00b5cb050 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* [infer] Fix resource leak in BlameCommandMatthias Sohn2016-12-181-5/+6
| | | | | Bug: 509385 Change-Id: Ic57fd3bf940752229e35102e7761823f7d3d8732 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Ignore infer output folderMatthias Sohn2016-12-181-0/+1
| | | | | | | | Infer [1] is a static code checker. [1] http://fbinfer.com/ Change-Id: I880cefe0a20f6af88ab10f6e862fda44fbe0883d Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Update maven-source-plugin to 3.0.1 to fix OOM during buildMatthias Sohn2016-12-181-1/+1
| | | | | | | | | | Recently we frequently suffer from OutOfMemoryError when creating source archives in the Maven build. maven-source-plugin 3.0.0 has a bug [1] causing OOM which is fixed in 3.0.1. [1] https://issues.apache.org/jira/browse/MSOURCES-94 Change-Id: Ie900bd546c42523c5a04e22bd3d3f510d2a81ca2 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Fix FileSnapshot.isModifiedChristian Halstrick2016-12-133-23/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FileSnapshot.isModified may have reported a file to be clean although it was actually dirty. Imagine you have a FileSnapshot on file f. lastmodified and lastread are both t0. Now time is t1 and you 1) modify the file 2) update the FileSnapshot of the file (lastModified=t1, lastRead=t1) 3) modify the file again 4) wait 3 seconds 5) ask the Filesnapshot whether the file is dirty or not. It erroneously answered it's clean. Any file which has been modified longer than 2.5 seconds ago was reported to be clean. As the test shows that's not always correct. The real-world problem fixed by this change is the following: * A gerrit server using JGit to serve git repositories is processing fetch requests while simultaneously a native git garbage collection runs on the repo. * At time t1 native git writes temporary files in the pack folder setting the mtime of the pack folder to t1. * A fetch request causes JGit to search for new packfiles and JGit remembers this scan in a Filesnapshot on the packs folder. Since the gc is not finished JGit doesn't see any new packfiles. * The fetch is processed and the gc ends while the filesystem timer is still t1. GC writes a new packfile and deletes the old packfile. * 3 seconds later another request arrives. JGit does not yet know about the new packfile but is also not rescanning the pack folder because it cached that the last scan happened at time t1 and pack folder's mtime is also t1. Now JGit will not be able to resolve any object contained in this new pack. This behavior may be persistent if objects referenced by the ref/meta/config branch are affected so gerrit can't read permissions stored in the refs/meta/config branch anymore and will not allow any pushes anymore. The pack folder will not change its mtime and therefore no rescan will take place. Change-Id: I3efd0ccffeb97b01207dc3e7a6b85c6b06928fad Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Decide whether to "Accept-Encoding: gzip" on a request-by-request basisZhen Chen2016-12-092-18/+78
| | | | | | | | | When the reply is already compressed (e.g. a packfile fetched using dumb HTTP), "Content-Encoding: gzip" wastes bandwidth relative to sending the content raw. So don't "Accept-Encoding: gzip" for such requests. Change-Id: Id25702c0b0ed2895df8e9790052c3417d713572c Signed-off-by: Zhen Chen <czhen@google.com>
* Configure max heap size for Maven buildMatthias Sohn2016-12-091-0/+1
| | | | | | | We faced many OOM errors on Hudson recently, so increase maximum heap size. Change-Id: I81d4d562a06afcd8b4ff7d1f69c4d7f12099afad Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* Upgrade errorprone to 2.0.15David Pursehouse2016-12-081-1/+1
| | | | | Change-Id: I05d3e12178f8f0b5a687c8e09c2dcf80580acfb4 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Replace usage of deprecated EWAHCompressedBitmap.add(long)David Pursehouse2016-12-072-3/+3
| | | | | | | | | | The add(long) method was deprecated in favor of addWord(long) in the 0.8.3 release of JavaEWAH [1]. [1] https://github.com/lemire/javaewah/commit/e443cf5e Change-Id: I89c397ed02e040f57663d04504399dfdc0889626 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Expose getObjectToTransfer method of FileLfsServletJacek Centkowski2016-12-061-1/+14
| | | | | | | | | Providing own implementation to doGet/doPut methods is troublesome when this method is private. Change-Id: I098cdc5cb90410eaaebc56c88c2d9e168584dd6d Signed-off-by: Jacek Centkowski <geminica.programs@gmail.com> Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* Merge branch 'stable-4.5'David Pursehouse2016-12-061-2/+3
|\ | | | | | | | | | | | | | | * stable-4.5: Use the same variable to check and extract LFS object id Change-Id: I314bd4373f40843c68853b3999f60d85e08628d9 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
| * Use the same variable to check and extract LFS object idJacek Centkowski2016-11-241-2/+3
| | | | | | | | | | | | | | | | It is easier to maintain when the same variable is used for both check and extraction of LFS object id. Change-Id: I5406f9bc4a085aa164c4565a9667ad2925105190 Signed-off-by: Jacek Centkowski <geminica.programs@gmail.com>
* | Upgrade buck to latest versionDavid Pursehouse2016-12-011-1/+1
| | | | | | | | | | | | | | | | | | | | The latest version removes dependency on `realpath` which is not available by default on OSX. This upgrades buck to the same version used on Gerrit master. Change-Id: I584211986be4e64f68d4eb905c09d3c5d60133e7 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Fix merge-base calculationChristian Halstrick2016-11-282-11/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix JGits merge-base calculation in case of inconsistent commit times. JGit was potentially failing to compute correct merge-bases when the commit times where inconsistent (a parent commit was younger than a child commit). The code in MergeBaseGenerator was aware of the fact that sometimes the discovery of a merge base x can occur after the parents of x have been seen (see comment in #carryOntoOne()). But in the light of inconsistent commit times it was possible that these parents of a merge-base have already been returned as a merge-base. This commit fixes the bug by buffering all commits generated by MergeBaseGenerator. It is expected that this buffer will be small because the number of merge-bases will be small. Additionally a new flag is used to mark the ancestors of merge-bases. This allows to filter out the unwanted commits. Bug: 507584 Change-Id: I9cc140b784c3231b972bd2c3de61a789365237ab
* | Configure Maven to run tests concurrently by defaultMatthias Sohn2016-11-251-0/+1
| | | | | | | | | | | | | | | | Maven 3.3.1 or later supports sharing project specific command line options https://maven.apache.org/docs/3.3.1/release-notes.html Change-Id: I61ddf08ff8c0ebb76fc2e1d0a0cd5902c65f9469 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Enable error-prone for the Maven buildDavid Pursehouse2016-11-251-1/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | - update maven-compiler-plugin to 3.6.0 - exclude InsecureCipherFactory from errorprone checks See https://maven.apache.org/guides/mini/guide-default-execution-ids.html#Example:_Configuring_compile_to_run_twice https://groups.google.com/d/topic/error-prone-discuss/pzT45ZMCQOc/discussion Change-Id: Ic16d3f15cf2ef40de62fe6bfe4b8b35f0c1edc4e Signed-off-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Fix encoding of LFSPointer filesChristian Halstrick2016-11-243-5/+85
| | | | | | | | | | | | | | | | | | | | LFS pointer files have to be UTF-8 with \n as line ending character. That is described in [1]. Fix JGit to follow this rules. [1] https://github.com/github/git-lfs/blob/master/docs/spec.md Bug: 507120 Change-Id: Ib6bd13f1cc17f1a3de125249b4f250b7b0692396
* | Specify RevisionSyntaxException message in Repository#resolveGrace Wang2016-11-241-3/+11
| | | | | | | | | | | | | | | | This does not address all cases where no message is specified, only cases where Repository#isValidRefName returns false. Change-Id: Ib88cdabfdcdf37be0053e06949b0e21ad87a9575 Signed-off-by: Grace Wang <gracewang92@gmail.com>
* | Add missing @since tags for new APIMatthias Sohn2016-11-232-1/+5
| | | | | | | | Change-Id: I900d745195f58c067fadf209bb92cd3c852c59f4 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | dump HTTP: Avoid being confused by Content-Length of a gzipped streamZhen Chen2016-11-223-4/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TransportHttp sets 'Accept-Encoding: gzip' to allow the server to compress HTTP responses. When fetching a loose object over HTTP, it uses the following code to read the response: InputStream in = openInputStream(c); int len = c.getContentLength(); return new FileStream(in, len); If the content is gzipped, openInputStream decompresses it and produces the correct content for the object. Unfortunately the Content-Length header contains the length of the compressed stream instead of the actual content length. Use a length of -1 instead since we don't know the actual length. Loose objects are already compressed, so the gzip encoding typically produces a longer compressed payload. The value from the Content-Length is too high, producing EOFException: Short read of block. Change-Id: I8d5284dad608e3abd8217823da2b365e8cd998b0 Signed-off-by: Zhen Chen <czhen@google.com> Helped-by: Jonathan Nieder <jrn@google.com>
* | Merge "Close input stream after use"Jonathan Nieder2016-11-221-7/+11
|\ \
| * | Close input stream after useZhen Chen2016-11-221-7/+11
| | | | | | | | | | | | | | | | | | | | | The InputStream in FileStream in downloadPack is never closed. Change-Id: I59975d0b8d51f4b3e3ba9d4496b254d508cb936d Signed-off-by: Zhen Chen <czhen@google.com>
* | | Fix content length in HttpClientConnectionZhen Chen2016-11-221-2/+11
|/ / | | | | | | | | | | | | | | | | | | | | | | | | Per the interface specification, the getContentLength method should return -1 if content length is unknown or greater than Integer.MAX_VALUE. For chunked transfer encoding, the content length is not included in the header, hence will cause a NullPointerException when trying to parse the content length header. Change-Id: Iaa36b5c146a8d654e364635fa0bd2d14129baf17 Signed-off-by: Zhen Chen <czhen@google.com>
* | Define MonotonicClock interface for advanced timestampsShawn Pearce2016-11-2120-41/+780
| | | | | | | | | | | | | | | | | | | | | | | | | | MonotonicClock can be implemented to provide more certainity about time than the standard System.currentTimeMillis() can provide. This can be used by classes such as PersonIdent and Ketch to rely on more certainity about time moving in a strictly ascending order. Gerrit Code Review can also leverage this interface through its embedding of JGit and use MonotonicClock and ProposedTimestamp to provide stronger assurance that NoteDb time is moving forward. Change-Id: I1a3cbd49a39b150a0d49b36d572da113ca83a786
* | Add Oxygen target platform and remove target platforms older than MarsMatthias Sohn2016-11-175-101/+27
| | | | | | | | Change-Id: I196c3c95dafa5ea5f165d20aaac2ce07a2c53631 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Update JavaEWAH to 1.1.6Dave Borowitz2016-11-1710-16/+99
| | | | | | | | | | | | | | | | Use Oxygen M3 Orbit repository which provides the bundles built using the new orbit-recipe based build. CQ: 11658 Change-Id: I7f3dcc966732b32830c75d5daa55383bd028d182 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Add missing @since tags for new APIMatthias Sohn2016-11-142-0/+3
| | | | | | | | Change-Id: Iaf83f66637d6a13e4a6d096ba8529553af7e30ed Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
* | Fix cryptoVer constant name to CRYPTO_VERShawn Pearce2016-11-141-3/+3
| | | | | | | | Change-Id: I46c39f2eceb4d58e49bd6273b87711f35250ab5c
* | RepositoryCache: simplify codeShawn Pearce2016-11-141-6/+3
| | | | | | | | | | | | | | | | | | | | | | The type parameters can now be inferred when creating ConcurrentHashMap. A for loop over the keys of a ConcurrentHashMap doesn't need to use an Iterator<Map.Entry>; loop syntax handles this just fine over keySet(). Change-Id: I1f85bb81b77f7cd1caec77197f2f0bf78e4a82a1
* | Add missing @Override found by ErrorProneShawn Pearce2016-11-144-17/+25
| | | | | | | | Change-Id: I585242507815aad4aa0103fd55a6c369e342ab33
* | Deprecate SafeBufferedOutputStreamShawn Pearce2016-11-1415-82/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Java 8 fixed the silent flush during close issue by FilterOutputStream (base class of BufferedOutputStream) using try-with-resources to close the stream, getting a behavior matching what JGit's SafeBufferedOutputStream was doing: try { flush(); } finally { out.close(); } With Java 8 as the minimum required version to run JGit it is no longer necessary to override close() or have this class. Deprecate the class, and use the JRE's version of close. Change-Id: Ic0584c140010278dbe4062df2e71be5df9a797b3
* | Merge "Support {get,set}GitwebDescription on InMemoryRepository"David Pursehouse2016-11-141-0/+13
|\ \
| * | Support {get,set}GitwebDescription on InMemoryRepositoryShawn Pearce2016-11-141-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | This simplifies testing for Gerrit Code Review where application code is updating the repository description and the test harness uses InMemoryRepository. Change-Id: I9fbcc028ae24d90209a862f5f4f03e46bfb71db0
* | | Organize importsDavid Pursehouse2016-11-1488-159/+149
|/ / | | | | | | | | Change-Id: I7c545d06b1bced678c020fab9af1382bc4416b6e Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | Add {get,set}GitwebDescription to RepositoryShawn Pearce2016-11-145-6/+174
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This method pair allows the caller to read and modify the description file that is traditionally used by gitweb and cgit when rendering a repository on the web. Gerrit Code Review has offered this feature for years as part of its GitRepositoryManager interface, but its fundamentally a feature of JGit and its Repository abstraction. git-core typically initializes a repository with a default value inside the description file. During getDescription() this string is converted to null as it is never a useful description. Change-Id: I0a457026c74e9c73ea27e6f070d5fbaca3439be5
* | Merge "Don't serialize internal hash collision chain link"Shawn Pearce2016-11-141-1/+1
|\ \
| * | Don't serialize internal hash collision chain linkThomas Wolf2016-10-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ObjectId is serializable, and so are its subtypes. Ensure that serialization does not follow the hash collision chain internal to the ObjectIdOwnerMap, otherwise completely unrelated objects may get serialized when a RevObject is serialized. Note that serializing a RevCommit or RevTag may serialize quite a few objects due to the parent/object links they contain. A user has no real control over how many objects will be written when a RevCommit is serialized. C.f [1]. This change does not resolve that, but in any case this internal hash collision chain link should not participate in serialization. [1] https://github.com/gitblit/gitblit/pull/1141 Change-Id: Ice331a9dc80a59ca360fcc04adaff8b5e750d847 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
* | | Merge "Reduce synchronized scope around ConcurrentHashMap"Shawn Pearce2016-11-141-15/+15
|\ \ \
| * | | Reduce synchronized scope around ConcurrentHashMapPhilipp Marx2016-11-121-15/+15
| | | | | | | | | | | | | | | | | | | | Change-Id: I982a78070efb6bc2d3395330456d62e0d5ce6da7 Signed-off-by: Philipp Marx <smigfu@googlemail.com>
* | | | Merge changes Id89b3cd0,I5b0fb122Shawn Pearce2016-11-142-4/+21
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | * changes: FileLfsServlet: Make sendError protected Make ObjectUploadListener public
| * | | | FileLfsServlet: Make sendError protectedDavid Pursehouse2016-11-131-1/+13
| | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: Id89b3cd0da86a535946feb15254737bbf8d855d4 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
| * | | | Make ObjectUploadListener publicDavid Pursehouse2016-11-131-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I5b0fb1220bc0e5c660f1b5373abc5868d985c60b Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
* | | | | Merge "StreamCopyThread: Remove unused AtomicInteger import"Jonathan Nieder2016-11-131-1/+0
|\ \ \ \ \
| * | | | | StreamCopyThread: Remove unused AtomicInteger importJonathan Nieder2016-11-131-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I forgot to do this in 97f3baa0d3df7ed26a55b2240cc5ce1a04861a4c (StreamCopyThread: Remove unnecessary flushCount, 2016-11-13). Change-Id: Iaed9f345848cf0f854c9d0debcf94bc831d53054
* | | | | | Merge "Extract insecure Cipher factory"Matthias Sohn2016-11-132-6/+71
|\ \ \ \ \ \
| * | | | | | Extract insecure Cipher factoryShawn Pearce2016-11-132-6/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bazel runs ErrorProne by default and ErrorProne rightly complains that allowing the user to specify any Cipher can lead to insecure code (in particular, getCipher("AES") operates in ECB mode). Unfortunately this is required to support existing repositories insecurely stored on S3. Extract the insecure factory code to its own class so this can be built as a java_library() with this check disabled. Change-Id: I34f381965bdaa25d5aa8ebf6d8d5271b238334e0
* | | | | | | Merge "Get rid of SoftReference in RepositoryCache"Jonathan Nieder2016-11-132-23/+12
|\ \ \ \ \ \ \ | |_|/ / / / / |/| | | | | |
| * | | | | | Get rid of SoftReference in RepositoryCacheHugo Arès2016-11-132-23/+12
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that RepositoryCache have a time based eviction strategy, get rid of the strategy to evict cache entries if heap memory is running low, i.e. soft references. Main reason why time based eviction was implemented was to offer an alternative to the unpredictable soft references. Relying on soft references is not working, especially in large heap. The JVM GC will consider collecting soft references as last resort before throwing an out of memory error. For example, an application like Gerrit configured with a 128GB heap, GC will wait until all 128GB is filled before collecting the soft references so the application will be suffering long pauses caused by GC for a long time already. In other words, you will have to restart application because it's unusable before JVM eviction kicks in. Keeping the SoftReference in RepositoryCache is causing more harm than good. If you use the time based eviction (which is the default strategy) and want to tune JVM to release soft references more aggressively, it will release repositories from the cache even though they are not expired which defeats the purpose of the repository cache. Gerrit uses Lucene library which uses soft references and this is causing a "memory leak" except if you configure JVM to release soft references more aggressively which have the nasty side effect of evicting non expired repositories from the cache. Change-Id: I9940bd800464c7f007696d0ccde52ea617b2ebce Signed-off-by: Hugo Arès <hugo.ares@ericsson.com>
* | | | | | StreamCopyThread: flush cannot interrupt a writeJonathan Nieder2016-11-131-13/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because flush calls interrupt with writeLock held, it cannot interrupt a write. Simplify by no longer defending against that. Change-Id: Ib0b39b425335ff7b0ea1b1733562da5392576a15
* | | | | | StreamCopyThread: Remove unnecessary flushCountJonathan Nieder2016-11-131-12/+1
| |/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | StreamCopyThread#run consistently interrupts itself whenever it discovers it has been interrupted by StreamCopyThread#flush while not reading. The flushCount is not needed to avoid lost flushes. All in-tree users of StreamCopyThread never flush. As a nice side benefit, this avoids the expense of atomic operations that have no purpose for those users. Change-Id: I1afe415cd09a67f1891c3baf712a9003ad553062