Fix/lwt routing lbp filtering 384 #784
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Addresses #384.
Problem
LWT statements were routed by
CqlRequestHandlerusing the raw replica set from the token map, without going through the configuredLoadBalancingPolicy. In clusters usingTokenAwarePolicytogether with DC-/rack-aware policies, this caused LWT traffic to ignore those policies and be sent to replicas in a fixed order, potentially preferring replicas in a different DC or rack than expected.Approach
RequestRoutingType(REGULAR,LWT) to distinguish LWT from non-LWT requests.RequestRoutingMethod(REGULAR,PRESERVE_REPLICA_ORDER,TOKEN_BASED_REPLICA_SHUFFLING) to control how replicas are ordered and shuffled.Requestwith:@Nullable RequestRoutingType getRequestType()default RequestRoutingMethod getRoutingMethod()Simple,Bound,Batch, graph statements,PrepareRequest, etc.) to report the appropriateRequestRoutingType(LWT vs regular).CqlRequestHandler; routing for LWT and non-LWT statements is now delegated entirely to the load balancing policy viaDefaultLoadBalancingPolicy.newQueryPlan.DefaultLoadBalancingPolicy:RequestRoutingTypeso that LWT statements are not constrained to a single rack.RequestRoutingMethod.PRESERVE_REPLICA_ORDERby skipping shuffling when replica order must be preserved.Impact
LoadBalancingPolicy, so DC-/rack-aware policies are respected instead of being bypassed for LWT traffic.