Fix records not being indexed sometimes (#12024)
It's possible that after commit callbacks were not firing when exceptions occurred in the process. Also, the default Sidekiq strategy does not push indexing jobs immediately, which is not necessary and could be part of the issue too.
This commit is contained in:
parent
12c4ec0c83
commit
5c42f47617
|
@ -129,7 +129,7 @@ class Account < ApplicationRecord
|
||||||
|
|
||||||
delegate :chosen_languages, to: :user, prefix: false, allow_nil: true
|
delegate :chosen_languages, to: :user, prefix: false, allow_nil: true
|
||||||
|
|
||||||
update_index('accounts#account', :self) if Chewy.enabled?
|
update_index('accounts#account', :self)
|
||||||
|
|
||||||
def local?
|
def local?
|
||||||
domain.nil?
|
domain.nil?
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
class AccountStat < ApplicationRecord
|
class AccountStat < ApplicationRecord
|
||||||
belongs_to :account, inverse_of: :account_stat
|
belongs_to :account, inverse_of: :account_stat
|
||||||
|
|
||||||
update_index('accounts#account', :account) if Chewy.enabled?
|
update_index('accounts#account', :account)
|
||||||
|
|
||||||
def increment_count!(key)
|
def increment_count!(key)
|
||||||
update(attributes_for_increment(key))
|
update(attributes_for_increment(key))
|
||||||
|
|
|
@ -5,6 +5,12 @@ class ApplicationRecord < ActiveRecord::Base
|
||||||
|
|
||||||
include Remotable
|
include Remotable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def update_index(_type_name, *_args, &_block)
|
||||||
|
super if Chewy.enabled?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def boolean_with_default(key, default_value)
|
def boolean_with_default(key, default_value)
|
||||||
value = attributes[key]
|
value = attributes[key]
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
class Favourite < ApplicationRecord
|
class Favourite < ApplicationRecord
|
||||||
include Paginable
|
include Paginable
|
||||||
|
|
||||||
update_index('statuses#status', :status) if Chewy.enabled?
|
update_index('statuses#status', :status)
|
||||||
|
|
||||||
belongs_to :account, inverse_of: :favourites
|
belongs_to :account, inverse_of: :favourites
|
||||||
belongs_to :status, inverse_of: :favourites
|
belongs_to :status, inverse_of: :favourites
|
||||||
|
|
|
@ -39,7 +39,7 @@ class Status < ApplicationRecord
|
||||||
# will be based on current time instead of `created_at`
|
# will be based on current time instead of `created_at`
|
||||||
attr_accessor :override_timestamps
|
attr_accessor :override_timestamps
|
||||||
|
|
||||||
update_index('statuses#status', :proper) if Chewy.enabled?
|
update_index('statuses#status', :proper)
|
||||||
|
|
||||||
enum visibility: [:public, :unlisted, :private, :direct, :limited], _suffix: :visibility
|
enum visibility: [:public, :unlisted, :private, :direct, :limited], _suffix: :visibility
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ class Tag < ApplicationRecord
|
||||||
|
|
||||||
after_save :save_account_tag_stat
|
after_save :save_account_tag_stat
|
||||||
|
|
||||||
update_index('tags#tag', :self) if Chewy.enabled?
|
update_index('tags#tag', :self)
|
||||||
|
|
||||||
def account_tag_stat
|
def account_tag_stat
|
||||||
super || build_account_tag_stat
|
super || build_account_tag_stat
|
||||||
|
|
|
@ -15,6 +15,7 @@ require_relative '../lib/mastodon/snowflake'
|
||||||
require_relative '../lib/mastodon/version'
|
require_relative '../lib/mastodon/version'
|
||||||
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/strategy/custom_sidekiq'
|
||||||
|
|
||||||
Dotenv::Railtie.load
|
Dotenv::Railtie.load
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,9 @@ Chewy.settings = {
|
||||||
sidekiq: { queue: 'pull' },
|
sidekiq: { queue: 'pull' },
|
||||||
}
|
}
|
||||||
|
|
||||||
Chewy.root_strategy = enabled ? :sidekiq : :bypass
|
Chewy.root_strategy = :custom_sidekiq
|
||||||
Chewy.request_strategy = enabled ? :sidekiq : :bypass
|
Chewy.request_strategy = :custom_sidekiq
|
||||||
|
Chewy.use_after_commit_callbacks = false
|
||||||
|
|
||||||
module Chewy
|
module Chewy
|
||||||
class << self
|
class << self
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Chewy
|
||||||
|
class Strategy
|
||||||
|
class CustomSidekiq < Base
|
||||||
|
class Worker
|
||||||
|
include ::Sidekiq::Worker
|
||||||
|
|
||||||
|
sidekiq_options queue: 'pull'
|
||||||
|
|
||||||
|
def perform(type, ids, options = {})
|
||||||
|
options[:refresh] = !Chewy.disable_refresh_async if Chewy.disable_refresh_async
|
||||||
|
type.constantize.import!(ids, options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update(type, objects, _options = {})
|
||||||
|
return unless Chewy.enabled?
|
||||||
|
|
||||||
|
ids = type.root.id ? Array.wrap(objects) : type.adapter.identify(objects)
|
||||||
|
|
||||||
|
return if ids.empty?
|
||||||
|
|
||||||
|
Worker.perform_async(type.name, ids)
|
||||||
|
end
|
||||||
|
|
||||||
|
def leave; end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -12,7 +12,7 @@ require 'capybara/rspec'
|
||||||
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
||||||
|
|
||||||
ActiveRecord::Migration.maintain_test_schema!
|
ActiveRecord::Migration.maintain_test_schema!
|
||||||
WebMock.disable_net_connect!
|
WebMock.disable_net_connect!(allow: Chewy.settings[:host])
|
||||||
Redis.current = Redis::Namespace.new("mastodon_test#{ENV['TEST_ENV_NUMBER']}", redis: Redis.current)
|
Redis.current = Redis::Namespace.new("mastodon_test#{ENV['TEST_ENV_NUMBER']}", redis: Redis.current)
|
||||||
Sidekiq::Testing.inline!
|
Sidekiq::Testing.inline!
|
||||||
Sidekiq::Logging.logger = nil
|
Sidekiq::Logging.logger = nil
|
||||||
|
|
Loading…
Reference in New Issue