Bug 27783: Add queue handling in packaging tools

This patch adds queue name handling in is_worker_running and a handy
method to centralize process name handling for queue-specific workers.

To test:
1. Apply this patch
2. Run:
   $ source debian/scripts/koha-functions.sh
   $ get_worker_name kohadev
   kohadev-koha-worker
=> SUCCESS: Default queue means no queue name included
   $ get_worker_name kohadev default
   kohadev-koha-worker
=> SUCCESS: Default queue means no queue name included
   $ get_worker_name kohadev long_tasks
   kohadev-koha-worker-long_tasks
=> SUCCESS: Queue name appended to the name
4. Run:
   $ perl misc4dev/cp_debian_files.pl \
              --koha_dir /kohadevbox/koha \
              --gitify /kohadevbox/gitify \
              --instance kohadev
5. Run:
   $ koha-worker --start --queue oleonard kohadev
=> SUCCESS: Starts!
6. Check:
   $ ps waux | grep oleonard
=> SUCCESS: It is running
7. Play with --stop, --restart, --status and different queue names,
   including 'default' and without the --queue param as well.
=> SUCCESS: All as expected!
8. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Tomas Cohen Arazi 2022-04-04 20:23:09 +02:00 committed by Fridolin Somers
parent db4baee498
commit f1fef6527c
4 changed files with 69 additions and 23 deletions

View File

@ -26,6 +26,7 @@
<command>koha-worker</command>
<arg><option>--start</option>|<option>--stop</option>|<option>--restart</option></arg>
<arg><option>--status</option></arg>
<arg><option>--queue</option></arg>
<arg><option>--quiet</option>|<option>-q</option></arg>
<arg><option>-h</option>|<option>--help</option></arg>
</cmdsynopsis>
@ -58,6 +59,12 @@
<para>Show status information about worker daemon for named Koha instances.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--queue</option></term>
<listitem>
<para>Allows specifying the queue worker (defaults to 'default').</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-v</option>|<option>--verbose</option></term>
<listitem>

View File

