Skip to content

Commit 49902f6

Browse files
authored
Remove unused Runners methods (#4801)
1 parent 1550154 commit 49902f6

File tree

2 files changed

+3
-340
lines changed

2 files changed

+3
-340
lines changed
Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
require 'cloud_controller/diego'
21
require 'cloud_controller/diego/runner'
3-
require 'cloud_controller/diego/process_guid'
4-
require 'cloud_controller/diego/buildpack/lifecycle_protocol'
5-
require 'cloud_controller/diego/docker/lifecycle_protocol'
6-
require 'cloud_controller/diego/cnb/lifecycle_protocol'
7-
require 'cloud_controller/diego/egress_rules'
82

93
module VCAP::CloudController
104
class Runners
@@ -13,69 +7,7 @@ def initialize(config)
137
end
148

159
def runner_for_process(process)
16-
diego_runner(process)
17-
end
18-
19-
def diego_processes(batch_size, last_id)
20-
ProcessModel.select_all(ProcessModel.table_name).
21-
diego.
22-
runnable.
23-
where(Sequel.lit("#{ProcessModel.table_name}.id > ?", last_id)).
24-
order(:"#{ProcessModel.table_name}__id").
25-
limit(batch_size).
26-
eager(:desired_droplet, :space, :service_bindings, { routes: :domain }, { app: :buildpack_lifecycle_data }).
27-
all
28-
end
29-
30-
def processes_from_diego_process_guids(diego_process_guids)
31-
diego_process_guids = Array(diego_process_guids).to_set
32-
ProcessModel.select_all(ProcessModel.table_name).
33-
diego.
34-
runnable.
35-
where("#{ProcessModel.table_name}__guid": diego_process_guids.map { |pg| Diego::ProcessGuid.cc_process_guid(pg) }).
36-
order(:"#{ProcessModel.table_name}__id").
37-
eager(:desired_droplet, :space, :service_bindings, { routes: :domain }, { app: :buildpack_lifecycle_data }).
38-
all.
39-
select { |process| diego_process_guids.include?(Diego::ProcessGuid.from_process(process)) }
40-
end
41-
42-
def diego_apps_cache_data(batch_size, last_id)
43-
diego_apps = ProcessModel.
44-
diego.
45-
runnable.
46-
where(Sequel.lit("#{ProcessModel.table_name}.id > ?", last_id)).
47-
order(:"#{ProcessModel.table_name}__id").
48-
limit(batch_size)
49-
50-
diego_apps = diego_apps.buildpack_type unless FeatureFlag.enabled?(:diego_docker)
51-
52-
diego_apps.select_map([
53-
:"#{ProcessModel.table_name}__id",
54-
:"#{ProcessModel.table_name}__guid",
55-
:"#{ProcessModel.table_name}__version",
56-
:"#{ProcessModel.table_name}__updated_at"
57-
])
58-
end
59-
60-
def latest(items)
61-
current = {}
62-
63-
items.each do |item|
64-
c = current[item[:app_guid]]
65-
current[item[:app_guid]] = item if c.nil? || (item[:created_at] == c[:created_at] && item[:id] > c[:id])
66-
end
67-
68-
current
69-
end
70-
71-
private
72-
73-
def diego_runner(process)
7410
Diego::Runner.new(process, @config)
7511
end
76-
77-
def dependency_locator
78-
CloudController::DependencyLocator.instance
79-
end
8012
end
8113
end
Lines changed: 3 additions & 272 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
require 'spec_helper'
2-
require 'cloud_controller/diego/process_guid'
32

43
module VCAP::CloudController
54
RSpec.describe Runners do
@@ -12,293 +11,25 @@ module VCAP::CloudController
1211
}
1312
})
1413
end
15-
let(:package_hash) { 'fake-package-hash' }
16-
let(:buildpack) { instance_double(AutoDetectionBuildpack, custom?: false) }
17-
let(:docker_image) { nil }
1814

19-
describe '#runner_for_app' do
20-
subject(:runner) do
21-
runners.runner_for_process(process)
22-
end
15+
describe '#runner_for_process' do
16+
subject(:runner) { runners.runner_for_process(process) }
2317

2418
context 'when the app is configured to run on Diego' do
2519
let(:process) { ProcessModelFactory.make(diego: true) }
2620

27-
it 'finds a diego backend' do
28-
expect(runners).to receive(:diego_runner).with(process).and_call_original
21+
it 'returns a Diego runner' do
2922
expect(runner).to be_a(Diego::Runner)
3023
end
3124

3225
context 'when the app has a docker image' do
3326
let(:process) { ProcessModelFactory.make(:docker, docker_image: 'foobar') }
3427

