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

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

Github user Jaskey commented on the issue:

    https://github.com/apache/incubator-rocketmq/pull/86
  
    @lizhanhui  yes it seems reasonable to send heartbeat for all broker as one 
time.
    
    Please review the updated pr which only
    1. check if the beartbeat table is empty, only log and calculate times when 
it is not empty
    2. rename the heartbeat times variable


> SendHeartBeart log may not be triggered in the same expected period
> -------------------------------------------------------------------
>
>                 Key: ROCKETMQ-160
>                 URL: https://issues.apache.org/jira/browse/ROCKETMQ-160
>             Project: Apache RocketMQ
>          Issue Type: Improvement
>          Components: rocketmq-client
>            Reporter: Jaskey Lam
>            Assignee: Jaskey Lam
>            Priority: Minor
>             Fix For: 4.1.0-incubating
>
>
> {code}
>     private void sendHeartbeatToAllBroker() {
>         final HeartbeatData heartbeatData = this.prepareHeartbeatData();
>         final boolean producerEmpty = 
> heartbeatData.getProducerDataSet().isEmpty();
>         final boolean consumerEmpty = 
> heartbeatData.getConsumerDataSet().isEmpty();
>         if (producerEmpty && consumerEmpty) {
>             log.warn("sending heartbeat, but no consumer and no producer");
>             return;
>         }
>         long times = this.storeTimesTotal.getAndIncrement();//here every time 
> when the method is call, the times will increase even though acatully no 
> heartbeat is sent
>         Iterator<Entry<String, HashMap<Long, String>>> it = 
> this.brokerAddrTable.entrySet().iterator();
>         while (it.hasNext()) {
>             Entry<String, HashMap<Long, String>> entry = it.next();
>             String brokerName = entry.getKey();
>             HashMap<Long, String> oneTable = entry.getValue();
>             if (oneTable != null) {
>                 for (Map.Entry<Long, String> entry1 : oneTable.entrySet()) {
>                     Long id = entry1.getKey();
>                     String addr = entry1.getValue();
>                     if (addr != null) {
>                         if (consumerEmpty) {
>                             if (id != MixAll.MASTER_ID)
>                                 continue;
>                         }
>                         try {
>                             this.mQClientAPIImpl.sendHearbeat(addr, 
> heartbeatData, 3000);
>                             if (times % 20 == 0) {//since the first call is 
> times !=1, the heart beat log for the first heart beat could be missed
>                                 log.info("send heart beat to broker[{} {} {}] 
> success", brokerName, id, addr);
>                                 log.info(heartbeatData.toString());
>                             }
>                         } catch (Exception e) {
>                             if (this.isBrokerInNameServer(addr)) {
>                                 log.error("send heart beat to broker 
> exception", e);
>                             } else {
>                                 log.info("send heart beat to broker[{} {} {}] 
> exception, because the broker not up, forget it", brokerName,
>                                     id, addr);
>                             }
>                         }
>                     }
>                 }
>             }
>         }
>     }
> {code}



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

Reply via email to