From 46667211825b586784fde0d22582cf5044e604a2 Mon Sep 17 00:00:00 2001 From: Art Rhyno Date: Fri, 9 Dec 2011 16:23:21 -0500 Subject: [PATCH] Initial coding for timeout in case resolver runs amok. This is the start of setting up a timeout for a resolver call from the TPAC in case there is a problem with the server side processing. The idea is to limit the impact of a non-responsive resolver interaction. Signed-off-by: Art Rhyno --- .../lib/Template/Plugin/ResolverResolver.pm | 45 +++++++++++++++++----- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/Template/Plugin/ResolverResolver.pm b/Open-ILS/src/perlmods/lib/Template/Plugin/ResolverResolver.pm index 88109c2bd2..074f1e392f 100644 --- a/Open-ILS/src/perlmods/lib/Template/Plugin/ResolverResolver.pm +++ b/Open-ILS/src/perlmods/lib/Template/Plugin/ResolverResolver.pm @@ -62,16 +62,43 @@ sub ResolverResolver::params { sub resolve_issn { - my ($class, $c, $baseurl) = @_; + my ($class, $issn, $baseurl) = @_; - if (length($c) <= 9) { + if (length($issn) <= 9) { my $session = OpenSRF::AppSession->create("open-ils.resolver"); + my $request = ""; - my $request = $session->request("open-ils.resolver.resolve_holdings.raw", "issn", $c, $baseurl)->gather(); - if ($request) { - return $request; - } - $session->disconnect(); + eval { + local $SIG{ALRM} = sub { die @_ }; + #maybe make this passed in, probably different for result list than summary? + alarm(10); # set timeout + $request = $session->request("open-ils.resolver.resolve_holdings.raw", "issn", $issn, $baseurl)->gather(); + }; + + if($@ =~ /\b ALRM \b/xms) { + + # timeout! + $session->disconnect(); + my @sfx_result; + + #if a request times out, put in direct link to resolver + push @sfx_result, { + public_name => "Title check", + target_url => $baseurl . "?ctx_ver=Z39.88-2004&rft.issn=" . $issn, + target_coverage => "Request timed out, use link to check directly.", + target_embargo => "", + }; + + # Don't return the list unless it contains something + if (scalar(@sfx_result)) { + return \@sfx_result; + } + return ""; + } + if ($request) { + return $request; + } + $session->disconnect(); } return ""; @@ -79,11 +106,11 @@ sub resolve_issn sub resolve_isbn { - my ($class, $c, $baseurl) = @_; + my ($class, $isbn, $baseurl) = @_; my $session = OpenSRF::AppSession->create("open-ils.resolver"); - my $request = $session->request("open-ils.resolver.resolve_holdings.raw", "isbn", $c, $baseurl)->gather(); + my $request = $session->request("open-ils.resolver.resolve_holdings.raw", "isbn", $isbn, $baseurl)->gather(); if ($request) { return $request; -- 2.11.0