X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=maintenance%2FsyncFileBackend.php;h=158019b7d0e33b4ecf38702aa1d941b57f9fd8fd;hb=a6d2365015aaa4b26729492cdc25f1a69920b2f6;hp=8f6e41929da3882b5a0e58dfd3fdc84b94e9ab62;hpb=d4bb6aedf4c909ce1858289e407eaa7b30e5190e;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/syncFileBackend.php b/maintenance/syncFileBackend.php index 8f6e41929d..158019b7d0 100644 --- a/maintenance/syncFileBackend.php +++ b/maintenance/syncFileBackend.php @@ -96,8 +96,15 @@ class SyncFileBackend extends Maintenance { $this->output( "Ending journal position is $end.\n" ); } + // Periodically update the position file + $callback = function( $pos ) use ( $startFromPosFile, $posFile, $start ) { + if ( $startFromPosFile && $pos >= $start ) { // successfully advanced + file_put_contents( $posFile, $pos, LOCK_EX ); + } + }; + // Actually sync the dest backend with the reference backend - $lastOKPos = $this->syncBackends( $src, $dst, $start, $end ); + $lastOKPos = $this->syncBackends( $src, $dst, $start, $end, $callback ); // Update the sync position file if ( $startFromPosFile && $lastOKPos >= $start ) { // successfully advanced @@ -131,9 +138,12 @@ class SyncFileBackend extends Maintenance { * @param $dst FileBackend * @param $start integer Starting journal position * @param $end integer Starting journal position + * @param $callback Closure Callback to update any position file * @return integer|false Journal entry ID or false if there are none */ - protected function syncBackends( FileBackend $src, FileBackend $dst, $start, $end ) { + protected function syncBackends( + FileBackend $src, FileBackend $dst, $start, $end, Closure $callback + ) { $lastOKPos = 0; // failed $first = true; // first batch @@ -164,6 +174,7 @@ class SyncFileBackend extends Maintenance { $status = $this->syncFileBatch( array_keys( $pathsInBatch ), $src, $dst ); if ( $status->isOK() ) { $lastOKPos = max( $lastOKPos, $lastPosInBatch ); + $callback( $lastOKPos ); // update position file } else { $this->error( print_r( $status->getErrorsArray(), true ) ); break; // no gaps; everything up to $lastPos must be OK