Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 2599070

Browse files
committed
use TCPServer for rake-task readiness checks
- the Socket we were opening would pass the readiness probe checks initially but begin failing later - this replaces it with a TCPServer that runs in a background thread that can accept multiple readiness probe connections - addresses cloudfoundry/capi-k8s-release#91 [#175388005](https://www.pivotaltracker.com/story/show/175388005) Authored-by: Tim Downey <tdowney@vmware.com>
1 parent d7f2377 commit 2599070

2 files changed

Lines changed: 19 additions & 11 deletions

File tree

lib/cloud_controller/background_job_environment.rb

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
require 'socket'
2+
13
class BackgroundJobEnvironment
4+
attr_reader :readiness_server
5+
26
def initialize(config)
37
@config = config
48
@log_counter = Steno::Sink::Counter.new
@@ -16,21 +20,26 @@ def setup_environment(readiness_port=nil)
1620
@config.configure_components
1721

1822
if readiness_port && readiness_port > 0
19-
open_readiness_port(readiness_port)
23+
listen_on_readiness_port(readiness_port)
2024
end
2125

2226
yield if block_given?
2327
end
2428

2529
private
2630

27-
def open_readiness_port(port)
28-
# rubocop:disable Style/GlobalVars
29-
$socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM)
30-
sockaddr = Socket.pack_sockaddr_in(port, '127.0.0.1')
31-
$socket.bind(sockaddr)
32-
33-
$socket.listen(READINESS_SOCKET_QUEUE_DEPTH)
34-
# rubocop:enable Style/GlobalVars
31+
def listen_on_readiness_port(port)
32+
@readiness_server = TCPServer.open('0.0.0.0', port)
33+
34+
Thread.new do
35+
loop do
36+
Thread.start(@readiness_server.accept) do |c|
37+
c.puts 'ok'
38+
c.close
39+
end
40+
end
41+
rescue Errno::EBADF
42+
Thread.exit
43+
end
3544
end
3645
end

spec/unit/lib/background_job_environment_spec.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
describe '#setup_environment' do
1717
before do
1818
allow(VCAP::CloudController::DB).to receive(:load_models)
19-
allow(Thread).to receive(:new).and_yield
2019
allow(EM).to receive(:run).and_yield
2120
allow(VCAP::CloudController::ResourcePool).to receive(:new)
2221
end
@@ -55,7 +54,7 @@ def open_port_count
5554
expect {
5655
background_job_environment.setup_environment(9999)
5756
}.to change { open_port_count }.by(1)
58-
expect { TCPSocket.new('127.0.0.1', 9999).close }.not_to raise_error
57+
expect { background_job_environment.readiness_server.close }.not_to raise_error
5958
end
6059
end
6160
end

0 commit comments

Comments
 (0)