public class LatencyAwarePolicy extends Object implements ChainableLoadBalancingPolicy
When used, this policy will collect the latencies of the queries to each Cassandra node and maintain a per-node average latency score. The nodes that are slower than the best performing node by more than a configurable threshold will be moved to the end of the query plan (that is, they will only be tried if all other nodes failed). Note that this policy only penalizes slow nodes, it does not globally sort the query plan by latency.
The latency score for a given node is a based on a form of exponential moving average. In other words, the latency score of a node is the average of its previously measured latencies, but where older measurements gets an exponentially decreasing weight. The exact weight applied to a newly received latency is based on the time elapsed since the previous measure (to account for the fact that latencies are not necessarily reported with equal regularity, neither over time nor between different nodes).
Once a node is excluded from query plans (because its averaged latency grew over the exclusion threshold), its latency score will not be updated anymore (since it is not queried). To give a chance to this node to recover, the policy has a configurable retry period. The policy will not penalize a host for which no measurement has been collected for more than this retry period.
Please see the LatencyAwarePolicy.Builder class and methods for more details on the possible parameters
of this policy.
| Modifier and Type | Class and Description |
|---|---|
static class |
LatencyAwarePolicy.Builder
Helper builder object to create a latency aware policy.
|
static class |
LatencyAwarePolicy.Snapshot
An immutable snapshot of the per-host scores (and stats in general) maintained by
LatencyAwarePolicy to base its decision upon. |
| Modifier and Type | Method and Description |
|---|---|
static LatencyAwarePolicy.Builder |
builder(LoadBalancingPolicy childPolicy)
Creates a new latency aware policy builder given the child policy that the resulting policy
should wrap.
|
void |
close()
Gets invoked at cluster shutdown.
|
HostDistance |
distance(Host host)
Returns the HostDistance for the provided host.
|
LoadBalancingPolicy |
getChildPolicy()
Returns the child policy.
|
LatencyAwarePolicy.Snapshot |
getScoresSnapshot()
Returns a snapshot of the scores (latency averages) maintained by this policy.
|
void |
init(Cluster cluster,
Collection<Host> hosts)
Initialize this load balancing policy.
|
Iterator<Host> |
newQueryPlan(String loggedKeyspace,
Statement statement)
Returns the hosts to use for a new query.
|
void |
onAdd(Host host)
Called when a new node is added to the cluster.
|
void |
onDown(Host host)
Called when a node is determined to be down.
|
void |
onRemove(Host host)
Called when a node is removed from the cluster.
|
void |
onUp(Host host)
Called when a node is determined to be up.
|
public LoadBalancingPolicy getChildPolicy()
ChainableLoadBalancingPolicygetChildPolicy in interface ChainableLoadBalancingPolicypublic static LatencyAwarePolicy.Builder builder(LoadBalancingPolicy childPolicy)
childPolicy - the load balancing policy to wrap with latency awareness.public void init(Cluster cluster, Collection<Host> hosts)
LoadBalancingPolicyNote that the driver guarantees that it will call this method exactly once per policy object and will do so before any call to another of the methods of the policy.
init in interface LoadBalancingPolicycluster - the Cluster instance for which the policy is created.hosts - the initial hosts to use.public HostDistance distance(Host host)
distance in interface LoadBalancingPolicyhost - the host of which to return the distance of.host as returned by the wrapped policy.public Iterator<Host> newQueryPlan(String loggedKeyspace, Statement statement)
The returned plan will be the same as the plan generated by the child policy, except that nodes that are slower than the best performing node by more than a configurable threshold will be moved to the end (that is, they will only be tried if all other nodes failed). Note that this policy only penalizes slow nodes, it does not globally sort the query plan by latency.
newQueryPlan in interface LoadBalancingPolicyloggedKeyspace - the currently logged keyspace.statement - the statement for which to build the plan.public LatencyAwarePolicy.Snapshot getScoresSnapshot()
LatencyAwarePolicy.Snapshot object containing the current latency scores
maintained by this policy.public void onUp(Host host)
LoadBalancingPolicyonUp in interface LoadBalancingPolicyhost - the host that has been detected up.public void onDown(Host host)
LoadBalancingPolicyonDown in interface LoadBalancingPolicyhost - the host that has been detected down.public void onAdd(Host host)
LoadBalancingPolicyThe newly added node should be considered up.
onAdd in interface LoadBalancingPolicyhost - the host that has been newly added.public void onRemove(Host host)
LoadBalancingPolicyonRemove in interface LoadBalancingPolicyhost - the removed host.public void close()
LoadBalancingPolicyThis gives the policy the opportunity to perform some cleanup, for instance stop threads that it might have started.
close in interface LoadBalancingPolicyCopyright © 2012–2018. All rights reserved.