javacassandrajanusgraphembedded-cassandra

JanusGraph 0.5.2 embedded cassandra java.lang.NoSuchMethodError: com.codahale.metrics.Snapshot


We are setting up JanusGraph 0.5.2 with embedded cassandra mode.
When we start Janus in this mode, it throws below exception in its logs:

org.apache.cassandra.service.CassandraDaemon - Exception in thread Thread[OptionalTasks:1,5,main]
java.lang.NoSuchMethodError: com.codahale.metrics.Snapshot: method <init>()V not found
    at org.apache.cassandra.metrics.DecayingEstimatedHistogramReservoir$EstimatedHistogramReservoirSnapshot.<init>(DecayingEstimatedHistogramReservoir.java:353)
    at org.apache.cassandra.metrics.DecayingEstimatedHistogramReservoir.getSnapshot(DecayingEstimatedHistogramReservoir.java:224)
    at com.codahale.metrics.Histogram.getSnapshot(Histogram.java:54)
    at com.codahale.metrics.Timer.getSnapshot(Timer.java:142)
    at org.apache.cassandra.db.ColumnFamilyStore$3.run(ColumnFamilyStore.java:446)
    at org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor$UncomplainingRunnable.run(DebuggableScheduledThreadPoolExecutor.java:118)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

I searched it on net it seems to be some maven dependency issue of metrics-core.

Any way to resolve this in JanusGraph setup? Can we suppress this exception from logs or disable Cassandra metrics ?
This does not used to occur in Janus 0.3.1

Please help


Solution

  • So this problem ultimately comes down to conflicting versions of the Codahale metrics-core JAR. I believe Cassandra is currently dependent on 3.1.5, and JanusGraph (Gremlin, actually) ships with (both) 3.0.2 and 3.2.2.

    One solution out there involves removing 3.0.2 from $JANUSGRAPH_HOME/lib.

    But if you don't want to mess around with library dependencies of different projects, the best solution is probably to ensure that JanusGraph and Cassandra run in separate JVMs.