From b539ddea685441662548575e67621504f4fd4419 Mon Sep 17 00:00:00 2001 From: Kyle Hall Date: Thu, 27 Oct 2022 13:44:59 -0400 Subject: [PATCH] Bug 31995: build_holds_queue.pl should check to see if the RealTimeHoldsQueue syspref is on The real time hold queue and the build_holds_queue.pl jobs are not 100% compatible in that we should not be running the cron if the real time queue is enabled, this could lead to double server work. It would be good to have a check in build_holds_queue for the RealTimeHoldsQueue syspref and not run the job if the preference is enabled. There might be times when we'd want to force a run of this job without changing the syspref. To that end we would also want a flag for this job so that system administrators could force the job from the command line if required, overriding this limitation. Test Plan: 1) Apply this patch 2) Try run misc/cronjobs/holds/build_holds_queue.pl with the -h/--help and -m/--man options 3) Disable RealTimeHoldsQueue 4) Run with no options, should succeed 5) Enable RealTimeHoldsQueue 6) Run with no options, should display a message and not rebuild the holds queue 7) Run again with the -f/--force option, should succeed --- misc/cronjobs/holds/build_holds_queue.pl | 73 ++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 6 deletions(-) diff --git a/misc/cronjobs/holds/build_holds_queue.pl b/misc/cronjobs/holds/build_holds_queue.pl index f0bd66eaf4..8101bea954 100755 --- a/misc/cronjobs/holds/build_holds_queue.pl +++ b/misc/cronjobs/holds/build_holds_queue.pl @@ -6,16 +6,77 @@ # FIXME: add command-line options for verbosity and summary # FIXME: expand perldoc, explain intended logic -use strict; -use warnings; +use Modern::Perl; -use Koha::Script -cron; +use Getopt::Long qw( GetOptions ); +use Pod::Usage qw( pod2usage ); + +use C4::Context; use C4::HoldsQueue qw(CreateQueue); use C4::Log qw( cronlogaction ); +use Koha::Script -cron; + +=head1 NAME + +build_holds_queue.pl - Rebuild the holds queue + +=head1 SYNOPSIS + +build_holds_queue.pl [-f] + + Options: + -h --help Brief help message + -m --man Full documentation + -f --force Run holds queue builder even if RealTimeHoldsQueue is enabled + +=head1 OPTIONS + +=over 8 + +=item B<--help> + +Print a brief help message and exits. + +=item B<--man> + +Prints the manual page and exits. + +=item B<--force> + +Allows this script to rebuild the entire holds queue even if RealTimeHoldsQueue is enabled. + +=back + +=head1 DESCRIPTION + +This script builds or rebuilds the entire holds queue. + +=cut + +my $help = 0; +my $man = 0; +my $force = 0; + +my $command_line_options = join( " ", @ARGV ); + +GetOptions( + 'h|help' => \$help, + 'm|man' => \$man, + 'f|force' => \$force, +); +pod2usage(1) if $help; +pod2usage( -exitval => 0, -verbose => 2 ) if $man; + +my $rthq = C4::Context->preference('RealTimeHoldsQueue'); + +if ( $rthq && !$force ) { + say "Real Time Holds Queue is enabled, holds queue not built."; + say "Use --force to force building the holds queue."; + exit(1); +} -my $command_line_options = join(" ",@ARGV); -cronlogaction({ info => $command_line_options }); +cronlogaction( { info => $command_line_options } ); CreateQueue(); -cronlogaction({ action => 'End', info => "COMPLETED" }); +cronlogaction( { action => 'End', info => "COMPLETED" } ); -- 2.30.2