Skip to content

Commit 2967de2

Browse files
committed
Require consecutive settled checks in wait
1 parent 0a18a01 commit 2967de2

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

src/commands/wait-cmd.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@ export async function handler (args: ArgumentsCamelCase) {
2626
assertNumber(timeout, "timeout must be a number in ms");
2727
const interval = args.interval;
2828
assertNumber(interval, "interval must be a number in ms");
29+
const stableChecks = args.stableChecks;
30+
assertNumber(stableChecks, "stableChecks must be a number");
2931

3032
const dockerode = new Docker();
3133

3234
console.log(`Awaiting task reconciliation for ${timeout}ms`);
3335

3436
let services: Service[], tasks: Task[], timedout, bail, serviceStateMap;
37+
let stableStreak = 0;
3538
const start = Date.now();
3639
do {
3740
// To prevent high cpu usage
@@ -57,15 +60,19 @@ export async function handler (args: ArgumentsCamelCase) {
5760

5861
const servicesUpdating = [...serviceStateMap.entries()];
5962

60-
bail = servicesUpdating.length === 0;
61-
if (!bail) {
63+
if (servicesUpdating.length === 0) {
64+
stableStreak++;
65+
} else {
66+
stableStreak = 0;
6267
for (const [serviceId, state] of servicesUpdating) {
6368
const serviceName = services.find((s) => s.ID === serviceId)?.Spec?.Name;
6469
assert(serviceName != null, "serviceName must be a string");
6570
const errMsg = tasks.find((t) => t.ServiceID === serviceId && t.Status.Err)?.Status.Err;
6671
console.log(`${serviceName} is in ${state} state${errMsg ? ", error: '" + errMsg + "'" : ""}`);
6772
}
6873
}
74+
75+
bail = stableStreak >= stableChecks;
6976
} while (!timedout && !bail);
7077

7178
if (timedout) {
@@ -88,6 +95,11 @@ export function builder (yargs: Argv) {
8895
description: "How often reconciliation should run",
8996
default: 5000,
9097
});
98+
yargs.positional("stableChecks", {
99+
type: "number",
100+
description: "Consecutive settled checks required before success",
101+
default: 3,
102+
});
91103
yargs.hide("help");
92104
yargs.hide("version");
93105
return yargs;

0 commit comments

Comments
 (0)