@ -62,7 +62,10 @@ do_start()
koha-sip --start $(koha-list --enabled --sip)
koha-plack --start $(koha-list --enabled --plack)
koha-z3950-responder --start --quiet $(koha-list --enabled --z3950)
# default queue
koha-worker --start $(koha-list --enabled)
# long_tasks queue
koha-worker --start --queue long_tasks $(koha-list --enabled)
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
koha-indexer --start --quiet $(koha-list --enabled)
@ -79,7 +82,10 @@ do_stop()
koha-sip --stop $(koha-list --sip)
koha-plack --stop --quiet $(koha-list --enabled --plack)
koha-z3950-responder --stop --quiet $(koha-list --enabled --z3950)
# default queue
koha-worker --stop --quiet $(koha-list --enabled)
# long_tasks queue
koha-worker --stop --queue long_tasks --quiet $(koha-list --enabled)
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
koha-indexer --stop --quiet $(koha-list --enabled)
@ -94,7 +100,10 @@ do_reload() {
koha-sip --restart $(koha-list --enabled --sip)
koha-plack --restart --quiet $(koha-list --enabled --plack)
koha-z3950-responder --restart --quiet $(koha-list --enabled --z3950)
# default queue
koha-worker --restart --quiet $(koha-list --enabled)
# long_tasks queue
koha-worker --restart --queue long_tasks --quiet $(koha-list --enabled)
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
koha-indexer --restart --quiet $(koha-list --enabled)

View File

@ -202,8 +202,11 @@ is_indexer_running()
is_worker_running()
{
local instancename=$1
local queue=$2
if daemon --name="$instancename-koha-worker" \
local name=`get_worker_name $instancename $queue`
if daemon --name="$name" \
--pidfiles="/var/run/koha/$instancename/" \
--user="$instancename-koha.$instancename-koha" \
--running ; then
@ -213,6 +216,18 @@ is_worker_running()
fi
}
get_worker_name()
{
local name=$1
local queue=$2
if [ "$queue" = "" ] || [ "$queue" = "default" ]; then
echo "${name}-koha-worker"
else
echo "${name}-koha-worker-${queue}"
fi
}
is_plack_enabled_opac()
{
local instancefile=$1

View File

@ -58,11 +58,15 @@ EOF
start_worker()
{
local name=$1
local queue=$2
if ! is_worker_running $name $queue; then
worker_name=`get_worker_name $name $queue`
if ! is_worker_running $name; then
export KOHA_CONF="/etc/koha/sites/$name/koha-conf.xml"
DAEMONOPTS="--name=$name-koha-worker \
DAEMONOPTS="--name=${worker_name} \
--errlog=/var/log/koha/$name/worker-error.log \
--stdout=/var/log/koha/$name/worker.log \
--output=/var/log/koha/$name/worker-output.log \
@ -70,15 +74,15 @@ start_worker()
--verbose=1 --respawn --delay=30 \
--user=$name-koha.$name-koha"
log_daemon_msg "Starting Koha worker daemon for $name"
log_daemon_msg "Starting Koha worker daemon for $name ($queue)"
if daemon $DAEMONOPTS -- $worker_DAEMON; then
if daemon $DAEMONOPTS -- $worker_DAEMON --job-queue ${queue}; then
log_end_msg 0
else
log_end_msg 1
fi
else
log_daemon_msg "Error: worker already running for $name"
log_daemon_msg "Error: worker already running for $name ($queue)"
log_end_msg 1
fi
}
@ -86,11 +90,14 @@ start_worker()
stop_worker()
{
local name=$1
local queue=$2
if is_worker_running $name; then
if is_worker_running $name $queue; then
export KOHA_CONF="/etc/koha/sites/$name/koha-conf.xml"
DAEMONOPTS="--name=$name-koha-worker \
worker_name=`get_worker_name $name $queue`
DAEMONOPTS="--name=${worker_name} \
--errlog=/var/log/koha/$name/worker-error.log \
--stdout=/var/log/koha/$name/worker.log \
--output=/var/log/koha/$name/worker-output.log \
@ -98,15 +105,15 @@ stop_worker()
--verbose=1 --respawn --delay=30 \
--user=$name-koha.$name-koha"
log_daemon_msg "Stopping Koha worker daemon for $name"
log_daemon_msg "Stopping Koha worker daemon for $name ($queue)"
if daemon $DAEMONOPTS --stop -- $worker_DAEMON; then
if daemon $DAEMONOPTS --stop -- $worker_DAEMON --job-queue ${queue}; then
log_end_msg 0
else
log_end_msg 1
fi
else
log_daemon_msg "Error: worker not running for $name"
log_daemon_msg "Error: worker not running for $name ($queue)"
log_end_msg 1
fi
}
@ -114,11 +121,14 @@ stop_worker()
restart_worker()
{
local name=$1
local queue=$2
if is_worker_running $name; then
if is_worker_running $name $queue; then
export KOHA_CONF="/etc/koha/sites/$name/koha-conf.xml"
DAEMONOPTS="--name=$name-koha-worker \
worker_name=`get_worker_name $name $queue`
DAEMONOPTS="--name=${worker_name} \
--errlog=/var/log/koha/$name/worker-error.log \
--stdout=/var/log/koha/$name/worker.log \
--output=/var/log/koha/$name/worker-output.log \
@ -126,15 +136,15 @@ restart_worker()
--verbose=1 --respawn --delay=30 \
--user=$name-koha.$name-koha"
log_daemon_msg "Restarting Koha worker daemon for $name"
log_daemon_msg "Restarting Koha worker daemon for $name ($queue)"
if daemon $DAEMONOPTS --restart -- $worker_DAEMON; then
if daemon $DAEMONOPTS --restart -- $worker_DAEMON --job-queue ${queue}; then
log_end_msg 0
else
log_end_msg 1
fi
else
log_daemon_msg "Error: worker not running for $name"
log_daemon_msg "Error: worker not running for $name ($queue)"
log_end_msg 1
fi
}
@ -142,12 +152,13 @@ restart_worker()
worker_status()
{
local name=$1
local queue=$2
if is_worker_running ${name}; then
log_daemon_msg "worker running for ${name}"
if is_worker_running ${name} ${queue}; then
log_daemon_msg "worker running for ${name} ($queue)"
log_end_msg 0
else
log_daemon_msg "worker not running for ${name}"
log_daemon_msg "worker not running for ${name} ($queue)"
log_end_msg 3
fi
}
@ -162,6 +173,7 @@ set_action()
}
op=""
queue="default"
quiet="no"
# Read command line parameters
@ -185,6 +197,9 @@ while [ $# -gt 0 ]; do
--status)
set_action "status"
shift ;;
--queue)
queue="$2"
shift 2 ;;
-*)
die "Error: invalid option switch ($1)" ;;
*)
@ -214,16 +229,16 @@ if [ $# -gt 0 ]; then
case $op in
"start")
start_worker $name
start_worker $name $queue
;;
"stop")
stop_worker $name
stop_worker $name $queue
;;
"restart")
restart_worker $name
restart_worker $name $queue
;;
"status")
worker_status $name
worker_status $name $queue
esac
else