algolia/algoliasearch-client-ruby

Client allows endless loops if there is a network issue

kaspergrubbe opened this issue · 4 comments

  • Algolia Client Version: Only tested 1.26.0
  • Language Version: Not relevant.

Description

This is basically an endless loop:

#
# Wait the publication of a task on the server.
# All server task are asynchronous and you can check with this method that the task is published.
#
# @param index_name the index name owning the taskID
# @param taskID the id of the task returned by server
# @param time_before_retry the time in milliseconds before retry (default = 100ms)
# @param request_options contains extra parameters to send with your query
#
def wait_task(index_name, taskID, time_before_retry = WAIT_TASK_DEFAULT_TIME_BEFORE_RETRY, request_options = {})
loop do
status = get_task_status(index_name, taskID, request_options)
if status == 'published'
return
end
sleep(time_before_retry.to_f / 1000)
end
end

There should be some retry logic, and if enough fails it should throw an error.

Related: when perform a save_objects! with an empty batch, the taskID returned from the engine never resolves, resulting in this loop running forever.

client = ::Algolia::Search::Client.create_with_config(
::Algolia::Search::Config.new(
application_id: ENV['ALGOLIA_APP_ID'],
api_key: ENV['ALGOLIA_ADMIN_API_KEY'],
batch_size: ENV['ALGOLIA_BATCH_SIZE']
)
)

index = client.init_index('test-index-name')
index.save_objects!([]) # Hangs forever

We'll need to come up with a proper way to break here after x loops to prevent the infinite loop. I'll discuss this internally to see what we want to do about it.

thanks for looking into the issue : )

This code still seem to be causing endless loops when there's issues on Algolias servers.

https://status.algolia.com/incidents/4367

@chuckmeyer reached out to me on Twitter, and pointed me to this PR: #487