@Override public void onDown(Host host) { // Note that with well behaved balancing policy (that ignore dead nodes), the removePool call // is not necessary // since updateCreatedPools should take care of it. But better protect against non well // behaving policies. removePool(host); updateCreatedPools(); }
/* * When the set of live nodes change, the loadbalancer will change his * mind on host distances. It might change it on the node that came/left * but also on other nodes (for instance, if a node dies, another * previously ignored node may be now considered). * * This method ensures that all hosts for which a pool should exist * have one, and hosts that shouldn't don't. */ private void updateCreatedPools() { for (Host h : cluster.getMetadata().allHosts()) { HostDistance dist = loadBalancingPolicy().distance(h); HostConnectionPool pool = pools.get(h); if (pool == null) { if (dist != HostDistance.IGNORED && h.getMonitor().isUp()) addOrRenewPool(h); } else if (dist != pool.hostDistance) { if (dist == HostDistance.IGNORED) { removePool(h); } else { pool.hostDistance = dist; } } } }
@Override public void onRemove(Host host) { removePool(host); updateCreatedPools(); }