Menu

SolrCloud Layout

module.exports = headler: 'SolrCloud Atlas Layout', handler: (options) ->
  atlas =  @contexts('ryba/atlas')[0].config.ryba.atlas
  @file.download
    source: "#{__dirname}/resources/solr/lang/stopwords_en.txt"
    target: "#{options.atlas_collection_dir}/lang/stopwords_en.txt"
  @file.download
    source: "#{__dirname}/resources/solr/currency.xml"
    target: "#{options.atlas_collection_dir}/currency.xml"
  @file.download
    source: "#{__dirname}/resources/solr/protwords.txt"
    target: "#{options.atlas_collection_dir}/protwords.txt"
  @file.download
    source: "#{__dirname}/resources/solr/schema.xml"
    target: "#{options.atlas_collection_dir}/schema.xml"
  @file.download
    source: "#{__dirname}/resources/solr/solrconfig.xml"
    target: "#{options.atlas_collection_dir}/solrconfig.xml"
  @file.download
    source: "#{__dirname}/resources/solr/stopwords.txt"
    target: "#{options.atlas_collection_dir}/stopwords.txt"
  @file.download
    source: "#{__dirname}/resources/solr/synonyms.txt"
    target: "#{options.atlas_collection_dir}/synonyms.txt"

Create Atlas Collection in Solr

  @call
    if: [
      @config.host is options.master
      atlas.solr_type is 'cloud_docker'
    ]
    header:'Atlas Collection (cloud_docker)'
  , (options) ->
      container = null
      @wait.execute
        if: @contexts('ryba/swarm/manager').length isnt 0
        cmd: docker.wrap options, "ps | grep #{atlas.solr_cluster_name.split('_').join('')} | grep #{options['master']} | awk '{print $1}'"
      @system.execute
        if: @contexts('ryba/swarm/manager').length isnt 0
        cmd: docker.wrap options, "ps | grep #{atlas.solr_cluster_name.split('_').join('')} | grep #{options['master']} | awk '{print $1}'"
      , (err, status, stdout) ->
        throw err if err
        container = stdout?.trim()
      @call ->
        @docker.exec
          container: "#{container or options.master_container_runtime_name}"
          cmd: "/usr/solr-cloud/current/bin/solr healthcheck -c vertex_index"
          code_skipped: [1,126]
        @docker.exec
          unless: -> @status -1
          header: 'Create vertex_index collection'
          container: "#{container or options.master_container_runtime_name}"
          cmd: """
          /usr/solr-cloud/current/bin/solr create_collection -c vertex_index \
          -shards #{options.hosts.length}  \
          -replicationFactor #{options.hosts.length-1} \
          -d /atlas_solr
          """
        @docker.exec
          container: "#{container or options.master_container_runtime_name}"
          cmd: "/usr/solr-cloud/current/bin/solr healthcheck -c edge_index"
          code_skipped: [1,126]
        @docker.exec
          unless: -> @status -1
          header: 'Create edge_index collection'
          container: "#{container or options.master_container_runtime_name}"
          cmd: """
          /usr/solr-cloud/current/bin/solr create_collection -c edge_index \
          -shards #{options.hosts.length}  \
          -replicationFactor #{options.hosts.length-1} \
          -d /atlas_solr
          """
        @docker.exec
          container: "#{container or options.master_container_runtime_name}"
          cmd: "/usr/solr-cloud/current/bin/solr healthcheck -c fulltext_index"
          code_skipped: [1,126]
        @docker.exec
          unless: -> @status -1
          header: 'Create fulltext_index collection'
          container: "#{container or options.master_container_runtime_name}"
          cmd: """
          /usr/solr-cloud/current/bin/solr create_collection -c fulltext_index \
          -shards #{options.hosts.length}  \
          -replicationFactor #{options.hosts.length-1} \
          -d /atlas_solr
          """
  @call
    if: [
      @config.host is options.master
      atlas.solr_type is 'cloud' and options.hosts[0] is @config.host
    ]
    header:'Atlas Collection (cloud)'
  , ->
    @connection.wait
      servers: for host in options.hosts
        host: host
        port: @contexts('ryba/solr/cloud')[0].config.ryba.solr.cloud.port
    @system.execute
      unless_exec: "/usr/solr-cloud/current/bin/solr healthcheck -c vertex_index"
      cmd: """
      /usr/solr-cloud/current/bin/solr create_collection -c vertex_index \
      -shards #{options.hosts.length}  \
      -replicationFactor #{options.hosts.length} \
      -d #{options.atlas_collection_dir}
      """
    @system.execute
      unless_exec: "/usr/solr-cloud/current/bin/solr healthcheck -c edge_index"
      cmd: """
      /usr/solr-cloud/current/bin/solr create_collection -c edge_index \
      -shards #{options.hosts.length}  \
      -replicationFactor #{options.hosts.length} \
      -d #{options.atlas_collection_dir}
      """
    @system.execute
      unless_exec: "/usr/solr-cloud/current/bin/solr healthcheck -c fulltext_index"
      cmd: """
      /usr/solr-cloud/current/bin/solr create_collection -c fulltext_index \
      -shards #{options.hosts.length}  \
      -replicationFactor #{options.hosts.length} \
      -d #{options.atlas_collection_dir}
      """

Dependecies

docker = require '@nikitajs/core/lib/misc/docker'