Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a02b22-9638-76d2-bbff-b7ea1770b118
77 lines
2.7 KiB
Markdown
77 lines
2.7 KiB
Markdown
---
|
|
id: SBOM-WP-0004
|
|
type: workplan
|
|
title: "Adopt rotated database leases without liveness restarts"
|
|
domain: infotech
|
|
repo: sbom-nexus
|
|
status: active
|
|
owner: codex
|
|
topic_slug: infotech
|
|
created: "2026-08-23"
|
|
updated: "2026-08-23"
|
|
quality_dor: DoR-Ok
|
|
quality_dor_at: "2026-08-23"
|
|
quality_dor_by: codex
|
|
quality_dor_note: "CUST-IN-0014 supplies exact 30-minute expiry/restart evidence, mounted Secret rotation behavior, owner boundaries, value-safety constraints, and live acceptance criteria."
|
|
origin: residual
|
|
origin_ref: CUST-IN-0014
|
|
related:
|
|
- RAPP-SBOM-NEXUS-WP-0003
|
|
state_hub_workstream_id: "5723e707-75ce-5a41-b734-e6aa5d00757e"
|
|
---
|
|
|
|
# Adopt rotated database leases without liveness restarts
|
|
|
|
## Reread the mounted DSN on new pool connections
|
|
|
|
```task
|
|
id: SBOM-WP-0004-T01
|
|
status: done
|
|
priority: high
|
|
state_hub_task_id: "5bec586f-7eea-5783-a7c1-c8759474c5e0"
|
|
```
|
|
|
|
Use a value-safe SQLAlchemy connection creator that rereads the mounted URL
|
|
for every new DBAPI connection. Recycle pooled connections before the current
|
|
30-minute lease expires and preserve `pool_pre_ping` so revoked sessions are
|
|
replaced with the current mounted credential.
|
|
|
|
Completed with tests proving two connection attempts observe two file values
|
|
and that the engine URL contains neither username nor password.
|
|
|
|
The first live promotion also exposed an Alembic `SET ROLE` autobegin defect:
|
|
the migration logged success but its outer transaction rolled back on close.
|
|
The migration role helper now commits only the role-assumption transaction
|
|
before Alembic starts its own, with an ordering regression test.
|
|
|
|
## Separate liveness from database readiness
|
|
|
|
```task
|
|
id: SBOM-WP-0004-T02
|
|
status: done
|
|
priority: high
|
|
state_hub_task_id: "e25972bd-8636-5654-91f1-fad49c5f5d2f"
|
|
```
|
|
|
|
Expose process-only `/state/live` while retaining the database-backed
|
|
`/state/health` readiness contract. The package must move only liveness to the
|
|
new route so a transient credential handoff removes traffic but does not ask
|
|
Kubernetes to restart an otherwise healthy process.
|
|
|
|
## Prove one complete live lease rotation
|
|
|
|
```task
|
|
id: SBOM-WP-0004-T03
|
|
status: progress
|
|
priority: high
|
|
state_hub_task_id: "a1e88b28-119d-5d1c-a97b-2dd1b3cb9113"
|
|
```
|
|
|
|
Promote the shared new image/package digest, observe at least one complete
|
|
database lease rotation, and require continuous process uptime, recovered
|
|
readiness, no liveness-driven restart, and no credential values in logs.
|
|
|
|
The corrected digest is live at migration `0002 (head)` with process and
|
|
database health passing, repository reads working, and zero pod restarts. The
|
|
first promotion safely proved digest rollback and exposed the now-fixed
|
|
migration transaction guard. Keep this task open through one full lease window.
|