Cassandra
  1. Cassandra
  2. CASSANDRA-4995

CompactionSerializerTest fails to find jemalloc

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Fix Version/s: 2.0 beta 1
    • Component/s: API
    • Labels:
      None

      Description

          [junit] Testcase: org.apache.cassandra.io.CompactSerializerTest:	Caused an ERROR
          [junit] Unable to load library 'jemalloc': libjemalloc.so: cannot open shared object file: No such file or directory
          [junit] java.lang.UnsatisfiedLinkError: Unable to load library 'jemalloc': libjemalloc.so: cannot open shared object file: No such file or directory
          [junit] 	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
          [junit] 	at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
          [junit] 	at com.sun.jna.Library$Handler.<init>(Library.java:140)
          [junit] 	at com.sun.jna.Native.loadLibrary(Native.java:379)
          [junit] 	at com.sun.jna.Native.loadLibrary(Native.java:364)
          [junit] 	at org.apache.cassandra.io.util.JEMallocAllocator.<clinit>(JEMallocAllocator.java:32)
          [junit] 	at java.lang.Class.forName0(Native Method)
          [junit] 	at java.lang.Class.forName(Class.java:169)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:109)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:100)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:100)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:100)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:100)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:100)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest$1DirScanner.scan(CompactSerializerTest.java:100)
          [junit] 	at org.apache.cassandra.io.CompactSerializerTest.scanClasspath(CompactSerializerTest.java:142)
      

      If jemalloc is now the preferred allocator, we should add it to the debian packaging. However, I did install the lib and it still didn't work.

        Activity

        Hide
        Vijay added a comment -

        JEMalloc is not default, looks like this is because the Directory scanner scans for all the files in the class path and initializes it which will cause the static variable to get intialized.

        Show
        Vijay added a comment - JEMalloc is not default, looks like this is because the Directory scanner scans for all the files in the class path and initializes it which will cause the static variable to get intialized.
        Hide
        Jonathan Ellis added a comment -

        Constructor initializing a static field makes my OCD go crazy.

        Should we just make the field non-static? Or use a inner class static initializer + static instance() method like in MessagingService.

        Show
        Jonathan Ellis added a comment - Constructor initializing a static field makes my OCD go crazy. Should we just make the field non-static? Or use a inner class static initializer + static instance() method like in MessagingService.
        Hide
        Vijay added a comment -

        Hi Jonathan,

        Constructor initializing a static field

        attached patch doesn't initialize the static field.... it was moved from static to non-static...

        -    private static final JEMLibrary instance = (JEMLibrary) Native.loadLibrary("jemalloc", JEMLibrary.class);
        +    private final JEMLibrary instance;
        

        not sure if we are talking about the same thing (May be the name caused the confusion?)

        Show
        Vijay added a comment - Hi Jonathan, Constructor initializing a static field attached patch doesn't initialize the static field.... it was moved from static to non-static... - private static final JEMLibrary instance = (JEMLibrary) Native.loadLibrary( "jemalloc" , JEMLibrary.class); + private final JEMLibrary instance; not sure if we are talking about the same thing (May be the name caused the confusion?)
        Hide
        Jonathan Ellis added a comment -

        I must be more jet lagged than I thought. LGTM.

        Show
        Jonathan Ellis added a comment - I must be more jet lagged than I thought. LGTM.
        Hide
        Vijay added a comment -

        Committed, Thanks!

        Show
        Vijay added a comment - Committed, Thanks!

          People

          • Assignee:
            Vijay
            Reporter:
            Brandon Williams
            Reviewer:
            Jonathan Ellis
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development