From a42717ad15bbbb772b7477ab374c75d1039350f9 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 1 Apr 2022 12:10:05 +0200 Subject: [PATCH] Bug 27783: Add --job-type to background_jobs_worker.pl This will let sysop adjust the number of workers and how they want to manage them. For instance one could want to have one worker for ES indexation and another worker for other jobs, to prevent ES index to be stuck behind bigger batch process. Signed-off-by: Arthur Suzuki Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi Signed-off-by: Kyle M Hall Signed-off-by: Martin Renvoize Signed-off-by: Fridolin Somers --- misc/background_jobs_worker.pl | 53 +++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/misc/background_jobs_worker.pl b/misc/background_jobs_worker.pl index 5a84d342ba..b503ebde9f 100755 --- a/misc/background_jobs_worker.pl +++ b/misc/background_jobs_worker.pl @@ -15,12 +15,53 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . +=head1 NAME + +background_jobs_worker.pl - Worker script that will process background jobs + +=head1 SYNOPSIS + +./background_jobs_worker.pl [--job-type] + +=head1 DESCRIPTION + +This script will connect to the Stomp server (RabbitMQ) and subscribe to the different destination queues available. +You can specify some queues only (using --job-type) if you want to run several workers that will handle their own jobs. + +=head1 OPTIONS + +=over + +=item B<--job-type> + +Give the job types this worker will process. + +The different values available are: + + batch_biblio_record_modification + batch_authority_record_modification + update_elastic_index + +=back + +=cut + use Modern::Perl; use JSON qw( decode_json ); use Try::Tiny qw( catch try ); +use Pod::Usage; +use Getopt::Long; use Koha::BackgroundJobs; +my ( $help, @job_types ); +GetOptions( + 'h|help' => \$help, + 'job-type:s' => \@job_types, +) || pod2usage(1); + +pod2usage(0) if $help; + my $conn; try { $conn = Koha::BackgroundJob->connect; @@ -28,7 +69,7 @@ try { warn sprintf "Cannot connect to the message broker, the jobs will be processed anyway (%s)", $_; }; -my @job_types = qw( +my @available_job_types = qw( batch_biblio_record_modification batch_authority_record_modification batch_item_record_modification @@ -36,8 +77,18 @@ my @job_types = qw( batch_authority_record_deletion batch_item_record_deletion batch_hold_cancel + update_elastic_index ); +if ( @job_types ) { + for my $job_type ( @job_types ) { + pod2usage( -verbose => 1, -msg => sprintf "You specify an invalid --job-type value: %s\n", $job_type ) + unless grep { $_ eq $job_type } @available_job_types; + } +} else { + @job_types = @available_job_types; +} + if ( $conn ) { # FIXME cf note in Koha::BackgroundJob about $namespace my $namespace = C4::Context->config('memcached_namespace');