Github user jasobrown commented on a diff in the pull request:

    https://github.com/apache/cassandra/pull/236#discussion_r199259098
  
    --- Diff: src/java/org/apache/cassandra/io/util/FileUtils.java ---
    @@ -67,23 +71,84 @@
         public static final boolean isCleanerAvailable;
         private static final AtomicReference<Optional<FSErrorHandler>> 
fsErrorHandler = new AtomicReference<>(Optional.empty());
     
    +    private static Class clsDirectBuffer;
    +    private static MethodHandle mhDirectBufferCleaner;
    +    private static MethodHandle mhCleanerClean;
    +    private static MethodHandle mhDirectBufferAddress;
    +
         static
         {
             boolean canClean = false;
             try
             {
    +            clsDirectBuffer = Class.forName("sun.nio.ch.DirectBuffer");
    +            Method mDirectBufferCleaner = 
clsDirectBuffer.getMethod("cleaner");
    +            mhDirectBufferCleaner = 
MethodHandles.lookup().unreflect(mDirectBufferCleaner);
    +            Method mCleanerClean = 
mDirectBufferCleaner.getReturnType().getMethod("clean");
    +            mhCleanerClean = 
MethodHandles.lookup().unreflect(mCleanerClean);
    +            Method mDirectBufferAddress = 
clsDirectBuffer.getMethod("address");
    +            mhDirectBufferAddress = 
MethodHandles.lookup().unreflect(mDirectBufferAddress);
    +
                 ByteBuffer buf = ByteBuffer.allocateDirect(1);
    -            ((DirectBuffer) buf).cleaner().clean();
    +            cleanerClean(buf);
                 canClean = true;
             }
             catch (Throwable t)
             {
    +            logger.info("Cannot initialize un-mmaper. Compacted data files 
will not be removed promptly.", t);
                 JVMStabilityInspector.inspectThrowable(t);
    -            logger.info("Cannot initialize un-mmaper.  (Are you using a 
non-Oracle JVM?)  Compacted data files will not be removed promptly.  Consider 
using an Oracle JVM or using standard disk access mode");
             }
             isCleanerAvailable = canClean;
         }
     
    +    public static boolean isDirectBuffer(ByteBuffer buf)
    +    {
    +        return clsDirectBuffer.isInstance(buf);
    --- End diff --
    
    Can't we just call `ByteBuffer.isDirect()` instead?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org
For additional commands, e-mail: pr-h...@cassandra.apache.org

Reply via email to