Remote JS executor to work with tb-node of previous version
This commit is contained in:
parent
831332be7b
commit
2d262146ad
@ -41,34 +41,34 @@ message RemoteJsResponse {
|
||||
}
|
||||
|
||||
message JsCompileRequest {
|
||||
string scriptHash = 1;
|
||||
string functionName = 2;
|
||||
string scriptBody = 3;
|
||||
string functionName = 3;
|
||||
string scriptBody = 4;
|
||||
string scriptHash = 5;
|
||||
}
|
||||
|
||||
message JsReleaseRequest {
|
||||
string scriptHash = 1;
|
||||
string functionName = 2;
|
||||
string functionName = 3;
|
||||
string scriptHash = 4;
|
||||
}
|
||||
|
||||
message JsReleaseResponse {
|
||||
bool success = 1;
|
||||
string scriptHash = 2;
|
||||
string scriptHash = 4;
|
||||
}
|
||||
|
||||
message JsCompileResponse {
|
||||
bool success = 1;
|
||||
string scriptHash = 2;
|
||||
JsInvokeErrorCode errorCode = 3;
|
||||
string errorDetails = 4;
|
||||
JsInvokeErrorCode errorCode = 4;
|
||||
string errorDetails = 5;
|
||||
string scriptHash = 6;
|
||||
}
|
||||
|
||||
message JsInvokeRequest {
|
||||
string scriptHash = 1;
|
||||
string functionName = 2;
|
||||
string scriptBody = 3;
|
||||
int32 timeout = 4;
|
||||
repeated string args = 5;
|
||||
string functionName = 3;
|
||||
string scriptBody = 4;
|
||||
int32 timeout = 5;
|
||||
repeated string args = 6;
|
||||
string scriptHash = 7;
|
||||
}
|
||||
|
||||
message JsInvokeResponse {
|
||||
|
||||
@ -16,6 +16,8 @@
|
||||
|
||||
|
||||
export interface TbMessage {
|
||||
scriptIdMSB: string; // deprecated
|
||||
scriptIdLSB: string; // deprecated
|
||||
scriptHash: string;
|
||||
}
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ import config from 'config';
|
||||
import { _logger } from '../config/logger';
|
||||
import { JsExecutor, TbScript } from './jsExecutor';
|
||||
import { performance } from 'perf_hooks';
|
||||
import { isString, parseJsErrorDetails, toUUIDString, UUIDFromBuffer, UUIDToBits } from './utils';
|
||||
import { isString, parseJsErrorDetails, toUUIDString, UUIDFromBuffer, UUIDToBits, isNotUUID } from './utils';
|
||||
import { IQueue } from '../queue/queue.models';
|
||||
import {
|
||||
JsCompileRequest,
|
||||
@ -176,7 +176,7 @@ export class JsInvokeMessageProcessor {
|
||||
this.logger.debug('[%s] Sending success invoke response, scriptId: [%s]', requestId, scriptId);
|
||||
this.sendResponse(requestId, responseTopic, headers, scriptId, undefined, invokeResponse);
|
||||
} else {
|
||||
let err = {
|
||||
const err = {
|
||||
name: 'Error',
|
||||
message: 'script invocation result exceeds maximum allowed size of ' + maxResultSize + ' symbols'
|
||||
}
|
||||
@ -200,7 +200,7 @@ export class JsInvokeMessageProcessor {
|
||||
},
|
||||
(err: any) => {
|
||||
let errorCode = COMPILATION_ERROR;
|
||||
if (err && isString(err.name) && err.name.includes('script body not found')) {
|
||||
if (err?.name === 'script body not found') {
|
||||
errorCode = NOT_FOUND_ERROR;
|
||||
}
|
||||
const invokeResponse = JsInvokeMessageProcessor.createInvokeResponse("", false, errorCode, err);
|
||||
@ -301,12 +301,26 @@ export class JsInvokeMessageProcessor {
|
||||
}
|
||||
|
||||
private static createCompileResponse(scriptId: string, success: boolean, errorCode?: number, err?: any): JsCompileResponse {
|
||||
return {
|
||||
errorCode: errorCode,
|
||||
success: success,
|
||||
errorDetails: parseJsErrorDetails(err),
|
||||
scriptHash: scriptId,
|
||||
};
|
||||
if (isNotUUID(scriptId)) {
|
||||
return {
|
||||
errorCode: errorCode,
|
||||
success: success,
|
||||
errorDetails: parseJsErrorDetails(err),
|
||||
scriptIdMSB: "0",
|
||||
scriptIdLSB: "0",
|
||||
scriptHash: scriptId
|
||||
};
|
||||
} else { // this is for backward compatibility (to be able to work with tb-node of previous version) - todo: remove in the next release
|
||||
let scriptIdBits = UUIDToBits(scriptId);
|
||||
return {
|
||||
errorCode: errorCode,
|
||||
success: success,
|
||||
errorDetails: parseJsErrorDetails(err),
|
||||
scriptIdMSB: scriptIdBits[0],
|
||||
scriptIdLSB: scriptIdBits[1],
|
||||
scriptHash: ""
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private static createInvokeResponse(result: string, success: boolean, errorCode?: number, err?: any): JsInvokeResponse {
|
||||
@ -319,14 +333,26 @@ export class JsInvokeMessageProcessor {
|
||||
}
|
||||
|
||||
private static createReleaseResponse(scriptId: string, success: boolean): JsReleaseResponse {
|
||||
return {
|
||||
success: success,
|
||||
scriptHash: scriptId,
|
||||
};
|
||||
if (isNotUUID(scriptId)) {
|
||||
return {
|
||||
success: success,
|
||||
scriptIdMSB: "0",
|
||||
scriptIdLSB: "0",
|
||||
scriptHash: scriptId,
|
||||
};
|
||||
} else { // todo: remove in the next release
|
||||
let scriptIdBits = UUIDToBits(scriptId);
|
||||
return {
|
||||
success: success,
|
||||
scriptIdMSB: scriptIdBits[0],
|
||||
scriptIdLSB: scriptIdBits[1],
|
||||
scriptHash: ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static getScriptId(request: TbMessage): string {
|
||||
return request.scriptHash;
|
||||
return request.scriptHash ? request.scriptHash : toUUIDString(request.scriptIdMSB, request.scriptIdLSB);
|
||||
}
|
||||
|
||||
private incrementUseScriptId(scriptId: string) {
|
||||
|
||||
@ -58,3 +58,7 @@ export function parseJsErrorDetails(err: any): string | undefined {
|
||||
}
|
||||
return details;
|
||||
}
|
||||
|
||||
export function isNotUUID(candidate: string) {
|
||||
return candidate.length != 36 || !candidate.includes('-');
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user