50 lines
1.8 KiB
Ruby
50 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Be sure to restart your server when you modify this file.
|
|
|
|
require 'gitlab/current_settings'
|
|
|
|
Gitlab.ee do
|
|
Elasticsearch::Model::Response::Records.prepend GemExtensions::Elasticsearch::Model::Response::Records
|
|
Elasticsearch::Model::Adapter::Multiple::Records.prepend GemExtensions::Elasticsearch::Model::Adapter::Multiple::Records
|
|
Elasticsearch::Model::Indexing::InstanceMethods.prepend GemExtensions::Elasticsearch::Model::Indexing::InstanceMethods
|
|
|
|
module Elasticsearch
|
|
module Model
|
|
module Client
|
|
# This mutex is only used to synchronize *creation* of a new client, so
|
|
# all including classes can share the same client instance
|
|
CLIENT_MUTEX = Mutex.new
|
|
|
|
cattr_accessor :cached_client
|
|
cattr_accessor :cached_config
|
|
|
|
module ClassMethods
|
|
# Override the default ::Elasticsearch::Model::Client implementation to
|
|
# return a client configured from application settings. All including
|
|
# classes will use the same instance, which is refreshed automatically
|
|
# if the settings change.
|
|
#
|
|
# _client is present to match the arity of the overridden method, where
|
|
# it is also not used.
|
|
#
|
|
# @return [Elasticsearch::Transport::Client]
|
|
def client(_client = nil)
|
|
store = ::Elasticsearch::Model::Client
|
|
|
|
store::CLIENT_MUTEX.synchronize do
|
|
config = Gitlab::CurrentSettings.elasticsearch_config
|
|
|
|
if store.cached_client.nil? || config != store.cached_config
|
|
store.cached_client = ::Gitlab::Elastic::Client.build(config)
|
|
store.cached_config = config
|
|
end
|
|
end
|
|
|
|
store.cached_client
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|