fix: invoke function add timeout

This commit is contained in:
wss-git 2021-12-27 18:09:00 +08:00
parent 25e6625cb2
commit 853611b69f
2 changed files with 17 additions and 1 deletions

View File

@ -15,6 +15,7 @@ export default class FcRemoteInvoke {
async invoke(inputs: InputProps): Promise<any> { async invoke(inputs: InputProps): Promise<any> {
const { const {
props, props,
timeout,
eventPayload, eventPayload,
credentials, credentials,
isHelp, isHelp,
@ -31,7 +32,7 @@ export default class FcRemoteInvoke {
let fcClient; let fcClient;
if (!props.domainName) { if (!props.domainName) {
const fcCommon = await core.loadComponent('devsapp/fc-common'); const fcCommon = await core.loadComponent('devsapp/fc-common');
fcClient = await fcCommon.makeFcClient({ ...inputs, props: { region: props.region }}); fcClient = await fcCommon.makeFcClient({ ...inputs, props: { region: props.region, timeout }});
} }
const remoteInvoke = new RemoteInvoke(fcClient, credentials.AccountID); const remoteInvoke = new RemoteInvoke(fcClient, credentials.AccountID);
await remoteInvoke.invoke(props, eventPayload, { invocationType, statefulAsyncInvocationId }); await remoteInvoke.invoke(props, eventPayload, { invocationType, statefulAsyncInvocationId });
@ -51,6 +52,7 @@ export default class FcRemoteInvoke {
const parsedArgs: {[key: string]: any} = core.commandParse({ ...inputs, args }, { const parsedArgs: {[key: string]: any} = core.commandParse({ ...inputs, args }, {
boolean: ['help', 'event-stdin'], boolean: ['help', 'event-stdin'],
number: ['timeout'],
string: ['invocation-type', 'event', 'event-file', 'region', 'domain-name','service-name', 'function-name', 'qualifier', 'stateful-async-invocation-id'], string: ['invocation-type', 'event', 'event-file', 'region', 'domain-name','service-name', 'function-name', 'qualifier', 'stateful-async-invocation-id'],
alias: { alias: {
'help': 'h', 'help': 'h',
@ -108,8 +110,20 @@ export default class FcRemoteInvoke {
throw new Error('region/serviceName(service-name)/functionName(function-name) can not be empty.'); throw new Error('region/serviceName(service-name)/functionName(function-name) can not be empty.');
} }
// 超时时间获取的原理https://github.com/devsapp/fc/issues/480
const propsTimeout = argsData.timeout || inputs.props?.timeout;
let timeout = 600;
if (_.isNumber(propsTimeout)) {
if (_.isEmpty(inputs.props?.runtime) || inputs.props?.runtime === 'custom-container') {
timeout = propsTimeout + 7 * 60;
} else {
timeout = propsTimeout + 2 * 60;
}
}
return { return {
props, props,
timeout,
credentials: inputs.credentials, credentials: inputs.credentials,
eventPayload, eventPayload,
isHelp: false, isHelp: false,

View File

@ -25,8 +25,10 @@ export interface IProperties {
region: string; region: string;
serviceName: string; serviceName: string;
functionName: string; functionName: string;
runtime?: string;
qualifier?: string; qualifier?: string;
domainName?: string; domainName?: string;
timeout?: string;
} }
export function isProperties(args: any): args is IProperties { export function isProperties(args: any): args is IProperties {
if (!args) { if (!args) {