[ https://issues.apache.org/jira/browse/ROCKETMQ-243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16083386#comment-16083386 ]
ASF GitHub Bot commented on ROCKETMQ-243: ----------------------------------------- Github user shroman commented on a diff in the pull request: https://github.com/apache/incubator-rocketmq/pull/130#discussion_r126858457 --- Diff: common/src/main/java/org/apache/rocketmq/common/protocol/route/BrokerData.java --- @@ -37,15 +41,21 @@ public BrokerData(String cluster, String brokerName, HashMap<Long, String> broke this.brokerAddrs = brokerAddrs; } + /** + * Selects a (preferably master) broker address from the registered list. + * If the master's address cannot be found, a slave broker address is selected in a random manner. + * + * @return Broker address. + */ public String selectBrokerAddr() { - String value = this.brokerAddrs.get(MixAll.MASTER_ID); - if (null == value) { - for (Map.Entry<Long, String> entry : this.brokerAddrs.entrySet()) { - return entry.getValue(); - } + String addr = this.brokerAddrs.get(MixAll.MASTER_ID); + + if (addr == null) { + List<Long> keys = new ArrayList<Long>(brokerAddrs.keySet()); + return brokerAddrs.get(keys.get(random.nextInt(keys.size()))); --- End diff -- what exactly is the problem with the current approach? > BrokerData#selectBrokerAddr() picks the 1st element in the list of addresses > ---------------------------------------------------------------------------- > > Key: ROCKETMQ-243 > URL: https://issues.apache.org/jira/browse/ROCKETMQ-243 > Project: Apache RocketMQ > Issue Type: Improvement > Components: rocketmq-commons > Affects Versions: 4.1.0-incubating > Reporter: Roman Shtykh > Assignee: Roman Shtykh > Priority: Minor > > I wonder if this can cause broker contention. Therefore I propose to pick the > address at least in a random manner. -- This message was sent by Atlassian JIRA (v6.4.14#64029)