| Lines 14-19
          use C4::Items;
      
      
        Link Here | 
        
          | 14 | use Koha::RecordProcessor; | 14 | use Koha::RecordProcessor; | 
        
          | 15 | use XML::LibXML; | 15 | use XML::LibXML; | 
        
          | 16 |  | 16 |  | 
            
              |  |  | 17 | use constant LOCK_FILENAME => 'rebuild..LCK'; | 
            
              | 18 |  | 
        
          | 17 | # script that checks zebradir structure & create directories & mandatory files if needed | 19 | # script that checks zebradir structure & create directories & mandatory files if needed | 
        
          | 18 | # | 20 | # | 
        
          | 19 | # | 21 | # | 
  
    | Lines 161-173
          my ($biblioitemnumbertagfield,$biblioitemnumbertagsubfield) = &GetMarcFromKohaFi
      
      
        Link Here | 
        
          | 161 | # does not exist and cannot be created, we fall back on /tmp - which will | 163 | # does not exist and cannot be created, we fall back on /tmp - which will | 
        
          | 162 | # always work. | 164 | # always work. | 
        
          | 163 |  | 165 |  | 
          
            
              | 164 | my $lockdir = C4::Context->config("zebra_lockdir") // "/var/lock"; | 166 | my ($lockfile, $LockFH); | 
            
              | 165 | $lockdir .= "/rebuild"; | 167 | foreach( C4::Context->config("zebra_lockdir"), "/var/lock/zebra_".C4::Context->config('database'), "/tmp/zebra_".C4::Context->config('database') ) { | 
            
              | 166 | unless (-d $lockdir) { | 168 |     #we try three possibilities (we really want to lock :) | 
            
              | 167 |     eval { mkpath($lockdir, 0, oct(755)) }; | 169 |     next if !$_; | 
            
              | 168 |     $lockdir = "/tmp" if ($@); | 170 |     ($LockFH, $lockfile) = _create_lockfile($_.'/rebuild'); | 
            
              | 169 | } | 171 |     last if defined $LockFH; | 
            
              | 170 | my $lockfile = $lockdir . "/rebuild..LCK"; | 172 | } | 
            
              |  |  | 173 | if( !defined $LockFH ) { | 
            
              | 174 |     print "WARNING: Could not create lock file $lockfile: $!\n"; | 
            
              | 175 |     print "Please check your koha-conf.xml for ZEBRA_LOCKDIR.\n"; | 
            
              | 176 |     print "Verify file permissions for it too.\n"; | 
            
              | 177 |     $use_flock=0; #we disable file locking now and will continue without it | 
            
              | 178 |         #note that this mimics old behavior (before we used the lockfile) | 
            
              | 179 | }; | 
        
          | 171 |  | 180 |  | 
        
          | 172 | if ( $verbose_logging ) { | 181 | if ( $verbose_logging ) { | 
        
          | 173 |     print "Zebra configuration information\n"; | 182 |     print "Zebra configuration information\n"; | 
  
    | Lines 175-181
          if ( $verbose_logging ) {
      
      
        Link Here | 
        
          | 175 |     print "Zebra biblio directory      = $biblioserverdir\n"; | 184 |     print "Zebra biblio directory      = $biblioserverdir\n"; | 
        
          | 176 |     print "Zebra authorities directory = $authorityserverdir\n"; | 185 |     print "Zebra authorities directory = $authorityserverdir\n"; | 
        
          | 177 |     print "Koha directory              = $kohadir\n"; | 186 |     print "Koha directory              = $kohadir\n"; | 
          
            
              | 178 |     print "Lockfile                    = $lockfile\n"; | 187 |     print "Lockfile                    = $lockfile\n" if $lockfile; | 
        
          | 179 |     print "BIBLIONUMBER in :     $biblionumbertagfield\$$biblionumbertagsubfield\n"; | 188 |     print "BIBLIONUMBER in :     $biblionumbertagfield\$$biblionumbertagsubfield\n"; | 
        
          | 180 |     print "BIBLIOITEMNUMBER in : $biblioitemnumbertagfield\$$biblioitemnumbertagsubfield\n"; | 189 |     print "BIBLIOITEMNUMBER in : $biblioitemnumbertagfield\$$biblioitemnumbertagsubfield\n"; | 
        
          | 181 |     print "================================\n"; | 190 |     print "================================\n"; | 
  
    | Lines 194-200
          my $tester = XML::LibXML->new();
      
      
        Link Here | 
        
          | 194 | # to prevent the potential for a infinite backlog from cron invocations, but an | 203 | # to prevent the potential for a infinite backlog from cron invocations, but an | 
        
          | 195 | # option (wait-for-lock) is provided to let the program wait for the lock. | 204 | # option (wait-for-lock) is provided to let the program wait for the lock. | 
        
          | 196 | # See http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=11078 for details. | 205 | # See http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=11078 for details. | 
            
              | 197 | open my $LockFH, q{>}, $lockfile or die "$lockfile: $!"; |  |  | 
        
          | 198 | if ($daemon_mode) { | 206 | if ($daemon_mode) { | 
        
          | 199 |     while (1) { | 207 |     while (1) { | 
        
          | 200 |         # For incremental updates, skip the update if the updates are locked | 208 |         # For incremental updates, skip the update if the updates are locked | 
  
    | Lines 210-218
          if ($daemon_mode) {
      
      
        Link Here | 
        
          | 210 |     if (_flock($LockFH, $lock_mode)) { | 218 |     if (_flock($LockFH, $lock_mode)) { | 
        
          | 211 |         do_one_pass(); | 219 |         do_one_pass(); | 
        
          | 212 |         _flock($LockFH, LOCK_UN); | 220 |         _flock($LockFH, LOCK_UN); | 
          
            
              | 213 |     } else { | 221 |     } | 
            
              | 214 |         # Can't die() here because we have files to dlean up. | 222 |     else { | 
            
              | 215 |         print "Aborting rebuild.  Unable to flock $lockfile: $!\n"; | 223 |         print "Skipping rebuild/update because flock failed on $lockfile: $!\n"; | 
        
          | 216 |     } | 224 |     } | 
        
          | 217 | } | 225 | } | 
        
          | 218 |  | 226 |  | 
  
    | Lines 787-792
          sub _flock {
      
      
        Link Here | 
        
          | 787 |     } | 795 |     } | 
        
          | 788 | } | 796 | } | 
        
          | 789 |  | 797 |  | 
            
              |  |  | 798 | sub _create_lockfile { #returns undef on failure | 
            
              | 799 |     my $dir= shift; | 
            
              | 800 |     unless (-d $dir) { | 
            
              | 801 |         eval { mkpath($dir, 0, oct(755)) }; | 
            
              | 802 |         return if $@; | 
            
              | 803 |     } | 
            
              | 804 |     return if !open my $fh, q{>}, $dir.'/'.LOCK_FILENAME; | 
            
              | 805 |     return ( $fh, $dir.'/'.LOCK_FILENAME ); | 
            
              | 806 | } | 
            
              | 807 |  | 
        
          | 790 | sub print_usage { | 808 | sub print_usage { | 
        
          | 791 |     print <<_USAGE_; | 809 |     print <<_USAGE_; | 
        
          | 792 | $0: reindex MARC bibs and/or authorities in Zebra. | 810 | $0: reindex MARC bibs and/or authorities in Zebra. | 
            
              | 793 | -  |  |  |