Skip to content

Commit 8e3a8f2

Browse files
authored
Merge pull request #3813 from sap-contributions/improve-routing-info-collection
Reduce queries to DB when collecting routing info
2 parents 804cbb9 + 0dcba6f commit 8e3a8f2

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

lib/cloud_controller/diego/protocol/routing_info.rb

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,17 @@ def initialize(process)
99
end
1010

1111
def routing_info
12-
http_info_obj = http_info
13-
tcp_info_obj = tcp_info
12+
process_eager = ProcessModel.eager(route_mappings: { route: %i[domain route_binding] }).where(id: process.id).all
13+
14+
return {} if process_eager.empty?
15+
16+
http_info_obj = http_info(process_eager)
17+
tcp_info_obj = tcp_info(process_eager)
1418

1519
route_info = {}
1620
route_info['http_routes'] = http_info_obj if http_info_obj.present?
1721
route_info['tcp_routes'] = tcp_info_obj if tcp_info_obj.present?
18-
route_info['internal_routes'] = internal_routes
22+
route_info['internal_routes'] = internal_routes(process_eager)
1923
route_info
2024
rescue RoutingApi::RoutingApiDisabled
2125
raise CloudController::Errors::ApiError.new_from_details('RoutingApiDisabled')
@@ -27,8 +31,8 @@ def routing_info
2731

2832
private
2933

30-
def http_info
31-
route_mappings = process.route_mappings.reject do |route_mapping|
34+
def http_info(process_eager)
35+
route_mappings = process_eager[0].route_mappings.reject do |route_mapping|
3236
route_mapping.route.internal? || route_mapping.route.tcp?
3337
end
3438

@@ -43,8 +47,8 @@ def http_info
4347
end
4448
end
4549

46-
def tcp_info
47-
route_mappings = process.route_mappings.select do |route_mapping|
50+
def tcp_info(process_eager)
51+
route_mappings = process_eager[0].route_mappings.select do |route_mapping|
4852
r = route_mapping.route
4953
r.tcp? && !r.internal?
5054
end
@@ -58,8 +62,13 @@ def tcp_info
5862
end
5963
end
6064

61-
def internal_routes
62-
process.routes.select(&:internal?).map do |r|
65+
def internal_routes(process_eager)
66+
route_mappings = process_eager[0].route_mappings.select do |route_mapping|
67+
route_mapping.route.internal?
68+
end
69+
70+
route_mappings.map do |route_mapping|
71+
r = route_mapping.route
6372
{ 'hostname' => "#{r.host}.#{r.domain.name}" }
6473
end
6574
end

spec/unit/lib/cloud_controller/diego/protocol/routing_info_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,16 @@ class Protocol
423423
end
424424
end
425425
end
426+
427+
context 'when process disappeared' do
428+
before do
429+
process.destroy
430+
end
431+
432+
it 'return an empty object' do
433+
expect(ri).to be_empty
434+
end
435+
end
426436
end
427437
end
428438
end

0 commit comments

Comments
 (0)