beehive-lab / Maxine-VM

Maxine VM: A meta-circular research VM
GNU General Public License v2.0
323 stars 63 forks source link

Unable to run Maxine running with Project Voldemort #10

Closed funtowrite closed 7 years ago

funtowrite commented 7 years ago

I was trying to use maxine to run a single node cluster on Voldemort. However, I'm running into the problem that it throws an UnsatisfiedLinkError when it is trying to call mlockall (a system call) via JNA. (see example error trace below)

Tracing through the code, it looks like the DynamicLinker was looking up the symbol "Java_voldemort_utils_JNAUtils_mlockall" but couldn't find it in its holder classpath nor the system library.

I've also tried comparing the trace with -verbose:jni against Java7 running Voldemort. It looks like it is missing this line "[Registering JNI native method voldemort.utils.JNAUtils.mlockall]" where it would have crashed. Could you please suggest how I could solve the problem or what methods in the code I could look into modifying to be able to register JNI native methods?

I'm using the maxine version from MaxSim with Java7. Please let me know if I'm missing any information that I should be providing.

Here is the command that I used:

./maxine/com.oracle.max.vm.native/generated/linux/maxvm -cp .voldemort/voldemort-release-1.9.0-cutoff/dist/voldemort-1.9.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/dist/voldemort-1.9.0-src.jar:.voldemort/voldemort-release-1.9.0-cutoff/dist/voldemort-contrib-1.9.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/dist/voldemort-test-1.9.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/avro-1.4.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/azkaban-common-0.05.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/catalina-ant.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/colt-1.2.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-codec-1.4.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-collections-3.2.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-configuration-1.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-dbcp-1.2.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-io-1.4.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-lang-2.4.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-logging-1.1.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/commons-pool-1.5.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/compress-lzf-0.9.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/data-1.15.18.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/gson-2.2.4.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/guava-14.0.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/hadoop-auth-2.0.5-alpha.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/hadoop-core-1.0.4.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/httpclient-4.1.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/httpcore-4.1.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jackson-core-asl-1.4.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jackson-mapper-asl-1.4.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jdom-1.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/je-5.0.88.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jetty-6.1.18.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jetty-util-6.1.18.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jline-0.9.94.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jna.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/joda-time-1.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/jopt-simple-4.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/junit-4.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/krati-0.3.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/libthrift-0.5.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/log4j-1.2.15.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/mail-1.4.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/mockito-all-1.8.5.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/netty-3.5.8.Final.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/paranamer-2.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/pegasus-common-1.15.18.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/protobuf-java-2.3.0.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/r2-1.15.18.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/scala-compiler-2.10.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/scala-library-2.10.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/scala-reflect-2.10.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/servlet-api-2.5.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/slf4j-api-1.5.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/slf4j-log4j12-1.5.6.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/snappy-0.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/tehuti-0.5.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/tusk-0.0.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/typica-1.7.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/velocity-1.6.2.jar:.voldemort/voldemort-release-1.9.0-cutoff/lib/xercesImpl-2.9.1.jar:.voldemort/voldemort-release-1.9.0-cutoff/contrib/*/lib/*.jar:.voldemort/voldemort-release-1.9.0-cutoff/dist/resources -Dlog4j.configuration=file://.voldemort/voldemort-release-1.9.0-cutoff/src/java/log4j.properties -Xmx2G -server -Dcom.sun.management.jmxremote voldemort.server.VoldemortServer config/single_node_cluster/

The error output that i obtained:

[14:38:18,735 voldemort.store.metadata.MetadataStore] INFO metadata init(). [main]
[14:38:18,999 voldemort.cluster.Node] WARN admin-port not defined for node:0 using default value(socket_port + 1):6667 [main]
[14:38:19,086 voldemort.store.metadata.MetadataStore] INFO Updating routing strategy for all stores [main]
[14:38:20,163 voldemort.server.VoldemortServer] INFO Using NIO Connector. [main]
[14:38:20,304 voldemort.server.VoldemortServer] INFO Using NIO Connector for Admin Service. [main]
[14:38:20,306 voldemort.common.service.VoldemortService] INFO Starting voldemort-server [main]
[14:38:20,425 voldemort.utils.JNAUtils] INFO Failed to link to native library [main]
Exception in thread "main" java.lang.UnsatisfiedLinkError: Java_voldemort_utils_JNAUtils_mlockall __I
    at com.sun.max.vm.jni.DynamicLinker.lookup(DynamicLinker.java:271)
    at com.sun.max.vm.actor.member.NativeFunction.link0(NativeFunction.java:117)
    at com.sun.max.vm.actor.member.NativeFunction.link(NativeFunction.java:110)
    at voldemort.utils.JNAUtils.mlockall(Native Method)
    at voldemort.utils.JNAUtils.tryMlockall(JNAUtils.java:51)
    at voldemort.server.VoldemortServer.startInner(VoldemortServer.java:328)
    at voldemort.common.service.AbstractService.start(AbstractService.java:62)
    at voldemort.server.VoldemortServer.main(VoldemortServer.java:384)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.max.vm.run.java.JavaRunScheme.lookupAndInvokeMain(JavaRunScheme.java:376)
    at com.sun.max.vm.run.java.JavaRunScheme.run(JavaRunScheme.java:333)
    at com.sun.max.vm.thread.VmThread.executeRunnable(VmThread.java:511)
    at com.sun.max.vm.thread.VmThread.run(VmThread.java:682)

Thank you!

kotselidis commented 7 years ago

Hi,

I run Voldemort on the latest Maxine head (which is ahead of that of MaxSim) and I got a different error than the one you reported. I wrote a simple partial fix for that problem (9f36e8a1d9fa54d74b8bfa3f632814a7be9e2ae2) and pushed it along with other changes (JSR292, etc.). Voldemort 1.9.0-cutoff currently runs with the latest Maxine head (90df417db21870b58c95649c7236cda74de4e7c5) v2.1.2.

.... [10:04:14,994 voldemort.common.service.VoldemortService] INFO Starting socket-service [main] [10:04:14,994 voldemort.server.niosocket.NioSocketService] INFO Starting Voldemort NIO socket server (admin-server) on port 6667 [main] [10:04:15,014 voldemort.common.service.VoldemortService] INFO Starting jmx-service [main] [10:04:15,020 voldemort.server.niosocket.NioSocketService] INFO Server now listening for connections on port 6667 [NioSocketService.Acceptor] [10:04:15,023 voldemort.server.jmx.JmxService] WARN Overwriting mbean voldemort.server.niosocket:type=NioSocketService [main] [10:04:15,031 voldemort.server.VoldemortServer] INFO Startup completed in 1440 ms. [main]

Unfortunately, keeping MaxSim up to date with the latest Maxine is not in our current roadmap, so if you want to run Voldemort on MaxSim, I recommend either giving a try updating MaxSim with the latest Maxine or cherrypick and apply the patch fixes that will enable Voldemort to run.

Regards Christos

funtowrite commented 7 years ago

Hi Christos,

Thank you for the patch, I really appreciate it!