diff options
author | Jacob Vosmaer (GitLab) <jacob@gitlab.com> | 2017-12-19 20:50:45 +0300 |
---|---|---|
committer | Jacob Vosmaer (GitLab) <jacob@gitlab.com> | 2017-12-19 20:50:45 +0300 |
commit | a7db066f1f4539eefe5f8333753b8f1bef3a4aca (patch) | |
tree | 5ed942bc3256579ac6e5f55d46c4ec005e204902 | |
parent | 31146812757e5349a8ac6fccf4ab316c563a567c (diff) | |
parent | 181c9ead2934dd237d13e06250024165f4e21500 (diff) |
Merge branch 'gitaly-ruby-shutdown' into 'master'
gitaly-ruby shutdown improvements
See merge request gitlab-org/gitaly!500
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rwxr-xr-x | ruby/bin/gitaly-ruby | 19 |
2 files changed, 13 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 2da982b87..787e4c296 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ v0.61.1 +- gitaly-ruby shutdown improvements + https://gitlab.com/gitlab-org/gitaly/merge_requests/500 - Use go 1.9 https://gitlab.com/gitlab-org/gitaly/merge_requests/496 diff --git a/ruby/bin/gitaly-ruby b/ruby/bin/gitaly-ruby index 5bbec510e..6f69dabf5 100755 --- a/ruby/bin/gitaly-ruby +++ b/ruby/bin/gitaly-ruby @@ -6,6 +6,8 @@ require 'grpc' require_relative '../lib/gitaly_server.rb' +SHUTDOWN_TIMEOUT = 600 + def main if ARGV.length != 2 abort "Usage: #{$0} PPID /path/to/socket" @@ -14,42 +16,43 @@ def main ppid_i = ppid.to_i abort "invalid PPID: #{ppid.inspect}" unless ppid_i > 0 - start_parent_watcher(ppid_i) FileUtils.rm_f(socket_path) socket_dir = File.dirname(socket_path) FileUtils.mkdir_p(socket_dir) File.chmod(0700, socket_dir) - s = GRPC::RpcServer.new + s = GRPC::RpcServer.new(poll_period: SHUTDOWN_TIMEOUT) port = 'unix:' + socket_path s.add_http2_port(port, :this_port_is_insecure) GRPC.logger.info("... running insecurely on #{port}") GitalyServer.register_handlers(s) - wait_thread = Thread.new do + signal_thread = Thread.new do sleep end - trap('TERM') { wait_thread.kill } + trap('TERM') { signal_thread.kill } + start_parent_watcher(ppid_i, signal_thread) run_thread = Thread.new do s.run - wait_thread.kill + signal_thread.kill end - wait_thread.join + signal_thread.join s.stop run_thread.join end -def start_parent_watcher(original_ppid) +def start_parent_watcher(original_ppid, signal_thread) Thread.new do loop do if Process.ppid != original_ppid # Our original parent is gone. Self-terminate. - Process.kill(9, Process.pid) + signal_thread.kill + break end sleep 1 |