aws / aws/aws-lambda-nodejs-runtime-interface-client

Override `highWaterMark` didn't work

Open
#94 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
224
Forks
60
PR merge metrics
No merged PRs in 30d

Description

The following code will send the data `BEFORE` 6s:

```js
const util = require('node:util');
const HANDLER_HIGHWATERMARK = Symbol.for(
'aws.lambda.runtime.handler.streaming.highWaterMark',
);

const handler = async (event, responseStream, context) => {
responseStream.setContentType('text/html; charset=utf-8');

responseStream.write("Thinking...");
responseStream.write("a".repeat(64 * 1024));

setTimeout(function() {
responseStream.write("b".repeat(64 * 1024));
}, 3000);

setTimeout(function() {
responseStream.write("After 6s");
responseStream.end();
}, 6000);
};

handler[HANDLER_HIGHWATERMARK] = 512;

exports.handler = awslambda.streamifyResponse(handler, {
highWaterMark: 512
}
);
```

The following code will only send data `AFTER` 6s.

```js
const util = require('node:util');
const HANDLER_HIGHWATERMARK = Symbol.for(
'aws.lambda.runtime.handler.streaming.highWaterMark',
);

const handler = async (event, responseStream, context) => {
responseStream.setContentType('text/html; charset=utf-8');

responseStream.write("Thinking...");
responseStream.write("a".repeat(1 * 1024));

setTimeout(function() {
responseStream.write("b".repeat(1 * 1024));
}, 3000);

setTimeout(function() {
responseStream.write("After 6s");
responseStream.end();
}, 6000);
};

handler[HANDLER_HIGHWATERMARK] = 512;

exports.handler = awslambda.streamifyResponse(handler, {
highWaterMark: 512
}
);
```

From what I tested, the default `highWaterMark` is `64Kb`, but there is no way to override it to be lower, I tried two different ways to do it.

This causes weird issues where I can't send some tiny text and then wait 6s to send more data, it will be sent as a single chunk only after 6s.

This issue was initially discovered at https://github.com/H4ad/serverless-adapter/issues/166

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.