sidekiq: ProcessSupervisor does not handle SIGTERM
We found a regression in the ProcessSupervisor running in sidekiq-cluster while looking into gitlab-com/gl-infra/production#6983 (closed).
It does not appear to handle SIGTERM properly; it should move into the stopped state, so that it does not attempt to restart workers or the metrics server. Instead, it currently fails to handle this signal properly, meaning it will attempt to restart processes when they are in an ongoing graceful shutdown:
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:03:51.682Z","message":"Bye!"}
sidekiq_1 | "supervise: dead_pids = [79]"
sidekiq_1 | "supervise: alive = true"
sidekiq_1 | "supervise: mserver dead = false"
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:03:53.025Z","message":"A worker terminated, shutting down the cluster"}
sidekiq_1 | "supervise: dead_pids = [81]"
sidekiq_1 | "supervise: alive = true"
sidekiq_1 | "supervise: mserver dead = true"
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:03:58.026Z","message":"Sidekiq metrics server terminated, restarting..."}
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:03:58.026Z","message":"Starting metrics server on port 3807"}
sidekiq_1 | "supervise: dead_pids = [79]"
sidekiq_1 | "supervise: alive = true"
sidekiq_1 | "supervise: mserver dead = false"
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:04:03.029Z","message":"A worker terminated, shutting down the cluster"}
sidekiq_1 | #<Thread:0x00007f8922132998@sidekiq_process_supervisor /home/git/gitlab/lib/gitlab/daemon.rb:45 run> terminated with exception (report_on_exception is true):
sidekiq_1 | /home/git/gitlab/lib/gitlab/daemon.rb:50:in `join': SIGTERM (SignalException)
sidekiq_1 | from /home/git/gitlab/lib/gitlab/daemon.rb:50:in `block in start'
sidekiq_1 | from /home/git/gitlab/lib/gitlab/daemon.rb:41:in `synchronize'
sidekiq_1 | from /home/git/gitlab/lib/gitlab/daemon.rb:41:in `start'
sidekiq_1 | from /home/git/gitlab/metrics_server/metrics_server.rb:149:in `start'
sidekiq_1 | from /home/git/gitlab/metrics_server/metrics_server.rb:89:in `fork'
sidekiq_1 | from /home/git/gitlab/metrics_server/metrics_server.rb:36:in `start_for_sidekiq'
sidekiq_1 | from /home/git/gitlab/sidekiq_cluster/cli.rb:171:in `restart_metrics_server'
sidekiq_1 | from /home/git/gitlab/sidekiq_cluster/cli.rb:149:in `block in start_and_supervise_workers'
sidekiq_1 | from /home/git/gitlab/lib/gitlab/process_supervisor.rb:88:in `check_process_health'
sidekiq_1 | from /home/git/gitlab/lib/gitlab/process_supervisor.rb:80:in `run_thread'
sidekiq_1 | from /home/git/gitlab/lib/gitlab/daemon.rb:47:in `block (2 levels) in start'
sidekiq_1 | "supervise: dead_pids = [155]"
sidekiq_1 | "supervise: alive = true"
sidekiq_1 | "supervise: mserver dead = true"
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:04:08.030Z","message":"Sidekiq metrics server terminated, restarting..."}
sidekiq_1 | {"severity":"INFO","time":"2022-05-05T09:04:08.030Z","message":"Starting metrics server on port 3807"}
...
Edited by Matthias Käppler