/[webpac2]/trunk/run.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/run.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 493 by dpavlin, Sun May 14 13:42:48 2006 UTC revision 765 by dpavlin, Wed Oct 25 21:01:51 2006 UTC
# Line 4  use strict; Line 4  use strict;
4    
5  use Cwd qw/abs_path/;  use Cwd qw/abs_path/;
6  use File::Temp qw/tempdir/;  use File::Temp qw/tempdir/;
 use Data::Dumper;  
7  use lib './lib';  use lib './lib';
8    
9  use WebPAC::Common 0.02;  use WebPAC::Common 0.02;
10  use WebPAC::Lookup;  use WebPAC::Parser 0.08;
11  use WebPAC::Input 0.03;  use WebPAC::Input 0.14;
12  use WebPAC::Store 0.03;  use WebPAC::Store 0.14;
13  use WebPAC::Normalize::XML;  use WebPAC::Normalize 0.22;
 use WebPAC::Normalize::Set;  
14  use WebPAC::Output::TT;  use WebPAC::Output::TT;
15  use YAML qw/LoadFile/;  use WebPAC::Validate 0.06;
16    use WebPAC::Output::MARC;
17    use WebPAC::Config;
18  use Getopt::Long;  use Getopt::Long;
19  use File::Path;  use File::Path;
20  use Time::HiRes qw/time/;  use Time::HiRes qw/time/;
21  use File::Slurp;  use File::Slurp;
22    use Data::Dump qw/dump/;
23    use Storable qw/dclone/;
24    
25    use Proc::Queue size => 1;
26    use POSIX ":sys_wait_h"; # imports WNOHANG
27    
28  =head1 NAME  =head1 NAME
29    
# Line 42  limit loading to 100 records Line 47  limit loading to 100 records
47    
48  remove database and Hyper Estraier index before indexing  remove database and Hyper Estraier index before indexing
49    
50  =item --only=database_name  =item --only=database_name/input_filter
51    
52  reindex just single database (legacy name is --one)  reindex just single database (legacy name is --one)
53    
54    C</input_filter> is optional part which can be C<name>
55    or C<type> from input
56    
57  =item --config conf/config.yml  =item --config conf/config.yml
58    
59  path to YAML configuration file  path to YAML configuration file
60    
61  =item --force-set  =item --stats
62    
63    disable indexing, modify_* in configuration and dump statistics about field
64    and subfield usage for each input
65    
66    =item --validate path/to/validation_file
67    
68    turn on extra validation of imput records, see L<WebPAC::Validation>
69    
70    =item --marc-lint
71    
72    By default turned on if normalisation file has C<marc*> directives. You can disable lint
73    messages with C<--no-marc-lint>.
74    
75    =item --marc-dump
76    
77    Force dump or input and marc record for debugging.
78    
79  force conversion C<normalize->path> in C<config.yml> from  =item --parallel 4
80  C<.xml> to C<.pl>  
81    Run databases in parallel (aproximatly same as number of processors in
82    machine if you want to use full load)
83    
84    =item --only-links
85    
86    Create just links
87    
88    =item --merge
89    
90    Create merged index of databases which have links
91    
92  =back  =back
93    
# Line 63  my $offset; Line 97  my $offset;
97  my $limit;  my $limit;
98    
99  my $clean = 0;  my $clean = 0;
100  my $config = 'conf/config.yml';  my $config_path;
101  my $debug = 0;  my $debug = 0;
102  my $only_db_name;  my $only_filter;
103  my $force_set = 0;  my $stats = 0;
104    my $validate_path;
105    my $marc_lint = 1;
106    my $marc_dump = 0;
107    my $parallel = 0;
108    my $only_links = 0;
109    my $merge = 0;
110    
111    my $log = _new WebPAC::Common()->_get_logger();
112    
113  GetOptions(  GetOptions(
114          "limit=i" => \$limit,          "limit=i" => \$limit,
115          "offset=i" => \$offset,          "offset=i" => \$offset,
116          "clean" => \$clean,          "clean" => \$clean,
117          "one=s" => \$only_db_name,          "one=s" => \$only_filter,
118          "only=s" => \$only_db_name,          "only=s" => \$only_filter,
119          "config" => \$config,          "config" => \$config_path,
120          "debug" => \$debug,          "debug+" => \$debug,
121          "force-set" => \$force_set,          "stats" => \$stats,
122            "validate=s" => \$validate_path,
123            "marc-lint!" => \$marc_lint,
124            "marc-dump!" => \$marc_dump,
125            "parallel=i" => \$parallel,
126            "only-links!" => \$only_links,
127            "merge" => \$merge,
128  );  );
129    
130  $config = LoadFile($config);  my $config = new WebPAC::Config( path => $config_path );
131    
132  print "config = ",Dumper($config) if ($debug);  #print "config = ",dump($config) if ($debug);
133    
134  die "no databases in config file!\n" unless ($config->{databases});  die "no databases in config file!\n" unless ($config->databases);
135    
136  my $log = _new WebPAC::Common()->_get_logger();  $log->info( "-" x 79 );
137    
138  my $use_indexer = $config->{use_indexer} || 'hyperestraier';  
139  $log->info("using $use_indexer indexing engine...");  my $estcmd_fh;
140    my $estcmd_path = './estcmd-merge.sh';
141    if ($merge) {
142            open($estcmd_fh, '>', $estcmd_path) || $log->logdie("can't open $estcmd_path: $!");
143            print $estcmd_fh 'cd /data/estraier/_node/ || exit 1',$/;
144            print $estcmd_fh 'sudo /etc/init.d/hyperestraier stop',$/;
145            $log->info("created merge batch file $estcmd_path");
146    }
147    
148    
149    my $validate;
150    $validate = new WebPAC::Validate(
151            path => $validate_path,
152    ) if ($validate_path);
153    
154    
155    my $use_indexer = $config->use_indexer;
156    if ($stats) {
157            $log->debug("option --stats disables update of indexing engine...");
158            $use_indexer = undef;
159    } else {
160            $log->info("using $use_indexer indexing engine...");
161    }
162    
163    # parse normalize files and create source files for lookup and normalization
164    
165    my $parser = new WebPAC::Parser( config => $config );
166    
167  my $total_rows = 0;  my $total_rows = 0;
168  my $start_t = time();  my $start_t = time();
169    
170  while (my ($database, $db_config) = each %{ $config->{databases} }) {  my @links;
171    
172    if ($parallel) {
173            $log->info("Using $parallel processes for speedup");
174            Proc::Queue::size($parallel);
175    }
176    
177    sub create_ds_config {
178            my ($db_config, $database, $input, $mfn) = @_;
179            my $c = dclone( $db_config );
180            $c->{_} = $database || $log->logconfess("need database");
181            $c->{_mfn} = $mfn || $log->logconfess("need mfn");
182            $c->{input} = $input || $log->logconfess("need input");
183            return $c;
184    }
185    
186    while (my ($database, $db_config) = each %{ $config->databases }) {
187    
188          next if ($only_db_name && $database !~ m/$only_db_name/i);          my ($only_database,$only_input) = split(m#/#, $only_filter) if ($only_filter);
189            next if ($only_database && $database !~ m/$only_database/i);
190    
191            if ($parallel) {
192                    my $f=fork;
193                    if(defined ($f) and $f==0) {
194                            $log->info("Created processes $$ for speedup");
195                    } else {
196                            next;
197                    }
198            }
199    
200          my $indexer;          my $indexer;
201            if ($use_indexer && $parser->have_rules( 'search', $database )) {
202    
203          my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");                  my $cfg_name = $use_indexer;
204          $indexer_config->{database} = $database;                  $cfg_name =~ s/\-.*$//;
         $indexer_config->{clean} = $clean;  
         $indexer_config->{label} = $db_config->{name};  
   
         # important: clean database just once!  
         $clean = 0;  
   
         if ($use_indexer eq 'hyperestraier') {  
   
                 # open Hyper Estraier database  
                 use WebPAC::Output::Estraier '0.10';  
                 $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );  
           
         } elsif ($use_indexer eq 'kinosearch') {  
205    
206                  # open KinoSearch                  my $indexer_config = $config->get( $cfg_name ) || $log->logdie("can't find '$cfg_name' part in confguration");
207                  use WebPAC::Output::KinoSearch;                  $indexer_config->{database} = $database;
208                  $indexer_config->{clean} = 1 unless (-e $indexer_config->{index_path});                  $indexer_config->{clean} = $clean;
209                  $indexer = new WebPAC::Output::KinoSearch( %{ $indexer_config } );                  $indexer_config->{label} = $db_config->{name};
210    
211          } else {                  # force clean if database has links
212                  $log->logdie("unknown use_indexer: $use_indexer");                  $indexer_config->{clean} = 1 if ($db_config->{links});
213    
214                    if ($use_indexer eq 'hyperestraier') {
215    
216                            # open Hyper Estraier database
217                            use WebPAC::Output::Estraier '0.10';
218                            $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );
219                    
220                    } elsif ($use_indexer eq 'hyperestraier-native') {
221    
222                            # open Hyper Estraier database
223                            use WebPAC::Output::EstraierNative;
224                            $indexer = new WebPAC::Output::EstraierNative( %{ $indexer_config } );
225    
226                    } elsif ($use_indexer eq 'kinosearch') {
227    
228                            # open KinoSearch
229                            use WebPAC::Output::KinoSearch;
230                            $indexer_config->{clean} = 1 unless (-e $indexer_config->{index_path});
231                            $indexer = new WebPAC::Output::KinoSearch( %{ $indexer_config } );
232    
233                    } else {
234                            $log->logdie("unknown use_indexer: $use_indexer");
235                    }
236    
237                    $log->logide("can't continue without valid indexer") unless ($indexer);
238            }
239    
240    
241            #
242            # store Hyper Estraier links to other databases
243            #
244            if (ref($db_config->{links}) eq 'ARRAY' && $use_indexer) {
245                    foreach my $link (@{ $db_config->{links} }) {
246                            if ($use_indexer eq 'hyperestraier') {
247                                    if ($merge) {
248                                            print $estcmd_fh 'sudo -u www-data estcmd merge ' . $database . ' ' . $link->{to},$/;
249                                    } else {
250                                            $log->info("saving link $database -> $link->{to} [$link->{credit}]");
251                                            push @links, sub {
252                                                    $log->info("adding link $database -> $link->{to} [$link->{credit}]");
253                                                    $indexer->add_link(
254                                                            from => $database,
255                                                            to => $link->{to},
256                                                            credit => $link->{credit},
257                                                    );
258                                            };
259                                    }
260                            } else {
261                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
262                            }
263                    }
264          }          }
265            next if ($only_links);
266    
         $log->logide("can't continue without valid indexer") unless ($indexer);  
267    
268          #          #
269          # now WebPAC::Store          # now WebPAC::Store
# Line 132  while (my ($database, $db_config) = each Line 271  while (my ($database, $db_config) = each
271          my $abs_path = abs_path($0);          my $abs_path = abs_path($0);
272          $abs_path =~ s#/[^/]*$#/#;          $abs_path =~ s#/[^/]*$#/#;
273    
274          my $db_path = $config->{webpac}->{db_path} . '/' . $database;          my $db_path = $config->webpac('db_path');
275    
276          if ($clean) {          if ($clean) {
277                  $log->info("creating new database $database in $db_path");                  $log->info("creating new database '$database' in $db_path");
278                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");
279          } else {          } else {
280                  $log->debug("working on $database in $db_path");                  $log->info("working on database '$database' in $db_path");
281          }          }
282    
283          my $db = new WebPAC::Store(          my $store = new WebPAC::Store(
284                  path => $db_path,                  path => $db_path,
                 database => $database,  
285                  debug => $debug,                  debug => $debug,
286          );          );
287    
# Line 161  while (my ($database, $db_config) = each Line 299  while (my ($database, $db_config) = each
299                  $log->info("database $database doesn't have inputs defined");                  $log->info("database $database doesn't have inputs defined");
300          }          }
301    
         my @supported_inputs = keys %{ $config->{webpac}->{inputs} };  
   
