Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2bbbf5b

Browse files
committed
Implement timeout mechanisms for post-jobs-to-cluster-master features
1 parent d970011 commit 2bbbf5b

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,21 @@ wsgilite.GET('/requestActionOnClusterMaster', async function (request, response,
199199
return e.errorMessage;
200200
});
201201
});
202+
// Post jobs to cluster master(Timeout cases)
203+
wsgilite.addClusterMasterRequestHandler(async (worker, msg, handle) => {
204+
if (msg && msg.data && msg.data.action === 'streaming_timeout') {
205+
var rp = require('request-promise-native');
206+
await rp.get('https://www.sample-videos.com/video/mp4/240/big_buck_bunny_240p_30mb.mp4');
207+
return 'ok';
208+
}
209+
});
210+
wsgilite.GET('/requestActionOnClusterMasterTimeout', async function (request, response, meta) {
211+
// Timeout for 3000 ms
212+
return wsgilite.requestActionOnClusterMaster({action: 'streaming_timeout'}, 3000).catch((e)=>{
213+
console.log(`I got error: ${e.errorStacktrace}`);
214+
return e.errorStacktrace;
215+
});
216+
});
202217
// if (require('cluster').isMaster) {
203218
// // It could be called on cluster master
204219
// wsgilite.requestActionOnClusterMaster({action: 'readrecord'}).catch((e)=>{

demo/simple-routing.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,21 @@ wsgilite.GET('/requestActionOnClusterMaster', async function (request, response,
154154
return e.errorMessage;
155155
});
156156
});
157+
// Post jobs to cluster master(Timeout cases)
158+
wsgilite.addClusterMasterRequestHandler(async (worker, msg, handle) => {
159+
if (msg && msg.data && msg.data.action === 'streaming_timeout') {
160+
var rp = require('request-promise-native');
161+
await rp.get('https://www.sample-videos.com/video/mp4/240/big_buck_bunny_240p_30mb.mp4');
162+
return 'ok';
163+
}
164+
});
165+
wsgilite.GET('/requestActionOnClusterMasterTimeout', async function (request, response, meta) {
166+
// Timeout for 3000 ms
167+
return wsgilite.requestActionOnClusterMaster({action: 'streaming_timeout'}, 3000).catch((e)=>{
168+
console.log(`I got error: ${e.errorStacktrace}`);
169+
return e.errorStacktrace;
170+
});
171+
});
157172
// if (require('cluster').isMaster) {
158173
// // It could be called on cluster master
159174
// wsgilite.requestActionOnClusterMaster({action: 'readrecord'}).catch((e)=>{

wsgilite.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ class WSGILite extends DefSubRoute {
384384
removeClusterMasterResponseHandler(clusterMasterResponseHandler) {
385385
this.clusterMasterResponseHandlers = this.clusterMasterResponseHandlers.filter((item)=>item !== clusterMasterResponseHandler);
386386
}
387-
requestActionOnClusterMaster(data) {
387+
requestActionOnClusterMaster(data, timeout) {
388388
let requestId = `${process.pid}_${Date.now()}_${Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)}`;
389389
let msgRequest = {event: MSG_WSGILITE_DO_THINGS_MASTER, requestId, data};
390390

@@ -393,6 +393,16 @@ class WSGILite extends DefSubRoute {
393393
let worker;
394394
let handle;
395395
let msgResponse = {event: MSG_WSGILITE_DO_THINGS_WORKER_SUCCESS, requestId};
396+
if (timeout && timeout > 0) {
397+
setTimeout(() => {
398+
let e = new Error('Timeout');
399+
msgResponse.error = e;
400+
msgResponse.errorMessage = e.toString();
401+
msgResponse.errorStacktrace = e.stack;
402+
msgResponse.event = MSG_WSGILITE_DO_THINGS_WORKER_FAILURE;
403+
reject(msgResponse);
404+
}, timeout);
405+
}
396406

397407
this.handleClusterMasterRequest(worker, msgRequest, handle).catch((e)=>{
398408
msgResponse.error = e;
@@ -418,6 +428,17 @@ class WSGILite extends DefSubRoute {
418428
};
419429
this.addClusterMasterResponseHandler(handler);
420430
process.send(msgRequest);
431+
432+
if (timeout && timeout > 0) {
433+
setTimeout(() => {
434+
this.removeClusterMasterResponseHandler(handler);
435+
436+
let e = new Error('Timeout');
437+
let msgResponse = {event: MSG_WSGILITE_DO_THINGS_WORKER_FAILURE, requestId, error: e, errorMessage: e.toString(), errorStacktrace: e.stack}
438+
msgResponse.event = MSG_WSGILITE_DO_THINGS_WORKER_FAILURE;
439+
reject(msgResponse);
440+
}, timeout);
441+
}
421442
});
422443
}
423444
handleClusterMasterRequest(worker, msg, handle) {
@@ -429,7 +450,7 @@ class WSGILite extends DefSubRoute {
429450
const errorHandler = (e) => {
430451
if (worker && (!errorHandled)) {
431452
console.log(e);
432-
worker.send({event: MSG_WSGILITE_DO_THINGS_WORKER_FAILURE, requestId, error: e, errorMessage: e.toString(), errorStacktrace: e.stacktrace});
453+
worker.send({event: MSG_WSGILITE_DO_THINGS_WORKER_FAILURE, requestId, error: e, errorMessage: e.toString(), errorStacktrace: e.stack});
433454
}
434455
errorHandled = true;
435456
return Promise.reject(e);

0 commit comments

Comments
 (0)