diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index 64defd31c32..eb39abd4ee6 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -10,6 +10,8 @@ class AccountSearchService < BaseService # Min. number of characters to look for non-exact matches MIN_QUERY_LENGTH = 3 + ES_QUERY_TIMEOUT = ENV.fetch('ES_QUERY_TIMEOUT', '10s') + class QueryBuilder def initialize(query, account, options = {}) @query = query @@ -253,7 +255,7 @@ class AccountSearchService < BaseService end end - records = elastic_stoplight_wrapper.run { query_builder.build.limit(limit_for_non_exact_results).offset(offset).objects.compact } + records = elastic_stoplight_wrapper.run { query_builder.build.limit(limit_for_non_exact_results).timeout(ES_QUERY_TIMEOUT).offset(offset).objects.compact } ActiveRecord::Associations::Preloader.new(records: records, associations: [:account_stat, { user: :role }]).call diff --git a/app/services/statuses_search_service.rb b/app/services/statuses_search_service.rb index 8eda1a14306..161ac418508 100644 --- a/app/services/statuses_search_service.rb +++ b/app/services/statuses_search_service.rb @@ -3,6 +3,8 @@ class StatusesSearchService < BaseService include SearchStoplight + ES_QUERY_TIMEOUT = ENV.fetch('ES_QUERY_TIMEOUT', '10s') + def call(query, account = nil, options = {}) MastodonOTELTracer.in_span('StatusesSearchService#call') do |span| @query = query&.strip @@ -28,7 +30,7 @@ class StatusesSearchService < BaseService def status_search_results request = parsed_query.request - results = elastic_stoplight_wrapper.run { request.collapse(field: :id).order(id: { order: :desc }).limit(@limit).offset(@offset).objects.compact } + results = elastic_stoplight_wrapper.run { request.timeout(ES_QUERY_TIMEOUT).collapse(field: :id).order(id: { order: :desc }).limit(@limit).offset(@offset).objects.compact } account_ids = results.map(&:account_id) account_domains = results.map(&:account_domain)