-
Notifications
You must be signed in to change notification settings - Fork 356
/
process_route_handler.rb
50 lines (40 loc) · 1.46 KB
/
process_route_handler.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
module VCAP::CloudController
class ProcessRouteHandler
def initialize(process, runners=nil)
@process = process
@runners = runners || CloudController::DependencyLocator.instance.runners
end
def update_route_information(perform_validation: true, updated_ports: false)
return unless @process
with_transaction do
@process.lock!
# `false` means do **not** update ports. `nil` is a valid value as it
# is used to use defaults later on.
updated_ports = @process.ports if updated_ports == false
@process.set(
updated_at: ProcessModel.dataset.current_datetime,
ports: updated_ports
)
raise Sequel::ValidationFailed.new(@process.errors.full_messages) if PortsPolicy.new(@process).validate
@process.save_changes({ validate: perform_validation })
@process.db.after_commit { notify_backend_of_route_update }
end
end
def notify_backend_of_route_update
@runners.runner_for_process(@process).update_routes if @process && @process.staged? && @process.started?
rescue Diego::Runner::CannotCommunicateWithDiegoError => e
logger.error("failed communicating with diego backend: #{e.message}")
end
private
def with_transaction(&)
if @process.db.in_transaction?
yield
else
@process.db.transaction(&)
end
end
def logger
@logger ||= Steno.logger('cc.process_route_handler')
end
end
end