Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-10428

CloudSolrClient: Qerying multiple collection aliases leads to SolrException: Collection not found

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 6.4, 6.4.1, 6.4.2, 6.5, 7.0
    • 7.2
    • SolrJ
    • None

    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

      Attachments

        Activity

          People

            Unassigned Unassigned
            phpock Philip Pock
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: