@openfn/ws-worker 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +21 -21
- package/dist/start.js +31 -22
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -8,14 +8,16 @@ declare type CLAIM_ATTEMPT = {
|
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
declare type ServerOptions = {
|
|
11
|
-
backoff?: number;
|
|
12
|
-
maxBackoff?: number;
|
|
13
11
|
maxWorkflows?: number;
|
|
14
12
|
port?: number;
|
|
15
13
|
lightning?: string;
|
|
16
14
|
logger?: Logger;
|
|
17
15
|
noLoop?: boolean;
|
|
18
16
|
secret?: string;
|
|
17
|
+
backoff?: {
|
|
18
|
+
min?: number;
|
|
19
|
+
max?: number;
|
|
20
|
+
};
|
|
19
21
|
};
|
|
20
22
|
interface ServerApp extends Koa {
|
|
21
23
|
id: string;
|
package/dist/index.js
CHANGED
|
@@ -7,20 +7,9 @@ import { humanId } from "human-id";
|
|
|
7
7
|
import { createMockLogger as createMockLogger2 } from "@openfn/logger";
|
|
8
8
|
|
|
9
9
|
// src/util/try-with-backoff.ts
|
|
10
|
-
var
|
|
10
|
+
var BACKOFF_MULTIPLIER = 1.15;
|
|
11
11
|
var tryWithBackoff = (fn, opts = {}) => {
|
|
12
|
-
|
|
13
|
-
opts.timeout = 100;
|
|
14
|
-
}
|
|
15
|
-
if (!opts.attempts) {
|
|
16
|
-
opts.attempts = 1;
|
|
17
|
-
}
|
|
18
|
-
if (!opts.maxBackoff) {
|
|
19
|
-
opts.maxBackoff = MAX_BACKOFF;
|
|
20
|
-
}
|
|
21
|
-
let { timeout, attempts, maxAttempts } = opts;
|
|
22
|
-
timeout = timeout;
|
|
23
|
-
attempts = attempts;
|
|
12
|
+
const { min = 1e3, max = 1e4, maxAttempts, attempts = 1 } = opts;
|
|
24
13
|
let cancelled = false;
|
|
25
14
|
if (!opts.isCancelled) {
|
|
26
15
|
opts.isCancelled = () => cancelled;
|
|
@@ -43,11 +32,12 @@ var tryWithBackoff = (fn, opts = {}) => {
|
|
|
43
32
|
const nextOpts = {
|
|
44
33
|
maxAttempts,
|
|
45
34
|
attempts: attempts + 1,
|
|
46
|
-
|
|
35
|
+
min: Math.min(max, min * BACKOFF_MULTIPLIER),
|
|
36
|
+
max,
|
|
47
37
|
isCancelled: opts.isCancelled
|
|
48
38
|
};
|
|
49
39
|
tryWithBackoff(fn, nextOpts).then(resolve).catch(reject);
|
|
50
|
-
},
|
|
40
|
+
}, min);
|
|
51
41
|
}
|
|
52
42
|
});
|
|
53
43
|
promise.cancel = () => {
|
|
@@ -92,14 +82,14 @@ var claim = (channel, execute2, logger = mockLogger) => {
|
|
|
92
82
|
var claim_default = claim;
|
|
93
83
|
|
|
94
84
|
// src/api/workloop.ts
|
|
95
|
-
var startWorkloop = (channel, execute2, logger,
|
|
85
|
+
var startWorkloop = (channel, execute2, logger, minBackoff, maxBackoff) => {
|
|
96
86
|
let promise;
|
|
97
87
|
let cancelled = false;
|
|
98
88
|
const workLoop = () => {
|
|
99
89
|
if (!cancelled) {
|
|
100
90
|
promise = try_with_backoff_default(() => claim_default(channel, execute2, logger), {
|
|
101
|
-
|
|
102
|
-
|
|
91
|
+
min: minBackoff,
|
|
92
|
+
max: maxBackoff
|
|
103
93
|
});
|
|
104
94
|
promise.then(() => {
|
|
105
95
|
if (!cancelled) {
|
|
@@ -438,6 +428,8 @@ var worker_queue_default = connectToWorkerQueue;
|
|
|
438
428
|
|
|
439
429
|
// src/server.ts
|
|
440
430
|
var DEFAULT_PORT = 1234;
|
|
431
|
+
var MIN_BACKOFF = 1e3;
|
|
432
|
+
var MAX_BACKOFF = 1e3 * 30;
|
|
441
433
|
function connect(app, engine, logger, options = {}) {
|
|
442
434
|
logger.debug("Connecting to Lightning at", options.lightning);
|
|
443
435
|
worker_queue_default(options.lightning, app.id, options.secret).then(({ socket, channel }) => {
|
|
@@ -445,10 +437,18 @@ function connect(app, engine, logger, options = {}) {
|
|
|
445
437
|
app.socket = socket;
|
|
446
438
|
app.channel = channel;
|
|
447
439
|
if (!options.noLoop) {
|
|
440
|
+
if (app.killWorkloop) {
|
|
441
|
+
logger.info("Terminating old workloop");
|
|
442
|
+
app.killWorkloop();
|
|
443
|
+
}
|
|
448
444
|
logger.info("Starting workloop");
|
|
449
|
-
app.killWorkloop = workloop_default(
|
|
450
|
-
|
|
451
|
-
|
|
445
|
+
app.killWorkloop = workloop_default(
|
|
446
|
+
channel,
|
|
447
|
+
app.execute,
|
|
448
|
+
logger,
|
|
449
|
+
options.backoff?.min || MIN_BACKOFF,
|
|
450
|
+
options.backoff?.max || MAX_BACKOFF
|
|
451
|
+
);
|
|
452
452
|
} else {
|
|
453
453
|
logger.break();
|
|
454
454
|
logger.warn("Workloop not starting");
|
package/dist/start.js
CHANGED
|
@@ -4981,20 +4981,9 @@ import { humanId } from "human-id";
|
|
|
4981
4981
|
import { createMockLogger as createMockLogger2 } from "@openfn/logger";
|
|
4982
4982
|
|
|
4983
4983
|
// src/util/try-with-backoff.ts
|
|
4984
|
-
var
|
|
4984
|
+
var BACKOFF_MULTIPLIER = 1.15;
|
|
4985
4985
|
var tryWithBackoff = (fn, opts = {}) => {
|
|
4986
|
-
|
|
4987
|
-
opts.timeout = 100;
|
|
4988
|
-
}
|
|
4989
|
-
if (!opts.attempts) {
|
|
4990
|
-
opts.attempts = 1;
|
|
4991
|
-
}
|
|
4992
|
-
if (!opts.maxBackoff) {
|
|
4993
|
-
opts.maxBackoff = MAX_BACKOFF;
|
|
4994
|
-
}
|
|
4995
|
-
let { timeout, attempts, maxAttempts } = opts;
|
|
4996
|
-
timeout = timeout;
|
|
4997
|
-
attempts = attempts;
|
|
4986
|
+
const { min = 1e3, max = 1e4, maxAttempts, attempts = 1 } = opts;
|
|
4998
4987
|
let cancelled = false;
|
|
4999
4988
|
if (!opts.isCancelled) {
|
|
5000
4989
|
opts.isCancelled = () => cancelled;
|
|
@@ -5017,11 +5006,12 @@ var tryWithBackoff = (fn, opts = {}) => {
|
|
|
5017
5006
|
const nextOpts = {
|
|
5018
5007
|
maxAttempts,
|
|
5019
5008
|
attempts: attempts + 1,
|
|
5020
|
-
|
|
5009
|
+
min: Math.min(max, min * BACKOFF_MULTIPLIER),
|
|
5010
|
+
max,
|
|
5021
5011
|
isCancelled: opts.isCancelled
|
|
5022
5012
|
};
|
|
5023
5013
|
tryWithBackoff(fn, nextOpts).then(resolve5).catch(reject);
|
|
5024
|
-
},
|
|
5014
|
+
}, min);
|
|
5025
5015
|
}
|
|
5026
5016
|
});
|
|
5027
5017
|
promise.cancel = () => {
|
|
@@ -5066,14 +5056,14 @@ var claim = (channel, execute2, logger2 = mockLogger) => {
|
|
|
5066
5056
|
var claim_default = claim;
|
|
5067
5057
|
|
|
5068
5058
|
// src/api/workloop.ts
|
|
5069
|
-
var startWorkloop = (channel, execute2, logger2,
|
|
5059
|
+
var startWorkloop = (channel, execute2, logger2, minBackoff2, maxBackoff2) => {
|
|
5070
5060
|
let promise;
|
|
5071
5061
|
let cancelled = false;
|
|
5072
5062
|
const workLoop = () => {
|
|
5073
5063
|
if (!cancelled) {
|
|
5074
5064
|
promise = try_with_backoff_default(() => claim_default(channel, execute2, logger2), {
|
|
5075
|
-
|
|
5076
|
-
|
|
5065
|
+
min: minBackoff2,
|
|
5066
|
+
max: maxBackoff2
|
|
5077
5067
|
});
|
|
5078
5068
|
promise.then(() => {
|
|
5079
5069
|
if (!cancelled) {
|
|
@@ -5412,6 +5402,8 @@ var worker_queue_default = connectToWorkerQueue;
|
|
|
5412
5402
|
|
|
5413
5403
|
// src/server.ts
|
|
5414
5404
|
var DEFAULT_PORT = 1234;
|
|
5405
|
+
var MIN_BACKOFF = 1e3;
|
|
5406
|
+
var MAX_BACKOFF = 1e3 * 30;
|
|
5415
5407
|
function connect(app, engine, logger2, options = {}) {
|
|
5416
5408
|
logger2.debug("Connecting to Lightning at", options.lightning);
|
|
5417
5409
|
worker_queue_default(options.lightning, app.id, options.secret).then(({ socket, channel }) => {
|
|
@@ -5419,10 +5411,18 @@ function connect(app, engine, logger2, options = {}) {
|
|
|
5419
5411
|
app.socket = socket;
|
|
5420
5412
|
app.channel = channel;
|
|
5421
5413
|
if (!options.noLoop) {
|
|
5414
|
+
if (app.killWorkloop) {
|
|
5415
|
+
logger2.info("Terminating old workloop");
|
|
5416
|
+
app.killWorkloop();
|
|
5417
|
+
}
|
|
5422
5418
|
logger2.info("Starting workloop");
|
|
5423
|
-
app.killWorkloop = workloop_default(
|
|
5424
|
-
|
|
5425
|
-
|
|
5419
|
+
app.killWorkloop = workloop_default(
|
|
5420
|
+
channel,
|
|
5421
|
+
app.execute,
|
|
5422
|
+
logger2,
|
|
5423
|
+
options.backoff?.min || MIN_BACKOFF,
|
|
5424
|
+
options.backoff?.max || MAX_BACKOFF
|
|
5425
|
+
);
|
|
5426
5426
|
} else {
|
|
5427
5427
|
logger2.break();
|
|
5428
5428
|
logger2.warn("Workloop not starting");
|
|
@@ -5532,6 +5532,9 @@ var args = yargs_default(hideBin(process.argv)).command("server", "Start a ws-wo
|
|
|
5532
5532
|
description: "Use a mock runtime engine",
|
|
5533
5533
|
default: false,
|
|
5534
5534
|
type: "boolean"
|
|
5535
|
+
}).option("backoff", {
|
|
5536
|
+
description: "Claim backoff rules: min/max (s)",
|
|
5537
|
+
default: "1/10"
|
|
5535
5538
|
}).parse();
|
|
5536
5539
|
var logger = createLogger("SRV", { level: args.log });
|
|
5537
5540
|
if (args.lightning === "mock") {
|
|
@@ -5547,13 +5550,19 @@ if (args.lightning === "mock") {
|
|
|
5547
5550
|
}
|
|
5548
5551
|
args.secret = WORKER_SECRET;
|
|
5549
5552
|
}
|
|
5553
|
+
var [minBackoff, maxBackoff] = args.backoff.split("/").map((n) => parseInt(n, 10) * 1e3);
|
|
5554
|
+
console.log(minBackoff, maxBackoff);
|
|
5550
5555
|
function engineReady(engine) {
|
|
5551
5556
|
server_default(engine, {
|
|
5552
5557
|
port: args.port,
|
|
5553
5558
|
lightning: args.lightning,
|
|
5554
5559
|
logger,
|
|
5555
5560
|
secret: args.secret,
|
|
5556
|
-
noLoop: !args.loop
|
|
5561
|
+
noLoop: !args.loop,
|
|
5562
|
+
backoff: {
|
|
5563
|
+
min: minBackoff,
|
|
5564
|
+
max: maxBackoff
|
|
5565
|
+
}
|
|
5557
5566
|
});
|
|
5558
5567
|
}
|
|
5559
5568
|
if (args.mock) {
|