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.
		
			
				
	
	
		
			37 lines
		
	
	
		
			963 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			963 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| # == Schema Information
 | |
| #
 | |
| # Table name: account_stats
 | |
| #
 | |
| #  id              :bigint(8)        not null, primary key
 | |
| #  account_id      :bigint(8)        not null
 | |
| #  statuses_count  :bigint(8)        default(0), not null
 | |
| #  following_count :bigint(8)        default(0), not null
 | |
| #  followers_count :bigint(8)        default(0), not null
 | |
| #  created_at      :datetime         not null
 | |
| #  updated_at      :datetime         not null
 | |
| #  last_status_at  :datetime
 | |
| #
 | |
| 
 | |
| class AccountStat < ApplicationRecord
 | |
|   belongs_to :account, inverse_of: :account_stat
 | |
| 
 | |
|   update_index('accounts#account', :account)
 | |
| 
 | |
|   def increment_count!(key)
 | |
|     update(attributes_for_increment(key))
 | |
|   end
 | |
| 
 | |
|   def decrement_count!(key)
 | |
|     update(key => [public_send(key) - 1, 0].max)
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def attributes_for_increment(key)
 | |
|     attrs = { key => public_send(key) + 1 }
 | |
|     attrs[:last_status_at] = Time.now.utc if key == :statuses_count
 | |
|     attrs
 | |
|   end
 | |
| end
 |