void startJoin() {
   logger.log(Level.FINEST, "Starting Join.");
   joinInProgress = true;
   final MembersUpdateCall membersUpdate =
       new MembersUpdateCall(lsMembers, node.getClusterImpl().getClusterTime());
   if (setJoins != null && setJoins.size() > 0) {
     for (MemberInfo memberJoined : setJoins) {
       membersUpdate.addMemberInfo(memberJoined);
     }
   }
   membersUpdate.setNode(node);
   membersUpdate.call();
   node.executorManager.executeNow(new JoinRunnable(membersUpdate));
 }
 @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.");
 }