From 4a2ef7f1b33d8c1682b12c63611688bbabb628e0 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Wed, 22 Mar 2023 19:12:01 +0000 Subject: [PATCH] Bug 33309: Index items after renewal transaction completes This patch ensures a record is indexed only after the renewal transaction has completed successfully. Otherwise the job cannot be found by the background process worker, becaue it was not yet in the DB To test: 1 - Make sure you are using ES, and the es indexer is running 2 - tail -f /var/log/koha/kohadev/*.log 3 - Issue an item to a patron and renew it 4 - Note error in es-indexer-output.log like: [2023/03/21 12:22:36] [WARN] No job found for id=157 main:: /kohadevbox/koha/misc/workers/es_indexer_daemon.pl (129) 5 - Apply patch 6 - Renew again 7 There should be no error 8 - Search for the record and confirm items info displays correctly 9 - View the background jobs in admin, confirm the most recent job has completed Signed-off-by: Janusz Kaczmarek Signed-off-by: Jonathan Druart Signed-off-by: Tomas Cohen Arazi (cherry picked from commit a63b0d00306d639241a400cecbe3b0125ee8d303) Signed-off-by: Matt Blenkinsop (cherry picked from commit ff03813f9fcf79e32dd95a1f4913ba64392a1610) Signed-off-by: Lucas Gass (cherry picked from commit 0081194b40d1c5ab081e85539864a8513cccd311) Signed-off-by: Arthur Suzuki --- C4/Circulation.pm | 6 +++++- Koha/Item.pm | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 3fe5273c56..6c8c5a3d71 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -3039,7 +3039,8 @@ sub AddRenewal { $renews = ( $item_object->renewals || 0 ) + 1; $item_object->renewals($renews); $item_object->onloan($datedue); - $item_object->store({ log_action => 0 }); + # Don't index as we are in a transaction + $item_object->store({ log_action => 0, skip_record_index => 1 }); # Charge a new rental fee, if applicable my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber ); @@ -3111,6 +3112,9 @@ sub AddRenewal { } }); }); + # We index now, after the transaction is committed + my $indexer = Koha::SearchEngine::Indexer->new({ index => $Koha::SearchEngine::BIBLIOS_INDEX }); + $indexer->index_records( $item_object->biblionumber, "specialUpdate", "biblioserver" ); return $datedue; } diff --git a/Koha/Item.pm b/Koha/Item.pm index 9ca766ceb8..2642629f7a 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -64,10 +64,6 @@ Koha::Item - Koha Item object class $params can take an optional 'skip_record_index' parameter. If set, the reindexation process will not happen (index_records not called) - -NOTE: This is a temporary fix to answer a performance issue when lot of items -are added (or modified) at the same time. -The correct way to fix this is to make the ES reindexation process async. You should not turn it on if you do not understand what it is doing exactly. =cut -- 2.20.1