From be277cd4c6c348fe963f2f0debd2ca06a3dd3129 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 15 Sep 2021 12:12:33 -0300 Subject: [PATCH] Bug 29032: Pre-load ILL backends to speed up response Bug 22440 will rewrite the route and make it even more efficient by prefetching the related data instead of performing several queries in loops. In the meantime, we can make this controller perform better with a simple intervention: load backends once, and use the $request->_backend() setter to pre-set it before using the objects. To test: 1. Perform any usual ILL requests listing, try having several => FAIL: Notice it takes a weird amount of time to load 2. Apply this patch 3. Restart all 4. Repeat 1 => SUCCESS: It feels fast enough! 5. Sign off :-D Signed-off-by: Tomas Cohen Arazi Signed-off-by: Andrew Fuerste-Henry Signed-off-by: Martin Renvoize Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall (cherry picked from commit 7b1dc9d5f977aeb606cd2f766f3c3b8043d7a3f6) Signed-off-by: Fridolin Somers (cherry picked from commit fa84d0704f85381cd7026d1c51cb832ade4ca870) Signed-off-by: Victor Grousset/tuxayo --- Koha/REST/V1/Illrequests.pm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Koha/REST/V1/Illrequests.pm b/Koha/REST/V1/Illrequests.pm index a032be4dad..4dae59a4f5 100644 --- a/Koha/REST/V1/Illrequests.pm +++ b/Koha/REST/V1/Illrequests.pm @@ -62,6 +62,15 @@ sub list { : () })->as_list; + my $fetch_backends = {}; + foreach my $request (@requests) { + $fetch_backends->{ $request->backend } ||= + Koha::Illrequest->new->load_backend( $request->backend ); + } + + # Pre-load the backend object to avoid useless backend lookup/loads + @requests = map { $_->_backend( $fetch_backends->{ $_->backend } ); $_ } @requests; + # Identify patrons & branches that # we're going to need and get them my $to_fetch = { @@ -69,7 +78,7 @@ sub list { branches => {}, capabilities => {} }; - foreach my $req(@requests) { + foreach my $req (@requests) { $to_fetch->{patrons}->{$req->borrowernumber} = 1 if $embed{patron}; $to_fetch->{branches}->{$req->branchcode} = 1 if $embed{library}; $to_fetch->{capabilities}->{$req->backend} = 1 if $embed{capabilities}; @@ -104,8 +113,7 @@ sub list { my @backends = keys %{$to_fetch->{capabilities}}; if (scalar @backends > 0) { foreach my $bc(@backends) { - my $backend = Koha::Illrequest->new->load_backend($bc); - $to_fetch->{$bc} = $backend->capabilities; + $to_fetch->{$bc} = $fetch_backends->{$bc}->capabilities; } } } -- 2.39.5