Procházet zdrojové kódy

Merge pull request #13980 from overleaf/mj-web-compile-timeout

[web] Add timeout for compile requests to clsi

GitOrigin-RevId: 94d6de60eec1fc9e52971e14f38f2d4aef6b7f5d
Mathias Jakobsen před 3 roky
rodič
revize
c7006fabd4

+ 4 - 0
services/web/app/src/Features/Compile/ClsiManager.js

@@ -29,6 +29,9 @@ const VALID_COMPILERS = ['pdflatex', 'latex', 'xelatex', 'lualatex']
 const OUTPUT_FILE_TIMEOUT_MS = 60000
 const OUTPUT_FILE_TIMEOUT_MS = 60000
 const CLSI_COOKIES_ENABLED = (Settings.clsiCookie?.key ?? '') !== ''
 const CLSI_COOKIES_ENABLED = (Settings.clsiCookie?.key ?? '') !== ''
 
 
+// The timeout in services/clsi/app.js is 10 minutes, so we'll be on the safe side with 12 minutes
+const COMPILE_REQUEST_TIMEOUT_MS = 12 * 60 * 1000
+
 function collectMetricsOnBlgFiles(outputFiles) {
 function collectMetricsOnBlgFiles(outputFiles) {
   let topLevel = 0
   let topLevel = 0
   let nested = 0
   let nested = 0
@@ -451,6 +454,7 @@ async function _postToClsi(
   const opts = {
   const opts = {
     json: req,
     json: req,
     method: 'POST',
     method: 'POST',
+    signal: AbortSignal.timeout(COMPILE_REQUEST_TIMEOUT_MS),
   }
   }
   try {
   try {
     const { body, clsiServerId } = await _makeRequest(
     const { body, clsiServerId } = await _makeRequest(

+ 3 - 0
services/web/test/unit/src/Compile/ClsiManagerTests.js

@@ -222,6 +222,7 @@ describe('ClsiManager', function () {
               'Content-Type': 'application/json',
               'Content-Type': 'application/json',
               Cookie: `${this.clsiCookieKey}=${this.clsiServerId}`,
               Cookie: `${this.clsiCookieKey}=${this.clsiServerId}`,
             },
             },
+            signal: sinon.match.instanceOf(AbortSignal),
           }
           }
         )
         )
       })
       })
@@ -426,6 +427,7 @@ describe('ClsiManager', function () {
               'Content-Type': 'application/json',
               'Content-Type': 'application/json',
               Cookie: `${this.clsiCookieKey}=${this.clsiServerId}`,
               Cookie: `${this.clsiCookieKey}=${this.clsiServerId}`,
             },
             },
+            signal: sinon.match.instanceOf(AbortSignal),
           }
           }
         )
         )
       })
       })
@@ -829,6 +831,7 @@ describe('ClsiManager', function () {
               'Content-Type': 'application/json',
               'Content-Type': 'application/json',
               Cookie: `${this.clsiCookieKey}=${this.clsiServerId}`,
               Cookie: `${this.clsiCookieKey}=${this.clsiServerId}`,
             },
             },
+            signal: sinon.match.instanceOf(AbortSignal),
           }
           }
         )
         )
       })
       })