summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2023-05-02 15:40:47 +0200
committerGitHub <noreply@github.com>2023-05-02 15:40:47 +0200
commit8f1e7118589be4fae6a5fca048a15fdfffeba7a3 (patch)
treec20249aa43ca6fe6d1244b5608b188bdde24b6bb /core
parent436a08893b6cfbd81ba231bd5df787f4b0bd3874 (diff)
parentdb43d903877a8b90b78cafb404b1e7101bfb2c15 (diff)
downloadnextcloud-server-8f1e7118589be4fae6a5fca048a15fdfffeba7a3.tar.gz
nextcloud-server-8f1e7118589be4fae6a5fca048a15fdfffeba7a3.zip
Merge pull request #32877 from nextcloud/mount-cache-unique-mountpoint
allow storing multiple mounts for the same rootid in the mount cache
Diffstat (limited to 'core')
-rw-r--r--core/Application.php3
-rw-r--r--core/Command/Db/AddMissingIndices.php8
-rw-r--r--core/Migrations/Version13000Date20170718121200.php2
-rw-r--r--core/Migrations/Version27000Date20220613163520.php51
4 files changed, 63 insertions, 1 deletions
diff --git a/core/Application.php b/core/Application.php
index 4ebbada95e6..2e354610154 100644
--- a/core/Application.php
+++ b/core/Application.php
@@ -239,6 +239,9 @@ class Application extends App {
if (!$table->hasIndex('mounts_class_index')) {
$subject->addHintForMissingSubject($table->getName(), 'mounts_class_index');
}
+ if (!$table->hasIndex('mounts_user_root_path_index')) {
+ $subject->addHintForMissingSubject($table->getName(), 'mounts_user_root_path_index');
+ }
}
}
);
diff --git a/core/Command/Db/AddMissingIndices.php b/core/Command/Db/AddMissingIndices.php
index e22d0fddeca..b317f44b499 100644
--- a/core/Command/Db/AddMissingIndices.php
+++ b/core/Command/Db/AddMissingIndices.php
@@ -465,6 +465,14 @@ class AddMissingIndices extends Command {
$updated = true;
$output->writeln('<info>oc_mounts table updated successfully.</info>');
}
+ if (!$table->hasIndex('mounts_user_root_path_index')) {
+ $output->writeln('<info>Adding mounts_user_root_path_index index to the oc_mounts table, this can take some time...</info>');
+
+ $table->addIndex(['user_id', 'root_id', 'mount_point'], 'mounts_user_root_path_index', [], ['lengths' => [null, null, 128]]);
+ $this->connection->migrateToSchema($schema->getWrappedSchema());
+ $updated = true;
+ $output->writeln('<info>oc_mounts table updated successfully.</info>');
+ }
}
if (!$updated) {
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..4217f3b3270
--- /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');
+ // new index gets added with "add missing indexes"
+ }
+
+ return $schema;
+ }
+}