From 44c99d0e8dd2c4fb21e25399a4ee7862ba499f0a Mon Sep 17 00:00:00 2001 From: Chris Schinnerl Date: Sat, 4 Nov 2023 09:44:39 +0100 Subject: [PATCH 1/4] stores: extend object id max length to 4096 bytes --- stores/migrations.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stores/migrations.go b/stores/migrations.go index ffb778be9..aa361df47 100644 --- a/stores/migrations.go +++ b/stores/migrations.go @@ -303,15 +303,15 @@ func initSchema(tx *gorm.DB) error { // Change the collation of columns that we need to be case sensitive. if !isSQLite(tx) { - err = tx.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + err = tx.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;").Error if err != nil { return fmt.Errorf("failed to change object_id collation: %w", err) } - err = tx.Exec("ALTER TABLE buckets MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + err = tx.Exec("ALTER TABLE buckets MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;").Error if err != nil { return fmt.Errorf("failed to change buckets_name collation: %w", err) } - err = tx.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + err = tx.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;").Error if err != nil { return fmt.Errorf("failed to change object_id collation: %w", err) } From 075450567ce1e3065cbce05b5d545fa5a7a62eda Mon Sep 17 00:00:00 2001 From: Chris Schinnerl Date: Sat, 4 Nov 2023 11:04:52 +0100 Subject: [PATCH 2/4] stores: varchar 767 --- stores/migrations.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stores/migrations.go b/stores/migrations.go index aa361df47..7232d7005 100644 --- a/stores/migrations.go +++ b/stores/migrations.go @@ -303,15 +303,15 @@ func initSchema(tx *gorm.DB) error { // Change the collation of columns that we need to be case sensitive. if !isSQLite(tx) { - err = tx.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;").Error + err = tx.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(767) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error if err != nil { return fmt.Errorf("failed to change object_id collation: %w", err) } - err = tx.Exec("ALTER TABLE buckets MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;").Error + err = tx.Exec("ALTER TABLE buckets MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error if err != nil { return fmt.Errorf("failed to change buckets_name collation: %w", err) } - err = tx.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;").Error + err = tx.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(767) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error if err != nil { return fmt.Errorf("failed to change object_id collation: %w", err) } From fd2fc7f8113e4f8d15533b9b9c04bc3e1d089408 Mon Sep 17 00:00:00 2001 From: Chris Schinnerl Date: Sat, 4 Nov 2023 11:10:00 +0100 Subject: [PATCH 3/4] stores: change to 766 --- stores/migrations.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stores/migrations.go b/stores/migrations.go index 7232d7005..f89d9eea8 100644 --- a/stores/migrations.go +++ b/stores/migrations.go @@ -303,7 +303,7 @@ func initSchema(tx *gorm.DB) error { // Change the collation of columns that we need to be case sensitive. if !isSQLite(tx) { - err = tx.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(767) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + err = tx.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(766) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error if err != nil { return fmt.Errorf("failed to change object_id collation: %w", err) } @@ -311,7 +311,7 @@ func initSchema(tx *gorm.DB) error { if err != nil { return fmt.Errorf("failed to change buckets_name collation: %w", err) } - err = tx.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(767) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + err = tx.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(766) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error if err != nil { return fmt.Errorf("failed to change object_id collation: %w", err) } From 05a5507e8c11c2d25422a69b2702ac0cb57f074f Mon Sep 17 00:00:00 2001 From: Chris Schinnerl Date: Mon, 6 Nov 2023 10:43:28 +0100 Subject: [PATCH 4/4] stores: add migration code --- stores/migrations.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/stores/migrations.go b/stores/migrations.go index f89d9eea8..82fdaa449 100644 --- a/stores/migrations.go +++ b/stores/migrations.go @@ -267,6 +267,12 @@ func performMigrations(db *gorm.DB, logger *zap.SugaredLogger) error { return performMigration00021_multipartUploadsBucketCascade(tx, logger) }, }, + { + ID: "00022_extendObjectID", + Migrate: func(tx *gorm.DB) error { + return performMigration00022_extendObjectID(tx, logger) + }, + }, } // Create migrator. m := gormigrate.New(db, gormigrate.DefaultOptions, migrations) @@ -973,3 +979,19 @@ func performMigration00021_multipartUploadsBucketCascade(txn *gorm.DB, logger *z logger.Info("migration 00021_multipoartUploadsBucketCascade complete") return nil } + +func performMigration00022_extendObjectID(txn *gorm.DB, logger *zap.SugaredLogger) error { + logger.Info("performing migration 00022_extendObjectID") + if !isSQLite(txn) { + err := txn.Exec("ALTER TABLE objects MODIFY COLUMN object_id VARCHAR(766) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + if err != nil { + return fmt.Errorf("failed to change object_id collation: %w", err) + } + err = txn.Exec("ALTER TABLE multipart_uploads MODIFY COLUMN object_id VARCHAR(766) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;").Error + if err != nil { + return fmt.Errorf("failed to change object_id collation: %w", err) + } + } + logger.Info("migration 00022_extendObjectID complete") + return nil +}