RFR(XS): 8234011: (zipfs) Memory leak in ZipFileSystem.releaseDeflater()
Volker Simonis
simonisv at amazon.de
Fri Nov 15 11:32:39 UTC 2019
On 14.11.19 21:20, Lance Andersen wrote:
> Hi Volker,
>> On Nov 14, 2019, at 12:05 PM, Volker Simonis <simonisv at amazon.com
>> <mailto:simonisv at amazon.com>> wrote:
>>
>> On 14.11.19 17:38, Lance Andersen wrote:
>>>> On Nov 14, 2019, at 11:27 AM, Volker Simonis <simonisv at amazon.com
>>>> <mailto:simonisv at amazon.com> <mailto:simonisv at amazon.com>> wrote:
>>>>
>>>>
>>>>> I am not sure throwing a SkippedException is correct, I would
>>>>> probably throw a RuntimeException
>>>>
>>>> As I wrote in the answer to Christoph, this is a relatively new
>>>> feature of JTreg [1] which I think was introduced for exactly such
>>>> kind of situations where a tests detects at runtime only, that for
>>>> some reasons he can't test the issue he was supposed to test. More
>>>> and more tests are adapting it now [2]. The SkippedException will be
>>>> handled specially by JTreg and let the test pass, but with status
>>>> "Passed.Skipped" (plus exception message) instead of just "Passed"
>>>> (plis "Execution successful").
>>>>
>>>> Here's the next webrev:
>>>>
>>>> http://cr.openjdk.java.net/~simonis/webrevs/2019/8234011.v2/
>>> Thank you for the updates. I am still a bit skeptical of the use of
>>> SkippedException here as you would never see the test is no longer
>>> passing due to an implementation change unless you are specifically
>>> looking for it.
>>> That being said, if others who have more experience with using this
>>> Exception in a similar scenario are good, then I am good.
>>> So once we get a couple of other views on this from others with a
>>> thumbs up for using SkippedException here, we are good to go :-)
>>
>> If this is the last blocker, I'm actually not insisting this time :)
>>
>> Do you think it is better to just throw an exception and let the test
>> fail if the underlying implementation changes? I thought it is better
>> to be more conservative, because that would be actually a mistake in
>> the test and not an error in the testee. But if you think it would be
>> more appropriate to fail in such a case, I'm happy to change it?
>
> I do think it would be best to fail as if the implementation is changed
> and it impacts the test, we would want to make sure we update it at the
> same time.
>
OK, changed it to a RuntimeException (together with some other minor
tweaks requested by Christoph in his last mail).
Here's the new webrev:
http://cr.openjdk.java.net/~simonis/webrevs/2019/8234011.v3
OK now?
> Best
> Lance
>>
>>> Best
>>> Lance
>>>>
>>>> Thanks,
>>>> Volker
>>>>
>>>> [1]https://openjdk.java.net/jtreg/faq.html#what-if-a-test-does-not-apply-in-a-given-situation
>>>> [2]https://bugs.openjdk.java.net/browse/JDK-8208655
>>>>
>>>>> Best
>>>>> Lance
>>>>>>
>>>>>> 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>
>>>>>>>> <mailto:christoph.langer at sap.com><mailto: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>
>>>>>>>>> <mailto:core-libs-dev-bounces at openjdk.java.net><mailto: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>
>>>>>>>>> <mailto:core-libs-dev at openjdk.java.net><mailto: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>
>>>>>>> <mailto:Lance.Andersen at oracle.com><mailto: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
>>>>>>
>>>>>>
>>>>> <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>
>>>>> <mailto: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
>>> <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>
>>> <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
>>
>>
>
> <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