fix(server/database streams): remove event listener on batch completion (#3938)

This commit is contained in:
Iain Sproat
2025-02-05 15:16:22 +00:00
committed by GitHub
parent a4521d46a1
commit 947f8fd4fa
4 changed files with 29 additions and 4 deletions
@@ -36,12 +36,18 @@ const apiRouterFactory = () => {
streamId: req.params.streamId,
objectIds: getObjectsRequestBody.objects
})
// https://knexjs.org/faq/recipes.html#manually-closing-streams
// https://github.com/knex/knex/issues/2324
res.on('close', () => {
const responseCloseHandler = () => {
dbStream.end()
dbStream.destroy()
}
dbStream.on('close', () => {
res.removeListener('close', responseCloseHandler)
})
res.on('close', responseCloseHandler)
const speckleObjStream = new SpeckleObjectsStream(isSimpleTextRequested(req))
@@ -41,12 +41,18 @@ const objectsRouterFactory = () => {
streamId: req.params.streamId,
objectId: req.params.objectId
})
// https://knexjs.org/faq/recipes.html#manually-closing-streams
// https://github.com/knex/knex/issues/2324
res.on('close', () => {
const responseCloseHandler = () => {
dbStream.end()
dbStream.destroy()
}
dbStream.on('close', () => {
res.removeListener('close', responseCloseHandler)
})
res.on('close', responseCloseHandler)
const speckleObjStream = new SpeckleObjectsStream(isSimpleTextRequested(req))
const gzipStream = zlib.createGzip()
@@ -94,12 +94,18 @@ export default (app: Application) => {
streamId: req.params.streamId,
objectIds: childrenChunk
})
// https://knexjs.org/faq/recipes.html#manually-closing-streams
// https://github.com/knex/knex/issues/2324
res.on('close', () => {
const responseCloseHandler = () => {
dbStream.end()
dbStream.destroy()
}
dbStream.on('close', () => {
res.removeListener('close', responseCloseHandler)
})
res.on('close', responseCloseHandler)
await new Promise((resolve, reject) => {
dbStream.once('end', resolve)
@@ -63,12 +63,19 @@ export default (app: express.Express) => {
streamId: req.params.streamId,
objectId: req.params.objectId
})
// https://knexjs.org/faq/recipes.html#manually-closing-streams
// https://github.com/knex/knex/issues/2324
res.on('close', () => {
const responseCloseHandler = () => {
dbStream.end()
dbStream.destroy()
}
dbStream.on('close', () => {
res.removeListener('close', responseCloseHandler)
})
res.on('close', responseCloseHandler)
const speckleObjStream = new SpeckleObjectsStream(simpleText)
const gzipStream = zlib.createGzip()