@Override public void doRun() { Collection<MemberInfo> lsMemberInfos = membersUpdate.getMemberInfos(); List<Address> newMemberList = new ArrayList<Address>(lsMemberInfos.size()); for (final MemberInfo memberInfo : lsMemberInfos) { newMemberList.add(memberInfo.address); } doCall(membersUpdate, newMemberList, true); systemLogService.logJoin("JoinRunnable update members done."); doCall(new SyncProcess(), newMemberList, false); systemLogService.logJoin("JoinRunnable sync done."); doCall(new ConnectionCheckCall(), newMemberList, false); systemLogService.logJoin("JoinRunnable connection check done."); }
void updateMembers(Collection<MemberInfo> lsMemberInfos) { checkServiceThread(); final Map<Address, MemberImpl> mapOldMembers = new HashMap<Address, MemberImpl>(); for (MemberImpl member : lsMembers) { mapOldMembers.put(member.getAddress(), member); } if (mapOldMembers.size() == lsMemberInfos.size()) { boolean same = true; for (MemberInfo memberInfo : lsMemberInfos) { MemberImpl member = mapOldMembers.get(memberInfo.getAddress()); if (member == null || !member.getUuid().equals(memberInfo.uuid)) { same = false; break; } } if (same) { logger.log(Level.FINEST, "No need to process member update..."); return; } } logger.log(Level.FINEST, "Updating Members"); lsMembers.clear(); dataMemberCount.reset(); mapMembers.clear(); memberMasterConfirmationTimes.clear(); for (MemberInfo memberInfo : lsMemberInfos) { MemberImpl member = mapOldMembers.get(memberInfo.address); if (member == null) { member = addMember(memberInfo.address, memberInfo.nodeType, memberInfo.uuid); } else { addMember(member); } member.didRead(); } if (!lsMembers.contains(thisMember)) { throw new RuntimeException("Member list doesn't contain local member!"); } heartBeater(); node.getClusterImpl().setMembers(lsMembers); node.setJoined(); logger.log(Level.INFO, this.toString()); }