Play Cassandra Netty Server null pointer exception

493 Views Asked by At

Hi i am using playframework with technologies like ,

spark = "2.3.1",
akka = "2.4.7"
hadoop = "2.7.7"
spring = "4.2.6.RELEASE",
spark-cassandra-connector 2.0.9 ,
cassandra-driver-core 3.0.6

i am getting below warning, at the time of project clean compile

c.d.d.c.NettyUtil - Found Netty's native epoll transport, but not running on linux-based operating system. Using NIO instead

 io.netty:netty-handler:4.0.56.Final is selected over 4.0.36.Final
     +- com.datastax.cassandra:cassandra-driver-core:3.5.1 (depends on 4.0.56.Final)
     +- com.typesafe.netty:netty-reactive-streams:1.0.6    (depends on 4.0.36.Final)
     +- io.netty:netty-codec-http:4.0.36.Final             (depends on 4.0.36.Final)

at the time of sbt run , getting below error

java.lang.NullPointerException
        at io.netty.channel.group.DefaultChannelGroup.add(DefaultChannelGroup.java:146)
        at play.core.server.NettyServer.bind(NettyServer.scala:140)
        at play.core.server.NettyServer.play$core$server$NettyServer$$bindChannel(NettyServer.scala:224)
        at play.core.server.NettyServer$$anonfun$1.apply(NettyServer.scala:216)
        at play.core.server.NettyServer$$anonfun$1.apply(NettyServer.scala:216)
        at scala.Option.map(Option.scala:146)
        at play.core.server.NettyServer.<init>(NettyServer.scala:216)
        at play.core.server.NettyServerProvider.createServer(NettyServer.scala:279)
        at play.core.server.NettyServerProvider.createServer(NettyServer.scala:278)
        at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:225)
        at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:61)
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
        at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:60)
        at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:50)
        at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at play.runsupport.Reloader$.startDevMode(Reloader.scala:234)
        at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.devModeServer$lzycompute$1(PlayRun.scala:74)
        at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.play$sbt$run$PlayRun$$anonfun$$anonfun$$anonfun$$devModeServer$1(PlayRun.scala:74)
        at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:100)
        at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:53)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:237)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[error] (*:playRun) java.lang.reflect.InvocationTargetException

How to solve netty issue? is there version mismatched issue??

2

There are 2 best solutions below

0
On BEST ANSWER

this issue is related to Cassandra , so, for now, i used shaded version of cassandra. Issue occurred because the application uses another netty version, so to avoid that confilcts ,provided shaded version jar of cassandra which bundles Netty Classes under different package

"com.datastax.cassandra" % "cassandra-driver-core" % "3.1.4" exclude("io.netty", "*") classifier "shaded"

for refernce : https://docs.datastax.com/en/developer/java-driver/3.1/manual/shaded_jar/

also ,you can use dependencyOverrides:

To change the version selected, add an override:

dependencyOverrides += "" % "" % ""

ref : https://www.scala-sbt.org/1.x/docs/Library-Management.html#Overriding+a+version

0
On

I could be more helpful if you provided some code (especially the code that you initialize netty) here also, but the problem you are facing is using Linux native transport in a non Linux system. Try to find the places that you use Epoll and replace them with NIO which is supported in all OSes. If you are running your app on Linux also then you should check whether you may use Epoll with Epoll.isAvailable()