dashersw / dashersw/cote

Prevent responder from getting new requests

Open
#228 5 comments 1 reaction 0 assignees View on GitHub
enhancement help wanted
Dominant language
JavaScript
Stars
2.4k
Forks
184
PR merge metrics
No merged PRs in 30d

Description

Hi, I'm working on my service to graceful shutdown. How can I prevent responder to accept new requests so it could finish already got ones and then call `responder.close`?

I have example responder:
```javascript
const cote = require('cote');

const { SHOULD_SIGTERM } = process.env;

async function main() {
const server = new cote.Responder({
name: 'rpc-server',
namespace: 'rpc-server',
key : 'rpc-server'
});

server.on('foo', async ({ type, data }) => {
const { i } = data;

if (SHOULD_SIGTERM && i === 5) {
server.close();
}

console.log('Data', i);
const result = `bar-${i}`;
console.log('Result', result);

return result;
})
}

if (require.main === module) {
main();
}

```

and example requester that make 10 requests:
```javascript
const cote = require('cote');

async function main() {
const requester = new cote.Requester({
name: 'rpc-requester',
namespace: 'rpc-server',
key: 'rpc-server',
});

for (let i = 0; i < 10; i++) {
let result;
try {
result = await requester.send({
type: 'foo',
data: {
i,
},
__timeout: 3 * 1000
});
} catch (e) {
console.error(e);
}
console.log('Result', result);
}

requester.close();
}

if (require.main === module) {
main();
}

```

As I coded responder to close on request with `i === 5`, I lose this request. IMPORTANT NOTE: when I do NOT specify `__timeout` in requester, once responder is restarted this request hangs forever.
image
In case when I do NOT call `responder.close` untill all requests are processed I keep getting new requests, so it does not seems like a solution.
Thanks in advance.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.