mongo-java-server icon indicating copy to clipboard operation
mongo-java-server copied to clipboard

io.netty.handler.codec.DecoderException: java.io.IOException: unhandled type: 0xd

Open Research2Go opened this issue 5 years ago • 7 comments

Dear all,

I've tried your library to integrate an embedded mongodb into springboot application. Everything works fine until I met up with the exception:

io.netty.handler.codec.DecoderException: java.io.IOException: unhandled type: 0xd

After I checked the source code, I see that it seems your mongo-java-server is not supporting javascript as message type for mongo server. Is that true?

I need to upload extended functionalities of mongodb using javascript. Would there be any work around? Or am I missing something here?

Followed is the complete error message:

2019-05-04 00:45:40.026  INFO 13968 --- [-server-worker2] d.b.mongo.backend.AbstractMongoDatabase  : adding unique _id index for collection counter
2019-05-04 00:45:40.027  INFO 13968 --- [-server-worker2] d.b.mongo.backend.AbstractMongoDatabase  : created collection verteilung.counter
2019-05-04 00:45:40.070 ERROR 13968 --- [-server-worker2] d.b.mongo.wire.MongoExceptionHandler     : exception for client 8f9a1e8b

io.netty.handler.codec.DecoderException: java.io.IOException: unhandled type: 0xd
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:472) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:278) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:617) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:534) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906) [netty-common-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.35.Final.jar:4.1.35.Final]
	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.io.IOException: unhandled type: 0xd
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:101) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:55) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:55) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeArray(BsonDecoder.java:116) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:58) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.MongoWireProtocolHandler.handleQuery(MongoWireProtocolHandler.java:174) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.MongoWireProtocolHandler.decode(MongoWireProtocolHandler.java:87) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.MongoWireProtocolHandler.decode(MongoWireProtocolHandler.java:27) ~[mongo-java-server-core-1.15.0.jar:na]
	at io.netty.handler.codec.LengthFieldBasedFrameDecoder.decode(LengthFieldBasedFrameDecoder.java:334) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:502) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:441) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	... 16 common frames omitted

2019-05-04 00:45:40.072  INFO 13968 --- [-server-worker2] d.b.mongo.wire.MongoWireProtocolHandler  : channel [id: 0x8f9a1e8b, L:/127.0.0.1:60036 ! R:/127.0.0.1:60049] closed
2019-05-04 00:45:40.074  WARN 13968 --- [           main] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:2}] to 127.0.0.1:60036. All connections to 127.0.0.1:60036 will be closed.
2019-05-04 00:45:40.075  INFO 13968 --- [           main] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:2}] to 127.0.0.1:60036 because there was a socket exception raised by this connection.
2019-05-04 00:45:40.077  WARN 13968 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'primaryMongoPreparator': Invocation of init method failed; nested exception is org.springframework.data.mongodb.UncategorizedMongoDbException: Prematurely reached end of stream; nested exception is com.mongodb.MongoSocketReadException: Prematurely reached end of stream

Research2Go avatar May 04 '19 09:05 Research2Go

Thanks for the bug report. Support for JavaScript code was not yet implemented. I’ve added initial support in dc5bbb1. Can you re-test?

bwaldvogel avatar May 04 '19 20:05 bwaldvogel

Thanks for your quick fix. I've updated my maven project and it got the newest version from 05.05. 17:01. However I still met up with similar issue by retesting it. Following is the complete trace.

2019-05-06 17:38:11.961 ERROR 3616 --- [-server-worker3] d.b.mongo.wire.MongoExceptionHandler     : exception for client bd20fa87

**io.netty.handler.codec.DecoderException: java.io.IOException: unhandled type: 0xd
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:472) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]**
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:278) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:682) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:617) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:534) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) [netty-transport-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906) [netty-common-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.35.Final.jar:4.1.35.Final]
	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.io.IOException: unhandled type: 0xd
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:101) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:55) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:55) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeArray(BsonDecoder.java:116) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:58) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.BsonDecoder.decodeBson(BsonDecoder.java:39) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.MongoWireProtocolHandler.handleQuery(MongoWireProtocolHandler.java:174) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.MongoWireProtocolHandler.decode(MongoWireProtocolHandler.java:87) ~[mongo-java-server-core-1.15.0.jar:na]
	at de.bwaldvogel.mongo.wire.MongoWireProtocolHandler.decode(MongoWireProtocolHandler.java:27) ~[mongo-java-server-core-1.15.0.jar:na]
	at io.netty.handler.codec.LengthFieldBasedFrameDecoder.decode(LengthFieldBasedFrameDecoder.java:334) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:502) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:441) ~[netty-codec-4.1.35.Final.jar:4.1.35.Final]
	... 16 common frames omitted

