From 3470c0942d9a6919654dd961ca0bb056c9e05452 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 12 Jul 2024 15:56:45 +0000 Subject: [PATCH] Bug 37349: Use cache for authority types and remove extra fetch This patch caches the authority types when fetched during linking to avoid grabbing the same type more than once. Additionally it removes a second call to fetch the same type in some scenarios To test: 1 - Apply patch 2 - Enable linking during cataloging/updating records 3 - Edit a record and confirm it is linked ocrrectly 4 - Run the authority linking cron and confirm it works as expected --- C4/Biblio.pm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 4b32ad43d52..063a07a7655 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -667,6 +667,7 @@ sub LinkBibHeadingsToAuthorities { my $tagtolink = shift; my $verbose = shift; my %results; + my $memory_cache = Koha::Cache::Memory::Lite->get_instance(); if (!$bib) { carp 'LinkBibHeadingsToAuthorities called on undefined bib record'; return ( 0, {}); @@ -708,7 +709,12 @@ sub LinkBibHeadingsToAuthorities { push(@{$results{'details'}}, { tag => $field->tag(), authid => $authid, status => 'LOCAL_FOUND'}) if $verbose; } else { - my $authority_type = Koha::Authority::Types->find( $heading->auth_type() ); + my $authority_type = + $memory_cache->get_from_cache( "LinkBibHeadingsToAuthorities:AuthorityType:" . $heading->auth_type() ); + unless ($authority_type) { + $authority_type = Koha::Authority::Types->find( $heading->auth_type() ); + $memory_cache->set_in_cache( "LinkBibHeadingsToAuthorities:AuthorityType:" . $heading->auth_type() ); + } if ( defined $current_link && (!$allowrelink || C4::Context->preference('LinkerKeepStale')) ) { @@ -722,7 +728,6 @@ sub LinkBibHeadingsToAuthorities { $results{'unlinked'}->{ $heading->display_form() }++; push(@{$results{'details'}}, { tag => $field->tag(), authid => undef, status => 'MULTIPLE_MATCH', auth_type => $heading->auth_type(), tag_to_report => $authority_type->auth_tag_to_report}) if $verbose; } elsif ( !$match_count ) { - my $authority_type = Koha::Authority::Types->find( $heading->auth_type() ); my $marcrecordauth = MARC::Record->new(); if ( C4::Context->preference('marcflavour') eq 'MARC21' ) { $marcrecordauth->leader(' nz a22 o 4500'); -- 2.39.2