> ... updating so ratis-metric is depending directly on the 3.1.2 ... Sound great. Thanks for digging it out! Let's continue the discussion in RATIS-699.
Tsz-Wo On Wed, Oct 2, 2019 at 5:18 AM Henrik Hegardt <[email protected]> wrote: > > Hi Tsz-Wo, > > Thank you for your reply. I've been checking up on this a little bit > more and I believe the CNFE is my fault because I was trying to fix > another problem, which I'm going to try to explain: > > Ratis-Metric is depending on the dependency > com.github.joshelser:dropwizard-metrics-hadoop-metrics2-reporter: 0.1.2. > This in turn depends on the org.apache.hadoop:hadoop-common:2.6.0. This > in turn depends on org.apache.hadoop:hadoop-annotations:2.6.0 which have > an dependency on a system scoped dependency named jdk.tools:1.6. I'm > running java 11 and this dependency doesn't exist in my environment so I > can't compile with ratis included in my project because it fails trying > to resolve that dependency. > > However, the project ratis-hadoop depends on the the dependency > org.apache.hadoop:hadoop-common:3.1.1 (which should be upgraded to 3.1.2 > because the sources are missing in 3.1.1) which doesn't have the > jdk.tools:1.6 dependency. So if I depend on this I can build the project > because the faulty 2.6.0 dependency is shadowed transitively by the > 3.1.1 dependency and everything is compiling. > > The simple fix would be updating so ratis-metric is depending directly > on the 3.1.2 dependency instead since it effectively will be the 3.1.1 > code you are going run with anyway when running with the ratis-hadoop > dependency. I can open a bug for this. > > I also have a question; right now there's a dependency on > io.dropwizard.metrics:metrics-core:3.2.5. It seems like there's an idea > that the metric loader functionality should/would be more pluggable > through the serviceloader API? Is this correct? I was merely thinking > that the ratis-metric project should be less opinionated on what library > one should use to measure things? I am willing to look into this if > needed and see if I can do anything about it. > > I'm using dropwizard-metrics:4.0.5 which isn't compatible with the > current ratis-metrics implementation, and unfortunately I cannot > downgrade. I'd love to use ratis in my project, but this is something I > need to fix to be able to use it. > > /Henrik > > Den 2019-10-01 kl. 00:05, skrev Tsz Wo Sze: > > Hi Henrik, > > > > Thanks for reporting the problem. > > org.apache.ratis.metrics.MetricsReporting imports > > org.apache.hadoop.metrics2.lib.DefaultMetricsSystem, I guess it is > > causing the ClassNotFoundException. It is a bug. Do you want to file > > a JIRA? > > > > Tsz-Wo > > > > On Mon, Sep 30, 2019 at 2:23 AM Henrik Hegardt > > <[email protected]> wrote: > >> Hi everyone, > >> > >> I'm getting this error while running Ratis: > >> > >> Caused by: java.io.IOException: java.lang.NoClassDefFoundError: > >> org/apache/hadoop/metrics2/lib/DefaultMetricsSystem > >> at org.apache.ratis.util.IOUtils.asIOException(IOUtils.java:54) > >> at org.apache.ratis.util.IOUtils.toIOException(IOUtils.java:61) > >> at org.apache.ratis.util.IOUtils.getFromFuture(IOUtils.java:70) > >> at > >> org.apache.ratis.server.impl.RaftServerProxy.getImpls(RaftServerProxy.java:284) > >> at > >> org.apache.ratis.server.impl.RaftServerProxy.start(RaftServerProxy.java:296) > >> at test.cluster.ClusterSevice.start(ClusterSevice.java:85) > >> ... 65 more > >> Caused by: java.lang.NoClassDefFoundError: > >> org/apache/hadoop/metrics2/lib/DefaultMetricsSystem > >> at > >> org.apache.ratis.metrics.MetricsReporting.<clinit>(MetricsReporting.java:42) > >> at > >> org.apache.ratis.server.metrics.RatisMetrics.<clinit>(RatisMetrics.java:39) > >> at > >> org.apache.ratis.server.raftlog.segmented.SegmentedRaftLogWorker.<init>(SegmentedRaftLogWorker.java:176) > >> at > >> org.apache.ratis.server.raftlog.segmented.SegmentedRaftLog.<init>(SegmentedRaftLog.java:197) > >> at > >> org.apache.ratis.server.raftlog.segmented.SegmentedRaftLog.<init>(SegmentedRaftLog.java:183) > >> at > >> org.apache.ratis.server.impl.ServerState.initRaftLog(ServerState.java:188) > >> at > >> org.apache.ratis.server.impl.ServerState.<init>(ServerState.java:120) > >> at > >> org.apache.ratis.server.impl.RaftServerImpl.<init>(RaftServerImpl.java:110) > >> at > >> org.apache.ratis.server.impl.RaftServerProxy.lambda$newRaftServerImpl$2(RaftServerProxy.java:208) > >> at > >> java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) > >> at > >> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > >> at > >> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > >> at java.base/java.lang.Thread.run(Thread.java:834) > >> Caused by: java.lang.ClassNotFoundException: > >> org.apache.hadoop.metrics2.lib.DefaultMetricsSystem > >> at > >> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) > >> at > >> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > >> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) > >> ... 13 more > >> > >> AFAICT this is a class in the dependency > >> org.apache.hadoop:hadoop-common:3.1.1. I'm running with the dependencies > >> and Ratis 0.4.0 > >> > >> <dependency> > >> <artifactId>ratis-server</artifactId> > >> <groupId>org.apache.ratis</groupId> > >> > >> <exclusions> > >> <exclusion> > >> <groupId>log4j</groupId> > >> <artifactId>log4j</artifactId> > >> </exclusion> > >> <exclusion> > >> <groupId>org.slf4j</groupId> > >> <artifactId>slf4j-log4j12</artifactId> > >> </exclusion> > >> </exclusions> > >> </dependency> > >> <dependency> > >> <artifactId>ratis-grpc</artifactId> > >> <groupId>org.apache.ratis</groupId> > >> </dependency> > >> > >> And which should be enough according to the documentation. While it's > >> possible to include this dependency, it pulls in a lot of other > >> dependencies. While org.apache.ratis.metrics.MetricsReporting class does > >> have a dependency on the > >> org.apache.hadoop.metrics2.lib.DefaultMetricsSystem class, ratis-metrics > >> doesn't define a dependency to org.apache.hadoop:hadoop-common:3.1.1 in > >> its pom. Is this intended or am I missing something? > >> > >> Thank you for all your efforts. > >> > >> /Henrik > >> > >> > >> > >>
