0
require 'faker'
require 'async'
require 'newrelic_rpm'

NewRelic::Agent.manual_start

class Movie
  attr_reader :attributes

  def initialize(attributes={})
    @attributes = attributes
  end

  def to_hash
    @attributes
  end
end

require 'elasticsearch/persistence'
require 'elasticsearch'

class MyRepository; include Elasticsearch::Persistence::Repository; end
client = Elasticsearch::Client.new(url: 'http://localhost:9200', request_timeout: 5*60, retry_on_failure: true)
repository = MyRepository.new(client: client)

def indexit(repository)
  Async do
    movie = Movie.new(title: Faker::Movie.title)
    repository.save(movie)
    p "indexed #{Time.now}..."
  end
end

Async do
  250.times do
    indexit(repository)
  end
end

It runs successfully if we run the loop 240 times but the moment we increase loop times to 250 most of the requests are indexing data but a few requests are failing and show follow error:

               |   → /Users/sivagollapalli/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/net/http.rb:987 in `initialize'
               |     /Users/sivagollapalli/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/net/http.rb:987 in `open'
               |     /Users/sivagollapalli/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/net/http.rb:987 in `block in connect'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/timeout-0.3.0/lib/timeout.rb:179 in `block in timeout'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/timeout-0.3.0/lib/timeout.rb:186 in `timeout'
               |     /Users/sivagollapalli/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/net/http.rb:985 in `connect'
               |     /Users/sivagollapalli/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/net/http.rb:970 in `do_start'
               |     /Users/sivagollapalli/.rvm/rubies/ruby-3.0.0/lib/ruby/3.0.0/net/http.rb:959 in `start'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:146 in `request_via_request_method'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:131 in `request_with_wrapped_block'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:122 in `perform_request'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:66 in `block in call'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-1.10.0/lib/faraday/adapter.rb:50 in `connection'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:64 in `call'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-1.10.0/lib/faraday/rack_builder.rb:154 in `build_response'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/faraday-1.10.0/lib/faraday/connection.rb:516 in `run_request'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/elasticsearch-transport-7.9.0/lib/elasticsearch/transport/transport/http/faraday.rb:40 in `block in perform_request'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/elasticsearch-transport-7.9.0/lib/elasticsearch/transport/transport/base.rb:288 in `perform_request'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/elasticsearch-transport-7.9.0/lib/elasticsearch/transport/transport/http/faraday.rb:37 in `perform_request'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/elasticsearch-transport-7.9.0/lib/elasticsearch/transport/client.rb:176 in `perform_request'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/elasticsearch-api-7.9.0/lib/elasticsearch/api/actions/index.rb:73 in `index'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/elasticsearch-persistence-7.2.1/lib/elasticsearch/persistence/repository/store.rb:44 in `save'
               |     async_persistance.rb:29 in `block in indexit'
               |     /Users/sivagollapalli/.rvm/gems/ruby-3.0.0/gems/async-1.30.3/lib/async/task.rb:261 in `block in make_fiber'

I am using elastic search 7.10.1 with docker. I suspect this could be an issue of thread pools of elastic search but I am not sure.

Siva Gollapalli
  • 626
  • 6
  • 20

0 Answers0