From 5fcfdb41d746dd2ef18582624bf7d14ab64cdd0c 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 Signed-off-by: Phil Ringnalda --- C4/Biblio.pm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 4b32ad43d5..063a07a765 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.44.0