Skip to content

Commit 6d523bf

Browse files
authored
Fix wait command to always check replica count (#106)
1 parent d782389 commit 6d523bf

1 file changed

Lines changed: 9 additions & 12 deletions

File tree

src/commands/wait-cmd.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,21 @@ export async function handler (args: ArgumentsCamelCase) {
4141

4242
serviceStateMap = new Map<string, string>();
4343
services = await dockerode.listServices({filters: {label: [`com.docker.stack.namespace=${appName}`]}});
44-
tasks = await dockerode.listTasks({filters: {"label": [`com.docker.stack.namespace=${appName}`], "desired-state": ["running"]}}) as Task[];
44+
tasks = await dockerode.listTasks({filters: {"label": [`com.docker.stack.namespace=${appName}`]}}) as Task[];
4545

4646
for (const s of services) {
47-
if (s.UpdateStatus?.State) {
47+
const runningTasks = tasks.filter((t) => t.Status.State === "running" && t.ServiceID === s.ID);
48+
const desiredReplicas = s.Spec?.Mode?.Replicated?.Replicas ?? 0;
49+
50+
// Always check replica count first - compare running tasks against desired replicas
51+
if (runningTasks.length < desiredReplicas) {
52+
serviceStateMap.set(s.ID, "replicating");
53+
} else if (s.UpdateStatus?.State && ["updating", "paused", "rollback_started", "rollback_paused"].includes(s.UpdateStatus.State)) {
4854
serviceStateMap.set(s.ID, s.UpdateStatus.State);
49-
} else {
50-
const runningTasks = tasks.filter((t) => t.Status.State === "running" && t.ServiceID === s.ID);
51-
const totalTasks = tasks.filter((t) => t.ServiceID === s.ID);
52-
if (totalTasks.length > runningTasks.length) {
53-
serviceStateMap.set(s.ID, "replicating");
54-
}
5555
}
5656
}
5757

58-
const servicesUpdating = [];
59-
for (const [id, state] of serviceStateMap) {
60-
if (!["completed", "rollback_completed"].includes(state)) servicesUpdating.push([id, state]);
61-
}
58+
const servicesUpdating = [...serviceStateMap.entries()];
6259

6360
bail = servicesUpdating.length === 0;
6461
if (!bail) {

0 commit comments

Comments
 (0)