pr_15409.patch 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. --- overleaf/services/history-v1/config/custom-environment-variables.json
  2. +++ overleaf/services/history-v1/config/custom-environment-variables.json
  3. @@ -43,5 +43,6 @@
  4. },
  5. "clusterWorkers": "CLUSTER_WORKERS",
  6. "maxFileUploadSize": "MAX_FILE_UPLOAD_SIZE",
  7. - "httpsOnly": "HTTPS_ONLY"
  8. + "httpsOnly": "HTTPS_ONLY",
  9. + "httpRequestTimeout": "SHARELATEX_HISTORY_V1_HTTP_REQUEST_TIMEOUT"
  10. }
  11. --- etc/sharelatex/settings.js
  12. +++ etc/sharelatex/settings.js
  13. @@ -261,6 +261,10 @@ const settings = {
  14. url: process.env.V1_HISTORY_URL || 'http://localhost:3100/api',
  15. user: 'staging',
  16. pass: process.env.STAGING_PASSWORD,
  17. + requestTimeout: parseInt(
  18. + process.env.SHARELATEX_HISTORY_V1_HTTP_REQUEST_TIMEOUT || '300000', // default is 5min
  19. + 10
  20. + ),
  21. },
  22. },
  23. references: {},
  24. diff --git a/services/history-v1/app.js b/services/history-v1/app.js
  25. index 6b3a2ba8f89..2ad490fb6b6 100644
  26. --- overleaf/services/history-v1/app.js
  27. +++ overleaf/services/history-v1/app.js
  28. @@ -5,6 +5,7 @@
  29. // Metrics must be initialized before importing anything else
  30. require('@overleaf/metrics/initialize')
  31. +const config = require('config')
  32. const Events = require('events')
  33. const BPromise = require('bluebird')
  34. const express = require('express')
  35. @@ -47,9 +48,9 @@ app.use(cors())
  36. security.setupSSL(app)
  37. security.setupBasicHttpAuthForSwaggerDocs(app)
  38. +const HTTP_REQUEST_TIMEOUT = parseInt(config.get('httpRequestTimeout'), 10)
  39. app.use(function (req, res, next) {
  40. - // use a 5 minute timeout on all responses
  41. - res.setTimeout(5 * 60 * 1000)
  42. + res.setTimeout(HTTP_REQUEST_TIMEOUT)
  43. next()
  44. })
  45. --- overleaf/services/history-v1/config/default.json
  46. +++ overleaf/services/history-v1/config/default.json
  47. @@ -25,5 +25,6 @@
  48. "maxFileUploadSize": "52428800",
  49. "databasePoolMin": "2",
  50. "databasePoolMax": "10",
  51. - "httpsOnly": "false"
  52. + "httpsOnly": "false",
  53. + "httpRequestTimeout": "300000"
  54. }
  55. --- overleaf/services/project-history/app/js/HistoryStoreManager.js
  56. +++ overleaf/services/project-history/app/js/HistoryStoreManager.js
  57. @@ -17,7 +17,7 @@ import * as Errors from './Errors.js'
  58. import * as LocalFileWriter from './LocalFileWriter.js'
  59. import * as HashManager from './HashManager.js'
  60. -const HTTP_REQUEST_TIMEOUT = 300 * 1000 // 5 minutes
  61. +const HTTP_REQUEST_TIMEOUT = Settings.apis.history_v1.requestTimeout
  62. /**
  63. * Container for functions that need to be mocked in tests
  64. --- overleaf/services/project-history/config/settings.defaults.cjs
  65. +++ overleaf/services/project-history/config/settings.defaults.cjs
  66. @@ -20,6 +20,9 @@ module.exports = {
  67. filestore: {
  68. url: `http://${process.env.FILESTORE_HOST || 'localhost'}:3009`,
  69. },
  70. + history_v1: {
  71. + requestTimeout: parseInt(process.env.V1_REQUEST_TIMEOUT || '300000', 10),
  72. + },
  73. web: {
  74. url: `http://${
  75. process.env.WEB_API_HOST || process.env.WEB_HOST || 'localhost'
  76. --- overleaf/services/project-history/test/unit/js/HistoryStoreManager/HistoryStoreManagerTests.js
  77. +++ overleaf/services/project-history/test/unit/js/HistoryStoreManager/HistoryStoreManagerTests.js
  78. @@ -23,6 +23,7 @@ describe('HistoryStoreManager', function () {
  79. filestore: {
  80. url: 'http://filestore.sharelatex.production',
  81. },
  82. + history_v1: { requestTimeout: 123 },
  83. },
  84. }
  85. this.latestChunkRequestArgs = sinon.match({