[ 
https://issues.apache.org/jira/browse/KAFKA-1008?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13739197#comment-13739197
 ] 

Jay Kreps commented on KAFKA-1008:
----------------------------------

Hey Elizabeth, thanks for the patch.

Two issues.

The first is that I think that instanceof check will actually throw an 
exception on a non-sun jvm. See the experiment below and see what you think.

The second issue is actually a more subtle thing. Currently the synchronization 
is really just for changes to the buffer, the read-access are lock-free (which 
is good). My concern is what happens if we force clean a buffer while a read is 
occurring? Not sure if this can happen or not, but I think we need to somehow 
be sure it can't.

Here was my test:
$ cat /tmp/code/Test.java 
import test.MyTest;

public class Test {
    public static void main(String[] args) {
        Object o = new Object();
            if(o instanceof MyTest)
                System.out.println("Hello");
    }
}

$ cat /tmp/code/test/MyTest.java 
package test;

public class MyTest {
  
}

I do 
javac /tmp/code/test/MyTest.java
javac -cp /tmp/code /tmp/code/Test.java
rm /tmp/code/test/MyTest.class
$ java -cp /tmp/code Test
Exception in thread "main" java.lang.NoClassDefFoundError: test/MyTest
        at Test.main(Test.java:6)
Caused by: java.lang.ClassNotFoundException: test.MyTest
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        ... 1 more

We also can't really be too sure what kind of exceptions clean() might throw.


                
> Unmap before resizing
> ---------------------
>
>                 Key: KAFKA-1008
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1008
>             Project: Kafka
>          Issue Type: Bug
>          Components: core, log
>    Affects Versions: 0.8
>         Environment: Windows, Linux, Mac OS
>            Reporter: Elizabeth Wei
>            Assignee: Jay Kreps
>              Labels: patch
>             Fix For: 0.8
>
>         Attachments: unmap-v2.patch
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> While I was studying how MappedByteBuffer works, I saw a sharing runtime 
> exception on Windows. I applied what I learned to generate a patch which uses 
> an internal open JDK API to solve this problem.
> Following Jay's advice, I made a helper method called tryUnmap(). 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to