@resolveio/server-lib 22.2.43 → 22.2.46

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.
@@ -272,8 +272,61 @@ var WorkerDispatcherManager = /** @class */ (function () {
272
272
  this.dispatchQueue();
273
273
  }
274
274
  };
275
- WorkerDispatcherManager.prototype.disconnectWorker = function (workerId) {
275
+ WorkerDispatcherManager.prototype.failActiveWorkerTask = function (task, reason) {
276
+ var _a;
277
+ if (!task || !task.taskId) {
278
+ return;
279
+ }
280
+ var pendingTask = this._pendingTasks.get(task.taskId);
281
+ if (pendingTask) {
282
+ clearTimeout(pendingTask.timeout);
283
+ if (pendingTask.promise) {
284
+ pendingTask.promise.reject(reason);
285
+ }
286
+ this._pendingTasks.delete(task.taskId);
287
+ }
288
+ this._taskTimings.delete(task.taskId);
289
+ if (this._clientRequests[task.taskId]) {
290
+ delete this._clientRequests[task.taskId];
291
+ }
292
+ if (!((_a = task.userContext) === null || _a === void 0 ? void 0 : _a.id_ws) || task.messageId === undefined || task.messageId === null) {
293
+ return;
294
+ }
295
+ var clientWS = this._websocketManager ? this._websocketManager.getWebSocket(task.userContext.id_ws) : null;
296
+ if (!clientWS) {
297
+ return;
298
+ }
299
+ var response = {
300
+ messageId: task.messageId,
301
+ hasError: true,
302
+ data: reason
303
+ };
304
+ this._websocketManager.send(clientWS, response);
305
+ };
306
+ WorkerDispatcherManager.prototype.disconnectWorker = function (workerId, reason) {
307
+ var e_4, _a;
308
+ var _b;
309
+ if (reason === void 0) { reason = 'Worker disconnected.'; }
310
+ var worker = this._workers.find(function (w) { return w.id === workerId; });
276
311
  this._workers = this._workers.filter(function (w) { return w.id !== workerId; });
312
+ if (!worker || !((_b = worker.activeTasks) === null || _b === void 0 ? void 0 : _b.length)) {
313
+ return;
314
+ }
315
+ var activeTasks = __spreadArray([], __read(worker.activeTasks), false);
316
+ worker.activeTasks = [];
317
+ try {
318
+ for (var activeTasks_1 = __values(activeTasks), activeTasks_1_1 = activeTasks_1.next(); !activeTasks_1_1.done; activeTasks_1_1 = activeTasks_1.next()) {
319
+ var activeTask = activeTasks_1_1.value;
320
+ this.failActiveWorkerTask(activeTask, reason);
321
+ }
322
+ }
323
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
324
+ finally {
325
+ try {
326
+ if (activeTasks_1_1 && !activeTasks_1_1.done && (_a = activeTasks_1.return)) _a.call(activeTasks_1);
327
+ }
328
+ finally { if (e_4) throw e_4.error; }
329
+ }
277
330
  };
278
331
  WorkerDispatcherManager.prototype.hasWorkers = function () {
279
332
  return this._workers.length > 0;
@@ -545,7 +598,7 @@ var WorkerDispatcherManager = /** @class */ (function () {
545
598
  * The main loop that assigns tasks from _taskQueue to any worker that has capacity.
546
599
  */
547
600
  WorkerDispatcherManager.prototype.dispatchQueue = function () {
548
- var e_4, _a;
601
+ var e_5, _a;
549
602
  var _this = this;
550
603
  if (!this._taskQueue.length) {
551
604
  return;
@@ -576,7 +629,7 @@ var WorkerDispatcherManager = /** @class */ (function () {
576
629
  while (this._taskQueue.length > 0) {
577
630
  var assigned = false;
578
631
  try {
579
- for (var priorityMatchers_1 = (e_4 = void 0, __values(priorityMatchers)), priorityMatchers_1_1 = priorityMatchers_1.next(); !priorityMatchers_1_1.done; priorityMatchers_1_1 = priorityMatchers_1.next()) {
632
+ for (var priorityMatchers_1 = (e_5 = void 0, __values(priorityMatchers)), priorityMatchers_1_1 = priorityMatchers_1.next(); !priorityMatchers_1_1.done; priorityMatchers_1_1 = priorityMatchers_1.next()) {
580
633
  var matcher = priorityMatchers_1_1.value;
581
634
  if (tryAssignTask(matcher)) {
582
635
  assigned = true;
@@ -584,12 +637,12 @@ var WorkerDispatcherManager = /** @class */ (function () {
584
637
  }
585
638
  }
586
639
  }
587
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
640
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
588
641
  finally {
589
642
  try {
590
643
  if (priorityMatchers_1_1 && !priorityMatchers_1_1.done && (_a = priorityMatchers_1.return)) _a.call(priorityMatchers_1);
591
644
  }
592
- finally { if (e_4) throw e_4.error; }
645
+ finally { if (e_5) throw e_5.error; }
593
646
  }
594
647
  if (!assigned) {
595
648
  this.logNoWorkerAvailability();
@@ -871,17 +924,11 @@ var WorkerDispatcherManager = /** @class */ (function () {
871
924
  this.logWorkerEvent('workerTaskAssigned', logPayload);
872
925
  }
873
926
  var timeoutHandle = setTimeout(function () {
874
- var pending = _this._pendingTasks.get(task.taskId);
875
927
  var timeoutAt = Date.now();
876
928
  var queuedAt = timing.queuedAt;
877
929
  var queueWaitMs = queuedAt ? (0, common_1.round)(dispatchedAt - queuedAt) : null;
878
930
  var dispatchToTimeoutMs = (0, common_1.round)(timeoutAt - dispatchedAt);
879
- if (pending) {
880
- if (pending.promise) {
881
- pending.promise.reject('Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method);
882
- }
883
- _this._pendingTasks.delete(task.taskId);
884
- }
931
+ var timeoutMessage = 'Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method;
885
932
  var publicationInfo = _this.getPublicationLogInfo(task.method, task.params);
886
933
  var logPayload = {
887
934
  taskId: task.taskId,
@@ -901,17 +948,18 @@ var WorkerDispatcherManager = /** @class */ (function () {
901
948
  Object.assign(logPayload, publicationInfo);
902
949
  }
903
950
  _this.logWorkerEvent('workerTaskTimeout', logPayload);
904
- worker.activeTasks = worker.activeTasks.filter(function (a) { return a.taskId !== task.taskId; });
905
- _this._taskTimings.delete(task.taskId);
906
- if (task.userContext && task.userContext.id_ws) {
907
- var timeoutRes = {
908
- messageId: task.messageId,
909
- hasError: true,
910
- data: 'Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method
911
- };
912
- var clientWS = _this._websocketManager.getWebSocket(task.userContext.id_ws);
913
- if (clientWS) {
914
- _this._websocketManager.send(clientWS, timeoutRes);
951
+ _this.disconnectWorker(worker.id, timeoutMessage);
952
+ if (worker.ws && worker.ws.readyState !== WebSocket.CLOSED) {
953
+ try {
954
+ worker.ws.close();
955
+ }
956
+ catch (_a) {
957
+ try {
958
+ worker.ws.terminate();
959
+ }
960
+ catch (_b) {
961
+ // Ignore socket cleanup errors after timeout.
962
+ }
915
963
  }
916
964
  }
917
965
  }, method.timeoutOverride || (1000 * 60 * 2));
@@ -938,7 +986,7 @@ var WorkerDispatcherManager = /** @class */ (function () {
938
986
  }
939
987
  };
940
988
  WorkerDispatcherManager.prototype.logNoWorkerAvailability = function () {
941
- var e_5, _a;
989
+ var e_6, _a;
942
990
  var _this = this;
943
991
  if (!this.shouldDebug()) {
944
992
  return;
@@ -981,12 +1029,12 @@ var WorkerDispatcherManager = /** @class */ (function () {
981
1029
  _loop_1(task);
982
1030
  }
983
1031
  }
984
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
1032
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
985
1033
  finally {
986
1034
  try {
987
1035
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
988
1036
  }
989
- finally { if (e_5) throw e_5.error; }
1037
+ finally { if (e_6) throw e_6.error; }
990
1038
  }
991
1039
  };
992
1040
  WorkerDispatcherManager.prototype.shouldDebug = function () {
@@ -1165,22 +1213,18 @@ var WorkerDispatcherManager = /** @class */ (function () {
1165
1213
  if (ws.readyState !== WebSocket.OPEN) {
1166
1214
  if (typeof payload !== 'string') {
1167
1215
  var task_1 = payload;
1168
- this._taskQueue.unshift(task_1);
1169
- this.dispatchQueue();
1170
- this.disconnectWorker(ws['id_worker']);
1171
- ws.close();
1172
- var pendingTask = this._pendingTasks.get(task_1.taskId);
1173
- if (pendingTask) {
1174
- clearTimeout(pendingTask.timeout);
1175
- this._pendingTasks.delete(task_1.taskId);
1176
- if (pendingTask.promise) {
1177
- pendingTask.promise.reject('Worker socket not open.');
1178
- }
1216
+ this.disconnectWorker(ws['id_worker'], 'Worker socket not open for method: ' + task_1.method);
1217
+ try {
1218
+ ws.close();
1179
1219
  }
1220
+ catch (_a) { }
1180
1221
  }
1181
1222
  else {
1182
- this.disconnectWorker(ws['id_worker']);
1183
- ws.close();
1223
+ this.disconnectWorker(ws['id_worker'], 'Worker socket not open.');
1224
+ try {
1225
+ ws.close();
1226
+ }
1227
+ catch (_b) { }
1184
1228
  }
1185
1229
  return;
1186
1230
  }
@@ -1189,8 +1233,11 @@ var WorkerDispatcherManager = /** @class */ (function () {
1189
1233
  ws.send(payload);
1190
1234
  }
1191
1235
  catch (err) {
1192
- this.disconnectWorker(ws['id_worker']);
1193
- ws.close();
1236
+ this.disconnectWorker(ws['id_worker'], 'Failed to send worker payload: ' + (err === null || err === void 0 ? void 0 : err.toString()));
1237
+ try {
1238
+ ws.close();
1239
+ }
1240
+ catch (_c) { }
1194
1241
  console.error('Failed to send worker payload:', err);
1195
1242
  }
1196
1243
  return;
@@ -1201,22 +1248,15 @@ var WorkerDispatcherManager = /** @class */ (function () {
1201
1248
  ws.send(payloadBuffer);
1202
1249
  }
1203
1250
  catch (err) {
1204
- this._taskQueue.unshift(task);
1205
- this.dispatchQueue();
1206
1251
  if (this._methodManager.getEnableDebug()) {
1207
1252
  console.log(new Date(), 'Sending to Server', task);
1208
1253
  }
1209
- this.disconnectWorker(ws['id_worker']);
1210
- ws.close();
1211
- console.error('Failed to send worker response:', err);
1212
- var pendingTask = this._pendingTasks.get(task.taskId);
1213
- if (pendingTask) {
1214
- clearTimeout(pendingTask.timeout);
1215
- this._pendingTasks.delete(task.taskId);
1216
- if (pendingTask.promise) {
1217
- pendingTask.promise.reject('Failed to send worker response: ' + (err === null || err === void 0 ? void 0 : err.toString()));
1218
- }
1254
+ this.disconnectWorker(ws['id_worker'], 'Failed to send worker response for method: ' + task.method);
1255
+ try {
1256
+ ws.close();
1219
1257
  }
1258
+ catch (_d) { }
1259
+ console.error('Failed to send worker response:', err);
1220
1260
  }
1221
1261
  };
1222
1262
  return WorkerDispatcherManager;