CAE-534 - RediSearch: Sticky Cursor in Cluster (Stage 1) #3409
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.
TL;DR: Make
FT.AGGREGATE … WITHCURSOR
sticky to the shard that created it by carrying the routing token (nodeId
) in theAggregationReply
and routingFT.CURSOR READ/DEL
accordingly. No writer changes.What changed
AggregationReply<K,V>
@Nullable String nodeId
+getNodeId()
; package-privatesetNodeId(...)
.equals
/hashCode
.API (all
@Experimental
)Cursor ops now consume the reply:
ftCursorread(AggregationReply<K,V> reply, int count)
ftCursorread(AggregationReply<K,V> reply)
ftCursordel (AggregationReply<K,V> reply)
Removed/adapted old
(index, cursorId)
variants.Cluster behavior
FT.AGGREGATE
, ifcursorId > 0
, stampreply.setNodeId(executedNode.getNodeId())
.ftCursorread/ftCursordel
resolvereply.nodeId → endpoint
viaPartitions
and dispatch to that node.Single node / missing
nodeId
Migration note
AggregationReply
instead of(index, cursorId)
.What's next
Stage 2: read-write load-balancing for keyless commands, including
FT.SEARCH/FT.AGGREGATE
.