2019-05-06 17:38:11.963  WARN 3616 --- [           main] org.mongodb.driver.connection            : Got socket exception on connection [connectionId{localValue:3}] to localhost:27017. All connections to localhost:27017 will be closed.
2019-05-06 17:38:11.963  INFO 3616 --- [-server-worker3] d.b.mongo.wire.MongoWireProtocolHandler  : channel [id: 0xbd20fa87, L:/127.0.0.1:27017 ! R:/127.0.0.1:51079] closed
2019-05-06 17:38:11.965  INFO 3616 --- [           main] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:3}] to localhost:27017 because there was a socket exception raised by this connection.
2019-05-06 17:38:11.968  WARN 3616 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'primaryMongoPreparator': Invocation of init method failed; nested exception is org.springframework.data.mongodb.UncategorizedMongoDbException: Prematurely reached end of stream; nested exception is com.mongodb.MongoSocketReadException: Prematurely reached end of stream
2019-05-06 17:38:11.969  INFO 3616 --- [           main] o.j.k.s.i.store.DeploymentSyncInvoker    : Shutting down deployment synchronization
2019-05-06 17:38:11.970  INFO 3616 --- [           main] o.j.k.s.i.store.DeploymentSyncInvoker    : Deployment synchronization stopped
2019-05-06 17:38:11.980  INFO 3616 --- [-server-worker4] d.b.mongo.wire.MongoWireProtocolHandler  : channel [id: 0x86309388, L:/127.0.0.1:27017 ! R:/127.0.0.1:51082] closed

Research2Go avatar May 06 '19 15:05 Research2Go

The stacktrace shows that you did not test with the updated version:

[…] at de.bwaldvogel.mongo.wire.BsonDecoder.decodeValue(BsonDecoder.java:101) ~[mongo-java-server-core-1.15.0.jar:na]

  1. It shows that you used mongo-java-server-core-1.15.0.jar
  2. BsonDecoder.java:101 doesn’t throw an exception in the latest version

bwaldvogel avatar May 08 '19 18:05 bwaldvogel

I’ve just released version 1.16.0 which contains the fix.

bwaldvogel avatar May 08 '19 19:05 bwaldvogel

Thanks for the new version. I've tried it and it throws the error of "io.netty.handler.codec.DecoderException: java.io.IOException: opCode 2010 not supported"

As I checked in https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#wp-request-opcodes 2010 stands for

OP_COMMAND | 2010 | Cluster internal protocol representing a command request.

As we are sending mongo the commands as well, is there a work around for this?

Research2Go avatar May 13 '19 06:05 Research2Go

Can you describe what kind of internal commands you are sending to the server?

bwaldvogel avatar May 14 '19 20:05 bwaldvogel

In the meantime, the error has been changed. Basically, the problem is with javascript command.

The error message now is:

2019-05-17 11:22:47.900 WARN 13984 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'primaryMongoPreparator': Invocation of init method failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Write failed with error code 10156 and error message 'cannot update system collection'; nested exception is com.mongodb.WriteConcernException: Write failed with error code 10156 and error message 'cannot update system collection'

In the bean primaryMongoPreparator we have built a @PostConstruct where we register a javascript function using org.springframework.data.mongodb.core.ScriptOperations;

The javascript defines a function, like the following:

String script = "function doSth() "+ "{"+ "var ret = db.someCollection.findAndModify(" ......

It seems that this script is causing problem. We are now trying to work around this problem of using org.springframework.data.mongodb.core.query.BasicQuery; instead of register javascript function to MongoDB

Research2Go avatar May 17 '19 10:05 Research2Go