Skip to content

Commit

Permalink
Only construct the storage when we start using it
Browse files Browse the repository at this point in the history
  • Loading branch information
icewind1991 authored and rullzer committed Apr 15, 2016
1 parent 5ff4b18 commit 8ad4335
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 23 deletions.
23 changes: 16 additions & 7 deletions apps/files_sharing/lib/sharedmount.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ class SharedMount extends MountPoint implements MoveableMount {
*/
private $user;

/** @var \OCP\Share\IShare */
private $share;

/**
* @param string $storage
* @param SharedMount[] $mountpoints
Expand All @@ -58,11 +61,10 @@ class SharedMount extends MountPoint implements MoveableMount {
public function __construct($storage, array $mountpoints, $arguments = null, $loader = null) {
$this->user = $arguments['user'];
$this->recipientView = new View('/' . $this->user . '/files');
/** @var \OCP\Share\IShare $share */
$share = $arguments['newShare'];
$newMountPoint = $this->verifyMountPoint($share, $mountpoints);
$this->share = $arguments['newShare'];
$newMountPoint = $this->verifyMountPoint($this->share, $mountpoints);
$absMountPoint = '/' . $this->user . '/files' . $newMountPoint;
$arguments['ownerView'] = new View('/' . $share->getShareOwner() . '/files');
$arguments['ownerView'] = new View('/' . $this->share->getShareOwner() . '/files');
parent::__construct($storage, $absMountPoint, $arguments, $loader);
}

Expand Down Expand Up @@ -210,8 +212,15 @@ public function removeMount() {
* @return \OCP\Share\IShare
*/
public function getShare() {
/** @var $storage \OC\Files\Storage\Shared */
$storage = $this->getStorage();
return $storage->getShare();
return $this->share;
}

/**
* Get the file id of the root of the storage
*
* @return int
*/
public function getStorageRootId() {
return $this->share->getNodeId();
}
}
14 changes: 7 additions & 7 deletions lib/private/files/config/cachedmountinfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,22 +30,22 @@ class CachedMountInfo implements ICachedMountInfo {
/**
* @var IUser
*/
private $user;
protected $user;

/**
* @var int
*/
private $storageId;
protected $storageId;

/**
* @var int
*/
private $rootId;
protected $rootId;

/**
* @var string
*/
private $mountPoint;
protected $mountPoint;

/**
* CachedMountInfo constructor.
Expand Down Expand Up @@ -88,9 +88,9 @@ public function getRootId() {
*/
public function getMountPointNode() {
// TODO injection etc
Filesystem::initMountPoints($this->user->getUID());
$userNode = \OC::$server->getUserFolder($this->user->getUID());
$nodes = $userNode->getById($this->rootId);
Filesystem::initMountPoints($this->getUser()->getUID());
$userNode = \OC::$server->getUserFolder($this->getUser()->getUID());
$nodes = $userNode->getById($this->getRootId());
if (count($nodes) > 0) {
return $nodes[0];
} else {
Expand Down
74 changes: 74 additions & 0 deletions lib/private/files/config/lazystoragemountinfo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?php
/**
* @author Robin Appelman <icewind@owncloud.com>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/

namespace OC\Files\Config;

use OC\Files\Filesystem;
use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\Node;
use OCP\IUser;

class LazyStorageMountInfo extends CachedMountInfo {
/** @var IMountPoint */
private $mount;

/**
* CachedMountInfo constructor.
*
* @param IUser $user
* @param IMountPoint $mount
*/
public function __construct(IUser $user, IMountPoint $mount) {
$this->user = $user;
$this->mount = $mount;
}

/**
* @return int the numeric storage id of the mount
*/
public function getStorageId() {
if (!$this->storageId) {
$this->storageId = $this->mount->getStorage()->getStorageCache()->getNumericId();
}
return parent::getStorageId();
}

/**
* @return int the fileid of the root of the mount
*/
public function getRootId() {
if (!$this->rootId) {
$this->rootId = $this->mount->getStorageRootId();
}
return parent::getRootId();
}

/**
* @return string the mount point of the mount for the user
*/
public function getMountPoint() {
if (!$this->mountPoint) {
$this->mountPoint = $this->mount->getMountPoint();
}
return parent::getMountPoint();
}
}
11 changes: 2 additions & 9 deletions lib/private/files/config/usermountcache.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,18 +80,11 @@ public function registerMounts(IUser $user, array $mounts) {
});
/** @var ICachedMountInfo[] $newMounts */
$newMounts = array_map(function (IMountPoint $mount) use ($user) {
$storage = $mount->getStorage();
if ($storage->instanceOfStorage('\OC\Files\Storage\Shared')) {
$rootId = (int)$storage->getShare()->getNodeId();
} else {
$rootId = (int)$storage->getCache()->getId('');
}
$storageId = (int)$storage->getStorageCache()->getNumericId();
// filter out any storages which aren't scanned yet since we aren't interested in files from those storages (yet)
if ($rootId === -1) {
if ($mount->getStorageRootId() === -1) {
return null;
} else {
return new CachedMountInfo($user, $storageId, $rootId, $mount->getMountPoint());
return new LazyStorageMountInfo($user, $mount);
}
}, $mounts);
$newMounts = array_values(array_filter($newMounts));
Expand Down
9 changes: 9 additions & 0 deletions lib/private/files/mount/mountpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -239,4 +239,13 @@ public function getOption($name, $default) {
public function getOptions() {
return $this->mountOptions;
}

/**
* Get the file id of the root of the storage
*
* @return int
*/
public function getStorageRootId() {
return (int)$this->getStorage()->getCache()->getId('');
}
}
8 changes: 8 additions & 0 deletions lib/public/files/mount/imountpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,4 +94,12 @@ public function getOption($name, $default);
* @since 8.1.0
*/
public function getOptions();

/**
* Get the file id of the root of the storage
*
* @return int
* @since 9.1.0
*/
public function getStorageRootId();
}

0 comments on commit 8ad4335

Please sign in to comment.