From d2fe58a5634583d289d56147c62387592834bd5d Mon Sep 17 00:00:00 2001 From: Jason Stephenson Date: Tue, 7 Aug 2018 10:02:10 -0400 Subject: [PATCH] LP 115706: Avoid Internal Server Errors with Hold Count Retrieval It can happen that the query to get a record's hold count can run too long and timeout or fail for some other reason. When this happens, the user sees an Internal Server Error. The underlying cause is the following Perl error: Can't use an undefined value as an ARRAY reference at /usr/local/share/perl/5.22.1/OpenILS/Application/Circ/Holds.pm line 4264. This commit rearranges the code around that line to avoid this particular undefined value reference error. Signed-off-by: Jason Stephenson Signed-off-by: Cesar Velez Signed-off-by: Galen Charlton --- .../perlmods/lib/OpenILS/Application/Circ/Holds.pm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm index 40a25b13fe..1336e4efa2 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm @@ -4315,8 +4315,17 @@ sub rec_hold_count { } if ($pld != $top_ou->id); } + # To avoid Internal Server Errors, we get an editor, then run the + # query and check the result. If anything fails, we'll return 0. + my $result = 0; + if (my $e = new_editor()) { + my $query_result = $e->json_query($query); + if ($query_result && @{$query_result}) { + $result = $query_result->[0]->{count} + } + } - return new_editor()->json_query($query)->[0]->{count}; + return $result; } # A helper function to calculate a hold's expiration time at a given -- 2.43.2