mirror of https://github.com/nextcloud/server
optimize View::getPath if we already know the storage id
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
244fd6ae49
commit
cfde74442c
|
@ -33,7 +33,6 @@
|
|||
namespace OCA\Files_Sharing;
|
||||
|
||||
use OC\Files\Cache\FailedCache;
|
||||
use OC\Files\Cache\LazyWatcher;
|
||||
use OC\Files\Cache\NullWatcher;
|
||||
use OC\Files\Filesystem;
|
||||
use OC\Files\Storage\FailedStorage;
|
||||
|
@ -127,11 +126,12 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
|
|||
$this->initialized = true;
|
||||
try {
|
||||
Filesystem::initMountPoints($this->superShare->getShareOwner());
|
||||
$sourcePath = $this->ownerView->getPath($this->superShare->getNodeId());
|
||||
$storageId = $this->superShare->getNodeCacheEntry() ? $this->superShare->getNodeCacheEntry()->getStorageId() : null;
|
||||
$sourcePath = $this->ownerView->getPath($this->superShare->getNodeId(), $storageId);
|
||||
[$this->nonMaskedStorage, $this->rootPath] = $this->ownerView->resolvePath($sourcePath);
|
||||
$this->storage = new PermissionsMask([
|
||||
'storage' => $this->nonMaskedStorage,
|
||||
'mask' => $this->superShare->getPermissions()
|
||||
'mask' => $this->superShare->getPermissions(),
|
||||
]);
|
||||
} catch (NotFoundException $e) {
|
||||
// original file not accessible or deleted, set FailedStorage
|
||||
|
@ -379,7 +379,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
|
|||
if (!$storage) {
|
||||
$storage = $this;
|
||||
}
|
||||
$sourceRoot = $this->getSourceRootInfo();
|
||||
$sourceRoot = $this->getSourceRootInfo();
|
||||
if ($this->storage instanceof FailedStorage) {
|
||||
return new FailedCache();
|
||||
}
|
||||
|
@ -467,7 +467,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
|
|||
// shares do not participate in availability logic
|
||||
return [
|
||||
'available' => true,
|
||||
'last_checked' => 0
|
||||
'last_checked' => 0,
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@ class NullWatcher extends Watcher {
|
|||
private $policy;
|
||||
|
||||
public function __construct() {
|
||||
|
||||
}
|
||||
|
||||
public function setPolicy($policy) {
|
||||
|
@ -43,7 +42,6 @@ class NullWatcher extends Watcher {
|
|||
}
|
||||
|
||||
public function update($path, $cachedData) {
|
||||
|
||||
}
|
||||
|
||||
public function needsUpdate($path, $cachedData) {
|
||||
|
@ -51,6 +49,5 @@ class NullWatcher extends Watcher {
|
|||
}
|
||||
|
||||
public function cleanFolder($path) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -239,7 +239,7 @@ class View {
|
|||
public function getLocalFile($path) {
|
||||
$parent = substr($path, 0, strrpos($path, '/'));
|
||||
$path = $this->getAbsolutePath($path);
|
||||
list($storage, $internalPath) = Filesystem::resolvePath($path);
|
||||
[$storage, $internalPath] = Filesystem::resolvePath($path);
|
||||
if (Filesystem::isValidPath($parent) and $storage) {
|
||||
return $storage->getLocalFile($internalPath);
|
||||
} else {
|
||||
|
@ -254,7 +254,7 @@ class View {
|
|||
public function getLocalFolder($path) {
|
||||
$parent = substr($path, 0, strrpos($path, '/'));
|
||||
$path = $this->getAbsolutePath($path);
|
||||
list($storage, $internalPath) = Filesystem::resolvePath($path);
|
||||
[$storage, $internalPath] = Filesystem::resolvePath($path);
|
||||
if (Filesystem::isValidPath($parent) and $storage) {
|
||||
return $storage->getLocalFolder($internalPath);
|
||||
} else {
|
||||
|
@ -668,10 +668,10 @@ class View {
|
|||
$this->changeLock($path, ILockingProvider::LOCK_EXCLUSIVE);
|
||||
|
||||
/** @var \OC\Files\Storage\Storage $storage */
|
||||
list($storage, $internalPath) = $this->resolvePath($path);
|
||||
[$storage, $internalPath] = $this->resolvePath($path);
|
||||
$target = $storage->fopen($internalPath, 'w');
|
||||
if ($target) {
|
||||
list(, $result) = \OC_Helper::streamCopy($data, $target);
|
||||
[, $result] = \OC_Helper::streamCopy($data, $target);
|
||||
fclose($target);
|
||||
fclose($data);
|
||||
|
||||
|
@ -1089,7 +1089,7 @@ class View {
|
|||
[Filesystem::signal_param_path => $this->getHookPath($path)]
|
||||
);
|
||||
}
|
||||
list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
|
||||
[$storage, $internalPath] = Filesystem::resolvePath($absolutePath . $postFix);
|
||||
if ($storage) {
|
||||
return $storage->hash($type, $internalPath, $raw);
|
||||
}
|
||||
|
@ -1143,7 +1143,7 @@ class View {
|
|||
|
||||
$run = $this->runHooks($hooks, $path);
|
||||
/** @var \OC\Files\Storage\Storage $storage */
|
||||
list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
|
||||
[$storage, $internalPath] = Filesystem::resolvePath($absolutePath . $postFix);
|
||||
if ($run and $storage) {
|
||||
if (in_array('write', $hooks) || in_array('delete', $hooks)) {
|
||||
try {
|
||||
|
@ -1568,7 +1568,7 @@ class View {
|
|||
* @var \OC\Files\Storage\Storage $storage
|
||||
* @var string $internalPath
|
||||
*/
|
||||
list($storage, $internalPath) = Filesystem::resolvePath($path);
|
||||
[$storage, $internalPath] = Filesystem::resolvePath($path);
|
||||
if ($storage) {
|
||||
$cache = $storage->getCache($path);
|
||||
|
||||
|
@ -1705,7 +1705,7 @@ class View {
|
|||
* @var Storage\Storage $storage
|
||||
* @var string $internalPath
|
||||
*/
|
||||
list($storage, $internalPath) = $this->resolvePath($path);
|
||||
[$storage, $internalPath] = $this->resolvePath($path);
|
||||
if ($storage) {
|
||||
return $storage->getETag($internalPath);
|
||||
} else {
|
||||
|
@ -1719,10 +1719,11 @@ class View {
|
|||
* Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file
|
||||
*
|
||||
* @param int $id
|
||||
* @throws NotFoundException
|
||||
* @param int|null $storageId
|
||||
* @return string
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
public function getPath($id) {
|
||||
public function getPath($id, int $storageId = null) {
|
||||
$id = (int)$id;
|
||||
$manager = Filesystem::getMountManager();
|
||||
$mounts = $manager->findIn($this->fakeRoot);
|
||||
|
@ -1737,6 +1738,12 @@ class View {
|
|||
return $a instanceof SharedMount && (!$b instanceof SharedMount) ? 1 : -1;
|
||||
});
|
||||
|
||||
if (!is_null($storageId)) {
|
||||
$mounts = array_filter($mounts, function (IMountPoint $mount) use ($storageId) {
|
||||
return $mount->getNumericStorageId() === $storageId;
|
||||
});
|
||||
}
|
||||
|
||||
foreach ($mounts as $mount) {
|
||||
/**
|
||||
* @var \OC\Files\Mount\MountPoint $mount
|
||||
|
@ -1844,7 +1851,7 @@ class View {
|
|||
public function verifyPath($path, $fileName) {
|
||||
try {
|
||||
/** @type \OCP\Files\Storage $storage */
|
||||
list($storage, $internalPath) = $this->resolvePath($path);
|
||||
[$storage, $internalPath] = $this->resolvePath($path);
|
||||
$storage->verifyPath($internalPath, $fileName);
|
||||
} catch (ReservedWordException $ex) {
|
||||
$l = \OC::$server->getL10N('lib');
|
||||
|
|
Loading…
Reference in New Issue