Re: Problem with MARC::File::XML

[email protected] (Claire Hernandez) Tue, 14 Dec 2010 17:55:17 +0100
Newsgroups perl.perl4lib
Message-ID <[email protected]>
Hi Galen,

I'll try to give more informations. You will find the patch we applied 
on wip/solr (on git.biblibre.com) attached.

I had another issue, with another sax parser:
    Malformed UTF-8 character (unexpected end of string) in substitution 
(s///) at /usr/lib/perl5/XML/LibXML/Error.pm line 217.
    problem with :84 : :61: parser error : Input is not proper UTF-8, 
indicate encoding !

I don't have any problem without this patch but we would like to improve 
performance with this call.

Sax parser used is XML::LibXML::SAX::Parser.

Do I answer to your questions?

Claire;

From:
*Galen Charlton*
Date:
December 13, 2010 06:16
Subject:
Re: Problem with MARC::File::XML
Message ID:
[email protected] 
<http://www.nntp.perl.org/group/perl.perl4lib/;msgid=AANLkTinutEc98fZq4dzz=T6HLvVyQE0nQ4=UZepQp6dd@mail.gmail.com>

Hi,

On Thu, Dec 2, 2010 at 5:09 AM, LAURENT Henri-Damien
<[email protected]>  wrote:
>  we are currently trying to use MARC::File::XML on multi threaded
>  decoding of records.
>  We are encountering erratic error of Parsing.
>    problem with :25 :
>  not well-formed (invalid token) at line 32, column 27, byte 1216 at
>  /usr/lib/perl5/XML/Parser.pm line 187
>
>  <?xml version="1.0" encoding="UTF-8"?>
>  <record
>      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>      xsi:schemaLocation="http://www.loc.gov/MARC21/slim
>  http://www.loc.gov/ standards/marcxml/schema/MARC21slim.xsd"
>      xmlns="http://www.loc.gov/MARC21/slim">
>
>    <leader>01020nam0a2200301   4500</leader>
>    <datafield tag="010" ind1=" " ind2=" ">
>
>  Has anyone ever come into such a problem ?
>  If so is there a workaround ?

Can you supply a test case?  Which SAX parser are you using?

Regards,

Galen
-- 
Galen Charlton
[email protected]
0001-SOLR-first-try-to-parrallelise-solr-call-and-data-pr.patch (text/x-patch, 1.6 KB)
From 0ea67fd8fd6c52b25ce700d21f89b1176cd0763a Mon Sep 17 00:00:00 2001
From: Claire Hernandez <[email protected]>
Date: Tue, 14 Dec 2010 16:12:05 +0100
Subject: [PATCH] [SOLR] first try to parrallelise solr call and data process

---
 C4/Search.pm |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/C4/Search.pm b/C4/Search.pm
index 7afd80f..5e1c8a5 100755
--- a/C4/Search.pm
+++ b/C4/Search.pm
@@ -2957,6 +2957,10 @@ sub IndexRecord {
     my $indexes = GetIndexes( $recordtype );
     my $sc      = GetSolrConnection;
 
+    #for fork to have less mysql errors
+    my $dbh = C4::Context->dbh;
+    $dbh->{'mysql_auto_reconnect'} = 1;
+
     my @recordpush;
     for my $id ( @$recordids ) {
         my $record;
@@ -3019,14 +3023,32 @@ sub IndexRecord {
         }
         push @recordpush, $solrrecord;
 
-        if ( @recordpush == 5000 ) {
-            $sc->add( \@recordpush );
+        if ( @recordpush == 50 ) {
+            #fork
+            my $prevrecordpush = \@recordpush;
+            push_records($prevrecordpush, $sc);
             @recordpush = ();
+            #no fork
+            #$sc->add (@recordpush);
+            #@recordpush = ();
         }
     }
     $sc->add( \@recordpush );
 }
 
+sub push_records {
+    my $records = shift;
+    my $sc = shift;
+    my $child = fork;
+    if ($child != 0) {
+        my $dbh = C4::Context->dbh;
+        $sc->add( $records );
+        exit(0)
+    }else{
+        return
+    }
+}
+
 sub NormalizeDate {
     given( shift ) {
         when( /^(\d{2}).(\d{2}).(\d{4})$/ ) { return "$3-$2-$1T00:00:00Z" }
-- 
1.7.1