UNPKG

faastjs

Version:

Serverless batch computing made simple.

72 lines 9.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const ava_1 = tslib_1.__importDefault(require("ava")); const index_1 = require("../index"); const funcs = tslib_1.__importStar(require("./fixtures/functions")); const client_lambda_1 = require("@aws-sdk/client-lambda"); (0, ava_1.default)("remote aws throttling to no concurrency", async (t) => { const faastModule = await (0, index_1.faast)("aws", funcs, { mode: "https", memorySize: 1024, concurrency: 1, gc: "off", description: t.title }); try { const N = 10; const promises = [faastModule.functions.timer(1000)]; for (let i = 1; i < N; i++) { promises.push(faastModule.functions.timer(1000)); } const results = await Promise.all(promises); results.sort(({ start: a }, { start: b }) => a - b); index_1.log.info(results); let lastEnd = 0; // Executions should not overlap in their timestamps. for (const timing of results) { t.true(timing.start > lastEnd); lastEnd = timing.end; } } finally { await faastModule.cleanup(); } }); // Test the situation where the function concurrency isn't sufficient to handle // all of the requests, and the events age out while in the queue. (0, ava_1.default)("remote aws async invocation queue throttling EventAgeExceeded", async (t) => { const lambda = await (0, index_1.faastAws)(funcs, { timeout: 70, maxRetries: 2, gc: "off", description: t.title, mode: "queue" }); const { FunctionName } = lambda.state.resources; const awsLambda = new client_lambda_1.Lambda({ region: "us-west-2" }); await awsLambda.putFunctionConcurrency({ FunctionName, ReservedConcurrentExecutions: 1 }); await awsLambda.updateFunctionEventInvokeConfig({ FunctionName, MaximumEventAgeInSeconds: 60 }); try { const invoke = () => lambda.functions .sleep(65 * 1000) .then(_ => ({ value: "success" })) .catch(error => ({ error: error.message })); const firstPromise = invoke(); const secondPromise = invoke(); const first = await firstPromise; const second = await secondPromise; t.assert("value" in first || "value" in second); t.assert("error" in first || "error" in second); } finally { await lambda.cleanup(); } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXRocm90dGxlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2F3cy10aHJvdHRsZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUF1QjtBQUN2QixvQ0FBZ0Q7QUFDaEQsb0VBQThDO0FBQzlDLDBEQUFnRDtBQUVoRCxJQUFBLGFBQUksRUFBQyx5Q0FBeUMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7SUFDdEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLGFBQUssRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO1FBQzFDLElBQUksRUFBRSxPQUFPO1FBQ2IsVUFBVSxFQUFFLElBQUk7UUFDaEIsV0FBVyxFQUFFLENBQUM7UUFDZCxFQUFFLEVBQUUsS0FBSztRQUNULFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSztLQUN2QixDQUFDLENBQUM7SUFDSCxJQUFJLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLFFBQVEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELFdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLHFEQUFxRDtRQUNyRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQztZQUMvQixPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztZQUFTLENBQUM7UUFDUCxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCwrRUFBK0U7QUFDL0Usa0VBQWtFO0FBQ2xFLElBQUEsYUFBSSxFQUFDLCtEQUErRCxFQUFFLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTtJQUM1RSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUU7UUFDakMsT0FBTyxFQUFFLEVBQUU7UUFDWCxVQUFVLEVBQUUsQ0FBQztRQUNiLEVBQUUsRUFBRSxLQUFLO1FBQ1QsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLO1FBQ3BCLElBQUksRUFBRSxPQUFPO0tBQ2hCLENBQUMsQ0FBQztJQUVILE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUV0RCxNQUFNLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztRQUNuQyxZQUFZO1FBQ1osNEJBQTRCLEVBQUUsQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFFSCxNQUFNLFNBQVMsQ0FBQywrQkFBK0IsQ0FBQztRQUM1QyxZQUFZO1FBQ1osd0JBQXdCLEVBQUUsRUFBRTtLQUMvQixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FDaEIsTUFBTSxDQUFDLFNBQVM7YUFDWCxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQzthQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO1lBQVMsQ0FBQztRQUNQLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0ZXN0IGZyb20gXCJhdmFcIjtcbmltcG9ydCB7IGZhYXN0LCBmYWFzdEF3cywgbG9nIH0gZnJvbSBcIi4uL2luZGV4XCI7XG5pbXBvcnQgKiBhcyBmdW5jcyBmcm9tIFwiLi9maXh0dXJlcy9mdW5jdGlvbnNcIjtcbmltcG9ydCB7IExhbWJkYSB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtbGFtYmRhXCI7XG5cbnRlc3QoXCJyZW1vdGUgYXdzIHRocm90dGxpbmcgdG8gbm8gY29uY3VycmVuY3lcIiwgYXN5bmMgdCA9PiB7XG4gICAgY29uc3QgZmFhc3RNb2R1bGUgPSBhd2FpdCBmYWFzdChcImF3c1wiLCBmdW5jcywge1xuICAgICAgICBtb2RlOiBcImh0dHBzXCIsXG4gICAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICAgIGNvbmN1cnJlbmN5OiAxLFxuICAgICAgICBnYzogXCJvZmZcIixcbiAgICAgICAgZGVzY3JpcHRpb246IHQudGl0bGVcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBOID0gMTA7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW2ZhYXN0TW9kdWxlLmZ1bmN0aW9ucy50aW1lcigxMDAwKV07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgTjsgaSsrKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGZhYXN0TW9kdWxlLmZ1bmN0aW9ucy50aW1lcigxMDAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmVzdWx0cy5zb3J0KCh7IHN0YXJ0OiBhIH0sIHsgc3RhcnQ6IGIgfSkgPT4gYSAtIGIpO1xuICAgICAgICBsb2cuaW5mbyhyZXN1bHRzKTtcbiAgICAgICAgbGV0IGxhc3RFbmQgPSAwO1xuICAgICAgICAvLyBFeGVjdXRpb25zIHNob3VsZCBub3Qgb3ZlcmxhcCBpbiB0aGVpciB0aW1lc3RhbXBzLlxuICAgICAgICBmb3IgKGNvbnN0IHRpbWluZyBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICB0LnRydWUodGltaW5nLnN0YXJ0ID4gbGFzdEVuZCk7XG4gICAgICAgICAgICBsYXN0RW5kID0gdGltaW5nLmVuZDtcbiAgICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGZhYXN0TW9kdWxlLmNsZWFudXAoKTtcbiAgICB9XG59KTtcblxuLy8gVGVzdCB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBmdW5jdGlvbiBjb25jdXJyZW5jeSBpc24ndCBzdWZmaWNpZW50IHRvIGhhbmRsZVxuLy8gYWxsIG9mIHRoZSByZXF1ZXN0cywgYW5kIHRoZSBldmVudHMgYWdlIG91dCB3aGlsZSBpbiB0aGUgcXVldWUuXG50ZXN0KFwicmVtb3RlIGF3cyBhc3luYyBpbnZvY2F0aW9uIHF1ZXVlIHRocm90dGxpbmcgRXZlbnRBZ2VFeGNlZWRlZFwiLCBhc3luYyB0ID0+IHtcbiAgICBjb25zdCBsYW1iZGEgPSBhd2FpdCBmYWFzdEF3cyhmdW5jcywge1xuICAgICAgICB0aW1lb3V0OiA3MCxcbiAgICAgICAgbWF4UmV0cmllczogMixcbiAgICAgICAgZ2M6IFwib2ZmXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRpdGxlLFxuICAgICAgICBtb2RlOiBcInF1ZXVlXCJcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgRnVuY3Rpb25OYW1lIH0gPSBsYW1iZGEuc3RhdGUucmVzb3VyY2VzO1xuICAgIGNvbnN0IGF3c0xhbWJkYSA9IG5ldyBMYW1iZGEoeyByZWdpb246IFwidXMtd2VzdC0yXCIgfSk7XG5cbiAgICBhd2FpdCBhd3NMYW1iZGEucHV0RnVuY3Rpb25Db25jdXJyZW5jeSh7XG4gICAgICAgIEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgUmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogMVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYXdzTGFtYmRhLnVwZGF0ZUZ1bmN0aW9uRXZlbnRJbnZva2VDb25maWcoe1xuICAgICAgICBGdW5jdGlvbk5hbWUsXG4gICAgICAgIE1heGltdW1FdmVudEFnZUluU2Vjb25kczogNjBcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGludm9rZSA9ICgpID0+XG4gICAgICAgICAgICBsYW1iZGEuZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgLnNsZWVwKDY1ICogMTAwMClcbiAgICAgICAgICAgICAgICAudGhlbihfID0+ICh7IHZhbHVlOiBcInN1Y2Nlc3NcIiB9KSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSkpO1xuICAgICAgICBjb25zdCBmaXJzdFByb21pc2UgPSBpbnZva2UoKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kUHJvbWlzZSA9IGludm9rZSgpO1xuICAgICAgICBjb25zdCBmaXJzdCA9IGF3YWl0IGZpcnN0UHJvbWlzZTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYXdhaXQgc2Vjb25kUHJvbWlzZTtcbiAgICAgICAgdC5hc3NlcnQoXCJ2YWx1ZVwiIGluIGZpcnN0IHx8IFwidmFsdWVcIiBpbiBzZWNvbmQpO1xuICAgICAgICB0LmFzc2VydChcImVycm9yXCIgaW4gZmlyc3QgfHwgXCJlcnJvclwiIGluIHNlY29uZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgbGFtYmRhLmNsZWFudXAoKTtcbiAgICB9XG59KTtcbiJdfQ==