Skip to content

Commit

Permalink
optimize View::getPath if we already know the storage id
Browse files Browse the repository at this point in the history
Signed-off-by: Robin Appelman <robin@icewind.nl>
  • Loading branch information
icewind1991 committed Sep 15, 2020
1 parent 244fd6a commit 210726a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 12 deletions.
2 changes: 1 addition & 1 deletion apps/files_sharing/lib/SharedStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ private function init() {
$this->initialized = true;
try {
Filesystem::initMountPoints($this->superShare->getShareOwner());
$sourcePath = $this->ownerView->getPath($this->superShare->getNodeId());
$sourcePath = $this->ownerView->getPath($this->superShare->getNodeId(), $this->superShare->getNodeCacheEntry()->getStorageId());
[$this->nonMaskedStorage, $this->rootPath] = $this->ownerView->resolvePath($sourcePath);
$this->storage = new PermissionsMask([
'storage' => $this->nonMaskedStorage,
Expand Down
29 changes: 18 additions & 11 deletions lib/private/Files/View.php
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ public function resolvePath($path) {
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 {
Expand All @@ -254,7 +254,7 @@ public function getLocalFile($path) {
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 {
Expand Down Expand Up @@ -668,10 +668,10 @@ public function file_put_contents($path, $data) {
$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);

Expand Down Expand Up @@ -1089,7 +1089,7 @@ public function hash($type, $path, $raw = false) {
[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);
}
Expand Down Expand Up @@ -1143,7 +1143,7 @@ private function basicOperation($operation, $path, $hooks = [], $extraParam = nu

$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 {
Expand Down Expand Up @@ -1568,7 +1568,7 @@ public function putFileInfo($path, $data) {
* @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);

Expand Down Expand Up @@ -1705,7 +1705,7 @@ public function getETag($path) {
* @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 {
Expand All @@ -1719,10 +1719,11 @@ public function getETag($path) {
* 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);
Expand All @@ -1737,6 +1738,12 @@ public function getPath($id) {
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
Expand Down Expand Up @@ -1844,7 +1851,7 @@ private function getPartFileInfo($path) {
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');
Expand Down

0 comments on commit 210726a

Please sign in to comment.