mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-05 22:26:07 +00:00
Merge pull request #2701 from mkllnk/2700-improve-product-refresh-scheduling
2700 improve product refresh scheduling
This commit is contained in:
@@ -185,7 +185,6 @@ Layout/EmptyLines:
|
||||
- 'lib/open_food_network/order_cycle_permissions.rb'
|
||||
- 'lib/open_food_network/products_cache.rb'
|
||||
- 'lib/open_food_network/products_cache_integrity_checker.rb'
|
||||
- 'lib/open_food_network/products_cache_refreshment.rb'
|
||||
- 'lib/open_food_network/products_renderer.rb'
|
||||
- 'lib/open_food_network/property_merge.rb'
|
||||
- 'lib/open_food_network/reports/bulk_coop_report.rb'
|
||||
@@ -560,7 +559,6 @@ Layout/MultilineOperationIndentation:
|
||||
- 'app/models/variant_override_set.rb'
|
||||
- 'lib/open_food_network/accounts_and_billing_settings_validator.rb'
|
||||
- 'lib/open_food_network/order_cycle_permissions.rb'
|
||||
- 'lib/open_food_network/products_cache_refreshment.rb'
|
||||
- 'lib/open_food_network/sales_tax_report.rb'
|
||||
- 'lib/open_food_network/users_and_enterprises_report.rb'
|
||||
|
||||
@@ -986,7 +984,6 @@ Lint/IneffectiveAccessModifier:
|
||||
- 'app/models/variant_override.rb'
|
||||
- 'lib/open_food_network/feature_toggle.rb'
|
||||
- 'lib/open_food_network/products_cache.rb'
|
||||
- 'lib/open_food_network/products_cache_refreshment.rb'
|
||||
- 'lib/open_food_network/property_merge.rb'
|
||||
- 'spec/lib/open_food_network/reports/report_spec.rb'
|
||||
|
||||
@@ -1096,7 +1093,6 @@ Lint/UselessAccessModifier:
|
||||
- 'app/models/column_preference.rb'
|
||||
- 'lib/open_food_network/feature_toggle.rb'
|
||||
- 'lib/open_food_network/products_cache.rb'
|
||||
- 'lib/open_food_network/products_cache_refreshment.rb'
|
||||
- 'lib/open_food_network/property_merge.rb'
|
||||
- 'lib/open_food_network/reports/bulk_coop_report.rb'
|
||||
- 'spec/lib/open_food_network/reports/report_spec.rb'
|
||||
@@ -1505,7 +1501,6 @@ Rails/TimeZone:
|
||||
- 'lib/open_food_network/users_and_enterprises_report.rb'
|
||||
- 'spec/controllers/api/statuses_controller_spec.rb'
|
||||
- 'spec/jobs/heartbeat_job_spec.rb'
|
||||
- 'spec/lib/open_food_network/products_cache_refreshment_spec.rb'
|
||||
- 'spec/lib/open_food_network/products_cache_spec.rb'
|
||||
- 'spec/models/enterprise_relationship_spec.rb'
|
||||
- 'spec/models/variant_override_spec.rb'
|
||||
@@ -1861,7 +1856,6 @@ Style/GuardClause:
|
||||
- 'lib/open_food_network/accounts_and_billing_settings_validator.rb'
|
||||
- 'lib/open_food_network/order_cycle_form_applicator.rb'
|
||||
- 'lib/open_food_network/products_cache.rb'
|
||||
- 'lib/open_food_network/products_cache_refreshment.rb'
|
||||
- 'lib/open_food_network/products_renderer.rb'
|
||||
- 'lib/open_food_network/rack_request_blocker.rb'
|
||||
- 'lib/open_food_network/variant_and_line_item_naming.rb'
|
||||
|
||||
@@ -17,31 +17,26 @@
|
||||
module OpenFoodNetwork
|
||||
class ProductsCacheRefreshment
|
||||
def self.refresh(distributor, order_cycle)
|
||||
unless pending_job? distributor, order_cycle
|
||||
enqueue_job distributor, order_cycle
|
||||
end
|
||||
job = refresh_job(distributor, order_cycle)
|
||||
enqueue_job(job) unless pending_job?(job)
|
||||
end
|
||||
|
||||
def self.refresh_job(distributor, order_cycle)
|
||||
RefreshProductsCacheJob.new(distributor.id, order_cycle.id)
|
||||
end
|
||||
private_class_method :refresh_job
|
||||
|
||||
private
|
||||
|
||||
def self.pending_job?(distributor, order_cycle)
|
||||
# To inspect each job, we need to deserialize the payload.
|
||||
# This is slow, and if it's a problem in practice, we could pre-filter in SQL
|
||||
# for handlers matching the class name, distributor id and order cycle id.
|
||||
|
||||
def self.pending_job?(job)
|
||||
Delayed::Job.
|
||||
where(locked_at: nil).
|
||||
map(&:payload_object).
|
||||
select { |j|
|
||||
j.class == RefreshProductsCacheJob &&
|
||||
j.distributor_id == distributor.id &&
|
||||
j.order_cycle_id == order_cycle.id
|
||||
}.any?
|
||||
where(handler: job.to_yaml).
|
||||
exists?
|
||||
end
|
||||
private_class_method :pending_job?
|
||||
|
||||
def self.enqueue_job(distributor, order_cycle)
|
||||
Delayed::Job.enqueue RefreshProductsCacheJob.new(distributor.id, order_cycle.id), priority: 10
|
||||
def self.enqueue_job(job)
|
||||
Delayed::Job.enqueue job, priority: 10
|
||||
end
|
||||
private_class_method :enqueue_job
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
require 'spec_helper'
|
||||
require 'open_food_network/products_cache_refreshment'
|
||||
|
||||
module OpenFoodNetwork
|
||||
|
||||
Reference in New Issue
Block a user