Skip to content

Commit

Permalink
Merge pull request #2701 from mkllnk/2700-improve-product-refresh-sch…
Browse files Browse the repository at this point in the history
…eduling

2700 improve product refresh scheduling
  • Loading branch information
mkllnk authored Sep 18, 2018
2 parents 0f627cd + ac85b90 commit 19df4ff
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 24 deletions.
6 changes: 0 additions & 6 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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'

Expand Down Expand Up @@ -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'

Expand Down Expand Up @@ -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'
Expand Down Expand Up @@ -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'
Expand Down Expand Up @@ -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'
Expand Down
31 changes: 13 additions & 18 deletions lib/open_food_network/products_cache_refreshment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require 'spec_helper'
require 'open_food_network/products_cache_refreshment'

module OpenFoodNetwork
Expand Down

0 comments on commit 19df4ff

Please sign in to comment.