Commit 4fc4523
committed
fix(ops): stop VMs before recreating them, with the real grace period
recreate-vm.sh recreates with `docker compose up -d --force-recreate`, whose
implicit stop uses compose's own --timeout -- 10 SECONDS by default -- rather
than the service's declared stop_grace_period. A dockurr/windows guest cannot
shut down in ten seconds, so compose stops waiting and goes straight to
removing a container that is still running:
Error response from daemon: cannot remove container "1d5e3c2f...":
container is running: stop the container before removing or force remove
The script then exits 1 and the VM is left unhealthy with its network_mode
sidecar stranded on a dead netns -- the exact outcome recreate-vm.sh exists to
prevent.
It is timing-dependent, which is why it can look fine for a while. On the
deployment where this was found the script recreated two VMs successfully three
times inside one hour, then failed on the fourth attempt when the guest took
longer than ten seconds to go down.
The targets are now stopped explicitly first with a timeout that matches the
grace period, and the same value is passed to `up` so its implicit stop cannot
fall back to 10s. RECREATE_STOP_TIMEOUT overrides the 120s default; anything
calling this script on a timeout of its own should stay above it.
The script had no direct test coverage. tests/test_recreate_vm_script.py covers
it through --dry-run, so it needs no Docker daemon: stop-before-up ordering, the
timeout default and its override, and the sidecar expansion that is the reason
the script exists. Four of the seven fail against the current version.
Worth noting for #15: that watchdog delegates recovery to this script, so
merging it without this fix ships an automated recovery path that hits the
failure above.
Dockerfile.test copies a named subset of scripts/ and recreate-vm.sh was not in
it, so the new tests could not see the script. It is added to that COPY line;
nothing else about the image changes.1 parent 5264ef6 commit 4fc4523
3 files changed
Lines changed: 150 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
| 28 | + | |
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
36 | 53 | | |
37 | 54 | | |
38 | | - | |
39 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
40 | 61 | | |
41 | 62 | | |
42 | 63 | | |
| |||
47 | 68 | | |
48 | 69 | | |
49 | 70 | | |
| 71 | + | |
50 | 72 | | |
51 | 73 | | |
52 | 74 | | |
| |||
117 | 139 | | |
118 | 140 | | |
119 | 141 | | |
120 | | - | |
| 142 | + | |
| 143 | + | |
121 | 144 | | |
122 | 145 | | |
123 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
124 | 151 | | |
125 | | - | |
| 152 | + | |
126 | 153 | | |
127 | 154 | | |
128 | 155 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
0 commit comments