jinrongluo commented on issue #386:
URL: 
https://github.com/apache/incubator-eventmesh/issues/386#issuecomment-860735664


   Root Cause Analysis:
   
   After studying EventMesh code and debug logs, I found out a racing condition 
and class variable sharing issue in eventmesh-connector-rocketmq module.
   
    In `org.apache.eventmesh.connector.rocketmq.consumer.PushConsumerImpl.java` 
Every new message being consumed, it will set the message's context into 
`PushConsumerImpl.context` variable
   
   
https://github.com/apache/incubator-eventmesh/blob/develop/eventmesh-connector-rocketmq/src/main/java/org/apache/eventmesh/connector/rocketmq/consumer/PushConsumerImpl.java#L134-L136
   
   This context is pass through different layers of consumer handlers, and 
finally used in 
`org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService.java`
  to update the Queue Consumer Offset back to RocketMQ
   
https://github.com/apache/incubator-eventmesh/blob/develop/eventmesh-connector-rocketmq/src/main/java/org/apache/rocketmq/client/impl/consumer/ConsumeMessageConcurrentlyService.java#L352-L364
   
   However, I found that `PushConsumerImpl.context` variable is being shared by 
multiple thread in EventMeshMessageListenerConcurrently object when registered 
into DefaultMQPushConsumer.
   
   So every new message will update PushConsumerImpl.context of itself, and the 
old message's context is overridden. So the old message is not able to update 
its Queue Consumer Offset using its own context.
   
   We should not let all messages to share the same PushConsumerImpl.context 
class variable. We should have each message to maintain its own context and 
passing through the consumer handlers, without being modified.
   
   I will propose a fix based on this analysis.


-- 
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:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to