/** * Get the storage path corresponding to one of the zones * * @param $zone string * @return string|null Returns null if the zone is not defined */ public function getZonePath( $zone ) { list( $container, $base ) = $this->getZoneLocation( $zone ); if ( $container === null || $base === null ) { return null; } $backendName = $this->backend->getName(); if ( $base != '' ) { // may not be set $base = "/{$base}"; } return "mwstore://$backendName/{$container}{$base}"; }
protected function doPerfTest(FileBackend $backend) { $ops1 = array(); $ops2 = array(); $ops3 = array(); $ops4 = array(); $ops5 = array(); $baseDir = 'mwstore://' . $backend->getName() . '/testing-cont1'; $backend->prepare(array('dir' => $baseDir)); $dirname = $this->getOption('srcdir'); $dir = opendir($dirname); if (!$dir) { return; } while ($dir && ($file = readdir($dir)) !== false) { if ($file[0] != '.') { $this->output("Using '{$dirname}/{$file}' in operations.\n"); $dst = $baseDir . '/' . wfBaseName($file); $ops1[] = array('op' => 'store', 'src' => "{$dirname}/{$file}", 'dst' => $dst, 'overwrite' => 1); $ops2[] = array('op' => 'copy', 'src' => "{$dst}", 'dst' => "{$dst}-1", 'overwrite' => 1); $ops3[] = array('op' => 'move', 'src' => $dst, 'dst' => "{$dst}-2", 'overwrite' => 1); $ops4[] = array('op' => 'delete', 'src' => "{$dst}-1"); $ops5[] = array('op' => 'delete', 'src' => "{$dst}-2"); } if (count($ops1) >= $this->getOption('maxfiles', 20)) { break; // enough } } closedir($dir); $this->output("\n"); $method = $this->hasOption('quick') ? 'doQuickOperations' : 'doOperations'; $opts = array('force' => 1); if ($this->hasOption('parallelize')) { $opts['parallelize'] = $this->getOption('parallelize') === 'true'; } $start = microtime(true); $status = $backend->{$method}($ops1, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Stored " . count($ops1) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops2, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Copied " . count($ops2) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops3, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Moved " . count($ops3) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops4, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Deleted " . count($ops4) . " files in {$e} ms.\n"); $start = microtime(true); $backend->{$method}($ops5, $opts); $e = (microtime(true) - $start) * 1000; if ($status->getErrorsArray()) { print_r($status->getErrorsArray()); exit(0); } $this->output($backend->getName() . ": Deleted " . count($ops5) . " files in {$e} ms.\n"); }
/** * Substitute the backend name of storage paths with that of a given one * * @param array|string $paths List of paths or single string path * @param FileBackend $backend * @return array|string */ protected function replaceNamePaths($paths, FileBackend $backend) { return preg_replace('!^mwstore://([^/]+)!', StringUtils::escapeRegexReplacement("mwstore://" . $backend->getName()), $paths); }