Class: FlushCounterIncrementsWorker
- Inherits:
-
Object
- Object
- FlushCounterIncrementsWorker
- Includes:
- ApplicationWorker
- Defined in:
- app/workers/flush_counter_increments_worker.rb
Overview
Invoked by CounterAttribute concern when incrementing counter attributes. The method ‘flush_increments_to_database!` that this worker uses is itself idempotent as it runs with exclusive lease to ensure that only one instance at the time can flush increments from Redis to the database.
Constant Summary
Constants included from ApplicationWorker
ApplicationWorker::LOGGING_EXTRA_KEY, ApplicationWorker::SAFE_PUSH_BULK_LIMIT
Constants included from Gitlab::Loggable
Constants included from WorkerAttributes
WorkerAttributes::DEFAULT_CONCURRENCY_LIMIT_PERCENTAGE_BY_URGENCY, WorkerAttributes::DEFAULT_DATA_CONSISTENCY, WorkerAttributes::DEFAULT_DATA_CONSISTENCY_PER_DB, WorkerAttributes::DEFAULT_DEFER_DELAY, WorkerAttributes::LOAD_BALANCED_DATA_CONSISTENCIES, WorkerAttributes::NAMESPACE_WEIGHTS, WorkerAttributes::VALID_DATA_CONSISTENCIES, WorkerAttributes::VALID_RESOURCE_BOUNDARIES, WorkerAttributes::VALID_URGENCIES
Instance Method Summary collapse
Methods included from Gitlab::Loggable
Methods included from Gitlab::SidekiqVersioning::Worker
Methods included from WorkerContext
Instance Method Details
#perform(model_name, model_id, attribute) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'app/workers/flush_counter_increments_worker.rb', line 27 def perform(model_name, model_id, attribute) return unless self.class.const_defined?(model_name) model_class = model_name.constantize model = model_class.primary_key_in([model_id]).take # rubocop: disable CodeReuse/ActiveRecord -- we work on a dynamic model name return unless model Gitlab::Counters::BufferedCounter.new(model, attribute).commit_increment! end |