[ https://issues.apache.org/jira/browse/LUCENE-6989?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15136941#comment-15136941 ]
Uwe Schindler edited comment on LUCENE-6989 at 2/8/16 1:32 PM: --------------------------------------------------------------- Second version of the patch - a complete rewrite: - Fail early by checking everything early! - Implement this with MethodHandles (reflection is only needed for the single setAccessible() place: MethodHandles allow to do any access checks at linking time, not runtime), - Also do the SecurityManager checks early (for the runable variant) This patch implements 3 variants of unmapping: - Java 7/8 using sun.misc.Cleaner - Java 9 variant 1 using Runnable (public API, we just need to get reference to the cleaner with setAccessible) - Java 9 proposed change to remove private cleaner completely and replace by java.lang.ref.Cleaner.Cleanable (public API, we just need to get reference to the cleaner with setAccessible) was (Author: thetaphi): Second version of the patch - a complete rewrite: - Fail early by checking everything early - Implement this with MethodHandles (reflection is only needed for the single setAccessible) place - Also do the SecurityManager checks early This patch implements 3 variants of unmapping: - Java 7/8 using sun.misc.Cleaner - Java 9 variant 1 using Runnable (public API, we just need to get reference to the cleaner with setAccessible) - Java 9 proposed change to remove private cleaner completely and replace by java.lang.ref.Cleaner.Cleanable (public API, we just need to get reference to the cleaner with setAccessible) > Implement MMapDirectory unmapping for coming Java 9 changes > ----------------------------------------------------------- > > Key: LUCENE-6989 > URL: https://issues.apache.org/jira/browse/LUCENE-6989 > Project: Lucene - Core > Issue Type: Task > Components: core/store > Reporter: Uwe Schindler > Assignee: Uwe Schindler > Priority: Critical > Attachments: LUCENE-6989.patch, LUCENE-6989.patch > > > Originally, the sun.misc.Cleaner interface was declared as "critical API" in > [JEP 260|http://openjdk.java.net/jeps/260 ] > Unfortunately the decission was changed in favor of a oficially supported > {{java.lang.ref.Cleaner}} API. A side effect of this change is to move all > existing {{sun.misc.Cleaner}} APIs into a non-exported package. This causes > our forceful unmapping to no longer work, because we can get the cleaner > instance via reflection, but trying to invoke it will throw one of the new > Jigsaw RuntimeException because it is completely inaccessible. This will make > our forceful unmapping fail. There are also no changes in Garbage collector, > the problem still exists. > For more information see this [mailing list > thread|http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-January/thread.html#38243]. > This commit will likely be done, making our unmapping efforts no longer > working. Alan Bateman is aware of this issue and will open a new issue at > OpenJDK to allow forceful unmapping without using the now private > sun.misc.Cleaner. The idea is to let the internal class sun.misc.Cleaner > implement the Runable interface, so we can simply cast to runable and call > the run() method to unmap. The code would then work. This will lead to minor > changes in our unmapper in MMapDirectory: An instanceof check and casting if > possible. > I opened this issue to keep track and implement the changes as soon as > possible, so people will have working unmapping when java 9 comes out. > Current Lucene versions will no longer work with Java 9. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org