summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2020-09-17 08:55:35 +0200
committerGitHub <noreply@github.com>2020-09-17 08:55:35 +0200
commitb0c04a3e0c2d2c8f99e112afc410441aa36093a1 (patch)
tree3071af83021953d0d650dce46b6c7a13253fe5a2 /lib/private
parent05edd1e5d6156766d072a9bf4782293b37210977 (diff)
parentcfde74442c67b9a6e639536536c18e4c6d4f7a0e (diff)
downloadnextcloud-server-b0c04a3e0c2d2c8f99e112afc410441aa36093a1.tar.gz
nextcloud-server-b0c04a3e0c2d2c8f99e112afc410441aa36093a1.zip
Merge pull request #22867 from nextcloud/shared-storage-init-less
Shared storage optimizations
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/Files/Cache/NullWatcher.php53
-rw-r--r--lib/private/Files/View.php29
2 files changed, 71 insertions, 11 deletions
diff --git a/lib/private/Files/Cache/NullWatcher.php b/lib/private/Files/Cache/NullWatcher.php
new file mode 100644
index 00000000000..57e43444fdc
--- /dev/null
+++ b/lib/private/Files/Cache/NullWatcher.php
@@ -0,0 +1,53 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2020 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Files\Cache;
+
+class NullWatcher extends Watcher {
+ private $policy;
+
+ public function __construct() {
+ }
+
+ public function setPolicy($policy) {
+ $this->policy = $policy;
+ }
+
+ public function getPolicy() {
+ return $this->policy;
+ }
+
+ public function checkUpdate($path, $cachedEntry = null) {
+ return false;
+ }
+
+ public function update($path, $cachedData) {
+ }
+
+ public function needsUpdate($path, $cachedData) {
+ return false;
+ }
+
+ public function cleanFolder($path) {
+ }
+}
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index ef8656258d1..16074a89ca8 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -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');