def self.take
retries = 0
original = nil
begin
pool.take do |connection|
begin
yield connection
rescue ThinkingSphinx::QueryExecutionError, connection.base_error => error
original = ThinkingSphinx::SphinxError.new_from_mysql error
retries += MAXIMUM_RETRIES if original.is_a?(ThinkingSphinx::QueryError)
raise Innertube::Pool::BadResource
end
end
rescue Innertube::Pool::BadResource
retries += 1
raise original unless retries < MAXIMUM_RETRIES
ActiveSupport::Notifications.instrument(
"message.thinking_sphinx", :message => "Retrying query \"#{original.statement}\" after error: #{original.message}"
)
retry
end
end