delay getting the home dir of a user untill needed

for cache-only operations we don't actually need to know the home directory

Signed-off-by: Robin Appelman <robin@icewind.nl>
home-storage-lazy-datadir
Robin Appelman 2 years ago committed by Vincent Petry (Rebase PR Action)
parent aa3be1111f
commit 612b2a45f8

@ -49,12 +49,24 @@ class Home extends Local implements \OCP\Files\IHomeStorage {
*/
public function __construct($arguments) {
$this->user = $arguments['user'];
$datadir = $this->user->getHome();
$this->id = 'home::' . $this->user->getUID();
parent::__construct(['datadir' => $datadir]);
// use a placeholder datadir until we actually need to caluclate a source path
//
// this allows using this storage with a LazyUser without having to get the real user
// as long as only cache operations are done
parent::__construct(['datadir' => '/tmp/empty/placeholder/']);
}
public function getSourcePath($path) {
if ($this->datadir == '/tmp/empty/placeholder/') {
$this->setDataDir($this->user->getHome());
}
return parent::getSourcePath($path);
}
public function getId() {
return $this->id;
}

@ -75,7 +75,18 @@ class Local extends \OC\Files\Storage\Common {
if (!isset($arguments['datadir']) || !is_string($arguments['datadir'])) {
throw new \InvalidArgumentException('No data directory set for local storage');
}
$this->datadir = str_replace('//', '/', $arguments['datadir']);
$this->setDataDir($arguments['datadir']);
$this->config = \OC::$server->get(IConfig::class);
$this->mimeTypeDetector = \OC::$server->get(IMimeTypeDetector::class);
$this->defUMask = $this->config->getSystemValue('localstorage.umask', 0022);
// support Write-Once-Read-Many file systems
$this->unlinkOnTruncate = $this->config->getSystemValue('localstorage.unlink_on_truncate', false);
}
protected function setDataDir(string $dataDir) {
$this->datadir = str_replace('//', '/', $dataDir);
// some crazy code uses a local storage on root...
if ($this->datadir === '/') {
$this->realDataDir = $this->datadir;
@ -87,12 +98,6 @@ class Local extends \OC\Files\Storage\Common {
$this->datadir .= '/';
}
$this->dataDirLength = strlen($this->realDataDir);
$this->config = \OC::$server->get(IConfig::class);
$this->mimeTypeDetector = \OC::$server->get(IMimeTypeDetector::class);
$this->defUMask = $this->config->getSystemValue('localstorage.umask', 0022);
// support Write-Once-Read-Many file systems
$this->unlinkOnTruncate = $this->config->getSystemValue('localstorage.unlink_on_truncate', false);
}
public function __destruct() {

Loading…
Cancel
Save