Merge pull request #2701 from mkllnk/2700-improve-product-refresh-scheduling

2700 improve product refresh scheduling
This commit is contained in:
Maikel
2018-09-18 12:09:24 +10:00
committed by GitHub
3 changed files with 14 additions and 24 deletions

View File

@@ -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'

View File

@@ -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

View File

@@ -1,3 +1,4 @@
require 'spec_helper'
require 'open_food_network/products_cache_refreshment'
module OpenFoodNetwork