=== dynamic restore-rollback lane (gdrive) === archive: file-fc3b834b0e8e8500 --- post-database failure --- status: {"status":"error","failure_stage":"post_database","rollback_attempted":true,"rollback_verified":true} row: before='MUTATED-ROW-POSTDATABASEFAILURE' after='MUTATED-ROW-POSTDATABASEFAILURE' option: before='MUTATED-OPTION-POSTDATABASEFAILURE' after='MUTATED-OPTION-POSTDATABASEFAILURE' file: before=d1ca9bc0da73 after=d1ca9bc0da73 --- post-filesystem-copy failure --- status: {"status":"error","failure_stage":"post_filesystem_copy","rollback_attempted":true,"rollback_verified":true} row: before='MUTATED-ROW-POSTFILESYSTEMCOPYFAILURE' after='MUTATED-ROW-POSTFILESYSTEMCOPYFAILURE' option: before='MUTATED-OPTION-POSTFILESYSTEMCOPYFAILURE' after='MUTATED-OPTION-POSTFILESYSTEMCOPYFAILURE' file: before=a4cb0373c9a3 after=a4cb0373c9a3 --- post-mutation health failure --- status: {"status":"error","failure_stage":"post_restore_health","rollback_attempted":true,"rollback_verified":true} row: before='MUTATED-ROW-POSTMUTATIONHEALTHFAILURE' after='MUTATED-ROW-POSTMUTATIONHEALTHFAILURE' option: before='MUTATED-OPTION-POSTMUTATIONHEALTHFAILURE' after='MUTATED-OPTION-POSTMUTATIONHEALTHFAILURE' file: before=7f515247edc1 after=7f515247edc1 --- post-import log failure --- status: {"status":"error","failure_stage":"activity_log","rollback_attempted":true,"rollback_verified":true} row: before='MUTATED-ROW-POSTIMPORTLOGFAILURE' after='MUTATED-ROW-POSTIMPORTLOGFAILURE' option: before='MUTATED-OPTION-POSTIMPORTLOGFAILURE' after='MUTATED-OPTION-POSTIMPORTLOGFAILURE' file: before=d50eab38a58c after=d50eab38a58c --- tampering with the archive bytes for the pre-mutation case --- --- pre-mutation refusal --- status: {"status":"error","failure_stage":"archive_authority","rollback_attempted":false,"rollback_verified":false} row: before='MUTATED-ROW-PREMUTATIONREFUSAL' after='MUTATED-ROW-PREMUTATIONREFUSAL' option: before='MUTATED-OPTION-PREMUTATIONREFUSAL' after='MUTATED-OPTION-PREMUTATIONREFUSAL' file: before=67380de0bc22 after=67380de0bc22 --- clean restore --- status: {"status":"complete","failure_stage":"","rollback_attempted":false,"rollback_verified":false} row: before='MUTATED-ROW-CLEANRESTORE' after='ORIGINAL-ROW-CONTENT' option: before='MUTATED-OPTION-CLEANRESTORE' after='ORIGINAL-OPTION-VALUE' file: before=7e59a048e4ca after=c4c5722030dd restore-rollback lane: 62 assertions passed, 0 failed === foreign key and BLOB round-trip lane (gdrive) === PASS: fixture: the child table is InnoDB, so its foreign key is real PASS: fixture: SHOW CREATE TABLE shows the declared foreign key PASS: fixture: the BLOB column holds NUL, 0x27, 0x5C, 0xFF, empty, NULL, all 256 bytes and 300 KB archive: file-2bb47e468a7c8c45 --- rollback after the database import --- PASS: rollback case: before the restore, the foreign key is in place and the BLOBs and rows differ from the archive status: {"status":"error","failure_stage":"post_database","rollback_verified":true,"thrown":""} PASS: rollback case: the failure injected after the database import entered a verified rollback PASS: rollback case: the child table is back to its pre-restore definition, foreign key included PASS: rollback case: every BLOB is hash-identical to its pre-restore bytes PASS: rollback case: the parent table is back to its pre-restore rows PASS: rollback case: FOREIGN_KEY_CHECKS reads 1 in the restore process after the restore PASS: rollback case: UNIQUE_CHECKS reads 1 in the restore process after the restore PASS: rollback case: no .maintenance file was left behind PASS: rollback case: the site answers HTTP 200 afterwards --- clean restore --- PASS: clean case: before the restore, the tables differ from the archive (no foreign key, other BLOBs) status: {"status":"complete","rollback_attempted":false,"thrown":""} PASS: clean case: the restore completed without a rollback PASS: clean case: SHOW CREATE TABLE shows the archived foreign key constraint again PASS: clean case: MySQL enforces the restored foreign key (a row naming a missing parent is refused) PASS: clean case: every BLOB is hash-identical to the archived bytes (NUL, 0x27, 0x5C, 0xFF, empty, NULL, all 256 bytes, 300 KB) PASS: clean case: the parent table holds the archived rows PASS: clean case: FOREIGN_KEY_CHECKS reads 1 in the restore process after the restore PASS: clean case: UNIQUE_CHECKS reads 1 in the restore process after the restore PASS: clean case: no .maintenance file was left behind PASS: clean case: the site answers HTTP 200 afterwards fk-blob-roundtrip lane: 22 assertions passed, 0 failed === intl restore-risk lane (gdrive): intl present, non-ASCII paths === === intl restore-risk lane (gdrive): intl absent, ASCII-only paths === === intl restore-risk lane (gdrive): intl absent, non-ASCII paths === intl-warning lane: 3 states passed, 0 failed e2e stratum: 9 families, 0 release-gate violations