302          foreach my $input (@inputs) {          foreach my $input (@inputs) {
303    
304                    my $input_name = $input->{name} || $log->logdie("input without a name isn't valid: ",dump($input));
305    
306                    next if ($only_input && ($input_name !~ m#$only_input#i && $input->{type} !~ m#$only_input#i));
307    
308                  my $type = lc($input->{type});                  my $type = lc($input->{type});
309    
310                  die "I know only how to handle input types ", join(",", @supported_inputs), " not '$type'!\n" unless (grep(/$type/, @supported_inputs));                  die "I know only how to handle input types ", join(",", $config->webpac('inputs') ), " not '$type'!\n" unless (grep(/$type/, $config->webpac('inputs')));
311    
312                  my $lookup = new WebPAC::Lookup(                  my $input_module = $config->webpac('inputs')->{$type};
                         lookup_file => $input->{lookup},  
                 );  
313    
314                  my $input_module = $config->{webpac}->{inputs}->{$type};                  my @lookups = $parser->have_lookup_create($database, $input);
315    
316                    $log->info("working on input '$input_name' in $input->{path} [type: $input->{type}] using $input_module",
317                            @lookups ? " creating lookups: ".join(", ", @lookups) : ""
318                    );
319    
320                  $log->info("working on input '$input->{path}' [$input->{type}] using $input_module lookup '$input->{lookup}'");                  if ($stats) {
321                            # disable modification of records if --stats is in use
322                            delete($input->{modify_records});
323                            delete($input->{modify_file});
324                    }
325    
326                  my $input_db = new WebPAC::Input(                  my $input_db = new WebPAC::Input(
327                          module => $input_module,                          module => $input_module,
328                          code_page => $config->{webpac}->{webpac_encoding},                          encoding => $config->webpac('webpac_encoding'),
329                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
330                          offset => $offset,                          offset => $offset,
                         lookup => $lookup,  
331                          recode => $input->{recode},                          recode => $input->{recode},
332                            stats => $stats,
333                            modify_records => $input->{modify_records},
334                            modify_file => $input->{modify_file},
335                  );                  );
336                  $log->logdie("can't create input using $input_module") unless ($input);                  $log->logdie("can't create input using $input_module") unless ($input);
337    
338                    if (defined( $input->{lookup} )) {
339                            $log->warn("$database/$input_name has depriciated lookup definition, removing it...");
340                            delete( $input->{lookup} );
341                    }
342    
343                    my $lookup_coderef;
344    
345                    if (@lookups) {
346    
347                            my $rules = $parser->lookup_create_rules($database, $input) || $log->logdie("no rules found for $database/$input");
348    
349                            $lookup_coderef = sub {
350                                    my $rec = shift || die "need rec!";
351                                    my $mfn = $rec->{'000'}->[0] || die "need mfn in 000";
352    
353                                    WebPAC::Normalize::data_structure(
354                                            row => $rec,
355                                            rules => $rules,
356                                            config => create_ds_config( $db_config, $database, $input, $mfn ),
357                                    );
358    
359                                    #warn "current lookup: ", dump(WebPAC::Normalize::_get_lookup());
360                            };
361    
362                            WebPAC::Normalize::_set_lookup( undef );
363    
364                            $log->debug("created lookup_coderef using:\n$rules");
365    
366                    };
367    
368                    my $lookup_jar;
369    
370                  my $maxmfn = $input_db->open(                  my $maxmfn = $input_db->open(
371                          path => $input->{path},                          path => $input->{path},
372                          code_page => $input->{encoding},        # database encoding                          code_page => $input->{encoding},        # database encoding
373                  );                          lookup_coderef => $lookup_coderef,
374                            lookup => $lookup_jar,
375                            %{ $input },
376                            load_row => sub {
377                                    my $a = shift;
378                                    return $store->load_row(
379                                            database => $database,
380                                            input => $input_name,
381                                            id => $a->{id},
382                                    );
383                            },
384                            save_row => sub {
385                                    my $a = shift;
386                                    return $store->save_row(
387                                            database => $database,
388                                            input => $input_name,
389                                            id => $a->{id},
390                                            row => $a->{row},
391                                    );
392                            },
393    
                 my $n = new WebPAC::Normalize::XML(  
                 #       filter => { 'foo' => sub { shift } },  
                         db => $db,  
                         lookup_regex => $lookup->regex,  
                         lookup => $lookup,  
                         prefix => $input->{name},  
394                  );                  );
395    
396                  my $rules;                  my $lookup_data = WebPAC::Normalize::_get_lookup();
                 my $normalize_path = $input->{normalize}->{path};  
397    
398                  if ($force_set) {                  if (defined( $lookup_data->{$database}->{$input_name} )) {
399                          my $new_norm_path = $normalize_path;                          $log->debug("created following lookups: ", sub { dump( $lookup_data ) } );
400                          $new_norm_path =~ s/\.xml$/.pl/;  
401                          if (-e $new_norm_path) {                          foreach my $key (keys %{ $lookup_data->{$database}->{$input_name} }) {
402                                  $log->debug("--force-set replaced $normalize_path with $new_norm_path");                                  $store->save_lookup(
403                                  $normalize_path = $new_norm_path;                                          database => $database,
404                          } else {                                          input => $input_name,
405                                  $log->debug("--force-set failed on $new_norm_path, fallback to $normalize_path");                                          key => $key,
406                                            data => $lookup_data->{$database}->{$input_name}->{$key},
407                                    );
408                          }                          }
409                  }                  }
410    
411                  if ($normalize_path =~ m/\.xml$/i) {                  my $report_fh;
412                          $n->open(                  if ($stats || $validate) {
413                                  tag => $input->{normalize}->{tag},                          my $path = "out/report/${database}-${input_name}.txt";
414                                  xml_file => $normalize_path,                          open($report_fh, '>', $path) || $log->logdie("can't open $path: $!");
415                          );  
416                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {                          print $report_fh "Report for database '$database' input '$input_name' records ",
417                          $n->open_yaml(                                  $offset || 1, "-", $limit || $input->{limit} || $maxmfn, "\n\n";
418                                  path => $normalize_path,                          $log->info("Generating report file $path");
419                                  tag => $input->{normalize}->{tag},                  }
420    
421                    my $marc;
422                    if ($parser->have_rules( 'marc', $database, $input_name )) {
423                            $marc = new WebPAC::Output::MARC(
424                                    path => "out/marc/${database}-${input_name}.marc",
425                                    lint => $marc_lint,
426                                    dump => $marc_dump,
427                          );                          );
                 } elsif ($normalize_path =~ m/\.(?:pl)$/i) {  
                         $n = undef;  
                         $log->info("using WebPAC::Normalize::Set to process $normalize_path");  
                         $rules = read_file( $normalize_path ) or die "can't open $normalize_path: $!";  
428                  }                  }
429    
430                    my $rules = $parser->normalize_rules($database,$input_name) || $log->logdie("no normalize rules found for $database/$input_name");
431                    $log->debug("parsed normalize rules:\n$rules");
432    
433                    # reset position in database
434                    $input_db->seek(1);
435    
436                    # generate name of config key for indexer (strip everything after -)
437                    my $indexer_config = $use_indexer;
438                    $indexer_config =~ s/^(\w+)-?.*$/$1/g if ($indexer_config);
439    
440                    my $lookup_hash;
441                    my $depends = $parser->depends($database,$input_name);
442            
443                    if ($depends) {
444                            $log->debug("$database/$input_name depends on: ", dump($depends)) if ($depends);
445                            $log->logdie("parser->depends didn't return HASH") unless (ref($depends) eq 'HASH');
446    
447                            foreach my $db (keys %$depends) {
448                                    foreach my $i (keys %{$depends->{$db}}) {
449                                            foreach my $k (keys %{$depends->{$db}->{$i}}) {
450                                                    my $t = time();
451                                                    $log->debug("loading lookup $db/$i");
452                                                    $lookup_hash->{$db}->{$i}->{$k} = $store->load_lookup(
453                                                            database => $db,
454                                                            input => $i,
455                                                            key => $k,
456                                                    );
457                                                    $log->debug(sprintf("lookup $db/$i took %.2fs", time() - $t));
458                                            }
459                                    }
460                            }
461    
462                            $log->debug("lookup_hash = ", sub { dump( $lookup_hash ) });
463                    }
464    
465    
466                  foreach my $pos ( 0 ... $input_db->size ) {                  foreach my $pos ( 0 ... $input_db->size ) {
467    
468                          my $row = $input_db->fetch || next;                          my $row = $input_db->fetch || next;
# Line 242  while (my ($database, $db_config) = each Line 475  while (my ($database, $db_config) = each
475                                  push @{ $row->{'000'} }, $pos;                                  push @{ $row->{'000'} }, $pos;
476                          }                          }
477    
478                          my $ds = $n ? $n->data_structure($row) :  
479                                  WebPAC::Normalize::Set::data_structure(                          if ($validate) {
480                                          row => $row,                                  if ( my $errors = $validate->validate_errors( $row, $input_db->dump ) ) {
481                                          rules => $rules,                                          $log->error( "MFN $mfn validation error:\n",
482                                          lookup => $lookup->lookup_hash,                                                  $validate->report_error( $errors )
483                                  );                                          );
484                                    }
485                            }
486    
487                            my $ds = WebPAC::Normalize::data_structure(
488                                    row => $row,
489                                    rules => $rules,
490                                    lookup => $lookup_hash,
491                                    config => create_ds_config( $db_config, $database, $input, $mfn ),
492                                    marc_encoding => 'utf-8',
493                                    load_row_coderef => sub {
494                                            my ($database,$input,$mfn) = @_;
495                                            return $store->load_row(
496                                                    database => $database,
497                                                    input => $input,
498                                                    id => $mfn,
499                                            );
500                                    },
501                            );
502    
503                            $log->debug("ds = ", sub { dump($ds) }) if ($ds);
504    
505                            $store->save_ds(
506                                    database => $database,
507                                    input => $input_name,
508                                    id => $mfn,
509                                    ds => $ds,
510                            ) if ($ds && !$stats);
511    
512                          $indexer->add(                          $indexer->add(
513                                  id => $input->{name} . "/" . $mfn,                                  id => "${input_name}/${mfn}",
514                                  ds => $ds,                                  ds => $ds,
515                                  type => $config->{$use_indexer}->{type},                                  type => $config->get($indexer_config)->{type},
516                          );                          ) if ($indexer && $ds);
517    
518                            if ($marc) {
519                                    my $i = 0;
520    
521                                    while (my $fields = WebPAC::Normalize::_get_marc_fields( fetch_next => 1 ) ) {
522                                            $marc->add(
523                                                    id => $mfn . ( $i ? "/$i" : '' ),
524                                                    fields => $fields,
525                                                    leader => WebPAC::Normalize::marc_leader(),
526                                                    row => $row,
527                                            );
528                                            $i++;
529                                    }
530    
531                                    $log->info("Created $i instances of MFN $mfn\n") if ($i > 1);
532                            }
533    
534                          $total_rows++;                          $total_rows++;
535                  }                  }
536    
537          };                  if ($validate) {
538                            my $errors = $validate->report;
539                            if ($errors) {
540                                    $log->info("validation errors:\n$errors\n" );
541                                    print $report_fh "$errors\n" if ($report_fh);
542                            }
543                    }
544    
545                    if ($stats) {
546                            my $s = $input_db->stats;
547                            $log->info("statistics of fields usage:\n$s");
548                            print $report_fh "Statistics of fields usage:\n$s" if ($report_fh);
549                    }
550    
551                    # close MARC file
552                    $marc->finish if ($marc);
553    
554                    # close report
555                    close($report_fh) if ($report_fh)
556    
557          eval { $indexer->finish } if ($indexer->can('finish'));          }
558    
559            eval { $indexer->finish } if ($indexer && $indexer->can('finish'));
560    
561          my $dt = time() - $start_t;          my $dt = time() - $start_t;
562          $log->info("$total_rows records indexed in " .          $log->info("$total_rows records ", $indexer ? "indexed " : "",
563                  sprintf("%.2f sec [%.2f rec/sec]",                  sprintf("in %.2f sec [%.2f rec/sec]",
564                          $dt, ($total_rows / $dt)                          $dt, ($total_rows / $dt)
565                  )                  )
566          );          );
567    
568          #  
569          # add Hyper Estraier links to other databases          # end forked process
570          #          if ($parallel) {
571          if (ref($db_config->{links}) eq 'ARRAY') {                  $log->info("parallel process $$ finished");
572                  foreach my $link (@{ $db_config->{links} }) {                  exit(0);
                         if ($use_indexer eq 'hyperestraier') {  
                                 $log->info("adding link $database -> $link->{to} [$link->{credit}]");  
                                 $indexer->add_link(  
                                         from => $database,  
                                         to => $link->{to},  
                                         credit => $link->{credit},  
                                 );  
                         } else {  
                                 $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");  
                         }  
                 }  
573          }          }
574    
575  }  }
576    
577    if ($parallel) {
578            # wait all children to finish
579            sleep(1) while wait != -1;
580            $log->info("all parallel processes finished");
581    }
582    
583    #
584    # handle links or merge after indexing
585    #
586    
587    if ($merge) {
588            print $estcmd_fh 'sudo /etc/init.d/hyperestraier start',$/;
589            close($estcmd_fh);
590            chmod 0700, $estcmd_path || $log->warn("can't chmod 0700 $estcmd_path: $!");
591            system $estcmd_path;
592    } else {
593            foreach my $link (@links) {
594                    $log->logdie("coderef in link ", Dumper($link), " is ", ref($link), " and not CODE") unless (ref($link) eq 'CODE');
595                    $link->();
596            }
597    }

Legend:
Removed from v.493  
changed lines
  Added in v.765

  ViewVC Help
Powered by ViewVC 1.1.26