expire_redis_chunks.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const logger = require('@overleaf/logger')
  2. const commandLineArgs = require('command-line-args')
  3. const redis = require('../lib/redis')
  4. const { scanAndProcessDueItems } = require('../lib/scan')
  5. const { expireProject, claimExpireJob } = require('../lib/chunk_store/redis')
  6. const rclient = redis.rclientHistory
  7. const optionDefinitions = [{ name: 'dry-run', alias: 'd', type: Boolean }]
  8. const options = commandLineArgs(optionDefinitions)
  9. const DRY_RUN = options['dry-run'] || false
  10. logger.initialize('expire-redis-chunks')
  11. async function expireProjectAction(projectId) {
  12. const job = await claimExpireJob(projectId)
  13. await expireProject(projectId)
  14. if (job && job.close) {
  15. await job.close()
  16. }
  17. }
  18. async function runExpireChunks() {
  19. await scanAndProcessDueItems(
  20. rclient,
  21. 'expireChunks',
  22. 'expire-time',
  23. expireProjectAction,
  24. DRY_RUN
  25. )
  26. }
  27. if (require.main === module) {
  28. runExpireChunks()
  29. .catch(err => {
  30. logger.fatal(
  31. { err, taskName: 'expireChunks' },
  32. 'Unhandled error in runExpireChunks'
  33. )
  34. process.exit(1)
  35. })
  36. .finally(async () => {
  37. await redis.disconnect()
  38. })
  39. } else {
  40. module.exports = {
  41. runExpireChunks,
  42. }
  43. }