[ 
https://issues.apache.org/jira/browse/ROCKETMQ-184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15979669#comment-15979669
 ] 

ASF GitHub Bot commented on ROCKETMQ-184:
-----------------------------------------

Github user lizhanhui commented on the issue:

    https://github.com/apache/incubator-rocketmq/pull/95
  
    Thanks @Jaskey, this is indeed a good place to improve. 
    
    For the implementation, I suggest an alternative generic way, instead of 
add a close future for each request, we add the opaque integer into a 
collection per channel. Remove the opaque integer on response or invalidate all 
of them in NettyConnectManageHandler. Suggested approach has fewer memory 
footprint and we may also easily cover the sync request scenario -- respond 
earlier before `timeoutMillis` amount of time elapsed in case channel 
experiences problems.



> It takes too long(3-33 seconds) to switch to read from slave when master 
> crashes
> --------------------------------------------------------------------------------
>
>                 Key: ROCKETMQ-184
>                 URL: https://issues.apache.org/jira/browse/ROCKETMQ-184
>             Project: Apache RocketMQ
>          Issue Type: Improvement
>          Components: rocketmq-client, rocketmq-remoting
>            Reporter: Jaskey Lam
>            Assignee: Xiaorui Wang
>             Fix For: 4.2.0-incubating
>
>
> When master crashes, no notifier callback is triggered to pull message again.
> Instead, it relies on the scan service to trigger timeout and then re pull.
> But the pulling command has 30 seconds timeout, and after timeout, pulling 
> operation will be scheduled after 3 seconds.
> So it takes 3 to 33 seconds to switch to slave, which is too long and can be 
> optimized.
> The root cause is the below repull cost too long to be triggered when master 
> crashes
> {code}
>             @Override
>             public void onException(Throwable e) {
>                 if 
> (!pullRequest.getMessageQueue().getTopic().startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX))
>  {
>                     log.warn("execute the pull request exception", e);
>                 }
>                 
> DefaultMQPushConsumerImpl.this.executePullRequestLater(pullRequest, 
> PULL_TIME_DELAY_MILLS_WHEN_EXCEPTION);
>             }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to