apache / apache/incubator-seata-samples

[springcloud-jpa-seata] Unexpected IndexOutOfBoundsException occurred in Storage Services when rollback several times

Open
#112 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.4k
Forks
2k
PR merge metrics
No merged PRs in 30d

Description

Hi team, exception occurred when I test with the rollback api http://127.0.0.1:8084/purchase/rollback
several times, let's say 12 times in my computer. please help to take a look? Any feedback is appreciated.

The stack info is as bellow:

`2019-05-09 10:30:13.342 DEBUG 8456 --- [nio-8081-exec-1] i.s.rm.datasource.undo.UndoLogManager : Flushing UNDO LOG: {"branchId":2011004429,"sqlUndoLogs":[{"afterImage":{"rows":[{"fields":[{"keyType":"PrimaryKey","name":"id","type":4,"value":1},{"keyType":"NULL","name":"count","type":4,"value":999}]}],"tableName":"storage_tbl"},"beforeImage":{"rows":[{"fields":[{"keyType":"PrimaryKey","name":"id","type":4,"value":1},{"keyType":"NULL","name":"count","type":4,"value":1000}]}],"tableName":"storage_tbl"},"sqlType":"UPDATE","tableName":"storage_tbl"}],"xid":"172.17.0.19:8091:2011004428"}
2019-05-09 10:30:13.473 DEBUG 8456 --- [nio-8081-exec-1] i.s.core.rpc.netty.AbstractRpcRemoting : offer message: xid=172.17.0.19:8091:2011004428,branchId=2011004429,resourceId=null,status=PhaseOne_Done,applicationData=null
2019-05-09 10:30:13.473 DEBUG 8456 --- [geSend_RMROLE_1] i.s.core.rpc.netty.AbstractRpcRemoting : write message:SeataMergeMessage xid=172.17.0.19:8091:2011004428,branchId=2011004429,resourceId=null,status=PhaseOne_Done,applicationData=null
, channel:[id: 0x28543152, L:/192.168.63.108:57140 - R:/192.168.63.195:8091],active?true,writable?true,isopen?true
2019-05-09 10:30:13.473 DEBUG 8456 --- [lector_RMROLE_1] i.s.core.rpc.netty.MessageCodecHandler : Send:SeataMergeMessage xid=172.17.0.19:8091:2011004428,branchId=2011004429,resourceId=null,status=PhaseOne_Done,applicationData=null

2019-05-09 10:30:13.475 DEBUG 8456 --- [lector_RMROLE_1] i.s.core.rpc.netty.MessageCodecHandler : Receive:MergeResultMessage io.seata.core.protocol.transaction.BranchReportResponse@2c54642d
,messageId:76
2019-05-09 10:30:13.477 DEBUG 8456 --- [nio-8081-exec-1] io.seata.core.context.RootContext : unbind 172.17.0.19:8091:2011004428
2019-05-09 10:30:13.477 DEBUG 8456 --- [nio-8081-exec-1] o.s.c.a.s.web.SeataHandlerInterceptor : unbind 172.17.0.19:8091:2011004428 from RootContext
2019-05-09 10:30:13.537 ERROR 8456 --- [lector_RMROLE_1] i.s.core.rpc.netty.MessageCodecHandler : decode error

java.lang.IndexOutOfBoundsException: readerIndex(158) + length(4) exceeds writerIndex(160): PooledUnsafeDirectByteBuf(ridx: 158, widx: 160, cap: 160)
at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1437) ~[netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.buffer.AbstractByteBuf.readInt(AbstractByteBuf.java:809) ~[netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.seata.core.protocol.transaction.AbstractBranchEndRequest.decode(AbstractBranchEndRequest.java:230) ~[seata-core-0.5.1.jar:na]
at io.seata.core.rpc.netty.MessageCodecHandler.decode(MessageCodecHandler.java:188) ~[seata-core-0.5.1.jar:na]
at io.netty.handler.codec.ByteToMessageCodec$1.decode(ByteToMessageCodec.java:42) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:502) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:441) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:278) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:677) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:612) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:529) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:491) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.33.Final.jar:4.1.33.Final]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]

2019-05-09 10:30:13.539 ERROR 8456 --- [lector_RMROLE_1] io.seata.core.rpc.netty.RmRpcClient : 0318`

Contributor guide

Open the contributing guide

Research direction

Reproduce the issue by calling http://127.0.0.1:8084/purchase/rollback repeatedly, then trace the failure from MessageCodecHandler.decode into AbstractBranchEndRequest.decode. Compare the encoded message length with the reader index and verify that repeated rollbacks no longer produce the IndexOutOfBoundsException in the decoder.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring-boot
Domain
backend, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.