pwi-plata-type 0.4.161 → 0.4.162
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/__BUILD__/bin/plata-api.js +8 -9
- package/__BUILD__/bin/plata-api.js.map +1 -1
- package/__BUILD__/bin/plata-cluster.js +2 -3
- package/__BUILD__/bin/plata-cluster.js.map +1 -1
- package/__BUILD__/libs/cluster/cluster-controller.js +76 -0
- package/__BUILD__/libs/cluster/cluster-controller.js.map +1 -0
- package/__BUILD__/libs/cluster.js +79 -20
- package/__BUILD__/libs/cluster.js.map +1 -1
- package/__BUILD__/libs/hot-reload.js +1 -1
- package/__BUILD__/libs/hot-reload.js.map +1 -1
- package/package.json +1 -1
- package/src/@types/cluster.actions.d.ts +2 -1
- package/src/@types/cluster.d.ts +13 -4
- package/src/@types/global.d.ts +1 -0
- package/src/bin/plata-api.ts +13 -11
- package/src/bin/plata-cluster.ts +5 -4
- package/src/libs/cluster/cluster-controller.ts +94 -0
- package/src/libs/cluster.ts +85 -24
- package/src/libs/hot-reload.ts +1 -1
|
@@ -20,12 +20,6 @@ const main = async () => {
|
|
|
20
20
|
workers = +Plata.config._PLATA_API_WORKERS || undefined;
|
|
21
21
|
}
|
|
22
22
|
const clustersPromise = require("@@/clusters/*.*");
|
|
23
|
-
cluster.startCluster({
|
|
24
|
-
name: '__PLATA_EXPRESS__',
|
|
25
|
-
env: Plata.config.ENV ?? 'prod',
|
|
26
|
-
onStart: async () => { },
|
|
27
|
-
workers: workers,
|
|
28
|
-
});
|
|
29
23
|
if (process.argv.includes('--hot'))
|
|
30
24
|
Plata.FastPromise(() => hot_reload_1.HotReload.setupHotReloadPrimary());
|
|
31
25
|
const clusters = await clustersPromise;
|
|
@@ -37,7 +31,7 @@ const main = async () => {
|
|
|
37
31
|
const promises = [];
|
|
38
32
|
clusters.forEach(c => {
|
|
39
33
|
const config = c.exports.default;
|
|
40
|
-
promises.push(cluster.
|
|
34
|
+
promises.push(cluster._startCluster(config).then(r => {
|
|
41
35
|
if (r !== null) {
|
|
42
36
|
console.log(r);
|
|
43
37
|
process.exit(0);
|
|
@@ -46,6 +40,12 @@ const main = async () => {
|
|
|
46
40
|
});
|
|
47
41
|
await Promise.all(promises);
|
|
48
42
|
}
|
|
43
|
+
await cluster._startCluster({
|
|
44
|
+
name: '__PLATA_EXPRESS__',
|
|
45
|
+
env: Plata.config.ENV ?? 'prod',
|
|
46
|
+
onStart: async () => { },
|
|
47
|
+
workers: workers,
|
|
48
|
+
});
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
51
|
if (Plata.config._PLATA_WORKER_NAME === '__PLATA_EXPRESS__') {
|
|
@@ -141,8 +141,7 @@ const main = async () => {
|
|
|
141
141
|
});
|
|
142
142
|
return;
|
|
143
143
|
}
|
|
144
|
-
|
|
145
|
-
await c.default.onStart();
|
|
144
|
+
await cluster._onStartCluster(Plata.config._PLATA_WORKER_NAME, Plata.config._PLATA_WORKER_TYPE);
|
|
146
145
|
}
|
|
147
146
|
}
|
|
148
147
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plata-api.js","sourceRoot":"","sources":["../../src/bin/plata-api.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,6CAAqD;AACrD,2CAAyC;AACzC,gEAAiC;AACjC,0DAA4B;AAC5B,2CAA0E;AAC1E,2CAAiD;AACjD,mDAA8C;AAEvC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IAC3B,MAAM,OAAO,GAAG,IAAI,6BAAmB,EAAE,CAAA;IAEzC,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QAEtB,IAAI,OAAO,GAAuB,SAAS,CAAA;QAE3C,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,SAAS,CAAA;QAC3D,CAAC;QAED,MAAM,eAAe,GAA2D,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAE1G,
|
|
1
|
+
{"version":3,"file":"plata-api.js","sourceRoot":"","sources":["../../src/bin/plata-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ async function main() {
|
|
|
14
14
|
const promises = [];
|
|
15
15
|
clusters.forEach(c => {
|
|
16
16
|
const config = c.exports.default;
|
|
17
|
-
promises.push(cluster.
|
|
17
|
+
promises.push(cluster._startCluster(config).then(r => {
|
|
18
18
|
if (r !== null) {
|
|
19
19
|
console.log(r);
|
|
20
20
|
process.exit(0);
|
|
@@ -31,8 +31,7 @@ async function main() {
|
|
|
31
31
|
});
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
await c.default.onStart();
|
|
34
|
+
await cluster._onStartCluster(Plata.config._PLATA_WORKER_NAME, Plata.config._PLATA_WORKER_TYPE);
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
//# sourceMappingURL=plata-cluster.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plata-cluster.js","sourceRoot":"","sources":["../../src/bin/plata-cluster.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"plata-cluster.js","sourceRoot":"","sources":["../../src/bin/plata-cluster.ts"],"names":[],"mappings":";;AAEA,oBAwCC;AA1CD,6CAAqD;AAE9C,KAAK,UAAU,IAAI;IACtB,MAAM,OAAO,GAAG,IAAI,6BAAmB,EAAE,CAAA;IAEzC,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACtB,MAAM,eAAe,GAA2D,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAC1G,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAA;QAEtC,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QAED,MAAM,QAAQ,GAAoB,EAAE,CAAA;QAEpC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACjB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAA;YAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBACjD,IAAI,CAAC,KAAK,IAAI,EAAG,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oBACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnB,CAAC;YACL,CAAC,CAAC,CAAC,CAAA;QACP,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;SAAM,CAAC;QACJ,IAAI,KAAK,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,OAAO,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,oDAAoD;aAC5D,CAAC,CAAA;YAEF,OAAM;QACV,CAAC;QAED,MAAM,OAAO,CAAC,eAAe,CACzB,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAC/B,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAClC,CAAA;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlataClusterController = void 0;
|
|
4
|
+
class PlataClusterController {
|
|
5
|
+
clusterManager;
|
|
6
|
+
clusterName;
|
|
7
|
+
msgId = 0;
|
|
8
|
+
workersPids = new Set();
|
|
9
|
+
constructor(clusterManager, name) {
|
|
10
|
+
this.clusterManager = clusterManager;
|
|
11
|
+
this.clusterName = name;
|
|
12
|
+
}
|
|
13
|
+
async loadWorkers() {
|
|
14
|
+
const result = await new Promise(resolve => {
|
|
15
|
+
const id = `${process.pid}_${this.msgId++}_GETPID`;
|
|
16
|
+
const cleanUp = () => {
|
|
17
|
+
process.removeListener('message', onResponse);
|
|
18
|
+
};
|
|
19
|
+
const onResponse = (event) => {
|
|
20
|
+
if (event.action !== `GET-PIDS-CLUSTER-RESULT-${id}`)
|
|
21
|
+
return;
|
|
22
|
+
cleanUp();
|
|
23
|
+
const e = event;
|
|
24
|
+
return resolve(e.msg);
|
|
25
|
+
};
|
|
26
|
+
process.on('message', onResponse);
|
|
27
|
+
this.clusterManager.send({
|
|
28
|
+
action: 'GET-PIDS-CLUSTER',
|
|
29
|
+
msg: {
|
|
30
|
+
id,
|
|
31
|
+
name: this.clusterName
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
if (result.errorID !== undefined) {
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
const pids = new Set(result);
|
|
39
|
+
pids.delete(process.pid);
|
|
40
|
+
this.workersPids = pids;
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
getWorkersPids() {
|
|
44
|
+
return [...this.workersPids];
|
|
45
|
+
}
|
|
46
|
+
setOnDeadWorker(handle) {
|
|
47
|
+
const handleMessage = ((event) => {
|
|
48
|
+
if (event.action !== 'DEAD-WORKER-NOTIFY')
|
|
49
|
+
return;
|
|
50
|
+
if (event.msg.clusterName !== this.clusterName)
|
|
51
|
+
return;
|
|
52
|
+
this.workersPids.delete(event.msg.pidDead);
|
|
53
|
+
this.workersPids.add(event.msg.newPid);
|
|
54
|
+
return handle(event.msg.newPid, event.msg.pidDead);
|
|
55
|
+
}).bind(this);
|
|
56
|
+
process.on('message', handleMessage);
|
|
57
|
+
}
|
|
58
|
+
async sendMsgToPID(pid, event) {
|
|
59
|
+
if (!this.workersPids.has(pid))
|
|
60
|
+
return {
|
|
61
|
+
errorID: 'PLCLUCONTSNDPID001',
|
|
62
|
+
msg: `PID ${pid} não existe no cluster`
|
|
63
|
+
};
|
|
64
|
+
return this.clusterManager.sendToWorkerPid(pid, event);
|
|
65
|
+
}
|
|
66
|
+
async setOnMessage(handle) {
|
|
67
|
+
const handleMessage = ((msg) => {
|
|
68
|
+
if (msg.action === undefined)
|
|
69
|
+
return;
|
|
70
|
+
return handle(msg);
|
|
71
|
+
}).bind(this);
|
|
72
|
+
process.on('message', handleMessage);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.PlataClusterController = PlataClusterController;
|
|
76
|
+
//# sourceMappingURL=cluster-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster-controller.js","sourceRoot":"","sources":["../../../src/libs/cluster/cluster-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
18
|
};
|
|
@@ -6,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
20
|
exports.PlataClusterManager = void 0;
|
|
7
21
|
const node_cluster_1 = __importDefault(require("node:cluster"));
|
|
8
22
|
const node_os_1 = require("node:os");
|
|
23
|
+
const cluster_controller_1 = require("./cluster/cluster-controller");
|
|
9
24
|
class PlataClusterManager {
|
|
10
25
|
NodeCluster = node_cluster_1.default;
|
|
11
26
|
constructor() {
|
|
@@ -17,10 +32,10 @@ class PlataClusterManager {
|
|
|
17
32
|
};
|
|
18
33
|
}
|
|
19
34
|
if (this.NodeCluster.eventNames().indexOf('exit') === -1) {
|
|
20
|
-
this.NodeCluster.on('exit', (t => t.
|
|
35
|
+
this.NodeCluster.on('exit', (t => t._onWorkerKilled(t))(this));
|
|
21
36
|
}
|
|
22
37
|
if (this.NodeCluster.eventNames().indexOf('message') === -1) {
|
|
23
|
-
this.NodeCluster.on('message', ((t) => t.
|
|
38
|
+
this.NodeCluster.on('message', ((t) => t._onMessage(t))(this));
|
|
24
39
|
}
|
|
25
40
|
}
|
|
26
41
|
else {
|
|
@@ -29,7 +44,7 @@ class PlataClusterManager {
|
|
|
29
44
|
};
|
|
30
45
|
}
|
|
31
46
|
}
|
|
32
|
-
async
|
|
47
|
+
async _startCluster(config) {
|
|
33
48
|
if (!Plata.cluster.isPrimary)
|
|
34
49
|
return {
|
|
35
50
|
errorID: 'PBLCLWS0002',
|
|
@@ -58,7 +73,7 @@ class PlataClusterManager {
|
|
|
58
73
|
config
|
|
59
74
|
};
|
|
60
75
|
for (let i = 0; i < config.workers; i++) {
|
|
61
|
-
const w = this.
|
|
76
|
+
const w = this._fork(config, false);
|
|
62
77
|
if (w.process.pid === undefined) {
|
|
63
78
|
return {
|
|
64
79
|
errorID: 'PBLCLWS0003',
|
|
@@ -68,6 +83,19 @@ class PlataClusterManager {
|
|
|
68
83
|
}
|
|
69
84
|
cluster.pids.push(w.process.pid);
|
|
70
85
|
}
|
|
86
|
+
if (config.controller !== undefined) {
|
|
87
|
+
console.log(`Starting controller worker on cluster ${config.name}`);
|
|
88
|
+
const w = this._fork(config, true);
|
|
89
|
+
if (w.process.pid === undefined) {
|
|
90
|
+
return {
|
|
91
|
+
errorID: 'PBLCLWS0003',
|
|
92
|
+
msg: `Erro while starting controller worker from cluster ${config.name}`,
|
|
93
|
+
error: w.process.exitCode
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
cluster.controllerPid = w.process.pid;
|
|
97
|
+
cluster.pids.push(w.process.pid);
|
|
98
|
+
}
|
|
71
99
|
if (config.onExit !== undefined) {
|
|
72
100
|
this.NodeCluster.on(this.getClusterEvents(config.name).worker.exit, config.onExit);
|
|
73
101
|
}
|
|
@@ -77,11 +105,12 @@ class PlataClusterManager {
|
|
|
77
105
|
isPrimary() {
|
|
78
106
|
return this.NodeCluster.isPrimary;
|
|
79
107
|
}
|
|
80
|
-
|
|
108
|
+
_fork(config, isController) {
|
|
81
109
|
return this.NodeCluster.fork({
|
|
82
110
|
...config.workersEnv,
|
|
83
111
|
ENV: config.env,
|
|
84
|
-
_PLATA_WORKER_NAME: config.name
|
|
112
|
+
_PLATA_WORKER_NAME: config.name,
|
|
113
|
+
_PLATA_WORKER_TYPE: isController ? 'CONTROLLER' : 'WORKER'
|
|
85
114
|
});
|
|
86
115
|
}
|
|
87
116
|
getClusterEvents(clusterName) {
|
|
@@ -92,7 +121,7 @@ class PlataClusterManager {
|
|
|
92
121
|
}
|
|
93
122
|
};
|
|
94
123
|
}
|
|
95
|
-
|
|
124
|
+
_onWorkerKilled(t) {
|
|
96
125
|
return (worker, code, signal) => {
|
|
97
126
|
if (worker.process.pid === undefined)
|
|
98
127
|
return;
|
|
@@ -104,13 +133,29 @@ class PlataClusterManager {
|
|
|
104
133
|
console.log(`O Worker ${worker.process.pid} do cluster ${c.config.name} morreu com o codigo ${code} ${signal ?? ''}`);
|
|
105
134
|
console.log(`Iniciando um novo worker no cluster ${c.config.name}`);
|
|
106
135
|
node_cluster_1.default.emit(t.getClusterEvents(c.config.name).worker.exit, worker, code, signal);
|
|
107
|
-
const
|
|
136
|
+
const wasController = c.controllerPid === worker.process.pid;
|
|
137
|
+
const w = t._fork(c.config, wasController);
|
|
108
138
|
const pidIndex = c.pids.indexOf(worker.process.pid);
|
|
109
139
|
c.pids[pidIndex] = w.process.pid ?? 0;
|
|
140
|
+
if (wasController) {
|
|
141
|
+
c.controllerPid = w.process.pid ?? 0;
|
|
142
|
+
}
|
|
143
|
+
if (c.controllerPid !== undefined) {
|
|
144
|
+
if (wasController)
|
|
145
|
+
return;
|
|
146
|
+
t._sendMsgToPid(c.controllerPid, {
|
|
147
|
+
action: 'DEAD-WORKER-NOTIFY',
|
|
148
|
+
msg: {
|
|
149
|
+
clusterName: c.config.name,
|
|
150
|
+
newPid: w.process.pid,
|
|
151
|
+
pidDead: worker.process.pid,
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
110
155
|
}
|
|
111
156
|
};
|
|
112
157
|
}
|
|
113
|
-
async
|
|
158
|
+
async _sendMsgToAllWorkers(msg) {
|
|
114
159
|
if (this.NodeCluster.workers === undefined)
|
|
115
160
|
return;
|
|
116
161
|
for (const worker of Object.values(this.NodeCluster.workers)) {
|
|
@@ -127,6 +172,9 @@ class PlataClusterManager {
|
|
|
127
172
|
const clusterIndex = Plata.cluster.clusters.findIndex(cluster => cluster.config.name === name);
|
|
128
173
|
if (clusterIndex === -1)
|
|
129
174
|
return;
|
|
175
|
+
if (Plata.cluster.clusters[clusterIndex].controllerPid !== undefined) {
|
|
176
|
+
return this._sendMsgToPid(Plata.cluster.clusters[clusterIndex].controllerPid, msg);
|
|
177
|
+
}
|
|
130
178
|
const pids = Plata.cluster.clusters[clusterIndex].pids;
|
|
131
179
|
for (const worker of Object.values(this.NodeCluster.workers)) {
|
|
132
180
|
if (worker === undefined)
|
|
@@ -135,7 +183,7 @@ class PlataClusterManager {
|
|
|
135
183
|
worker.send(msg);
|
|
136
184
|
}
|
|
137
185
|
}
|
|
138
|
-
async
|
|
186
|
+
async _sendMsgToPid(pid, msg) {
|
|
139
187
|
if (this.NodeCluster.workers === undefined)
|
|
140
188
|
return;
|
|
141
189
|
if (!Plata.cluster.isPrimary)
|
|
@@ -148,9 +196,9 @@ class PlataClusterManager {
|
|
|
148
196
|
worker.send(msg);
|
|
149
197
|
}
|
|
150
198
|
}
|
|
151
|
-
async
|
|
199
|
+
async _getClusterPids(name, id) {
|
|
152
200
|
if (this.NodeCluster.workers === undefined)
|
|
153
|
-
return this.
|
|
201
|
+
return this._sendMsgToAllWorkers({
|
|
154
202
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
155
203
|
msg: {
|
|
156
204
|
errorID: 'PCLGETCLPIDS001',
|
|
@@ -158,7 +206,7 @@ class PlataClusterManager {
|
|
|
158
206
|
}
|
|
159
207
|
});
|
|
160
208
|
if (!Plata.cluster.isPrimary)
|
|
161
|
-
return this.
|
|
209
|
+
return this._sendMsgToAllWorkers({
|
|
162
210
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
163
211
|
msg: {
|
|
164
212
|
errorID: 'PCLGETCLPIDS002',
|
|
@@ -167,7 +215,7 @@ class PlataClusterManager {
|
|
|
167
215
|
});
|
|
168
216
|
const clusterIndex = Plata.cluster.clusters.findIndex(cluster => cluster.config.name === name);
|
|
169
217
|
if (clusterIndex === -1)
|
|
170
|
-
return this.
|
|
218
|
+
return this._sendMsgToAllWorkers({
|
|
171
219
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
172
220
|
msg: {
|
|
173
221
|
errorID: 'PCLGETCLPIDS002',
|
|
@@ -175,24 +223,25 @@ class PlataClusterManager {
|
|
|
175
223
|
error: name
|
|
176
224
|
}
|
|
177
225
|
});
|
|
178
|
-
return this.
|
|
226
|
+
return this._sendMsgToAllWorkers({
|
|
179
227
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
180
228
|
msg: Plata.cluster.clusters[clusterIndex].pids
|
|
181
229
|
});
|
|
182
230
|
}
|
|
183
|
-
|
|
231
|
+
_onMessage(t) {
|
|
184
232
|
return (worker, actionEvent) => {
|
|
185
233
|
Plata.switchUnionObject(actionEvent, 'action', {
|
|
186
234
|
_default: async (v) => console.log(`Action inválida: ${actionEvent.action}`),
|
|
187
235
|
"ECHO-CLUSTER": async ({ msg }) => t.sendMsgToCluster(msg.name, msg.data),
|
|
188
|
-
'ECHO-PID': async ({ msg }) => t.
|
|
189
|
-
|
|
236
|
+
'ECHO-PID': async ({ msg }) => t._sendMsgToPid(msg.pid, msg.data),
|
|
237
|
+
'DEAD-WORKER-NOTIFY': async () => console.log(`Action inválida: ${actionEvent.action}`),
|
|
238
|
+
ECHO: async ({ msg }) => t._sendMsgToAllWorkers(msg),
|
|
190
239
|
KILL: async ({ msg }) => {
|
|
191
240
|
console.log(`Process kill requested: ${msg}`);
|
|
192
241
|
process.exit(0);
|
|
193
242
|
},
|
|
194
|
-
RELOAD: async () => t.
|
|
195
|
-
"GET-PIDS-CLUSTER": async ({ msg }) => t.
|
|
243
|
+
RELOAD: async () => t._sendMsgToAllWorkers({ action: 'RELOAD', msg: true }),
|
|
244
|
+
"GET-PIDS-CLUSTER": async ({ msg }) => t._getClusterPids(msg.name.toString(), msg.id),
|
|
196
245
|
});
|
|
197
246
|
};
|
|
198
247
|
}
|
|
@@ -217,6 +266,16 @@ class PlataClusterManager {
|
|
|
217
266
|
}
|
|
218
267
|
});
|
|
219
268
|
}
|
|
269
|
+
async _onStartCluster(name, type) {
|
|
270
|
+
const c = require(`@@/clusters/${name}`);
|
|
271
|
+
if (type === 'CONTROLLER' && c.default.controller !== undefined) {
|
|
272
|
+
const controller = new cluster_controller_1.PlataClusterController(this, name);
|
|
273
|
+
await c.default.controller(controller);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
await c.default.onStart();
|
|
277
|
+
}
|
|
220
278
|
}
|
|
221
279
|
exports.PlataClusterManager = PlataClusterManager;
|
|
280
|
+
__exportStar(require("./cluster/cluster-controller"), exports);
|
|
222
281
|
//# sourceMappingURL=cluster.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/libs/cluster.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/libs/cluster.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hot-reload.js","sourceRoot":"","sources":["../../src/libs/hot-reload.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA8B;AAC9B,0BAAiC;AACjC,mCAAoC;AAEpC,IAAiB,SAAS,CA2DzB;AA3DD,WAAiB,SAAS;IACtB,SAAgB,SAAS,CAAC,QAAgB;QACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9B,OAAO,KAAK,CACf;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YAChC,OAAO,KAAK,CACf;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;YACjC,OAAO,KAAK,CACf;QAED,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElD,IAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACxB,OAAO,KAAK,CACf;YACL,CAAC;QACL,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAxBe,mBAAS,YAwBxB,CAAA;IAEM,KAAK,UAAU,MAAM;QACxB,MAAM,kBAAU,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,KAAK,CAAC,UAAU;YAC1B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,KAAK;YACvB,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,gBAAY,CAAC,mBAAmB,EAAE,CAAA;QAEtD,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"hot-reload.js","sourceRoot":"","sources":["../../src/libs/hot-reload.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA8B;AAC9B,0BAAiC;AACjC,mCAAoC;AAEpC,IAAiB,SAAS,CA2DzB;AA3DD,WAAiB,SAAS;IACtB,SAAgB,SAAS,CAAC,QAAgB;QACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9B,OAAO,KAAK,CACf;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YAChC,OAAO,KAAK,CACf;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;YACjC,OAAO,KAAK,CACf;QAED,IAAI,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAElD,IAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACxB,OAAO,KAAK,CACf;YACL,CAAC;QACL,CAAC;QAED,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAxBe,mBAAS,YAwBxB,CAAA;IAEM,KAAK,UAAU,MAAM;QACxB,MAAM,kBAAU,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,KAAK,CAAC,UAAU;YAC1B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,KAAK;YACvB,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,gBAAY,CAAC,mBAAmB,EAAE,CAAA;QAEtD,OAAO,CAAC,oBAAoB,CAAC;YACzB,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,IAAI;SACZ,CAAC,CAAA;IACN,CAAC;IAdqB,gBAAM,SAc3B,CAAA;IAEM,KAAK,UAAU,qBAAqB;QACvC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAClC,IAAA,oBAAK,EAAC,KAAK,CAAC,UAAU,EAAE;YACpB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,SAAS,CAAC,SAAS;SAC9B,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC;IAPqB,+BAAqB,wBAO1C,CAAA;IAEM,KAAK,UAAU,oBAAoB;QACtC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,EAAE;YAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;gBACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAClB;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IANqB,8BAAoB,uBAMzC,CAAA;AACL,CAAC,EA3DgB,SAAS,yBAAT,SAAS,QA2DzB"}
|
package/package.json
CHANGED
|
@@ -17,10 +17,11 @@ declare namespace Cluster {
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
interface PlataEvents {
|
|
20
|
-
emit(...args: GetEmitFuncionsArgs<PlataClusterActions> |
|
|
20
|
+
emit(...args: GetEmitFuncionsArgs<PlataClusterActions> | Cluster.UserActions)
|
|
21
21
|
on(...args: GetOnFuncionsArgs<PlataClusterActions> | GetOnFuncionsArgs<UserClusterActions>)
|
|
22
22
|
once(...args: GetOnFuncionsArgs<PlataClusterActions> | GetOnFuncionsArgs<UserClusterActions>)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
type Actions = GetActions<PlataClusterActions> | GetActions<UserClusterActions>
|
|
26
|
+
type UserActions = GetActions<UserClusterActions>
|
|
26
27
|
}
|
package/src/@types/cluster.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference path="cluster.actions.d.ts" />
|
|
2
2
|
|
|
3
|
+
import { ClusterController } from '++/libs/cluster/cluster-controller'
|
|
3
4
|
import * as cluster from 'node:cluster'
|
|
4
5
|
|
|
5
6
|
declare global {
|
|
@@ -10,32 +11,40 @@ declare global {
|
|
|
10
11
|
name: string,
|
|
11
12
|
env: PlataEnv,
|
|
12
13
|
onStart: () => Promise<void>
|
|
14
|
+
controller?: (controller: ClusterController) => Promise<void>
|
|
13
15
|
workers?: number,
|
|
14
16
|
workersEnv?: any,
|
|
15
17
|
onExit?: (worker: cluster.Worker, code: number, signal: string) => void,
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
interface ClusterConfig {
|
|
19
|
-
|
|
21
|
+
controllerPid?: number
|
|
22
|
+
pids: number[]
|
|
20
23
|
config: WorkerConfig
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
interface PlataClusterActions {
|
|
24
27
|
KILL: string
|
|
25
|
-
ECHO:
|
|
28
|
+
ECHO: Cluster.UserActions
|
|
26
29
|
'ECHO-CLUSTER': {
|
|
27
30
|
name: string
|
|
28
|
-
data:
|
|
31
|
+
data: Cluster.UserActions
|
|
29
32
|
}
|
|
30
33
|
'ECHO-PID': {
|
|
31
34
|
pid: number
|
|
32
|
-
data:
|
|
35
|
+
data: Cluster.UserActions
|
|
33
36
|
}
|
|
34
37
|
'GET-PIDS-CLUSTER': {
|
|
35
38
|
name: LooseAutocomplete<'__PLATA_EXPRESS__'>
|
|
36
39
|
id: string
|
|
37
40
|
}
|
|
38
41
|
|
|
42
|
+
'DEAD-WORKER-NOTIFY': {
|
|
43
|
+
clusterName: string
|
|
44
|
+
pidDead: number
|
|
45
|
+
newPid: number
|
|
46
|
+
}
|
|
47
|
+
|
|
39
48
|
RELOAD: true
|
|
40
49
|
|
|
41
50
|
[K: `GET-PIDS-CLUSTER-RESULT-${string}`]: PlataResult<number[]>
|
package/src/@types/global.d.ts
CHANGED
package/src/bin/plata-api.ts
CHANGED
|
@@ -20,13 +20,6 @@ export const main = async () => {
|
|
|
20
20
|
|
|
21
21
|
const clustersPromise: RequireFolderReturn<{ default: Cluster.WorkerConfig }> = require("@@/clusters/*.*")
|
|
22
22
|
|
|
23
|
-
cluster.startCluster({
|
|
24
|
-
name: '__PLATA_EXPRESS__',
|
|
25
|
-
env: Plata.config.ENV ?? 'prod',
|
|
26
|
-
onStart: async () => {},
|
|
27
|
-
workers: workers,
|
|
28
|
-
})
|
|
29
|
-
|
|
30
23
|
if (process.argv.includes('--hot'))
|
|
31
24
|
Plata.FastPromise(() => HotReload.setupHotReloadPrimary())
|
|
32
25
|
;
|
|
@@ -43,7 +36,7 @@ export const main = async () => {
|
|
|
43
36
|
|
|
44
37
|
clusters.forEach(c => {
|
|
45
38
|
const config = c.exports.default
|
|
46
|
-
promises.push(cluster.
|
|
39
|
+
promises.push(cluster._startCluster(config).then(r => {
|
|
47
40
|
if (r !== null) {
|
|
48
41
|
console.log(r)
|
|
49
42
|
process.exit(0)
|
|
@@ -53,6 +46,14 @@ export const main = async () => {
|
|
|
53
46
|
|
|
54
47
|
await Promise.all(promises)
|
|
55
48
|
}
|
|
49
|
+
|
|
50
|
+
// Inicia a API
|
|
51
|
+
await cluster._startCluster({
|
|
52
|
+
name: '__PLATA_EXPRESS__',
|
|
53
|
+
env: Plata.config.ENV ?? 'prod',
|
|
54
|
+
onStart: async () => {},
|
|
55
|
+
workers: workers,
|
|
56
|
+
})
|
|
56
57
|
} else {
|
|
57
58
|
if (Plata.config._PLATA_WORKER_NAME === '__PLATA_EXPRESS__') {
|
|
58
59
|
if (process.argv.includes('--hot'))
|
|
@@ -180,9 +181,10 @@ export const main = async () => {
|
|
|
180
181
|
return
|
|
181
182
|
}
|
|
182
183
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
await cluster._onStartCluster(
|
|
185
|
+
Plata.config._PLATA_WORKER_NAME,
|
|
186
|
+
Plata.config._PLATA_WORKER_TYPE,
|
|
187
|
+
)
|
|
186
188
|
}
|
|
187
189
|
}
|
|
188
190
|
}
|
package/src/bin/plata-cluster.ts
CHANGED
|
@@ -16,7 +16,7 @@ export async function main() {
|
|
|
16
16
|
|
|
17
17
|
clusters.forEach(c => {
|
|
18
18
|
const config = c.exports.default
|
|
19
|
-
promises.push(cluster.
|
|
19
|
+
promises.push(cluster._startCluster(config).then(r => {
|
|
20
20
|
if (r !== null) {
|
|
21
21
|
console.log(r)
|
|
22
22
|
process.exit(0)
|
|
@@ -35,8 +35,9 @@ export async function main() {
|
|
|
35
35
|
return
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
await cluster._onStartCluster(
|
|
39
|
+
Plata.config._PLATA_WORKER_NAME,
|
|
40
|
+
Plata.config._PLATA_WORKER_TYPE,
|
|
41
|
+
)
|
|
41
42
|
}
|
|
42
43
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { PlataClusterManager } from "../cluster"
|
|
2
|
+
|
|
3
|
+
export class PlataClusterController {
|
|
4
|
+
public readonly clusterManager: PlataClusterManager
|
|
5
|
+
public readonly clusterName: string
|
|
6
|
+
|
|
7
|
+
private msgId = 0
|
|
8
|
+
private workersPids: Set<number> = new Set()
|
|
9
|
+
|
|
10
|
+
constructor(clusterManager: PlataClusterManager, name: string) {
|
|
11
|
+
this.clusterManager = clusterManager
|
|
12
|
+
this.clusterName = name
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public async loadWorkers(): PlataPromise<true> {
|
|
16
|
+
const result: PlataResult<number[]> = await new Promise(resolve => {
|
|
17
|
+
const id = `${process.pid}_${this.msgId++}_GETPID`
|
|
18
|
+
|
|
19
|
+
const cleanUp = () => {
|
|
20
|
+
process.removeListener('message', onResponse)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const onResponse = (event: Cluster.Actions) => {
|
|
24
|
+
if (event.action !== `GET-PIDS-CLUSTER-RESULT-${id}`)
|
|
25
|
+
return
|
|
26
|
+
;
|
|
27
|
+
|
|
28
|
+
cleanUp()
|
|
29
|
+
|
|
30
|
+
const e: Extract<Cluster.Actions, { action: `GET-PIDS-CLUSTER-RESULT-${string}` }> = event as any
|
|
31
|
+
|
|
32
|
+
return resolve(e.msg)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
process.on('message', onResponse)
|
|
36
|
+
this.clusterManager.send({
|
|
37
|
+
action: 'GET-PIDS-CLUSTER',
|
|
38
|
+
msg: {
|
|
39
|
+
id,
|
|
40
|
+
name: this.clusterName
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
if (result.errorID !== undefined) {
|
|
46
|
+
return result
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const pids = new Set(result)
|
|
50
|
+
|
|
51
|
+
pids.delete(process.pid)
|
|
52
|
+
|
|
53
|
+
this.workersPids = pids
|
|
54
|
+
|
|
55
|
+
return true
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public getWorkersPids(): number[] {
|
|
59
|
+
return [...this.workersPids]
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public setOnDeadWorker(handle: (newPid: number, oldPid: number) => Promise<void>) {
|
|
63
|
+
const handleMessage = ((event: Cluster.Actions) => {
|
|
64
|
+
if (event.action !== 'DEAD-WORKER-NOTIFY') return
|
|
65
|
+
if (event.msg.clusterName !== this.clusterName) return
|
|
66
|
+
|
|
67
|
+
this.workersPids.delete(event.msg.pidDead)
|
|
68
|
+
this.workersPids.add(event.msg.newPid)
|
|
69
|
+
|
|
70
|
+
return handle(event.msg.newPid, event.msg.pidDead)
|
|
71
|
+
}).bind(this)
|
|
72
|
+
|
|
73
|
+
process.on('message', handleMessage)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public async sendMsgToPID(pid: number, event: Cluster.UserActions): PlataPromise<boolean> {
|
|
77
|
+
if (!this.workersPids.has(pid)) return {
|
|
78
|
+
errorID: 'PLCLUCONTSNDPID001',
|
|
79
|
+
msg: `PID ${pid} não existe no cluster`
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return this.clusterManager.sendToWorkerPid(pid, event)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public async setOnMessage(handle: (msg: Cluster.UserActions) => Promise<void>) {
|
|
86
|
+
const handleMessage = ((msg) => {
|
|
87
|
+
if (msg.action === undefined) return
|
|
88
|
+
|
|
89
|
+
return (handle as any)(msg)
|
|
90
|
+
}).bind(this)
|
|
91
|
+
|
|
92
|
+
process.on('message', handleMessage)
|
|
93
|
+
}
|
|
94
|
+
}
|
package/src/libs/cluster.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import cluster from "node:cluster";
|
|
2
2
|
import { cpus } from "node:os";
|
|
3
|
+
import { PlataClusterController } from './cluster/cluster-controller'
|
|
3
4
|
|
|
4
5
|
export class PlataClusterManager {
|
|
5
6
|
private readonly NodeCluster = cluster
|
|
@@ -11,17 +12,17 @@ export class PlataClusterManager {
|
|
|
11
12
|
isPrimary: true,
|
|
12
13
|
clusters: []
|
|
13
14
|
}
|
|
14
|
-
}
|
|
15
|
+
}
|
|
15
16
|
|
|
16
17
|
if (this.NodeCluster.eventNames().indexOf('exit') === -1) {
|
|
17
18
|
this.NodeCluster.on('exit', (
|
|
18
|
-
t => t.
|
|
19
|
+
t => t._onWorkerKilled(t)
|
|
19
20
|
)(this))
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
if (this.NodeCluster.eventNames().indexOf('message') === -1) {
|
|
23
24
|
this.NodeCluster.on('message', (
|
|
24
|
-
(t) => t.
|
|
25
|
+
(t) => t._onMessage(t)
|
|
25
26
|
)(this))
|
|
26
27
|
}
|
|
27
28
|
} else {
|
|
@@ -31,7 +32,7 @@ export class PlataClusterManager {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
public async
|
|
35
|
+
public async _startCluster(config: Cluster.WorkerConfig): Promise<MaybePlataError> {
|
|
35
36
|
if (!Plata.cluster.isPrimary) return {
|
|
36
37
|
errorID: 'PBLCLWS0002',
|
|
37
38
|
msg: 'startCluster must be called from primary process',
|
|
@@ -64,7 +65,7 @@ export class PlataClusterManager {
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
for (let i = 0; i < config.workers; i++) {
|
|
67
|
-
const w = this.
|
|
68
|
+
const w = this._fork(config, false)
|
|
68
69
|
|
|
69
70
|
if (w.process.pid === undefined) {
|
|
70
71
|
return {
|
|
@@ -77,6 +78,22 @@ export class PlataClusterManager {
|
|
|
77
78
|
cluster.pids.push(w.process.pid)
|
|
78
79
|
}
|
|
79
80
|
|
|
81
|
+
if (config.controller !== undefined) {
|
|
82
|
+
console.log(`Starting controller worker on cluster ${config.name}`)
|
|
83
|
+
const w = this._fork(config, true)
|
|
84
|
+
|
|
85
|
+
if (w.process.pid === undefined) {
|
|
86
|
+
return {
|
|
87
|
+
errorID: 'PBLCLWS0003',
|
|
88
|
+
msg: `Erro while starting controller worker from cluster ${config.name}`,
|
|
89
|
+
error: w.process.exitCode
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
cluster.controllerPid = w.process.pid
|
|
94
|
+
cluster.pids.push(w.process.pid)
|
|
95
|
+
}
|
|
96
|
+
|
|
80
97
|
if (config.onExit !== undefined) {
|
|
81
98
|
this.NodeCluster.on(this.getClusterEvents(config.name).worker.exit, config.onExit)
|
|
82
99
|
}
|
|
@@ -90,14 +107,14 @@ export class PlataClusterManager {
|
|
|
90
107
|
return this.NodeCluster.isPrimary
|
|
91
108
|
}
|
|
92
109
|
|
|
93
|
-
public
|
|
110
|
+
public _fork(config: Cluster.WorkerConfig, isController: boolean) {
|
|
94
111
|
return this.NodeCluster.fork({
|
|
95
112
|
...config.workersEnv,
|
|
96
113
|
ENV: config.env,
|
|
97
|
-
_PLATA_WORKER_NAME: config.name
|
|
114
|
+
_PLATA_WORKER_NAME: config.name,
|
|
115
|
+
_PLATA_WORKER_TYPE: isController ? 'CONTROLLER' : 'WORKER'
|
|
98
116
|
})
|
|
99
117
|
}
|
|
100
|
-
|
|
101
118
|
public getClusterEvents(clusterName: string) {
|
|
102
119
|
const base = `plata.cluster.${clusterName}`
|
|
103
120
|
return {
|
|
@@ -106,7 +123,7 @@ export class PlataClusterManager {
|
|
|
106
123
|
}
|
|
107
124
|
}
|
|
108
125
|
}
|
|
109
|
-
public
|
|
126
|
+
public _onWorkerKilled(t: this) {
|
|
110
127
|
return (worker: Cluster.Worker, code: number, signal: string) => {
|
|
111
128
|
if (worker.process.pid === undefined) return
|
|
112
129
|
if (!Plata.cluster.isPrimary) return
|
|
@@ -128,16 +145,35 @@ export class PlataClusterManager {
|
|
|
128
145
|
signal,
|
|
129
146
|
)
|
|
130
147
|
|
|
131
|
-
const
|
|
148
|
+
const wasController = c.controllerPid === worker.process.pid
|
|
149
|
+
|
|
150
|
+
const w = t._fork(c.config, wasController)
|
|
132
151
|
|
|
133
152
|
const pidIndex = c.pids.indexOf(worker.process.pid)
|
|
134
153
|
|
|
135
154
|
c.pids[pidIndex] = w.process.pid ?? 0
|
|
155
|
+
|
|
156
|
+
if (wasController) {
|
|
157
|
+
c.controllerPid = w.process.pid ?? 0
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (c.controllerPid !== undefined) {
|
|
161
|
+
if (wasController) return
|
|
162
|
+
|
|
163
|
+
t._sendMsgToPid(c.controllerPid, {
|
|
164
|
+
action: 'DEAD-WORKER-NOTIFY',
|
|
165
|
+
msg: {
|
|
166
|
+
clusterName: c.config.name,
|
|
167
|
+
newPid: w.process.pid,
|
|
168
|
+
pidDead: worker.process.pid,
|
|
169
|
+
}
|
|
170
|
+
} as any)
|
|
171
|
+
}
|
|
136
172
|
}
|
|
137
173
|
}
|
|
138
174
|
}
|
|
139
175
|
|
|
140
|
-
public async
|
|
176
|
+
public async _sendMsgToAllWorkers(msg: Cluster.Actions) {
|
|
141
177
|
if (this.NodeCluster.workers === undefined) return
|
|
142
178
|
|
|
143
179
|
for (const worker of Object.values(this.NodeCluster.workers)) {
|
|
@@ -155,6 +191,10 @@ export class PlataClusterManager {
|
|
|
155
191
|
|
|
156
192
|
if (clusterIndex === -1) return
|
|
157
193
|
|
|
194
|
+
if (Plata.cluster.clusters[clusterIndex].controllerPid !== undefined) {
|
|
195
|
+
return this._sendMsgToPid(Plata.cluster.clusters[clusterIndex].controllerPid, msg)
|
|
196
|
+
}
|
|
197
|
+
|
|
158
198
|
const pids = Plata.cluster.clusters[clusterIndex].pids
|
|
159
199
|
|
|
160
200
|
for (const worker of Object.values(this.NodeCluster.workers)) {
|
|
@@ -166,7 +206,7 @@ export class PlataClusterManager {
|
|
|
166
206
|
}
|
|
167
207
|
}
|
|
168
208
|
|
|
169
|
-
public async
|
|
209
|
+
public async _sendMsgToPid<T extends Cluster.Actions>(pid: number, msg: T) {
|
|
170
210
|
if (this.NodeCluster.workers === undefined) return
|
|
171
211
|
if (!Plata.cluster.isPrimary) return
|
|
172
212
|
|
|
@@ -181,9 +221,9 @@ export class PlataClusterManager {
|
|
|
181
221
|
}
|
|
182
222
|
}
|
|
183
223
|
|
|
184
|
-
public async
|
|
224
|
+
public async _getClusterPids(name: string, id: string) {
|
|
185
225
|
if (this.NodeCluster.workers === undefined)
|
|
186
|
-
return this.
|
|
226
|
+
return this._sendMsgToAllWorkers({
|
|
187
227
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
188
228
|
msg: {
|
|
189
229
|
errorID: 'PCLGETCLPIDS001',
|
|
@@ -193,7 +233,7 @@ export class PlataClusterManager {
|
|
|
193
233
|
;
|
|
194
234
|
|
|
195
235
|
if (!Plata.cluster.isPrimary)
|
|
196
|
-
return this.
|
|
236
|
+
return this._sendMsgToAllWorkers({
|
|
197
237
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
198
238
|
msg: {
|
|
199
239
|
errorID: 'PCLGETCLPIDS002',
|
|
@@ -205,7 +245,7 @@ export class PlataClusterManager {
|
|
|
205
245
|
const clusterIndex = Plata.cluster.clusters.findIndex(cluster => cluster.config.name === name)
|
|
206
246
|
|
|
207
247
|
if (clusterIndex === -1)
|
|
208
|
-
return this.
|
|
248
|
+
return this._sendMsgToAllWorkers({
|
|
209
249
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
210
250
|
msg: {
|
|
211
251
|
errorID: 'PCLGETCLPIDS002',
|
|
@@ -215,31 +255,33 @@ export class PlataClusterManager {
|
|
|
215
255
|
})
|
|
216
256
|
;
|
|
217
257
|
|
|
218
|
-
return this.
|
|
258
|
+
return this._sendMsgToAllWorkers({
|
|
219
259
|
action: `GET-PIDS-CLUSTER-RESULT-${id}`,
|
|
220
260
|
msg: Plata.cluster.clusters[clusterIndex].pids
|
|
221
261
|
})
|
|
222
262
|
}
|
|
223
263
|
|
|
224
|
-
public
|
|
264
|
+
public _onMessage(t: this) {
|
|
225
265
|
return (worker: Cluster.Worker, actionEvent: Cluster.GetActions<Cluster.PlataClusterActions>) => {
|
|
226
266
|
Plata.switchUnionObject(actionEvent, 'action', {
|
|
227
267
|
_default: async (v) => console.log(`Action inválida: ${actionEvent.action}`),
|
|
228
268
|
|
|
229
269
|
"ECHO-CLUSTER": async ({ msg }) => t.sendMsgToCluster(msg.name, msg.data),
|
|
230
270
|
|
|
231
|
-
'ECHO-PID': async ({ msg }) => t.
|
|
271
|
+
'ECHO-PID': async ({ msg }) => t._sendMsgToPid(msg.pid, msg.data),
|
|
272
|
+
|
|
273
|
+
'DEAD-WORKER-NOTIFY': async () => console.log(`Action inválida: ${actionEvent.action}`),
|
|
232
274
|
|
|
233
|
-
ECHO: async ({ msg }) => t.
|
|
275
|
+
ECHO: async ({ msg }) => t._sendMsgToAllWorkers(msg),
|
|
234
276
|
|
|
235
277
|
KILL: async ({ msg }) => {
|
|
236
278
|
console.log(`Process kill requested: ${msg}`)
|
|
237
279
|
process.exit(0)
|
|
238
280
|
},
|
|
239
281
|
|
|
240
|
-
RELOAD: async () => t.
|
|
282
|
+
RELOAD: async () => t._sendMsgToAllWorkers({ action: 'RELOAD', msg: true }),
|
|
241
283
|
|
|
242
|
-
"GET-PIDS-CLUSTER": async ({ msg }) => t.
|
|
284
|
+
"GET-PIDS-CLUSTER": async ({ msg }) => t._getClusterPids(msg.name.toString(), msg.id),
|
|
243
285
|
})
|
|
244
286
|
}
|
|
245
287
|
}
|
|
@@ -258,7 +300,7 @@ export class PlataClusterManager {
|
|
|
258
300
|
return process.send(msg)
|
|
259
301
|
}
|
|
260
302
|
|
|
261
|
-
public async sendToWorkerPid(pid: number, data: Cluster.
|
|
303
|
+
public async sendToWorkerPid(pid: number, data: Cluster.UserActions) {
|
|
262
304
|
return this.send({
|
|
263
305
|
action: 'ECHO-PID',
|
|
264
306
|
msg: {
|
|
@@ -267,4 +309,23 @@ export class PlataClusterManager {
|
|
|
267
309
|
}
|
|
268
310
|
})
|
|
269
311
|
}
|
|
270
|
-
|
|
312
|
+
|
|
313
|
+
public async _onStartCluster(name: string, type: typeof Plata.config._PLATA_WORKER_TYPE) {
|
|
314
|
+
const c: { default: Cluster.WorkerConfig } = require(`@@/clusters/${name}`)
|
|
315
|
+
|
|
316
|
+
if (type === 'CONTROLLER' && c.default.controller !== undefined) {
|
|
317
|
+
const controller = new PlataClusterController(
|
|
318
|
+
this,
|
|
319
|
+
name,
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
await c.default.controller(controller)
|
|
323
|
+
|
|
324
|
+
return
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
await c.default.onStart()
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
export * from './cluster/cluster-controller'
|