Companion code for Zero-Downtime Database Migrations: Expand-Contract in Practice with Spring Boot: a full expand/migrate-writes/migrate-reads/contract sequence run as an actual rolling deploy across two live replicas, with a load generator sending continuous HTTP traffic through all four deploys (99.98% success, every residual error traced to a root cause rather than left unexplained). Findings include a real NOT NULL constraint trap in the expand migration, a backfill-window bug in the read switch, H2's AUTO_SERVER=TRUE single-point-of-failure behavior under a rolling restart, the drain-before-SIGTERM fix needed to close a health-check gap during graceful shutdown, and H2 silently discarding a concurrently committed INSERT during an ALTER TABLE ADD/DROP COLUMN rebuild - confirmed, by primary source, to be an H2-specific behavior rather than a property of the technique itself. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_019Fb7vW8vLyLKngBc4R3huA
24 lines
699 B
Plaintext
24 lines
699 B
Plaintext
target/
|
|
*.hprof
|
|
*.log
|
|
.idea/
|
|
*.iml
|
|
.vscode/
|
|
*.jfr
|
|
*.aot
|
|
*.aotconf
|
|
# generated by spring-boot-startup-time/scripts/gen-bulk.sh
|
|
spring-boot-startup-time/src/main/java/com/ankurm/startup/bulk/
|
|
|
|
# spring-batch: file-based H2 databases created by running the demo
|
|
spring-batch/data/
|
|
spring-batch/scenario-data/
|
|
|
|
# spring-batch-partitioning: generated shard CSVs and file-based H2 databases
|
|
spring-batch-partitioning/data/
|
|
|
|
# db-migrations-expand-contract: runtime classpath file written by `mvn package`
|
|
# (maven-dependency-plugin's build-classpath goal) for the standalone MigrationCli
|
|
# and LoadGenerator entry points - machine-specific, regenerated on every build
|
|
db-migrations-expand-contract/cp.txt
|