From 49a39f34ae81f573b4f2358b7c825bc2bebb5d98 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Tue, 15 Dec 2015 23:36:08 -0800 Subject: [PATCH] Added search_timeout option - closes #583 --- CHANGELOG.md | 4 ++++ lib/searchkick.rb | 10 +++++++++- lib/searchkick/middleware.rb | 12 ++++++++++++ test/test_helper.rb | 1 + 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 lib/searchkick/middleware.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ea01a6..744c11d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.2 [unreleased] + +- Added `search_timeout` option + ## 1.1.1 - Added support for `{lat: lat, lon: lon}` as preferred format for locations diff --git a/lib/searchkick.rb b/lib/searchkick.rb index 24accb1..1f516dd 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -8,6 +8,7 @@ require "searchkick/query" require "searchkick/reindex_job" require "searchkick/model" require "searchkick/tasks" +require "searchkick/middleware" require "searchkick/logging" if defined?(Rails) # background jobs @@ -30,6 +31,7 @@ module Searchkick attr_accessor :search_method_name attr_accessor :wordnet_path attr_accessor :timeout + attr_writer :search_timeout attr_accessor :models attr_writer :env end @@ -43,13 +45,19 @@ module Searchkick Elasticsearch::Client.new( url: ENV["ELASTICSEARCH_URL"], transport_options: {request: {timeout: timeout}} - ) + ) do |f| + f.use Searchkick::Middleware + end end class << self attr_writer :client end + def self.search_timeout + @search_timeout || timeout + end + def self.server_version @server_version ||= client.info["version"]["number"] end diff --git a/lib/searchkick/middleware.rb b/lib/searchkick/middleware.rb new file mode 100644 index 0000000..b70ebf8 --- /dev/null +++ b/lib/searchkick/middleware.rb @@ -0,0 +1,12 @@ +require "faraday/middleware" + +module Searchkick + class Middleware < Faraday::Middleware + def call(env) + if env.method == :get && env.url.path.to_s.end_with?("/_search") + env.request.timeout = Searchkick.search_timeout + end + @app.call(env) + end + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 3f12f24..c2545ea 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -11,6 +11,7 @@ Minitest::Test = Minitest::Unit::TestCase unless defined?(Minitest::Test) File.delete("elasticsearch.log") if File.exist?("elasticsearch.log") Searchkick.client.transport.logger = Logger.new("elasticsearch.log") +Searchkick.search_timeout = 5 puts "Running against Elasticsearch #{Searchkick.server_version}" -- libgit2 0.21.0