[jira] [Commented] (SOLR-10428) CloudSolrClient: Qerying multiple collection aliases leads to SolrException: Collection not found

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Commented] (SOLR-10428) CloudSolrClient: Qerying multiple collection aliases leads to SolrException: Collection not found

JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/SOLR-10428?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16511215#comment-16511215 ]

David Smiley commented on SOLR-10428:
-------------------------------------

I improved this sort of stuff significantly in SOLR-11444.  "collection" can indeed be a list and potentially include aliases.  Even {{/solr/colA,colB/select?...}} works (as of SOLR-11444).  This isn't documented sufficiently, unfortunately. The SolrJ API could be improved here; should be a new issue.  Since it's so rare to specify more than one collection/alias, it just says "collection".  It's kinda a trick that it can be a list.

[~phpock] can you please try a more recent Solr version, 7.2.0 or beyond, and see if the problem persists?

> 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, 6.4.1, 6.4.2, 6.5, 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
(v7.6.3#76005)

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