Loading registry/bbm/bbm.go +5 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,7 @@ func AllWork() []Work { {Name: "copyManifestMediaTypeIDToNewBigIntColumn", Do: copyManifestMediaTypeIDToNewBigIntColumn}, {Name: "copyManifestConfigMediaTypeIDToNewBigIntColumn", Do: copyManifestConfigMediaTypeIDToNewBigIntColumn}, {Name: "populateBlobsIDColumn", Do: updateBlobNullIDs}, {Name: "copyBlobMediaTypeIDToNewBigIntColumn", Do: copyBlobMediaTypeIDToNewBigIntColumn}, } } Loading @@ -116,6 +117,10 @@ func copyManifestConfigMediaTypeIDToNewBigIntColumn(ctx context.Context, db data return err } func copyBlobMediaTypeIDToNewBigIntColumn(ctx context.Context, db datastore.Handler, paginationTable, paginationColumn string, paginationAfter, paginationBefore, _ int) error { return copyMediaTypeIDToNewBigIntColumn(ctx, db, paginationTable, paginationColumn, paginationAfter, paginationBefore) } func copyMediaTypeIDToNewBigIntColumn(ctx context.Context, db datastore.Handler, paginationTable, paginationColumn string, paginationAfter, paginationBefore int) error { q := fmt.Sprintf(`UPDATE %s SET media_type_id_convert_to_bigint = media_type_id WHERE %s >= $1 AND %s <= $2`, paginationTable, paginationColumn, paginationColumn) log.GetLogger(log.WithContext(ctx)). Loading registry/datastore/migrations/premigrations/20260310000000_bbm_backfill_blobs_media_type_id_convert_to_bigint_column.go 0 → 100644 +45 −0 Original line number Diff line number Diff line package premigrations import ( "fmt" "github.com/docker/distribution/registry/datastore/migrations" migrate "github.com/rubenv/sql-migrate" ) func init() { const numPartitions = 64 upStatements := make([]string, 0, numPartitions) downStatements := make([]string, 0, numPartitions) for i := 0; i < numPartitions; i++ { partitionName := fmt.Sprintf("partitions.blobs_p_%d", i) migrationName := fmt.Sprintf("copy_blobs_p_%d_media_type_id_column_to_media_type_id_convert_to_bigint_column", i) upStatements = append(upStatements, fmt.Sprintf(` INSERT INTO batched_background_migrations ("name", "min_value", "max_value", "batch_size", "sub_batch_size", "status", "job_signature_name", "table_name", "column_name") VALUES ('%s', 1, -- Default BIGINT Undershoot minimum for IDENTITY 9223372036854775807, -- BIGINT maximum (overshoot) 100000, 20000, 1, -- Active status 'copyBlobMediaTypeIDToNewBigIntColumn', '%s', 'id')`, migrationName, partitionName, )) downStatements = append(downStatements, fmt.Sprintf(` DELETE FROM batched_background_migrations WHERE "name" = '%s'`, migrationName, )) } m := &migrations.Migration{ Migration: &migrate.Migration{ Id: "20260310000000_bbm_backfill_blobs_media_type_id_convert_to_bigint_column", Up: upStatements, Down: downStatements, }, } migrations.AppendPreMigration(m) } Loading
registry/bbm/bbm.go +5 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,7 @@ func AllWork() []Work { {Name: "copyManifestMediaTypeIDToNewBigIntColumn", Do: copyManifestMediaTypeIDToNewBigIntColumn}, {Name: "copyManifestConfigMediaTypeIDToNewBigIntColumn", Do: copyManifestConfigMediaTypeIDToNewBigIntColumn}, {Name: "populateBlobsIDColumn", Do: updateBlobNullIDs}, {Name: "copyBlobMediaTypeIDToNewBigIntColumn", Do: copyBlobMediaTypeIDToNewBigIntColumn}, } } Loading @@ -116,6 +117,10 @@ func copyManifestConfigMediaTypeIDToNewBigIntColumn(ctx context.Context, db data return err } func copyBlobMediaTypeIDToNewBigIntColumn(ctx context.Context, db datastore.Handler, paginationTable, paginationColumn string, paginationAfter, paginationBefore, _ int) error { return copyMediaTypeIDToNewBigIntColumn(ctx, db, paginationTable, paginationColumn, paginationAfter, paginationBefore) } func copyMediaTypeIDToNewBigIntColumn(ctx context.Context, db datastore.Handler, paginationTable, paginationColumn string, paginationAfter, paginationBefore int) error { q := fmt.Sprintf(`UPDATE %s SET media_type_id_convert_to_bigint = media_type_id WHERE %s >= $1 AND %s <= $2`, paginationTable, paginationColumn, paginationColumn) log.GetLogger(log.WithContext(ctx)). Loading
registry/datastore/migrations/premigrations/20260310000000_bbm_backfill_blobs_media_type_id_convert_to_bigint_column.go 0 → 100644 +45 −0 Original line number Diff line number Diff line package premigrations import ( "fmt" "github.com/docker/distribution/registry/datastore/migrations" migrate "github.com/rubenv/sql-migrate" ) func init() { const numPartitions = 64 upStatements := make([]string, 0, numPartitions) downStatements := make([]string, 0, numPartitions) for i := 0; i < numPartitions; i++ { partitionName := fmt.Sprintf("partitions.blobs_p_%d", i) migrationName := fmt.Sprintf("copy_blobs_p_%d_media_type_id_column_to_media_type_id_convert_to_bigint_column", i) upStatements = append(upStatements, fmt.Sprintf(` INSERT INTO batched_background_migrations ("name", "min_value", "max_value", "batch_size", "sub_batch_size", "status", "job_signature_name", "table_name", "column_name") VALUES ('%s', 1, -- Default BIGINT Undershoot minimum for IDENTITY 9223372036854775807, -- BIGINT maximum (overshoot) 100000, 20000, 1, -- Active status 'copyBlobMediaTypeIDToNewBigIntColumn', '%s', 'id')`, migrationName, partitionName, )) downStatements = append(downStatements, fmt.Sprintf(` DELETE FROM batched_background_migrations WHERE "name" = '%s'`, migrationName, )) } m := &migrations.Migration{ Migration: &migrate.Migration{ Id: "20260310000000_bbm_backfill_blobs_media_type_id_convert_to_bigint_column", Up: upStatements, Down: downStatements, }, } migrations.AppendPreMigration(m) }