Initial coding for timeout in case resolver runs amok.
authorArt Rhyno <artrhyno@uwindsor.ca>
Fri, 9 Dec 2011 21:23:21 +0000 (16:23 -0500)
committerArt Rhyno <artrhyno@uwindsor.ca>
Fri, 9 Dec 2011 21:23:21 +0000 (16:23 -0500)
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 <artrhyno@uwindsor.ca>
Open-ILS/src/perlmods/lib/Template/Plugin/ResolverResolver.pm

index 88109c2..074f1e3 100644 (file)
@@ -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;