Philip Pock created SOLR-10428:
----------------------------------

             Summary: CloudSolrClient: Qerying multiple collection aliases 
leads to SolrException: Collection not found
                 Key: SOLR-10428
                 URL: https://issues.apache.org/jira/browse/SOLR-10428
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
          Components: SolrJ
    Affects Versions: 6.4.2, 6.4.0, 6.5, 6.4.1, master (7.0)
            Reporter: Philip Pock
            Priority: Minor


We have multiple collections and an alias is created for each of them. e.g.:
alias-a -> collection-a, alias-b -> collection-b

We search in multiple collections by passing the aliases of the collections in 
the collections parameter.

{code}solrClient.query("alias-a,alias-b", params, SolrRequest.METHOD.POST){code}

The client can't find the collection and throws an Exception. Relevant parts of 
the stacktrace using v6.5.0:
{noformat}
org.apache.solr.common.SolrException: Collection not found: collection-a
        at 
org.apache.solr.client.solrj.impl.CloudSolrClient.getCollectionNames(CloudSolrClient.java:1394)
        at 
org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:1087)
        at 
org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:1057)
        at 
org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:160)
        at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:974)
{noformat}
Everything works fine with a single alias.
I think this issue was introduced with SOLR-9784. Please see my comment below.

{code:title=org.apache.solr.client.solrj.impl.CloudSolrClient }
Set<String> getCollectionNames(String collection) {
    List<String> rawCollectionsList = StrUtils.splitSmart(collection, ",", 
true);
    Set<String> collectionNames = new HashSet<>();
    for (String collectionName : rawCollectionsList) {
      if (stateProvider.getState(collectionName) == null) {
        // I assume that collectionName should be passed to getAlias here
        String alias = stateProvider.getAlias(collection);
        if (alias != null) {
          List<String> aliasList = StrUtils.splitSmart(alias, ",", true);
          collectionNames.addAll(aliasList);
          continue;
        }

          throw new SolrException(ErrorCode.BAD_REQUEST, "Collection not found: 
" + collectionName);
        }

      collectionNames.add(collectionName);
    }
    return collectionNames;
  }
{code}

The suggested change is similar to the previous revision: 
https://github.com/apache/lucene-solr/commit/5650939a8d41b7bad584947a2c9dcedf3774b8de#diff-c8d54eacd46180b332c86c7ae448abaeL1301



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

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

Reply via email to