Просмотр исходного кода

Merge pull request #12938 from overleaf/jpa-leaks-filestore

[filestore] cacheWarm: destroy file stream when not piping into response

GitOrigin-RevId: a0fb14e5ececd28d8d9dbed8cd3a5622c81b8230
Jakob Ackermann 3 лет назад
Родитель
Сommit
3428d53afe

+ 1 - 0
services/filestore/app/js/FileController.js

@@ -67,6 +67,7 @@ function getFile(req, res, next) {
       }
 
       if (req.query.cacheWarm) {
+        fileStream.destroy()
         return res.sendStatus(200).end()
       }
 

+ 8 - 0
services/filestore/test/acceptance/js/FilestoreTests.js

@@ -901,6 +901,14 @@ describe('Filestore', function () {
             expect(response.status).to.equal(200)
           })
 
+          it('should not leak sockets', async function () {
+            const response1 = await fetch(previewFileUrl)
+            expect(response1.status).to.equal(200)
+            const response2 = await fetch(previewFileUrl)
+            expect(response2.status).to.equal(200)
+            await expectNoSockets()
+          })
+
           it("should respond with only an 'OK'", async function () {
             // note: this test relies of the imagemagick conversion working
             const response = await fetch(previewFileUrl)

+ 3 - 1
services/filestore/test/unit/js/FileControllerTests.js

@@ -22,7 +22,9 @@ describe('FileController', function () {
     },
   }
   const fileSize = 1234
-  const fileStream = 'fileStream'
+  const fileStream = {
+    destroy() {},
+  }
   const projectId = 'projectId'
   const fileId = 'file_id'
   const bucket = 'user_files'