micronaut-projects / micronaut-core

Micronaut Application Framework

Home Page:http://micronaut.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Adding org.apache.spark:spark-core_2.12:2.4.0 into dependencies causes every request to throw "ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: refCnt: 0, increment: 1"

make opened this issue · comments

Steps to Reproduce

  1. Add following into dependencies:
    compile 'com.fasterxml.jackson.core:jackson-databind:2.6.7'
    compile 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.6.7'
    compile 'org.apache.spark:spark-core_2.12:2.4.0'
  1. curl any HTTP endpoint in app
  2. The log shows:
14:50:43.088 [nioEventLoopGroup-1-2] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: refCnt: 0, increment: 1
io.netty.util.IllegalReferenceCountException: refCnt: 0, increment: 1
        at io.netty.buffer.AbstractReferenceCountedByteBuf.release0(AbstractReferenceCountedByteBuf.java:100)
        at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:84)
        at io.netty.handler.codec.http.DefaultFullHttpResponse.release(DefaultFullHttpResponse.java:115)
        at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:88)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:720)
        at io.netty.handler.stream.ChunkedWriteHandler.doFlush(ChunkedWriteHandler.java:304)
        at io.netty.handler.stream.ChunkedWriteHandler.channelWritabilityChanged(ChunkedWriteHandler.java:150)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:434)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:416)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelWritabilityChanged(AbstractChannelHandlerContext.java:409)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.flushNext(HttpStreamsHandler.java:397)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.lambda$null$0(HttpStreamsHandler.java:318)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.executeInEventLoop(HttpStreamsHandler.java:403)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.lambda$unbufferedWrite$1(HttpStreamsHandler.java:315)
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:507)
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:481)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:420)
        at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:163)
        at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:93)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.unbufferedWrite(HttpStreamsHandler.java:315)
        at io.micronaut.http.netty.stream.HttpStreamsServerHandler.unbufferedWrite(HttpStreamsServerHandler.java:178)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.flushNext(HttpStreamsHandler.java:395)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.write(HttpStreamsHandler.java:291)
        at io.micronaut.http.netty.stream.HttpStreamsServerHandler.write(HttpStreamsServerHandler.java:58)
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723)
        at io.netty.handler.stream.ChunkedWriteHandler.doFlush(ChunkedWriteHandler.java:304)
        at io.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:137)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:768)
        at io.netty.channel.AbstractChannelHandlerContext.access$1500(AbstractChannelHandlerContext.java:38)
        at io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1129)
        at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1070)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
        at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
        at java.lang.Thread.run(Thread.java:748)
14:50:43.124 [nioEventLoopGroup-1-2] WARN  i.n.c.AbstractChannelHandlerContext - An exception was thrown by a user handler while handling an exceptionCaught event
io.netty.util.IllegalReferenceCountException: refCnt: 0, increment: 1
        at io.netty.buffer.AbstractReferenceCountedByteBuf.release0(AbstractReferenceCountedByteBuf.java:100)
        at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:84)
        at io.netty.handler.codec.http.DefaultFullHttpResponse.release(DefaultFullHttpResponse.java:115)
        at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:88)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:720)
        at io.netty.handler.stream.ChunkedWriteHandler.doFlush(ChunkedWriteHandler.java:304)
        at io.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:137)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:768)
        at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:749)
        at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:115)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776)
        at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:802)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814)
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794)
        at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.writeFinalNettyResponse(RoutingInBoundHandler.java:1134)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.access$500(RoutingInBoundHandler.java:129)
        at io.micronaut.http.server.netty.RoutingInBoundHandler$3.onComplete(RoutingInBoundHandler.java:1095)
        at io.micronaut.http.server.netty.RoutingInBoundHandler$3.onComplete(RoutingInBoundHandler.java:1092)
        at io.micronaut.http.server.netty.async.ContextCompletionAwareSubscriber.doOnComplete(ContextCompletionAwareSubscriber.java:74)
        at io.micronaut.core.async.subscriber.CompletionAwareSubscriber.onComplete(CompletionAwareSubscriber.java:72)
        at io.reactivex.internal.util.HalfSerializer.onComplete(HalfSerializer.java:90)
        at io.reactivex.internal.subscribers.StrictSubscriber.onComplete(StrictSubscriber.java:109)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onComplete(BasicFuseableSubscriber.java:120)
        at io.reactivex.internal.subscriptions.ScalarSubscription.request(ScalarSubscription.java:57)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
        at io.reactivex.internal.subscriptions.SubscriptionHelper.deferredSetOnce(SubscriptionHelper.java:210)
        at io.reactivex.internal.subscribers.StrictSubscriber.onSubscribe(StrictSubscriber.java:87)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
        at io.reactivex.internal.operators.flowable.FlowableJust.subscribeActual(FlowableJust.java:34)
        at io.reactivex.Flowable.subscribe(Flowable.java:14479)
        at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
        at io.reactivex.Flowable.subscribe(Flowable.java:14479)
        at io.reactivex.Flowable.subscribe(Flowable.java:14429)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.subscribeToResponsePublisher(RoutingInBoundHandler.java:1092)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.writeDefaultErrorResponse(RoutingInBoundHandler.java:1445)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.exceptionCaught(RoutingInBoundHandler.java:339)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:264)
        at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:256)
        at io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:131)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:264)
        at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:256)
        at io.netty.channel.ChannelHandlerAdapter.exceptionCaught(ChannelHandlerAdapter.java:87)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:264)
        at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:256)
        at io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:131)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:264)
        at io.netty.channel.AbstractChannelHandlerContext.fireExceptionCaught(AbstractChannelHandlerContext.java:256)
        at io.netty.channel.ChannelInboundHandlerAdapter.exceptionCaught(ChannelInboundHandlerAdapter.java:131)
        at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
        at io.netty.channel.AbstractChannelHandlerContext.notifyHandlerException(AbstractChannelHandlerContext.java:850)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:436)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:416)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelWritabilityChanged(AbstractChannelHandlerContext.java:409)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.flushNext(HttpStreamsHandler.java:397)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.lambda$null$0(HttpStreamsHandler.java:318)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.executeInEventLoop(HttpStreamsHandler.java:403)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.lambda$unbufferedWrite$1(HttpStreamsHandler.java:315)
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:507)
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:481)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:420)
        at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:163)
        at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:93)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.unbufferedWrite(HttpStreamsHandler.java:315)
        at io.micronaut.http.netty.stream.HttpStreamsServerHandler.unbufferedWrite(HttpStreamsServerHandler.java:178)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.flushNext(HttpStreamsHandler.java:395)
        at io.micronaut.http.netty.stream.HttpStreamsHandler.write(HttpStreamsHandler.java:291)
        at io.micronaut.http.netty.stream.HttpStreamsServerHandler.write(HttpStreamsServerHandler.java:58)
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
        at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:816)
        at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:723)
        at io.netty.handler.stream.ChunkedWriteHandler.doFlush(ChunkedWriteHandler.java:304)
        at io.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:137)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:776)
        at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:768)
        at io.netty.channel.AbstractChannelHandlerContext.access$1500(AbstractChannelHandlerContext.java:38)
        at io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1129)
        at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1070)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
        at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
        at java.lang.Thread.run(Thread.java:748)

