Re: [JGIT PATCH 0/4] RepositoryTestCase cleanups
From: Robin Rosenberg <hidden>
Date: 2016-06-15 22:45:42
torsdag 27 november 2008 22:49:16 skrev Shawn O. Pearce:
Robin Rosenberg [off-list ref] wrote:quoted
Ok, so here is an attempt to improve the ability of the JGit's unit tests to delete temporary repositories. This has probably been seen by many, but Jonas Fonseca raised the issue.Hmpph. This takes 19 seconds to run the suite, where it used to be only 2 seconds on the same system. The slower run isn't something I'm too happy about, actually I'd like to make the run even faster than 2 seconds.
So maybe we should clean up less. Every new test repo we create has a new name so we could do without cleaning up so much. The cleanup however is a verification that we close (and can close) our resources, though it only works on Windows :/ On unix we could spawn lsof but that is really really slow.
If the issue is mmap'd files, why don't we instead disable mmap on Windows during JUnit tests, and use the non-mmap variant of pack access? At least do that for the bulk of the tests, and then have a single test case which tests the mmap code path but has careful System.gc calls in place to try and ensure we can actually clean up the temporary files.
We would then need some other really slow test to play rough with memory mapping and gc. As I mentioned above it is actually about closing resources in general, mmapped files being an especially nasty case.
I'd actually like to get that Repository refactoring done soon, someone else was asking about it for the RefDatabase (to store the refs in a SQL database so JGit ties into JTA) but I may also want it for Gerrit 2 - I'm looking at doing something that would put 200,000 refs per year into a repository. That's so large that most operations can't afford to scan the entire ref database, and it really cannot be loose. ;-)
Would be cool, but having that diff engine is more important to me.
Refactoring repository is a fair chunk of work, disabling the mmap feature under Windows in JUnit may be easier. Hmm, according to WindowCache's <clinit> its default by false. Why is it enabling on Windows? The only code that calls WindowCache.reconfigure() is in the Eclipse plugin, so pure JGit unit tests shouldn't be turning on mmap code *at all*. Which also points out a gap in our tests. Nothing new, we have lots of gaps. *sigh*
Yep. :/ -- robin