Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2022-03-31 15:10:20 +0300
committerRobin Appelman <robin@icewind.nl>2022-03-31 15:35:42 +0300
commitac657b0f06fea0b24c01eb47b40a28591c0b4528 (patch)
tree482a0a1091f82e093cf236cce11ce8a241104c32 /lib
parent39494fbf794d982f6f6551c984e6ca4c4e947d01 (diff)
cache storage id mapping both waysstorage-id-cache-bi-directional
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/Files/Cache/Storage.php16
-rw-r--r--lib/private/Files/Cache/StorageGlobal.php32
2 files changed, 32 insertions, 16 deletions
diff --git a/lib/private/Files/Cache/Storage.php b/lib/private/Files/Cache/Storage.php
index 2de2c2f84d7..e977e29ce7d 100644
--- a/lib/private/Files/Cache/Storage.php
+++ b/lib/private/Files/Cache/Storage.php
@@ -126,19 +126,9 @@ class Storage {
* @param int $numericId
* @return string|null either the storage id string or null if the numeric id is not known
*/
- public static function getStorageId($numericId) {
- $query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- $query->select('id')
- ->from('storages')
- ->where($query->expr()->eq('numeric_id', $query->createNamedParameter($numericId)));
- $result = $query->execute();
- $row = $result->fetch();
- $result->closeCursor();
- if ($row) {
- return $row['id'];
- } else {
- return null;
- }
+ public static function getStorageId(int $numericId): ?string {
+ $storage = self::getGlobalCache()->getStorageInfoByNumericId($numericId);
+ return $storage['id'] ?? null;
}
/**
diff --git a/lib/private/Files/Cache/StorageGlobal.php b/lib/private/Files/Cache/StorageGlobal.php
index 7162f8e4908..a898c435415 100644
--- a/lib/private/Files/Cache/StorageGlobal.php
+++ b/lib/private/Files/Cache/StorageGlobal.php
@@ -41,8 +41,10 @@ class StorageGlobal {
/** @var IDBConnection */
private $connection;
- /** @var array[] */
+ /** @var array<string, array> */
private $cache = [];
+ /** @var array<int, array> */
+ private $numericIdCache = [];
public function __construct(IDBConnection $connection) {
$this->connection = $connection;
@@ -68,7 +70,7 @@ class StorageGlobal {
* @param string $storageId
* @return array|null
*/
- public function getStorageInfo($storageId) {
+ public function getStorageInfo(string $storageId): ?array {
if (!isset($this->cache[$storageId])) {
$builder = $this->connection->getQueryBuilder();
$query = $builder->select(['id', 'numeric_id', 'available', 'last_checked'])
@@ -81,9 +83,33 @@ class StorageGlobal {
if ($row) {
$this->cache[$storageId] = $row;
+ $this->numericIdCache[(int)$row['numeric_id']] = $row;
}
}
- return isset($this->cache[$storageId]) ? $this->cache[$storageId] : null;
+ return $this->cache[$storageId] ?? null;
+ }
+
+ /**
+ * @param int $numericId
+ * @return array|null
+ */
+ public function getStorageInfoByNumericId(int $numericId): ?array {
+ if (!isset($this->numericIdCache[$numericId])) {
+ $builder = $this->connection->getQueryBuilder();
+ $query = $builder->select(['id', 'numeric_id', 'available', 'last_checked'])
+ ->from('storages')
+ ->where($builder->expr()->eq('numeric_id', $builder->createNamedParameter($numericId)));
+
+ $result = $query->execute();
+ $row = $result->fetch();
+ $result->closeCursor();
+
+ if ($row) {
+ $this->numericIdCache[$numericId] = $row;
+ $this->cache[$row['id']] = $row;
+ }
+ }
+ return $this->numericIdCache[$numericId] ?? null;
}
public function clearCache() {