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 <januszop@gmail.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Nick Clemens 2023-03-22 19:12:01 +00:00 committed by Tomas Cohen Arazi
parent 2792007245
commit a63b0d0030
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F
2 changed files with 5 additions and 5 deletions

View file

@ -3161,7 +3161,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 );
@ -3246,6 +3247,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;
}

View file

@ -70,10 +70,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