Bug 5228 - make rebuild_zebra handle fixing the zebra dirs
authorRobin Sheat <robin@catalyst.net.nz>
Thu, 16 Sep 2010 07:08:57 +0000 (19:08 +1200)
committerChris Nighswonger <chris.nighswonger@gmail.com>
Wed, 15 Dec 2010 02:35:53 +0000 (21:35 -0500)
If the zebra server directories don't exist, zebra will spit the dummy.
This makes rebuild_zebra.pl smart enough to create them if they're not
there. If that fails, it'll scream loudly so you know zebra isn't
reindexing.

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
(cherry picked from commit 8de1ef7e94b37f343b5a1896b1ab06950ee83530)

Signed-off-by: Chris Nighswonger <chris.nighswonger@gmail.com>
misc/migration_tools/rebuild_zebra.pl

index 239d953..bd11494 100755 (executable)
@@ -130,13 +130,13 @@ if ($do_munge) {
 }
 
 if ($authorities) {
-    index_records('authority', $directory, $skip_export, $process_zebraqueue, $as_xml, $noxml, $nosanitize, $do_not_clear_zebraqueue, $verbose_logging, $zebraidx_log_opt);
+    index_records('authority', $directory, $skip_export, $process_zebraqueue, $as_xml, $noxml, $nosanitize, $do_not_clear_zebraqueue, $verbose_logging, $zebraidx_log_opt, $authorityserverdir);
 } else {
     print "skipping authorities\n" if ( $verbose_logging );
 }
 
 if ($biblios) {
-    index_records('biblio', $directory, $skip_export, $process_zebraqueue, $as_xml, $noxml, $nosanitize, $do_not_clear_zebraqueue, $verbose_logging, $zebraidx_log_opt);
+    index_records('biblio', $directory, $skip_export, $process_zebraqueue, $as_xml, $noxml, $nosanitize, $do_not_clear_zebraqueue, $verbose_logging, $zebraidx_log_opt, $biblioserverdir);
 } else {
     print "skipping biblios\n" if ( $verbose_logging );
 }
@@ -168,11 +168,34 @@ if ($keep_export) {
     }
 }
 
+# This checks to see if the zebra directories exist under the provided path.
+# If they don't, then zebra is likely to spit the dummy. This returns true
+# if the directories had to be created, false otherwise.
+sub check_zebra_dirs {
+       my ($base) = shift() . '/';
+       my $needed_repairing = 0;
+       my @dirs = ( '', 'key', 'register', 'shadow' );
+       foreach my $dir (@dirs) {
+               my $bdir = $base . $dir;
+        if (! -d $bdir) {
+               $needed_repairing = 1;
+               mkdir $bdir || die "Unable to create '$bdir': $!\n";
+               print "$0: needed to create '$bdir'\n";
+        }
+    }
+    return $needed_repairing;
+}      # ----------  end of subroutine check_zebra_dirs  ----------
+
 sub index_records {
-    my ($record_type, $directory, $skip_export, $process_zebraqueue, $as_xml, $noxml, $nosanitize, $do_not_clear_zebraqueue, $verbose_logging, $zebraidx_log_opt) = @_;
+    my ($record_type, $directory, $skip_export, $process_zebraqueue, $as_xml, $noxml, $nosanitize, $do_not_clear_zebraqueue, $verbose_logging, $zebraidx_log_opt, $server_dir) = @_;
 
     my $num_records_exported = 0;
     my $num_records_deleted = 0;
+    my $need_reset = check_zebra_dirs($server_dir);
+    if ($need_reset) {
+       print "$0: found broken zebra server directories: forcing a rebuild\n";
+       $reset = 1;
+    }
     if ($skip_export && $verbose_logging) {
         print "====================\n";
         print "SKIPPING $record_type export\n";
@@ -224,6 +247,7 @@ sub index_records {
     }
 }
 
+
 sub select_zebraqueue_records {
     my ($record_type, $update_type) = @_;