machinio/solrb

View on GitHub
lib/solr/request/cloud/first_shard_leader_node_selection_strategy.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Solr
  module Request
    module Cloud
      class FirstShardLeaderNodeSelectionStrategy < NodeSelectionStrategy
        def call
          leader = first_shard_leader_replica_node_for(collection: collection_name)
          replicas = solr_cloud_active_nodes_urls.shuffle
          urls = ([leader] + replicas).flatten.uniq
          map_urls_to_collections(urls)
        end

        private

        def first_shard_leader_replica_node_for(collection:)
          shards = Solr.shards_for(collection: collection)
          return unless shards
          first_shard_name = shards.sort.first
          Solr.leader_replica_node_for(collection: collection, shard: first_shard_name)
        end

        def solr_cloud_active_nodes_urls
          Solr.active_nodes_for(collection: collection_name)
        end
      end
    end
  end
end