Timothy Stewart created AMQ-5228:
------------------------------------
Summary: java.lang.NoClassDefFoundError:
org/fusesource/leveldbjni/internal/JniDB error during cleanup
Key: AMQ-5228
URL: https://issues.apache.org/jira/browse/AMQ-5228
Project: ActiveMQ
Issue Type: Bug
Components: activemq-leveldb-store
Affects Versions: 5.10.0, 5.9.1
Environment: Linux 2.6.32-279.5.2.el6.x86_64 #1 SMP Thu Aug 23
12:05:59 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
JDK 1.7.0_51
Apache Karaf 2.3.5 with activemq-osgi, activemq-blueprint, activemq-client,
activemq-webconsole, activemq-camel, activemq features installed. Using
version 5.9.1 (and tried 5.10.0)
Reporter: Timothy Stewart
In our production environment, our storage folder runs out of disk space every
few days (75 Gb). Restarting the container addresses the issue, it cleans it
up. I noticed a stack trace coming on system.err in the wrapper.log (Karaf
starts with a wrapper service). It may or may not be related to our disk space
issue:
INFO | jvm 1 | 2014/06/13 03:22:36 | Exception in thread "Thread-117"
java.lang.NoClassDefFoundError: org/fusesource/leveldbjni/internal/JniDB
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.apache.activemq.leveldb.LevelDBClient$RichDB.compact(LevelDBClient.scala:377)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.apache.activemq.leveldb.LevelDBClient.gc(LevelDBClient.scala:1647)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.apache.activemq.leveldb.DBManager$$anonfun$pollGc$1$$anonfun$apply$mcV$sp$2.apply$mcV$sp(DBManager.scala:648)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.fusesource.hawtdispatch.package$$anon$4.run(hawtdispatch.scala:357)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
java.lang.Thread.run(Thread.java:744)
INFO | jvm 1 | 2014/06/13 03:22:36 | Caused by:
java.lang.ClassNotFoundException: org.fusesource.leveldbjni.internal.JniDB not
found by org.apache.activemq.activemq-osgi [105]
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
INFO | jvm 1 | 2014/06/13 03:22:36 | at
java.lang.ClassLoader.loadClass(ClassLoader.java:358)
INFO | jvm 1 | 2014/06/13 03:22:36 | ... 7 more
I see the same problem in our dev environment but could not replicate it. I
was finally able to replicate by using the hawtio console to execute the
compact operation. Everytime I do this, the same stack trace outputs and the
operation cycles endlessly (well as long as I've waited anyhow). The 5.10.0
stack trace when I execute the operation is:
INFO | jvm 2 | 2014/06/14 21:00:44 | Exception in thread "Thread-106"
java.lang.NoClassDefFoundError: org/fusesource/leveldbjni/internal/JniDB
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.apache.activemq.leveldb.LevelDBClient$RichDB.compact(LevelDBClient.scala:378)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.apache.activemq.leveldb.LevelDBClient.gc(LevelDBClient.scala:1654)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.apache.activemq.leveldb.LevelDBStoreView$$anonfun$compact$1.apply$mcV$sp(LevelDBStore.scala:126)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.fusesource.hawtdispatch.package$$anon$4.run(hawtdispatch.scala:330)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
java.lang.Thread.run(Thread.java:744)
INFO | jvm 2 | 2014/06/14 21:00:44 | Caused by:
java.lang.ClassNotFoundException: org.fusesource.leveldbjni.internal.JniDB not
found by org.apache.activemq.activemq-osgi [390]
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
INFO | jvm 2 | 2014/06/14 21:00:44 | at
java.lang.ClassLoader.loadClass(ClassLoader.java:358)
INFO | jvm 2 | 2014/06/14 21:00:44 | ... 7 more
I started looking at the activemq-osgi and activemq-leveldb project poms, and
noticed that the leveldbjni projects are commented out with a note that we want
to focus on hardening the pure java version. With that in mind, I switched the
indexFactory on my leveldb config to
indexFactory="org.iq80.leveldb.impl.Iq80DBFactory". I restarted, and tried the
compact operation again, but got the same stacktrace.
My leveldb config now looks like:
<amq:persistenceAdapter>
<amq:levelDB directory="[[karaf.storage]]/activemq/default/leveldb"
logSize="107374182" logCompression="snappy"
indexFactory="org.iq80.leveldb.impl.Iq80DBFactory" />
</amq:persistenceAdapter>
The logCompression and the indexFactory were both added as an attempt to
mitigate the problem, but the issue exists either way. I also saw a note on
the replicated levedb store about scheduled jobs, which are used a lot, but
when I looked at those folders in our storage folder it seems to use a
completely different kahadb store, so I threw that out as a reason.
I did attempt to add leveldbjni-linux64 or leveldbjni-all to the osgi
deployment, but it does not export the internal package which activemq-osgi
wants to import. I could build a new package of these, or rebuild
activemq-osgi with the commented dependencies removed.. perhaps that will work,
but it seems that as it is with the dependencies commented out that there is
something broken within the compact routine.
--
This message was sent by Atlassian JIRA
(v6.2#6252)