Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer (GitLab) <jacob@gitlab.com>2017-12-19 20:50:45 +0300
committerJacob Vosmaer (GitLab) <jacob@gitlab.com>2017-12-19 20:50:45 +0300
commita7db066f1f4539eefe5f8333753b8f1bef3a4aca (patch)
tree5ed942bc3256579ac6e5f55d46c4ec005e204902
parent31146812757e5349a8ac6fccf4ab316c563a567c (diff)
parent181c9ead2934dd237d13e06250024165f4e21500 (diff)
Merge branch 'gitaly-ruby-shutdown' into 'master'
gitaly-ruby shutdown improvements See merge request gitlab-org/gitaly!500
-rw-r--r--CHANGELOG.md2
-rwxr-xr-xruby/bin/gitaly-ruby19
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