Muehlenhoff has submitted this change and it was merged. Change subject: nodepool: systemd wrapper ......................................................................
nodepool: systemd wrapper Puppetize a basic systemd unit for Nodepool. systemd default to stopping the service with SIGTERM which Nodepool handle by abruptly exiting. Instead stop it with the provided `nodepool-graceful-stop` which is feed with the PID systemd knows for nodepool. Eventually after systemd TimeoutStopSec expired, SIGKILL will be sent wich finish the process. systemd launch nodepool in interactive mode (with -d) and keep tracks of the process PID. Hence there is no need for a pid file under /var/run/nodepool stdout/stderr are sent to syslog. Quite useful to find warnings and errors via journalctl. For later: * Need to define some new commands, such as dump_stack to send SIGUSR2 and maybe graceful-stop / force-stop. We will see. * Include all of this in the Debian package. Easier to handle via puppet for now. Bug: T96867 Change-Id: Idd917f3ef4ade088c5f9ca322a181077d9442173 --- A modules/nodepool/files/nodepool-graceful-stop M modules/nodepool/manifests/init.pp A modules/nodepool/templates/initscripts/nodepool.systemd.erb 3 files changed, 58 insertions(+), 0 deletions(-) Approvals: Muehlenhoff: Verified; Looks good to me, approved diff --git a/modules/nodepool/files/nodepool-graceful-stop b/modules/nodepool/files/nodepool-graceful-stop new file mode 100644 index 0000000..2cffc08 --- /dev/null +++ b/modules/nodepool/files/nodepool-graceful-stop @@ -0,0 +1,22 @@ +#!/bin/sh + +if [ -z $1 ]; then + echo "Usage $0 <pid of nodepool>" + exit 1 +fi +PID=$1 +kill -USR1 $PID + +if [ -n "${PID:-}" ]; then + i=0 + while kill -0 "${PID:-}" 2> /dev/null; do + if [ $i -eq '0' ]; then + echo -n " ... waiting for Nodepool tasks to complete " + else + echo -n "." + fi + i=$(($i+1)) + sleep 1 + done + echo "done" +fi diff --git a/modules/nodepool/manifests/init.pp b/modules/nodepool/manifests/init.pp index 1c9d18a..99a0015 100644 --- a/modules/nodepool/manifests/init.pp +++ b/modules/nodepool/manifests/init.pp @@ -68,6 +68,26 @@ ensure => present, } + # Script to nicely stop Nodepool scheduler from systemd + file { '/usr/bin/nodepool-graceful-stop': + ensure => present, + source => 'puppet:///modules/nodepool/nodepool-graceful-stop', + owner => 'root', + group => 'root', + mode => '0555', + } + + base::service_unit { 'nodepool': + ensure => present, + refresh => true, + systemd => true, + service_params => {}, + require => [ + Package['nodepool'], + File['/usr/bin/nodepool-graceful-stop'], + ], + } + # Recursively create $dib_base_path since Puppet does not support that exec { 'create_dib_base_path': command => "/bin/mkdir -p ${dib_base_path}", @@ -165,4 +185,5 @@ File['/etc/nodepool/elements'], ] } + } diff --git a/modules/nodepool/templates/initscripts/nodepool.systemd.erb b/modules/nodepool/templates/initscripts/nodepool.systemd.erb new file mode 100644 index 0000000..5770757 --- /dev/null +++ b/modules/nodepool/templates/initscripts/nodepool.systemd.erb @@ -0,0 +1,15 @@ +[Unit] +Description=Nodepool daemon + +[Service] +Type=simple +User=nodepool +Group=nodepool + +# Start in non daemon mode (-d) +ExecStart=/usr/bin/nodepoold -d -l /etc/nodepool/logging.conf + +ExecStop=/usr/bin/nodepool-graceful-stop $MAINPID + +StandardOutput=syslog +StandardError=syslog -- To view, visit https://gerrit.wikimedia.org/r/224102 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Idd917f3ef4ade088c5f9ca322a181077d9442173 Gerrit-PatchSet: 9 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Hashar <has...@free.fr> Gerrit-Reviewer: Andrew Bogott <abog...@wikimedia.org> Gerrit-Reviewer: Dduvall <dduv...@wikimedia.org> Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org> Gerrit-Reviewer: Hashar <has...@free.fr> Gerrit-Reviewer: Muehlenhoff <mmuhlenh...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits