Chris M. Hostetter created SOLR-18433:
-----------------------------------------

             Summary: CloudSolrClient inconsistencies in routing non-collection 
requests
                 Key: SOLR-18433
                 URL: https://issues.apache.org/jira/browse/SOLR-18433
             Project: Solr
          Issue Type: Improvement
            Reporter: Chris M. Hostetter


I'm creating this Jira to serve as a "parent" issue for a few loosely collected 
concerns I have regarding how CloudSolrClient decides which node to send 
requests to when they are not collection specific.

 
The broader context of why these concerns ... concern me ... is in [the 
recommendations we 
make|https://solr.apache.org/guide/solr/latest/upgrade-notes/major-changes-in-solr-10.html#solrcloud-overseer]
 for people who want to use {{SOLR_CLOUD_OVERSEER_ENABLED=false}} (emphasis 
added)...
{quote}Creating a replica (either via collection creation or other 
circumstances) can take more time without the Overseer if these creation 
commands are delivered to many nodes around the cluster. *That can be avoided 
simply by sending admin requests to a consistent node.*
{quote}
If we're recommending that people send admin commands to a consistent node, 
then that should be possible (and easy) using {{CloudSolrClient}}

But in looking into this, other concerns popped up.
----
For reference, here is the psuedo-code/flow for 
{{CloudSolrClient.sendRequest(request)}} as it currently exists on main...
{noformat}
if (request.getType == UPDATE) {
  if (we can send direct to leaders) {{
    // NOTE: not focusing on this code path in this jira
    return directUpdate(request)
  }
}
List<Endpoint> endpoints = new List()
if (request is V2) {
  endpoints.add(pickOneAtRandom(liveNodes)
} else if (! request.requiresCollection() )
  endpoints.add(liveNodes)
} else {
  collectionNames = ...
  if (! request.getPreferredNodes().isEmpty()) {
    endpoints.add(
       request.getPreferredNodes().stream()
       .mapToReplicasOf(collectionNames)
    return getLbClient().request(request, endpoints)
  }
  endpoints.add(
    collectionNames
    .getAllReplicas()
    .sortAndGroupBy(replicaListTransformer))
  }
  return getLbClient().request(request, endpoints)
}
{noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to