diff options
author | Robin Appelman <robin@icewind.nl> | 2022-06-14 15:57:59 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2023-04-28 15:08:08 +0200 |
commit | f5e2b0b22f51cdb67c06c368e921052d25aacc2e (patch) | |
tree | 8d505989d05d5c56bd32a647d6830f9fc3905790 /core | |
parent | 74f31bac8c0473f3dc92fcb54967f4cf977c413f (diff) | |
download | nextcloud-server-f5e2b0b22f51cdb67c06c368e921052d25aacc2e.tar.gz nextcloud-server-f5e2b0b22f51cdb67c06c368e921052d25aacc2e.zip |
allow storing multiple mounts for the same rootid in the mount cache
currently `[$userId, $rootId]` is used as the unique key for storing mounts in the mount cache,
however there are cases where the same rootid is mounted in multiple places for a user which currently leads to not all of those mounts being added to the cache.
Previously this didn't matter as the mount cache was only used to list users with access to a specific file, so a user having access to the file multiple times didn' change anything.
With 24 the mount cache is used for more cases and multiple mounts for the same id becomes relevant.
While I think there isn't a real negative effect atm besides missing the optimized path we should ensure that the mounts are properly listed
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'core')
-rw-r--r-- | core/Migrations/Version13000Date20170718121200.php | 2 | ||||
-rw-r--r-- | core/Migrations/Version27000Date20220613163520.php | 51 |
2 files changed, 52 insertions, 1 deletions
diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php index 0924e0590d3..34a249814fb 100644 --- a/core/Migrations/Version13000Date20170718121200.php +++ b/core/Migrations/Version13000Date20170718121200.php @@ -149,7 +149,7 @@ class Version13000Date20170718121200 extends SimpleMigrationStep { $table->addIndex(['storage_id'], 'mounts_storage_index'); $table->addIndex(['root_id'], 'mounts_root_index'); $table->addIndex(['mount_id'], 'mounts_mount_id_index'); - $table->addUniqueIndex(['user_id', 'root_id'], 'mounts_user_root_index'); + $table->addIndex(['user_id', 'root_id', 'mount_point'], 'mounts_user_root_path_index', [], ['lengths' => [null, null, 128]]); } else { $table = $schema->getTable('mounts'); $table->addColumn('mount_id', Types::BIGINT, [ diff --git a/core/Migrations/Version27000Date20220613163520.php b/core/Migrations/Version27000Date20220613163520.php new file mode 100644 index 00000000000..5f327e69c96 --- /dev/null +++ b/core/Migrations/Version27000Date20220613163520.php @@ -0,0 +1,51 @@ +<?php + +declare(strict_types=1); + +/** + * @copyright Copyright (c) 2022 Your name <your@email.com> + * + * @author Your name <your@email.com> + * + * @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\Core\Migrations; + +use Closure; +use OCP\DB\ISchemaWrapper; +use OCP\Migration\IOutput; +use OCP\Migration\SimpleMigrationStep; + +class Version27000Date20220613163520 extends SimpleMigrationStep { + public function name(): string { + return "Add mountpoint path to mounts table unique index"; + } + + public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $table = $schema->getTable('mounts'); + if ($table->hasIndex('mounts_user_root_index')) { + $table->dropIndex('mounts_user_root_index'); + $table->addIndex(['user_id', 'root_id', 'mount_point'], 'mounts_user_root_path_index', [], ['lengths' => [null, null, 128]]); + } + + return $schema; + } +} |