[ISSUE #2765]Optimize MemberUtils class's kRandom method

This commit is contained in:
wangwei 2020-05-08 21:53:53 +08:00
parent 0be43f33bf
commit beaa402ff7

View File

@ -19,6 +19,7 @@ package com.alibaba.nacos.core.cluster;
import com.alibaba.nacos.common.utils.ExceptionUtil;
import com.alibaba.nacos.core.utils.ApplicationUtils;
import com.alibaba.nacos.core.utils.Loggers;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
@ -139,19 +140,21 @@ public class MemberUtils {
int k = ApplicationUtils
.getProperty("nacos.core.member.report.random-num", Integer.class, 3);
Set<Member> tmp = new HashSet<>();
Set<Member> kMembers = new HashSet<>();
// Here thinking similar consul gossip protocols random k node
int totalSize = members.size();
for (int i = 0; i < 3 * totalSize && tmp.size() <= k; i++) {
for (Member member : members) {
if (filter.test(member)) {
tmp.add(member);
}
}
}
// Here thinking similar consul gossip protocols random k node
int totalSize = members.size();
Member[] membersArray = members.toArray(new Member[totalSize]);
ThreadLocalRandom threadLocalRandom = ThreadLocalRandom.current();
for (int i = 0; i < 3 * totalSize && kMembers.size() < k; i++) {
int idx = threadLocalRandom.nextInt(totalSize);
Member member = membersArray[idx];
if (filter.test(member)) {
kMembers.add(member);
}
}
return tmp;
return kMembers;
}
// 默认配置格式解析只有nacos-server的ip or ip:port or hostname:port 信息