You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by GitBox <gi...@apache.org> on 2019/08/12 09:31:56 UTC

[GitHub] [rocketmq] ymhh opened a new issue #1375: Transactional message bug,when msg is compress and only parepare ,haven't commit

ymhh opened a new issue #1375: Transactional message  bug,when msg is compress and only parepare ,haven't commit
URL: https://github.com/apache/rocketmq/issues/1375
 
 
   当使用事务消息时,消息体超过4kb触发压缩,并且只调用了prepare时。broker端做回查逻辑,触发以下逻辑时,会将标记位为1(已压缩)的消息重新放入RMQ_SYS_TRANS_HALF_TOPIC。但是此时消息体里面的消息已经被解压缩处理过了。这样就导致RMQ_SYS_TRANS_HALF_TOPIC出现了一条标记为已压缩,但是实际未被压缩的消息。
   `
                           if (isNeedCheck) {
                               if (!putBackHalfMsgQueue(msgExt, i)) {
                                   continue;
                               }
                               listener.resolveHalfMsg(msgExt);
                           }
   `
   这样会导致check线程在下一次读取消息时,会一直卡主。因为无法解压缩一条未被压缩的数据。
   日志如下(加粗的日志是我调试打印的)
   
   > 
   **java.util.zip.ZipException: incorrect header check
           at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) ~[na:1.8.0_91]
           at org.apache.rocketmq.common.UtilAll.uncompress(UtilAll.java:275) ~[rocketmq-common-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.common.message.MessageDecoder.decode(MessageDecoder.java:330) [rocketmq-common-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.common.message.MessageDecoder.decode(MessageDecoder.java:127) [rocketmq-common-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageBridge.decodeMsgList(TransactionalMessageBridge.java:181) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageBridge.getMessage(TransactionalMessageBridge.java:128) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageBridge.getHalfMessage(TransactionalMessageBridge.java:108) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageServiceImpl.pullHalfMsg(TransactionalMessageServiceImpl.java:372) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageServiceImpl.getHalfMsg(TransactionalMessageServiceImpl.java:437) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageServiceImpl.check(TransactionalMessageServiceImpl.java:164) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.TransactionalMessageCheckService.onWaitEnd(TransactionalMessageCheckService.java:55) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.common.ServiceThread.waitForRunning(ServiceThread.java:144) [rocketmq-common-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.TransactionalMessageCheckService.run(TransactionalMessageCheckService.java:44) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]**
   
   2019-08-12 08:01:11 ERROR TransactionalMessageCheckService - Check error
   java.lang.NullPointerException: null
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageBridge.getMessage(TransactionalMessageBridge.java:139) ~[rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageBridge.getHalfMessage(TransactionalMessageBridge.java:108) ~[rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageServiceImpl.pullHalfMsg(TransactionalMessageServiceImpl.java:372) ~[rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageServiceImpl.getHalfMsg(TransactionalMessageServiceImpl.java:437) ~[rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.queue.TransactionalMessageServiceImpl.check(TransactionalMessageServiceImpl.java:164) ~[rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.TransactionalMessageCheckService.onWaitEnd(TransactionalMessageCheckService.java:55) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.common.ServiceThread.waitForRunning(ServiceThread.java:144) [rocketmq-common-kl-4.5.1.3-SNAPSHOT.jar:na]
           at org.apache.rocketmq.broker.transaction.TransactionalMessageCheckService.run(TransactionalMessageCheckService.java:44) [rocketmq-broker-kl-4.5.1.3-SNAPSHOT.jar:na]
           at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services