Skip to content

Commit 4806527

Browse files
authored
Merge pull request #1072 from ecosyste-ms/remove-eager-load-dependencies-workers
Stop eager loading dependencies in dependency parsing workers
2 parents cb871dc + 29f52ca commit 4806527

File tree

4 files changed

+95
-2
lines changed

4 files changed

+95
-2
lines changed

app/sidekiq/parse_dependencies_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ class ParseDependenciesWorker
33
sidekiq_options queue: 'dependencies', lock: :until_executed, lock_expiration: 1.day.to_i
44

55
def perform(repository_id)
6-
Repository.includes(manifests: :dependencies).find_by_id(repository_id).try(:parse_dependencies)
6+
Repository.includes(:manifests).find_by_id(repository_id).try(:parse_dependencies)
77
end
88
end

app/sidekiq/parse_tag_dependencies_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ class ParseTagDependenciesWorker
33
sidekiq_options queue: 'dependencies', lock: :until_executed, lock_expiration: 1.day.to_i
44

55
def perform(tag_id)
6-
Tag.includes(manifests: :dependencies).find_by_id(tag_id).try(:parse_dependencies)
6+
Tag.includes(:manifests).find_by_id(tag_id).try(:parse_dependencies)
77
end
88
end
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
require 'test_helper'
2+
3+
class ParseDependenciesWorkerTest < ActiveSupport::TestCase
4+
context '#perform' do
5+
should 'call parse_dependencies on repository' do
6+
host = create(:host)
7+
repository = create(:repository, host: host)
8+
9+
Repository.any_instance.expects(:parse_dependencies).once
10+
11+
worker = ParseDependenciesWorker.new
12+
worker.perform(repository.id)
13+
end
14+
15+
should 'handle non-existent repository gracefully' do
16+
worker = ParseDependenciesWorker.new
17+
18+
assert_nothing_raised do
19+
worker.perform(999999)
20+
end
21+
end
22+
23+
should 'eager load manifests but not dependencies' do
24+
host = create(:host)
25+
repository = create(:repository, host: host)
26+
manifest = create(:manifest, repository: repository)
27+
create(:dependency, repository: repository, manifest: manifest)
28+
29+
Repository.any_instance.stubs(:parse_dependencies)
30+
31+
queries = []
32+
callback = lambda { |_name, _start, _finish, _id, payload|
33+
queries << payload[:sql] if payload[:sql].present?
34+
}
35+
36+
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
37+
ParseDependenciesWorker.new.perform(repository.id)
38+
end
39+
40+
manifest_queries = queries.select { |q| q.include?('manifests') }
41+
dependency_queries = queries.select { |q| q.include?('dependencies') }
42+
assert manifest_queries.any?, "Should eager load manifests"
43+
assert_empty dependency_queries, "Should not eager load dependencies"
44+
end
45+
end
46+
end
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
require 'test_helper'
2+
3+
class ParseTagDependenciesWorkerTest < ActiveSupport::TestCase
4+
context '#perform' do
5+
should 'call parse_dependencies on tag' do
6+
host = create(:host)
7+
repository = create(:repository, host: host)
8+
tag = create(:tag, repository: repository)
9+
10+
Tag.any_instance.expects(:parse_dependencies).once
11+
12+
worker = ParseTagDependenciesWorker.new
13+
worker.perform(tag.id)
14+
end
15+
16+
should 'handle non-existent tag gracefully' do
17+
worker = ParseTagDependenciesWorker.new
18+
19+
assert_nothing_raised do
20+
worker.perform(999999)
21+
end
22+
end
23+
24+
should 'eager load manifests but not dependencies' do
25+
host = create(:host)
26+
repository = create(:repository, host: host)
27+
tag = create(:tag, repository: repository)
28+
create(:manifest, tag: tag, repository: nil)
29+
30+
Tag.any_instance.stubs(:parse_dependencies)
31+
32+
queries = []
33+
callback = lambda { |_name, _start, _finish, _id, payload|
34+
queries << payload[:sql] if payload[:sql].present?
35+
}
36+
37+
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
38+
ParseTagDependenciesWorker.new.perform(tag.id)
39+
end
40+
41+
manifest_queries = queries.select { |q| q.include?('manifests') }
42+
dependency_queries = queries.select { |q| q.include?('dependencies') }
43+
assert manifest_queries.any?, "Should eager load manifests"
44+
assert_empty dependency_queries, "Should not eager load dependencies"
45+
end
46+
end
47+
end

0 commit comments

Comments
 (0)