Description
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.
solrClient.query("alias-a,alias-b", params, SolrRequest.METHOD.POST)
The client can't find the collection and throws an Exception. Relevant parts of the stacktrace using v6.5.0:
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)
Everything works fine with a single alias.
I think this issue was introduced with SOLR-9784. Please see my comment below.
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; }
The suggested change is similar to the previous revision: https://github.com/apache/lucene-solr/commit/5650939a8d41b7bad584947a2c9dcedf3774b8de#diff-c8d54eacd46180b332c86c7ae448abaeL1301