fix(ip-pool): reconcile stale leases against live clones (§2.8, W1)
A job killed mid-flight never released its IP lease; with only 4 pool addresses a single leak exhausted the pool ("IP pool exhausted after 60s"). IpSlotPool.reconcile() releases leases whose owner clone-dir is gone; vm cleanup runs it only against the real build_vms base. Closes TODO §2.8.
This commit is contained in:
@@ -299,7 +299,7 @@ Cooldown: max 3 restart/h via JSON state file `F:\CI\State\runner-restart-log.js
|
||||
Oltre il limite: EventId 1004 (Error) + webhook `:sos:` senza restart. Webhook opzionale
|
||||
Discord/Gitea identico a `Watch-DiskSpace.ps1`.
|
||||
|
||||
### 2.8 [P2] [ ] IP-pool auto-riconciliazione vs clone reali — APERTO (2026-06-07)
|
||||
### 2.8 [P2] [x] IP-pool auto-riconciliazione vs clone reali — CHIUSO (2026-07-23)
|
||||
|
||||
`ip-pool.json` non viene riconciliato contro i clone vivi all'avvio. Un job
|
||||
killato mid-flight (SIGKILL/crash) **leaka il lease in modo permanente**; con
|
||||
@@ -312,6 +312,16 @@ mai rilasciati. Workaround manuale: reset a `{}` con `build-vms/` vuoto.
|
||||
cui clone-dir non esiste più in `CloneBaseDir`. Opzionale: allargare il pool
|
||||
(es. 201–210) per dare margine oltre parallelism. Aggiungere test.
|
||||
|
||||
**Risolto 2026-07-23 (W1 del web-UI plan)**: `IpSlotPool.reconcile(live_owners)`
|
||||
rilascia i lease il cui owner (== nome clone-dir) non è più fra le sotto-dir di
|
||||
`CloneBaseDir`; `operations.vms.reconcile_ip_leases(clone_base, pool)` calcola i
|
||||
`live_owners` e delega. `vm cleanup` lo invoca **solo** quando opera sul clone
|
||||
base reale (`base_path == config.paths.build_vms`) — un `--clone-base-dir`
|
||||
custom NON riconcilia (i lease appartengono al build-vms reale). Supporta
|
||||
`--what-if` (dry-run, nessuna scrittura). Test: `test_ip_pool.py` (reconcile),
|
||||
`test_operations_vms.py` (reconcile_ip_leases), `test_commands_vm.py` (CLI, real
|
||||
vs custom base). Allargamento del pool oltre 201–204: non fatto (opzionale).
|
||||
|
||||
### 2.9 [P2] [ ] `retention run` non copre backup/template/ISO — APERTO (2026-07-22)
|
||||
|
||||
`ci-retention-policy` agisce solo su **artifact, log e lease IP**. Su questo host
|
||||
|
||||
Reference in New Issue
Block a user