Skip to content

Commit

Permalink
fix(server/database streams): remove event listener on batch completi…
Browse files Browse the repository at this point in the history
…on (#3938)
  • Loading branch information
iainsproat authored Feb 5, 2025
1 parent a4521d4 commit 947f8fd
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 4 deletions.
8 changes: 7 additions & 1 deletion packages/preview-service/src/server/routes/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down
8 changes: 7 additions & 1 deletion packages/preview-service/src/server/routes/objects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
8 changes: 7 additions & 1 deletion packages/server/modules/core/rest/diffDownload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
9 changes: 8 additions & 1 deletion packages/server/modules/core/rest/download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down

0 comments on commit 947f8fd

Please sign in to comment.