ProjectManager.coffee 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. RedisManager = require "./RedisManager"
  2. DocumentManager = require "./DocumentManager"
  3. async = require "async"
  4. logger = require "logger-sharelatex"
  5. Metrics = require "./Metrics"
  6. module.exports = ProjectManager =
  7. flushProjectWithLocks: (project_id, _callback = (error) ->) ->
  8. timer = new Metrics.Timer("projectManager.flushProjectWithLocks")
  9. callback = (args...) ->
  10. timer.done()
  11. _callback(args...)
  12. RedisManager.getDocIdsInProject project_id, (error, doc_ids) ->
  13. return callback(error) if error?
  14. jobs = []
  15. errors = []
  16. for doc_id in (doc_ids or [])
  17. do (doc_id) ->
  18. jobs.push (callback) ->
  19. DocumentManager.flushDocIfLoadedWithLock project_id, doc_id, (error) ->
  20. if error?
  21. logger.error err: error, project_id: project_id, doc_id: doc_id, "error flushing doc"
  22. errors.push(error)
  23. callback()
  24. logger.log project_id: project_id, doc_ids: doc_ids, "flushing docs"
  25. async.series jobs, () ->
  26. if errors.length > 0
  27. callback new Error("Errors flushing docs. See log for details")
  28. else
  29. callback(null)
  30. flushAndDeleteProjectWithLocks: (project_id, _callback = (error) ->) ->
  31. timer = new Metrics.Timer("projectManager.flushAndDeleteProjectWithLocks")
  32. callback = (args...) ->
  33. timer.done()
  34. _callback(args...)
  35. RedisManager.getDocIdsInProject project_id, (error, doc_ids) ->
  36. return callback(error) if error?
  37. jobs = []
  38. errors = []
  39. for doc_id in (doc_ids or [])
  40. do (doc_id) ->
  41. jobs.push (callback) ->
  42. DocumentManager.flushAndDeleteDocWithLock project_id, doc_id, (error) ->
  43. if error?
  44. logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc"
  45. errors.push(error)
  46. callback()
  47. logger.log project_id: project_id, doc_ids: doc_ids, "deleting docs"
  48. async.series jobs, () ->
  49. if errors.length > 0
  50. callback new Error("Errors deleting docs. See log for details")
  51. else
  52. callback(null)