0053_snapshot_manifest_blob_nullable.py
file-level
1
files
1
commits
0
hotspots
0
🧊 dead
0
💥 blast risk
| 1 | """Make musehub_snapshots.manifest_blob nullable. |
| 2 | |
| 3 | snapshot_id = sha256(sorted manifest entries) — the ID is the proof. |
| 4 | Snapshots pushed via the delta-mpack path store manifest_blob=NULL; |
| 5 | the manifest can be reconstructed from the delta chain in MinIO. |
| 6 | |
| 7 | Revision ID: 0053 |
| 8 | Revises: 0052 |
| 9 | """ |
| 10 | from __future__ import annotations |
| 11 | |
| 12 | import sqlalchemy as sa |
| 13 | from alembic import op |
| 14 | |
| 15 | |
| 16 | revision: str = "0053" |
| 17 | down_revision: str = "0052" |
| 18 | branch_labels = None |
| 19 | depends_on = None |
| 20 | |
| 21 | |
| 22 | def upgrade() -> None: |
| 23 | op.alter_column( |
| 24 | "musehub_snapshots", |
| 25 | "manifest_blob", |
| 26 | existing_type=sa.LargeBinary(), |
| 27 | nullable=True, |
| 28 | ) |
| 29 | |
| 30 | |
| 31 | def downgrade() -> None: |
| 32 | op.execute( |
| 33 | "UPDATE musehub_snapshots SET manifest_blob = '\\x80' WHERE manifest_blob IS NULL" |
| 34 | ) |
| 35 | op.alter_column( |
| 36 | "musehub_snapshots", |
| 37 | "manifest_blob", |
| 38 | existing_type=sa.LargeBinary(), |
| 39 | nullable=False, |
| 40 | ) |