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.