instead of reading the MARC data directly from the socket, set the end-of-line charac...
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 8 Jul 2010 14:31:46 +0000 (14:31 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 8 Jul 2010 14:31:46 +0000 (14:31 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@16879 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/support-scripts/marc_stream_importer.pl

index 60ba741..26b180b 100755 (executable)
@@ -321,20 +321,15 @@ sub process_batch_data {
 }
 
 sub process_request {   # The core Net::Server method
-    my $self = shift;
-    my $socket = $self->{server}->{client};
-    my $data = '';
-    my $buf;
-
-    # Reading <STDIN> blocks until the client is closed.  Instead of waiting 
-    # for that, give each inbound record $wait_time seconds to fully arrive
-    # and pull the data directly from the socket
+    local $/ = "\x1D"; # MARC record separator
+    $logger->info("stream parser received contact");
+    my $data;
     eval {
-        local $SIG{ALRM} = sub { die "alarm\n" }; 
-        alarm $wait_time;
-        $data .= $buf while $socket->sysread($buf, $bufsize);
+        alarm $wait_time; # prevent accidental tie ups of backend processes
+        $data = <STDIN>;
         alarm 0;
     };
+    $logger->info("stream parser read " . length($data) . " bytes");
     if ($real_opts->{noqueue}) {
         old_process_batch_data($data);
     } else {