From 21b3f8a7bfe149925a0dc9331ca1935593a4b6e5 Mon Sep 17 00:00:00 2001 From: Juan Romay Sieira Date: Wed, 21 Mar 2012 14:56:54 +0100 Subject: [PATCH] Bug 6140 - Set a timeout to z3950 servers that could have network problems occasionally Signed-off-by: Henri-Damien LAURENT --- admin/z3950servers.pl | 21 ++++++++++++------- cataloguing/z3950_search.pl | 3 ++- installer/data/mysql/kohastructure.sql | 1 + installer/data/mysql/updatedatabase.pl | 9 ++++++++ .../prog/en/modules/admin/z3950servers.tt | 8 +++++-- .../en/modules/cataloguing/z3950_search.tt | 3 ++- 6 files changed, 33 insertions(+), 12 deletions(-) diff --git a/admin/z3950servers.pl b/admin/z3950servers.pl index 5a4dd9f825..14603f6ba5 100755 --- a/admin/z3950servers.pl +++ b/admin/z3950servers.pl @@ -40,7 +40,7 @@ sub StringSearch { $searchstring = ''; } - my $query = "SELECT host,port,db,userid,password,name,id,checked,rank,syntax,encoding"; + my $query = "SELECT host,port,db,userid,password,name,id,checked,rank,syntax,encoding,timeout"; $query .= " FROM z3950servers"; if ( $searchstring ne '' ) { $query .= " WHERE (name like ?)" } $query .= " ORDER BY rank,name"; @@ -52,6 +52,7 @@ sub StringSearch { else { $sth->execute; } + my @results; while (my $data=$sth->fetchrow_hashref) { push(@results,$data); @@ -91,13 +92,13 @@ if ($op eq 'add_form') { my $data; if ($searchfield) { my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select host,port,db,userid,password,name,id,checked,rank,syntax,encoding from z3950servers where (name = ?) order by rank,name"); + my $sth=$dbh->prepare("select host,port,db,userid,password,name,id,checked,rank,syntax,encoding,timeout from z3950servers where (name = ?) order by rank,name"); $sth->execute($searchfield); $data=$sth->fetchrow_hashref; $sth->finish; } $template->param( $_ => $data->{$_} ) - for ( qw( host port db userid password checked rank ) ); + for ( qw( host port db userid password checked rank timeout ) ); $template->param( $_ . $data->{$_} => 1) for ( qw( syntax encoding ) ); # END $OP eq ADD_FORM @@ -110,7 +111,7 @@ if ($op eq 'add_form') { $sth->execute($input->param('searchfield')); my $checked = $input->param('checked') ? 1 : 0; if ($sth->rows) { - $sth=$dbh->prepare("update z3950servers set host=?, port=?, db=?, userid=?, password=?, name=?, checked=?, rank=?,syntax=?,encoding=? where name=?"); + $sth=$dbh->prepare("update z3950servers set host=?, port=?, db=?, userid=?, password=?, name=?, checked=?, rank=?,syntax=?,encoding=?,timeout=? where name=?"); $sth->execute($input->param('host'), $input->param('port'), $input->param('db'), @@ -121,14 +122,15 @@ if ($op eq 'add_form') { $input->param('rank'), $input->param('syntax'), $input->param('encoding'), + $input->param('timeout'), $input->param('searchfield'), ); } else { $sth=$dbh->prepare( "INSERT INTO z3950servers " . - "(host,port,db,userid,password,name,checked,rank,syntax,encoding) " . - "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" ); + "(host,port,db,userid,password,name,checked,rank,syntax,encoding,timeout) " . + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" ); $sth->execute( $input->param( 'host' ), $input->param( 'port' ), @@ -139,6 +141,7 @@ if ($op eq 'add_form') { $checked, $input->param( 'rank' ), $input->param( 'syntax' ), + $input->param( 'timeout' ), $input->param( 'encoding' ) ); } $sth->finish; @@ -149,7 +152,7 @@ if ($op eq 'add_form') { $template->param(delete_confirm => 1); my $dbh = C4::Context->dbh; - my $sth2=$dbh->prepare("select host,port,db,userid,password,name,id,checked,rank,syntax,encoding from z3950servers where (name = ?) order by rank,name"); + my $sth2=$dbh->prepare("select host,port,db,userid,password,name,id,checked,rank,syntax,encoding,timeout from z3950servers where (name = ?) order by rank,name"); $sth2->execute($searchfield); my $data=$sth2->fetchrow_hashref; $sth2->finish; @@ -162,6 +165,7 @@ if ($op eq 'add_form') { checked => $data->{'checked'}, rank => $data->{'rank'}, syntax => $data->{'syntax'}, + timeout => $data->{'timeout'}, encoding => $data->{'encoding'} ); # END $OP eq DELETE_CONFIRM @@ -192,7 +196,8 @@ if ($op eq 'add_form') { checked => $results->[$i]{'checked'}, rank => $results->[$i]{'rank'}, syntax => $results->[$i]{'syntax'}, - encoding => $results->[$i]{'encoding'}); + encoding => $results->[$i]{'encoding'}, + timeout => $results->[$i]{'timeout'}); push @loop, \%row; } diff --git a/cataloguing/z3950_search.pl b/cataloguing/z3950_search.pl index b12a9c9f3d..10320e2b25 100755 --- a/cataloguing/z3950_search.pl +++ b/cataloguing/z3950_search.pl @@ -179,6 +179,7 @@ warn "query ".$query if $DEBUG; $option1->option('user', $server->{userid} ) if $server->{userid}; $option1->option('password', $server->{password}) if $server->{password}; $option1->option('preferredRecordSyntax', $server->{syntax}); + $option1->option( 'timeout', $server->{timeout} ) if ($server->{timeout}); $oConnection[$s] = create ZOOM::Connection($option1) || $DEBUG && warn( "" . $oConnection[$s]->errmsg() ); @@ -222,7 +223,7 @@ warn "query ".$query if $DEBUG; $oConnection[$k]->error_x(); if ($error) { if ($error =~ m/^(10000|10007)$/ ) { - push(@errconn, {'server' => $serverhost[$k]}); + push(@errconn, {'server' => $serverhost[$k], 'error' => $error}); } $DEBUG and warn "$k $serverhost[$k] error $query: $errmsg ($error) $addinfo\n"; } diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index ed27d449eb..77423d17a2 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -2118,6 +2118,7 @@ CREATE TABLE `z3950servers` ( -- connection information for the Z39.50 targets u `checked` smallint(6) default NULL, -- whether this target is checked by default (1 for yes, 0 for no) `rank` int(11) default NULL, -- where this target appears in the list of targets `syntax` varchar(80) default NULL, -- marc format provided by this target + `timeout` int(11) NOT NULL DEFAULT '0', `icon` text, -- unused in Koha `position` enum('primary','secondary','') NOT NULL default 'primary', `type` enum('zed','opensearch') NOT NULL default 'zed', diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index fe0a5f7bdd..6291e47579 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -5027,6 +5027,15 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.07.00.xxx"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(qq{ + ALTER TABLE `z3950servers` ADD `timeout` INT( 11 ) NOT NULL DEFAULT '0' AFTER `syntax`; + }); + print "Upgrade to $DBversion done (New timeout field in z3950servers)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt index e1342d6f1f..9a4950bb30 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/z3950servers.tt @@ -230,6 +230,9 @@ [% END %] +
  • + seconds +
  • @@ -258,6 +261,7 @@
  • Rank: [% rank %]
  • Syntax: [% syntax %]
  • Encoding: [% encoding %]
  • +
  • Timeout: [% timeout %]
  • @@ -301,7 +305,7 @@ You searched for [% searchfield %] [% END %] - + [% FOREACH loo IN loop %] [% UNLESS ( loop.odd ) %] @@ -309,7 +313,7 @@ [% ELSE %] [% END %] - + [% END %]
    TargetHostname/PortDatabaseUseridPasswordCheckedRank SyntaxEncoding 
    TargetHostname/PortDatabaseUseridPasswordCheckedRank SyntaxEncodingTimeout 
    [% loo.name %][% loo.host %]:[% loo.port %][% loo.db %][% loo.userid %][% loo.password %][% IF ( loo.checked ) %]Yes[% ELSE %]No[% END %][% loo.rank %] [% loo.syntax %][% loo.encoding %]EditDelete
    [% loo.name %][% loo.host %]:[% loo.port %][% loo.db %][% loo.userid %][% loo.password %][% IF ( loo.checked ) %]Yes[% ELSE %]No[% END %][% loo.rank %] [% loo.syntax %][% loo.encoding %][% loo.timeout %]EditDelete
    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_search.tt index eaaadd1d6e..3a981e6507 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_search.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/z3950_search.tt @@ -166,7 +166,8 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color :
      [% FOREACH errcon IN errconn %] -
    • Connection failed to [% errcon.server %]
    • + [% IF ( errcon.error == '10000' ) %]
    • Connection failed to [% errcon.server %]
    • + [% ELSIF ( errcon.error == '10007' ) %]
    • Connection timeout to [% errcon.server %]
    • [% END %] [% END %]
    -- 2.39.5