X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Ffilebackend%2FFileBackendStore.php;h=ce4deddf9af5435f2ce146b23e74db65d23155e8;hb=9a4968a2bab4104a0bff7da5771a271b95df00bf;hp=57760137c22303c70b8d2fa1546a98908446a4c2;hpb=957adbef22cabe18bbbe56258470979825d10108;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/filebackend/FileBackendStore.php b/includes/filebackend/FileBackendStore.php index 57760137c2..ce4deddf9a 100644 --- a/includes/filebackend/FileBackendStore.php +++ b/includes/filebackend/FileBackendStore.php @@ -1102,19 +1102,35 @@ abstract class FileBackendStore extends FileBackend { $paths = array_merge( $paths, $op->storagePathsRead() ); $paths = array_merge( $paths, $op->storagePathsChanged() ); } + + // Enlarge the cache to fit the stat entries of these files + $this->cheapCache->resize( max( 2 * count( $paths ), self::CACHE_CHEAP_SIZE ) ); + // Load from the persistent container caches $this->primeContainerCache( $paths ); // Get the latest stat info for all the files (having locked them) - $this->preloadFileStat( array( 'srcs' => $paths, 'latest' => true ) ); + $ok = $this->preloadFileStat( array( 'srcs' => $paths, 'latest' => true ) ); - // Actually attempt the operation batch... - $opts = $this->setConcurrencyFlags( $opts ); - $subStatus = FileOpBatch::attempt( $performOps, $opts, $this->fileJournal ); + if ( $ok ) { + // Actually attempt the operation batch... + $opts = $this->setConcurrencyFlags( $opts ); + $subStatus = FileOpBatch::attempt( $performOps, $opts, $this->fileJournal ); + } else { + // If we could not even stat some files, then bail out... + $subStatus = Status::newFatal( 'backend-fail-internal', $this->name ); + foreach ( $ops as $i => $op ) { // mark each op as failed + $subStatus->success[$i] = false; + ++$subStatus->failCount; + } + } // Merge errors into status fields $status->merge( $subStatus ); $status->success = $subStatus->success; // not done in merge() + // Shrink the stat cache back to normal size + $this->cheapCache->resize( self::CACHE_CHEAP_SIZE ); + return $status; } @@ -1282,11 +1298,12 @@ abstract class FileBackendStore extends FileBackend { final public function preloadFileStat( array $params ) { $section = new ProfileSection( __METHOD__ . "-{$this->name}" ); + $success = true; // no network errors $params['concurrency'] = ( $this->parallelize !== 'off' ) ? $this->concurrency : 1; $stats = $this->doGetFileStatMulti( $params ); if ( $stats === null ) { - return; // not supported + return true; // not supported } $latest = !empty( $params['latest'] ); // use latest data? @@ -1318,9 +1335,12 @@ abstract class FileBackendStore extends FileBackend { array( 'hash' => false, 'latest' => $latest ) ); wfDebug( __METHOD__ . ": File $path does not exist.\n" ); } else { // an error occurred + $success = false; wfDebug( __METHOD__ . ": Could not stat file $path.\n" ); } } + + return $success; } /**