From 6f46a8bd5b38721874b44337f87c1435e60784e4 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 13 Dec 2016 12:10:44 +0100 Subject: also compare storage ids when checking for changed mounts Signed-off-by: Robin Appelman --- lib/private/Files/Config/UserMountCache.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php index c9a701d24b6..423eb5c423d 100644 --- a/lib/private/Files/Config/UserMountCache.php +++ b/lib/private/Files/Config/UserMountCache.php @@ -141,7 +141,11 @@ class UserMountCache implements IUserMountCache { foreach ($cachedMounts as $cachedMount) { if ( $newMount->getRootId() === $cachedMount->getRootId() && - ($newMount->getMountPoint() !== $cachedMount->getMountPoint() || $newMount->getMountId() !== $cachedMount->getMountId()) + ( + $newMount->getMountPoint() !== $cachedMount->getMountPoint() || + $newMount->getStorageId() !== $cachedMount->getStorageId() || + $newMount->getMountId() !== $cachedMount->getMountId() + ) ) { $changed[] = $newMount; } @@ -169,6 +173,7 @@ class UserMountCache implements IUserMountCache { $builder = $this->connection->getQueryBuilder(); $query = $builder->update('mounts') + ->set('storage_id', $builder->createNamedParameter($mount->getStorageId())) ->set('mount_point', $builder->createNamedParameter($mount->getMountPoint())) ->set('mount_id', $builder->createNamedParameter($mount->getMountId(), IQueryBuilder::PARAM_INT)) ->where($builder->expr()->eq('user_id', $builder->createNamedParameter($mount->getUser()->getUID()))) -- cgit v1.2.3 From bbe24d29cac0fcee2573e9eea5ec17b565fd0817 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 13 Dec 2016 12:30:29 +0100 Subject: reuse cacheentry Signed-off-by: Robin Appelman --- apps/files_sharing/lib/SharedMount.php | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index 5436f476f1a..b7fb96b711b 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -130,12 +130,12 @@ class SharedMount extends MountPoint implements MoveableMount { */ private function generateUniqueTarget($path, $view, array $mountpoints) { $pathinfo = pathinfo($path); - $ext = (isset($pathinfo['extension'])) ? '.'.$pathinfo['extension'] : ''; + $ext = (isset($pathinfo['extension'])) ? '.' . $pathinfo['extension'] : ''; $name = $pathinfo['filename']; $dir = $pathinfo['dirname']; // Helper function to find existing mount points - $mountpointExists = function($path) use ($mountpoints) { + $mountpointExists = function ($path) use ($mountpoints) { foreach ($mountpoints as $mountpoint) { if ($mountpoint->getShare()->getTarget() === $path) { return true; @@ -146,7 +146,7 @@ class SharedMount extends MountPoint implements MoveableMount { $i = 2; while ($view->file_exists($path) || $mountpointExists($path)) { - $path = Filesystem::normalizePath($dir . '/' . $name . ' ('.$i.')' . $ext); + $path = Filesystem::normalizePath($dir . '/' . $name . ' (' . $i . ')' . $ext); $i++; } @@ -240,18 +240,22 @@ class SharedMount extends MountPoint implements MoveableMount { * @return int */ public function getNumericStorageId() { - $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); - - $query = $builder->select('storage') - ->from('filecache') - ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId()))); - - $result = $query->execute(); - $row = $result->fetch(); - $result->closeCursor(); - if ($row) { - return $row['storage']; + if (!is_null($this->getShare()->getNodeCacheEntry())) { + return $this->getShare()->getNodeCacheEntry()->getStorageId(); + } else { + $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + + $query = $builder->select('storage') + ->from('filecache') + ->where($builder->expr()->eq('fileid', $builder->createNamedParameter($this->getStorageRootId()))); + + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + if ($row) { + return $row['storage']; + } + return -1; } - return -1; } } -- cgit v1.2.3 From 86473306f350cc426ce01009f6f6e2b4a57df38b Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 13 Dec 2016 12:50:17 +0100 Subject: fix cacheentry return wrong storage id Signed-off-by: Robin Appelman --- lib/private/Files/Cache/Cache.php | 1 + lib/private/Files/Cache/CacheEntry.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index 3a3f51488e6..859d79f88d4 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -163,6 +163,7 @@ class Cache implements ICache { $data['storage_mtime'] = (int)$data['storage_mtime']; $data['encryptedVersion'] = (int)$data['encrypted']; $data['encrypted'] = (bool)$data['encrypted']; + $data['storage_id'] = $data['storage']; $data['storage'] = $storageId; $data['mimetype'] = $mimetypeLoader->getMimetypeById($data['mimetype']); $data['mimepart'] = $mimetypeLoader->getMimetypeById($data['mimepart']); diff --git a/lib/private/Files/Cache/CacheEntry.php b/lib/private/Files/Cache/CacheEntry.php index 4a2579a88f8..784bd3a6f98 100644 --- a/lib/private/Files/Cache/CacheEntry.php +++ b/lib/private/Files/Cache/CacheEntry.php @@ -62,7 +62,7 @@ class CacheEntry implements ICacheEntry, \ArrayAccess { } public function getStorageId() { - return $this->data['storage']; + return $this->data['storage_id']; } -- cgit v1.2.3 From 14a561ddad8bbd6ae1d524a49c70a7926c06310f Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 13 Dec 2016 12:53:38 +0100 Subject: always use numeric storage id in cacheentry Signed-off-by: Robin Appelman --- lib/private/Files/Cache/Cache.php | 6 ++---- lib/private/Files/Cache/CacheEntry.php | 2 +- lib/private/Share20/DefaultShareProvider.php | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index 859d79f88d4..a966d621c58 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -142,7 +142,7 @@ class Cache implements ICache { } return $data; } else { - return self::cacheEntryFromData($data, $this->storageId, $this->mimetypeLoader); + return self::cacheEntryFromData($data, $this->mimetypeLoader); } } @@ -150,11 +150,10 @@ class Cache implements ICache { * Create a CacheEntry from database row * * @param array $data - * @param string $storageId * @param IMimeTypeLoader $mimetypeLoader * @return CacheEntry */ - public static function cacheEntryFromData($data, $storageId, IMimeTypeLoader $mimetypeLoader) { + public static function cacheEntryFromData($data, IMimeTypeLoader $mimetypeLoader) { //fix types $data['fileid'] = (int)$data['fileid']; $data['parent'] = (int)$data['parent']; @@ -164,7 +163,6 @@ class Cache implements ICache { $data['encryptedVersion'] = (int)$data['encrypted']; $data['encrypted'] = (bool)$data['encrypted']; $data['storage_id'] = $data['storage']; - $data['storage'] = $storageId; $data['mimetype'] = $mimetypeLoader->getMimetypeById($data['mimetype']); $data['mimepart'] = $mimetypeLoader->getMimetypeById($data['mimepart']); if ($data['storage_mtime'] == 0) { diff --git a/lib/private/Files/Cache/CacheEntry.php b/lib/private/Files/Cache/CacheEntry.php index 784bd3a6f98..4a2579a88f8 100644 --- a/lib/private/Files/Cache/CacheEntry.php +++ b/lib/private/Files/Cache/CacheEntry.php @@ -62,7 +62,7 @@ class CacheEntry implements ICacheEntry, \ArrayAccess { } public function getStorageId() { - return $this->data['storage_id']; + return $this->data['storage']; } diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php index 7a602950171..fded7442d20 100644 --- a/lib/private/Share20/DefaultShareProvider.php +++ b/lib/private/Share20/DefaultShareProvider.php @@ -853,7 +853,6 @@ class DefaultShareProvider implements IShareProvider { $entryData['permissions'] = $entryData['f_permissions']; $entryData['parent'] = $entryData['f_parent'];; $share->setNodeCacheEntry(Cache::cacheEntryFromData($entryData, - $entryData['storage_string_id'], \OC::$server->getMimeTypeLoader())); } -- cgit v1.2.3