Houston Putman created SOLR-15803:
-------------------------------------
Summary: Allow AssignStrategy to process multiple AssignRequests
with cross-coordination
Key: SOLR-15803
URL: https://issues.apache.org/jira/browse/SOLR-15803
Project: Solr
Issue Type: Improvement
Security Level: Public (Default Security Level. Issues are Public)
Components: SolrCloud
Reporter: Houston Putman
Assignee: Houston Putman
When doing testing for SOLR-15795, I found that if you have an empty node when
running the REPLACENODE command, then many times all replicas will be placed on
that same node, even if it doesn't result in an even distribution in your
cluster.
When looking at the code, it made sense. The ReplaceNodeCmd goes through a loop
for every replica on the sourceNode, and uses the AssignStrategy class to
assign a node for each replica, using the clusterstate. However, the
clusterstate does not change between these replicas, so the most advantageous
node for 1 replica, is likely going to be the most advantageous for many
replicas given the same cluster state. Therefore all replicas were being
scheduled for the same node in my testing.
An easy (in theory) solution is to let AssignStrategy take a list of
AssignRequests in assign(), and each request in this list will account for the
replicaPlacements decided for the previous requests in the list. That way, the
ReplaceNodeCmd can create it's list of AssignRequests, and issue them all at
once to AssignStrategy, which will come up with the _optimal_ plan for all
replicas *together*.
Because this is an API in assignStrategy, it will work with the new autoscaling
APIs or using the legacy assign strategy.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]