/** * @return true iff the given peer is contained in conf and, * if old conf exists, is contained in old conf. */ boolean contains(RaftPeerId peerId) { return containsInConf(peerId) && (oldConf == null || containsInOldConf(peerId)); }
/** * @return true iff the given peer is contained in conf and, * if old conf exists, is contained in old conf. */ boolean contains(RaftPeerId peerId) { return containsInConf(peerId) && (oldConf == null || containsInOldConf(peerId)); }
private List<List<FollowerInfo>> divideFollowers(RaftConfiguration conf) { List<List<FollowerInfo>> lists = new ArrayList<>(2); List<FollowerInfo> listForNew = senders.stream() .filter(sender -> conf.containsInConf(sender.getFollower().getPeer().getId())) .map(LogAppender::getFollower) .collect(Collectors.toList()); lists.add(listForNew); if (conf.isTransitional()) { List<FollowerInfo> listForOld = senders.stream() .filter(sender -> conf.containsInOldConf(sender.getFollower().getPeer().getId())) .map(LogAppender::getFollower) .collect(Collectors.toList()); lists.add(listForOld); } return lists; }
private List<List<FollowerInfo>> divideFollowers(RaftConfiguration conf) { List<List<FollowerInfo>> lists = new ArrayList<>(2); List<FollowerInfo> listForNew = senders.stream() .filter(sender -> conf.containsInConf(sender.getFollower().getPeer().getId())) .map(LogAppender::getFollower) .collect(Collectors.toList()); lists.add(listForNew); if (conf.isTransitional()) { List<FollowerInfo> listForOld = senders.stream() .filter(sender -> conf.containsInOldConf(sender.getFollower().getPeer().getId())) .map(LogAppender::getFollower) .collect(Collectors.toList()); lists.add(listForOld); } return lists; }
private Optional<MinMajorityMax> getMajorityMin(ToLongFunction<FollowerInfo> followerIndex, LongSupplier logIndex) { final RaftPeerId selfId = server.getId(); final RaftConfiguration conf = server.getRaftConf(); final List<FollowerInfo> followers = voterLists.get(0); final boolean includeSelf = conf.containsInConf(selfId); if (followers.isEmpty() && !includeSelf) { return Optional.empty(); } final long[] indicesInNewConf = getSorted(followers, includeSelf, followerIndex, logIndex); final MinMajorityMax newConf = MinMajorityMax.valueOf(indicesInNewConf); if (!conf.isTransitional()) { return Optional.of(newConf); } else { // configuration is in transitional state final List<FollowerInfo> oldFollowers = voterLists.get(1); final boolean includeSelfInOldConf = conf.containsInOldConf(selfId); if (oldFollowers.isEmpty() && !includeSelfInOldConf) { return Optional.empty(); } final long[] indicesInOldConf = getSorted(oldFollowers, includeSelfInOldConf, followerIndex, logIndex); final MinMajorityMax oldConf = MinMajorityMax.valueOf(indicesInOldConf); return Optional.of(newConf.combine(oldConf)); } }
} else { // configuration is in transitional state final List<FollowerInfo> oldFollowers = voterLists.get(1); final boolean includeSelfInOldConf = conf.containsInOldConf(selfId); if (oldFollowers.isEmpty() && !includeSelfInOldConf) { return;