From 4033699062ba3e1d11ae912be303c21e81fbc3c9 Mon Sep 17 00:00:00 2001 From: Emily Lamancusa Date: Fri, 11 Oct 2024 15:26:25 -0400 Subject: [PATCH] Bug 38156: Sort issues by borrowernumber before parallel chunking When the automatic renewal cron job is using parallel processing, it aims to process all of the renewals for any given patron together in one chunk to avoid data conflicts. To accomplish this, it starts a new data chunk each time it encounters a new patron. However, if a patron's renewing checkouts aren't all consecutive in the database, that patron's data ends up split across multiple chunks. We need to sort the issues by borrowernumber before attempting to chunk them in order to make sure they are chunked and processed correctly. To test (using KTD default test data): Setup: 1. Edit the default circulation rule: - Set Automatic renewal to "Yes" - Set No automatic renewal before to 3 2. Open the following patron accounts in separate tabs: - Floyd Delgado - Joyce Gaines - Edna Acosta - Mary Burton 3. Perform the following patron account edits for each of the above patrons (and keep the tabs open): - Enable automatic renewal notices, and set them to digests only - Add a value to the email field 4. Enter the kshell (ktd --shell) 5. Edit /etc/koha/sites/kohadev/koha-conf.xml, and add the following lines near the end, just above the and closing tags: 2 6. restart_all Reproducing the issue: 7. Apply the test patch only 8. Run perl generate_checkouts.pl to generate test data 9. perl misc/cronjobs/automatic_renewals.pl -v -c --> The test patch added output that will show how the renewals were chunked into "chunk 0" and "chunk 1" for the two parallel loops. Note that the issues for each borrower are not processed nicely in one chunk, but are separated across multiple chunks and alternated with other borrowers. 10. Check the checkouts for each of the four patrons from above --> All checkouts should have renewed 11. Check the notices tab for each of the four patrons --> Notice errors in the automatic renewal digest notices. A patron's renewals may be split across multiple digests, a digest may be missing renewals, or a patron may not have received a digest at all Testing the patch: 12. Apply the second patch 13. Reset the due dates on all checkouts so that they will all be eligible for automatic renewal again: - koha-mysql kohadev - UPDATE issues SET date_due=; 14. perl misc/cronjobs/automatic_renewals.pl -v -c --> Note that the renewals are now correctly chunked by patron 15. Check the checkouts and notices tab for each of the four patrons --> All checkouts should have renewed, and all patrons should have a single new Auto Renewals Digest notice that correctly lists all of their renewed items Signed-off-by: Phil Ringnalda Signed-off-by: Tomas Cohen Arazi Edit: tidied the code block inline (tcohen) Signed-off-by: Katrin Fischer --- misc/cronjobs/automatic_renewals.pl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/misc/cronjobs/automatic_renewals.pl b/misc/cronjobs/automatic_renewals.pl index d5018a46e1..48d18b72e4 100755 --- a/misc/cronjobs/automatic_renewals.pl +++ b/misc/cronjobs/automatic_renewals.pl @@ -141,7 +141,10 @@ my @auto_renews = Koha::Checkouts->search( auto_renew => 1, 'patron.autorenew_checkouts' => 1, }, - { join => [ 'patron', 'item' ] } + { + join => [ 'patron', 'item' ], + order_by => 'patron.borrowernumber', + } )->as_list; print "found " . scalar @auto_renews . " auto renewals\n" if $verbose; -- 2.39.5