3528
it 'finds a diego backend' do
36-
expect(runners).to receive(:diego_runner).with(process).and_call_original
3729
expect(runner).to be_a(Diego::Runner)
3830
end
3931
end
4032
end
4133
end
42-
43-
describe '#diego_apps' do
44-
let!(:diego_process1) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
45-
let!(:diego_process2) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
46-
let!(:diego_process3) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
47-
let!(:diego_process4) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
48-
let!(:diego_process5) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
49-
50-
it 'returns apps that have the desired data' do
51-
last_process = ProcessModelFactory.make(diego: true, state: 'STARTED', version: 'app-version-6')
52-
53-
apps = runners.diego_processes(100, 0)
54-
55-
expect(apps.count).to eq(6)
56-
57-
expect(apps.last.to_json).to match_object(last_process.to_json)
58-
end
59-
60-
it 'respects the batch_size' do
61-
app_counts = [3, 5].map do |batch_size|
62-
runners.diego_processes(batch_size, 0).count
63-
end
64-
65-
expect(app_counts).to eq([3, 5])
66-
end
67-
68-
it 'returns non-intersecting apps across subsequent batches' do
69-
first_batch = runners.diego_processes(3, 0)
70-
expect(first_batch.count).to eq(3)
71-
72-
second_batch = runners.diego_processes(3, first_batch.last.id)
73-
expect(second_batch.count).to eq(2)
74-
75-
expect(second_batch & first_batch).to eq([])
76-
end
77-
78-
it 'does not return unstaged apps' do
79-
unstaged_process = ProcessModelFactory.make(diego: true, state: 'STARTED')
80-
unstaged_process.desired_droplet.app.update(droplet_guid: nil)
81-
unstaged_process.desired_droplet.destroy
82-
83-
batch = runners.diego_processes(100, 0)
84-
85-
expect(batch).not_to include(unstaged_process)
86-
end
87-
88-
it "does not return apps which aren't expected to be started" do
89-
stopped_process = ProcessModelFactory.make(diego: true, state: 'STOPPED')
90-
91-
batch = runners.diego_processes(100, 0)
92-
93-
expect(batch).not_to include(stopped_process)
94-
end
95-
end
96-
97-
describe '#diego_apps_from_process_guids' do
98-
let!(:diego_process1) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
99-
let!(:diego_process2) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
100-
let!(:diego_process3) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
101-
let!(:diego_process4) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
102-
let!(:diego_process5) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
103-
104-
it 'does not return unstaged apps' do
105-
unstaged_process = ProcessModelFactory.make(diego: true, state: 'STARTED')
106-
unstaged_process.desired_droplet.app.update(droplet_guid: nil)
107-
unstaged_process.desired_droplet.destroy
108-
109-
batch = runners.processes_from_diego_process_guids(Diego::ProcessGuid.from_process(unstaged_process))
110-
111-
expect(batch).not_to include(unstaged_process)
112-
end
113-
114-
it 'does not return apps that are stopped' do
115-
stopped_process = ProcessModelFactory.make(diego: true, state: 'STOPPED')
116-
117-
batch = runners.processes_from_diego_process_guids(Diego::ProcessGuid.from_process(stopped_process))
118-
119-
expect(batch).not_to include(stopped_process)
120-
end
121-
122-
it 'accepts a process guid or an array of process guids' do
123-
process = ProcessModel.where(diego: true).order(:id).first
124-
process_guid = Diego::ProcessGuid.from_process(process)
125-
126-
expect(runners.processes_from_diego_process_guids(process_guid)).to eq([process])
127-
expect(runners.processes_from_diego_process_guids([process_guid])).to eq([process])
128-
end
129-
130-
it 'returns diego apps for each requested process guid' do
131-
diego_apps = ProcessModel.where(diego: true).all
132-
diego_guids = diego_apps.map { |process| Diego::ProcessGuid.from_process(process) }
133-
134-
expect(runners.processes_from_diego_process_guids(diego_guids)).to match_array(diego_apps)
135-
end
136-
137-
context 'when the process guid is not found' do
138-
it 'does not return an app' do
139-
process = ProcessModel.where(diego: true).order(:id).first
140-
process_guid = Diego::ProcessGuid.from_process(process)
141-
142-
expect do
143-
process.set_new_version
144-
process.save
145-
end.to change {
146-
runners.processes_from_diego_process_guids(process_guid)
147-
}.from([process]).to([])
148-
end
149-
end
150-
end
151-
152-
describe '#diego_apps_cache_data' do
153-
let!(:diego_process1) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
154-
let!(:diego_process2) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
155-
let!(:diego_process3) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
156-
let!(:diego_process4) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
157-
let!(:diego_process5) { ProcessModelFactory.make(diego: true, state: 'STARTED') }
158-
159-
it 'respects the batch_size' do
160-
data_count = [3, 5].map do |batch_size|
161-
runners.diego_apps_cache_data(batch_size, 0).count
162-
end
163-
164-
expect(data_count).to eq([3, 5])
165-
end
166-
167-
it 'returns data for non-intersecting apps across subsequent batches' do
168-
first_batch = runners.diego_apps_cache_data(3, 0)
169-
expect(first_batch.count).to eq(3)
170-
171-
last_id = first_batch.last[0]
172-
second_batch = runners.diego_apps_cache_data(3, last_id)
173-
expect(second_batch.count).to eq(2)
174-
end
175-
176-
it 'does not return unstaged apps' do
177-
unstaged_process = ProcessModelFactory.make(diego: true, state: 'STARTED')
178-
unstaged_process.desired_droplet.app.update(droplet_guid: nil)
179-
unstaged_process.desired_droplet.destroy
180-
181-
batch = runners.diego_apps_cache_data(100, 0)
182-
app_ids = batch.pluck(0)
183-
184-
expect(app_ids).not_to include(unstaged_process.id)
185-
end
186-
187-
it 'does not return apps that are stopped' do
188-
stopped_process = ProcessModelFactory.make(diego: true, state: 'STOPPED')
189-
190-
batch = runners.diego_apps_cache_data(100, 0)
191-
app_ids = batch.pluck(0)
192-
193-
expect(app_ids).not_to include(stopped_process.id)
194-
end
195-
196-
it 'acquires the data in one select' do
197-
expect do
198-
runners.diego_apps_cache_data(100, 0)
199-
end.to have_queried_db_times(/SELECT.*FROM.*processes.*/, 1)
200-
end
201-
202-
context 'with Docker app' do
203-
before do
204-
FeatureFlag.create(name: 'diego_docker', enabled: true)
205-
end
206-
207-
let!(:docker_process) do
208-
ProcessModelFactory.make(:docker, docker_image: 'some-image', state: 'STARTED')
209-
end
210-
211-
context 'when docker is enabled' do
212-
before do
213-
FeatureFlag.find(name: 'diego_docker').update(enabled: true)
214-
end
215-
216-
it 'returns docker apps' do
217-
batch = runners.diego_apps_cache_data(100, 0)
218-
app_ids = batch.pluck(0)
219-
220-
expect(app_ids).to include(docker_process.id)
221-
end
222-
end
223-
224-
context 'when docker is disabled' do
225-
before do
226-
FeatureFlag.find(name: 'diego_docker').update(enabled: false)
227-
end
228-
229-
it 'does not return docker apps' do
230-
batch = runners.diego_apps_cache_data(100, 0)
231-
app_ids = batch.pluck(0)
232-
233-
expect(app_ids).not_to include(docker_process.id)
234-
end
235-
end
236-
end
237-
end
238-
239-
describe '#latest' do
240-
context 'when the input hash includes a key app_guid' do
241-
let(:input) do
242-
[{
243-
app_guid: 'app_guid_1',
244-
id: 1
245-
}]
246-
end
247-
248-
it 'is added to the hash' do
249-
output_hash = runners.latest(input)
250-
expect(output_hash['app_guid_1']).to eq(input[0])
251-
end
252-
253-
context 'when the input hash has multiple values' do
254-
let(:input) do
255-
[
256-
{
257-
app_guid: 'app_guid_1',
258-
id: 1
259-
},
260-
{
261-
app_guid: 'app_guid_2',
262-
id: 2
263-
}
264-
]
265-
end
266-
267-
it 'adds all items to the hash' do
268-
output_hash = runners.latest(input)
269-
270-
expect(output_hash.length).to eq(input.length)
271-
expect(output_hash['app_guid_1']).to eq(input[0])
272-
expect(output_hash['app_guid_2']).to eq(input[1])
273-
end
274-
end
275-
276-
context 'when multiple items have the same app_guid key' do
277-
context 'when the created_at times are the same' do
278-
let(:time) { Time.now }
279-
280-
let(:input) do
281-
[
282-
{
283-
app_guid: 'app_guid_1',
284-
id: 1,
285-
created_at: time
286-
},
287-
{
288-
app_guid: 'app_guid_1',
289-
id: 2,
290-
created_at: time
291-
}
292-
]
293-
end
294-
295-
it "takes the last entry based off of the 'id'" do
296-
output_hash = runners.latest(input)
297-
expect(output_hash['app_guid_1']).to eq(input[1])
298-
end
299-
end
300-
end
301-
end
302-
end
30334
end
30435
end

0 commit comments

Comments
 (0)