Expected Behaviour

No errors should appear to the log.

Actual Behaviour

The error above appears to the log.

Environment Information

  • Operating System: Ubuntu 16.04.5 LTS
  • Micronaut Version: 1.0.0
  • JDK Version: 1.8.0_191

Example Application

https://github.com/make/mn-spark-test

Will take a look, but why are you placing an older version of Jackson on the class path?

If not placing the older Jackson version following error appears to the log :

15:55:51.635 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Failed to inject value for parameter [objectMapper] of class: io.micronaut.jackson.convert.ArrayNodeToArrayConverter

Path Taken: new ArrayNodeToArrayConverter([ObjectMapper objectMapper])
io.micronaut.context.exceptions.DependencyInjectionException: Failed to inject value for parameter [objectMapper] of class: io.micronaut.jackson.convert.ArrayNodeToArrayConverter

Path Taken: new ArrayNodeToArrayConverter([ObjectMapper objectMapper])
        at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:981)
        at io.micronaut.jackson.convert.$ArrayNodeToArrayConverterDefinition.build(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1310)
        at io.micronaut.context.DefaultBeanContext.addCandidateToList(DefaultBeanContext.java:2200)
        at io.micronaut.context.DefaultBeanContext.getBeansOfTypeInternal(DefaultBeanContext.java:2131)
        at io.micronaut.context.DefaultBeanContext.getBeansOfType(DefaultBeanContext.java:752)
        at io.micronaut.context.DefaultBeanContext.getBeansOfType(DefaultBeanContext.java:522)
        at io.micronaut.context.DefaultBeanContext.getBeanRegistrations(DefaultBeanContext.java:313)
        at io.micronaut.context.DefaultApplicationContext.initializeTypeConverters(DefaultApplicationContext.java:330)
        at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:184)
        at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:1999)
        at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:156)
        at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:138)
        at io.micronaut.runtime.Micronaut.start(Micronaut.java:67)
        at io.micronaut.runtime.Micronaut.run(Micronaut.java:271)
        at io.micronaut.runtime.Micronaut.run(Micronaut.java:257)
        at com.example.Application.main(Application.java:8)
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [io.micronaut.jackson.convert.ArrayNodeToArrayConverter]

Message: Incompatible Jackson version: 2.9.7
Path Taken: new ArrayNodeToArrayConverter([ObjectMapper objectMapper])
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1324)
        at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1868)
        at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1604)
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1584)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:884)
        at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:973)
        ... 16 common frames omitted
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.9.7
        at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:64)
        at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:51)
        at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
        at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:751)
        at com.fasterxml.jackson.databind.ObjectMapper.registerModules(ObjectMapper.java:951)
        at com.fasterxml.jackson.databind.ObjectMapper.findAndRegisterModules(ObjectMapper.java:1028)
        at io.micronaut.jackson.ObjectMapperFactory.objectMapper(ObjectMapperFactory.java:86)
        at io.micronaut.jackson.$ObjectMapperFactory$ObjectMapperDefinition.build(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1310)
        ... 21 common frames omitted

FAILURE: Build failed with an exception.

Well, I found that instead of placing older Jackson we can just add compile 'com.fasterxml.jackson.module:jackson-module-scala_2.12:2.9.7' into dependencies.
But this doesn't fix the error.

Looks like a netty conflict. Adding this causes the problem to go away

compile('org.apache.spark:spark-core_2.12:2.4.0') {
        exclude group: "io.netty", module: "netty-all"
}

Let me know if this solution will work for you

Yes, that fixes the problem. Thanks!