RFR(XS): 8234011: (zipfs) Memory leak in ZipFileSystem.releaseDeflater()
Volker Simonis
simonisv at amazon.com
Thu Nov 14 13:53:47 UTC 2019
On 13.11.19 18:54, Lance Andersen wrote:
> Hi Volker,
>
> Thank you for doing this.
>
> As Christoph mentioned, you can just do Path.of() and create the file
> in the work directory for the test.
>
Done.
> If possible, I would use TestNG as that is consistent with the vast
> majority of the tests.
>
I don't particularly like to nest one test harness within another one :)
But seriously, I think using JUnit or TestNG makes sens if you write a
whole test suit which uses the features of such a test harness (e.g.
tear up, tear down, etc.) But for small trivial tests I really prefer to
use plain JTreg. This also has the big advantage that is becomes trivial
to run such a test stand-alone which may come handy if you have to debug it.
So if you don't insist, I'll prefer to leave the test as it is.
> I also believe the rest of the comments below are worth addressing.
>
Besides that, I've addressed all the other points mentioned by
Christoph. Please find the new webrev at:
http://cr.openjdk.java.net/~simonis/webrevs/2019/8234011.v1/
Thank you and best regards,
Volker
> Thank you again for the fix
>
> Best
> Lance
>> On Nov 13, 2019, at 11:26 AM, Langer, Christoph
>> <christoph.langer at sap.com <mailto:christoph.langer at sap.com>> wrote:
>>
>> Hi Volker,
>>
>> good catch in ZipFileSystem The fix is the right thing to do.
>>
>> I have a few remarks to the test, though:
>>
>> Line 52, initialization of the File object: I think you should just do
>> Path zipFile = Paths.get("file.zip"); When the test is run in the
>> jtreg framework, it's running in its own scratch directory, so no need
>> to use java.io.tmpdir. You can also leave cleanup to jtreg and don't
>> need to delete the file in the end (in the finally block). However,
>> you should probably check whether the file exists in the beginning and
>> delete it in that case.
>>
>> Line 55ff: You don't need to use this URI thing any more. You can
>> simply do: try (FileSystem fs = FileSystems.newFileSystem(zipFile,
>> Map.of("create", true))) { (line 58).
>>
>> Line 61/62: You're using a Vector, wow You should rather use
>> ArrayList, I think...
>>
>> Line 85: This should rather be:
>> @SuppressWarnings("unchecked")
>> int inflater_count =
>> ((List<Inflater>)inflaters.get(fs)).size();
>> Same for line 89.
>>
>> Line 93 (Catch clause): I think we should fail in that case, too.
>> Otherwise, if the implementation would change, the test could run
>> unnoticed for years, testing basically nothing...
>>
>> Best regards,
>> Christoph
>>
>>
>>> -----Original Message-----
>>> From: core-libs-dev <core-libs-dev-bounces at openjdk.java.net
>>> <mailto:core-libs-dev-bounces at openjdk.java.net>> On Behalf
>>> Of Simonis, Volker
>>> Sent: Mittwoch, 13. November 2019 16:23
>>> To: core-libs-dev at openjdk.java.net
>>> <mailto:core-libs-dev at openjdk.java.net>
>>> Subject: RFR(XS): 8234011: (zipfs) Memory leak in
>>> ZipFileSystem.releaseDeflater()
>>>
>>> Hi,
>>>
>>> can I please get a review for this trivial fix of an old
>>> copy-and-paste error:
>>>
>>> http://cr.openjdk.java.net/~simonis/webrevs/2019/8234011/
>>> https://bugs.openjdk.java.net/browse/JDK-8234011
>>>
>>> ZipFileSystem caches MAX_FLATER (currently 20) Inflater/Deflater objects.
>>> However the logic for reusing Deflaters is wrong because it
>>> references the
>>> Inflater List when checking against the number of already cached objects.
>>> This seems like a day-one copy and paste error.
>>>
>>> Notice that this issue is not as critical as it appears, because
>>> retaining of
>>> additional Deflaters only happens when more than MAX_FLATER are used
>>> and released concurrently. I.e. the maximum number of cached Deflaters is
>>> the maximal number of Deflaters that are released while no new
>>> Deflater is
>>> requested. In practice this is usually still a small number, less than
>>> MAX_FLATERS. Nevertheless we can easily construct an example which
>>> demonstrates the memory leak (see the JTRegtest in the patch) and because
>>> the fix is trivial we should really fix this.
>>>
>>> Thank you and best regards,
>>> Volker
>>>
>>>
>>>
>>> Amazon Development Center Germany GmbH
>>> Krausenstr. 38
>>> 10117 Berlin
>>> Geschaeftsfuehrung: Christian Schlaeger, Ralf Herbrich
>>> Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
>>> Sitz: Berlin
>>> Ust-ID: DE 289 237 879
>>>
>>>
>>
>
> <http://oracle.com/us/design/oracle-email-sig-198324.gif>
> <http://oracle.com/us/design/oracle-email-sig-198324.gif><http://oracle.com/us/design/oracle-email-sig-198324.gif>
> <http://oracle.com/us/design/oracle-email-sig-198324.gif>Lance Andersen|
> Principal Member of Technical Staff | +1.781.442.2037
> Oracle Java Engineering
> 1 Network Drive
> Burlington, MA 01803
> Lance.Andersen at oracle.com <mailto:Lance.Andersen at oracle.com>
>
>
>
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Ralf Herbrich
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879
More information about the core-libs-dev
mailing list