Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions lib/cloud_controller/background_job_environment.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
require 'socket'

class BackgroundJobEnvironment
attr_reader :readiness_server

def initialize(config)
@config = config
@log_counter = Steno::Sink::Counter.new
Expand All @@ -16,21 +20,26 @@ def setup_environment(readiness_port=nil)
@config.configure_components

if readiness_port && readiness_port > 0
open_readiness_port(readiness_port)
listen_on_readiness_port(readiness_port)
end

yield if block_given?
end

private

def open_readiness_port(port)
# rubocop:disable Style/GlobalVars
$socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM)
sockaddr = Socket.pack_sockaddr_in(port, '127.0.0.1')
$socket.bind(sockaddr)

$socket.listen(READINESS_SOCKET_QUEUE_DEPTH)
# rubocop:enable Style/GlobalVars
def listen_on_readiness_port(port)
@readiness_server = TCPServer.open('0.0.0.0', port)

Thread.new do
loop do
Thread.start(@readiness_server.accept) do |c|
c.puts 'ok'
c.close
end
end
rescue Errno::EBADF
Thread.exit
end
end
end
3 changes: 1 addition & 2 deletions spec/unit/lib/background_job_environment_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
describe '#setup_environment' do
before do
allow(VCAP::CloudController::DB).to receive(:load_models)
allow(Thread).to receive(:new).and_yield
allow(EM).to receive(:run).and_yield
allow(VCAP::CloudController::ResourcePool).to receive(:new)
end
Expand Down Expand Up @@ -55,7 +54,7 @@ def open_port_count
expect {
background_job_environment.setup_environment(9999)
}.to change { open_port_count }.by(1)
expect { TCPSocket.new('127.0.0.1', 9999).close }.not_to raise_error
expect { background_job_environment.readiness_server.close }.not_to raise_error
end
end
end
Expand Down