X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=0ce03173b2e4ef769b8313a2c23db260023f4398;hp=62df949b649442351ce489dde006b3f38fbbea4e;hb=2bf17bd083752fa42733b4ea805d54feffad2975;hpb=8b8593637f459d81a22568df1e3d3a8ff88c4e2d diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index 62df949..0ce0317 100644 --- a/lib/ZOOM/IRSpy.pm +++ b/lib/ZOOM/IRSpy.pm @@ -1,4 +1,4 @@ -# $Id: IRSpy.pm,v 1.76 2007-03-10 13:02:36 mike Exp $ +# $Id: IRSpy.pm,v 1.80 2007-03-30 09:50:55 mike Exp $ package ZOOM::IRSpy; @@ -16,7 +16,7 @@ use Net::Z3950::ZOOM 1.13; # For the ZOOM version-check only use ZOOM::IRSpy::Node; use ZOOM::IRSpy::Connection; use ZOOM::IRSpy::Stats; -use ZOOM::IRSpy::Utils qw(cql_target render_record); +use ZOOM::IRSpy::Utils qw(cql_target render_record irspy_xpath_context); our @ISA = qw(); our $VERSION = '0.02'; @@ -234,7 +234,7 @@ sub _rewrite_record { # Since IRSpy can run for a long time between writes back to the # database, it's quite possible for the server to have closed the # connection as idle. So re-establish it if necessary. - $conn->connect($conn->option("host")); + $this->{conn}->connect($conn->option("host")); _really_rewrite_record($this->{conn}, $rec); $conn->log("irspy", "rewrote XML record"); @@ -242,7 +242,7 @@ sub _rewrite_record { sub _really_rewrite_record { - my($conn, $rec) = @_; + my($conn, $rec, $oldid) = @_; my $p = $conn->package(); $p->option(action => "specialUpdate"); @@ -251,6 +251,23 @@ sub _really_rewrite_record { $p->send("update"); $p->destroy(); + # This is the expression in the ID-making stylesheet + # ../../zebra/zeerex2id.xsl + my $xc = irspy_xpath_context($rec); + my $id = $xc->find("concat(e:serverInfo/e:host, ':', + e:serverInfo/e:port, '/', + e:serverInfo/e:database)"); + if (defined $oldid && $id ne $oldid) { + # Delete old record; + warn "IDs differ (old='$oldid' new='$id')"; + my $p = $conn->package(); + $p->option(action => "recordDelete"); + $p->option(recordIdOpaque => $oldid); + $p->option(record => ""); # Work around Zebra bug + $p->send("update"); + $p->destroy(); + } + $p = $conn->package(); $p->send("commit"); $p->destroy(); @@ -469,11 +486,10 @@ sub check { } $this->log("irspy", "exiting main loop"); - return $nskipped; # Sanity-checks don't work if conns are closed # Sanity checks: none of the following should ever happen my $finished = 1; - @conn = @{ $this->{connections} }; + $this->log("irspy", "performing end-of-run sanity-checks"); foreach my $conn (@conn) { my $test = $conn->option("current_test_address"); my $next = $this->_next_test($test);