Node getMasterNode() { _checkClosed(); for (int i = 0; i < _all.size(); i++) { Node n = _all.get(i); if (n.master()) return n; } return null; }
/** @return a good secondary or null if can't find one */ ServerAddress getASecondary() { _checkClosed(); Node best = null; double badBeforeBest = 0; int start = _random.nextInt(_all.size()); double mybad = 0; for (int i = 0; i < _all.size(); i++) { Node n = _all.get((start + i) % _all.size()); if (!n.secondary()) { mybad++; continue; } if (best == null) { best = n; badBeforeBest = mybad; mybad = 0; continue; } long diff = best._pingTime - n._pingTime; if (diff > slaveAcceptableLatencyMS || // this is a complex way to make sure we get a random distribution of slaves ((badBeforeBest - mybad) / (_all.size() - 1)) > _random.nextDouble()) { best = n; badBeforeBest = mybad; mybad = 0; } } if (best == null) return null; return best._addr; }
Node getMasterNode() { _checkClosed(); return _replicaSetHolder.get().getMaster(); }