Add `ES_PRESET` option to customize numbers of shards and replicas (#26483)

Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
This commit is contained in:
Claire 2023-08-14 17:46:16 +02:00 committed by GitHub
parent c452ccd913
commit f5778caa3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 35 additions and 12 deletions

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class AccountsIndex < Chewy::Index class AccountsIndex < Chewy::Index
settings index: { refresh_interval: '30s' }, analysis: { settings index: index_preset(refresh_interval: '30s'), analysis: {
filter: { filter: {
english_stop: { english_stop: {
type: 'stop', type: 'stop',

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class InstancesIndex < Chewy::Index class InstancesIndex < Chewy::Index
settings index: { refresh_interval: '30s' } settings index: index_preset(refresh_interval: '30s')
index_scope ::Instance.searchable index_scope ::Instance.searchable

View File

@ -3,7 +3,7 @@
class StatusesIndex < Chewy::Index class StatusesIndex < Chewy::Index
include FormattingHelper include FormattingHelper
settings index: { refresh_interval: '30s' }, analysis: { settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
filter: { filter: {
english_stop: { english_stop: {
type: 'stop', type: 'stop',

View File

@ -1,7 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class TagsIndex < Chewy::Index class TagsIndex < Chewy::Index
settings index: { refresh_interval: '30s' }, analysis: { settings index: index_preset(refresh_interval: '30s'), analysis: {
analyzer: { analyzer: {
content: { content: {
tokenizer: 'keyword', tokenizer: 'keyword',

View File

@ -41,6 +41,8 @@ require_relative '../lib/mastodon/rack_middleware'
require_relative '../lib/public_file_server_middleware' require_relative '../lib/public_file_server_middleware'
require_relative '../lib/devise/two_factor_ldap_authenticatable' require_relative '../lib/devise/two_factor_ldap_authenticatable'
require_relative '../lib/devise/two_factor_pam_authenticatable' require_relative '../lib/devise/two_factor_pam_authenticatable'
require_relative '../lib/chewy/settings_extensions'
require_relative '../lib/chewy/index_extensions'
require_relative '../lib/chewy/strategy/mastodon' require_relative '../lib/chewy/strategy/mastodon'
require_relative '../lib/chewy/strategy/bypass_with_warning' require_relative '../lib/chewy/strategy/bypass_with_warning'
require_relative '../lib/webpacker/manifest_extensions' require_relative '../lib/webpacker/manifest_extensions'

View File

@ -25,14 +25,6 @@ Chewy.root_strategy = :bypass_with_warning if Rails.env.production?
Chewy.request_strategy = :mastodon Chewy.request_strategy = :mastodon
Chewy.use_after_commit_callbacks = false Chewy.use_after_commit_callbacks = false
module Chewy
class << self
def enabled?
settings[:enabled]
end
end
end
# Elasticsearch uses Faraday internally. Faraday interprets the # Elasticsearch uses Faraday internally. Faraday interprets the
# http_proxy env variable by default which leads to issues when # http_proxy env variable by default which leads to issues when
# Mastodon is run with hidden services enabled, because # Mastodon is run with hidden services enabled, because

View File

@ -0,0 +1,18 @@
# frozen_string_literal: true
module Chewy
module IndexExtensions
def index_preset(base_options = {})
case ENV['ES_PRESET'].presence
when 'single_node_cluster', nil
base_options.merge(number_of_replicas: 0)
when 'small_cluster'
base_options.merge(number_of_replicas: 1)
when 'large_cluster'
base_options.merge(number_of_replicas: 1, number_of_shards: (base_options[:number_of_shards] || 1) * 2)
end
end
end
end
Chewy::Index.extend(Chewy::IndexExtensions)

View File

@ -0,0 +1,11 @@
# frozen_string_literal: true
module Chewy
module SettingsExtensions
def enabled?
settings[:enabled]
end
end
end
Chewy.extend(Chewy::SettingsExtensions)