DocArchiveManager.coffee 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. MongoManager = require "./MongoManager"
  2. MongoAWS = require "./MongoAWS"
  3. LockManager = require "./LockManager"
  4. DocstoreHandler = require "./DocstoreHandler"
  5. logger = require "logger-sharelatex"
  6. _ = require "underscore"
  7. async = require "async"
  8. settings = require("settings-sharelatex")
  9. module.exports = DocArchiveManager =
  10. archiveAllDocsChanges: (project_id, callback = (error, docs) ->) ->
  11. DocstoreHandler.getAllDocs project_id, (error, docs) ->
  12. if error?
  13. return callback(error)
  14. else if !docs?
  15. return callback new Error("No docs for project #{project_id}")
  16. jobs = _.map docs, (doc) ->
  17. (cb)-> DocArchiveManager.archiveDocChangesWithLock project_id, doc._id, cb
  18. async.series jobs, callback
  19. archiveDocChangesWithLock: (project_id, doc_id, callback = (error) ->) ->
  20. job = (releaseLock) ->
  21. DocArchiveManager.archiveDocChanges project_id, doc_id, releaseLock
  22. LockManager.runWithLock("HistoryLock:#{doc_id}", job, callback)
  23. archiveDocChanges: (project_id, doc_id, callback)->
  24. MongoManager.getDocChangesCount doc_id, (error, count) ->
  25. return callback(error) if error?
  26. if count == 0
  27. logger.log {project_id, doc_id}, "document history is empty, not archiving"
  28. return callback()
  29. else
  30. MongoManager.getLastCompressedUpdate doc_id, (error, update) ->
  31. return callback(error) if error?
  32. MongoAWS.archiveDocHistory project_id, doc_id, (error) ->
  33. return callback(error) if error?
  34. logger.log doc_id:doc_id, project_id:project_id, "exported document to S3"
  35. MongoManager.markDocHistoryAsArchived doc_id, update, (error) ->
  36. return callback(error) if error?
  37. callback()
  38. unArchiveAllDocsChanges: (project_id, callback = (error, docs) ->) ->
  39. DocstoreHandler.getAllDocs project_id, (error, docs) ->
  40. if error?
  41. return callback(error)
  42. else if !docs?
  43. return callback new Error("No docs for project #{project_id}")
  44. jobs = _.map docs, (doc) ->
  45. (cb)-> DocArchiveManager.unArchiveDocChanges project_id, doc._id, cb
  46. async.parallelLimit jobs, 4, callback
  47. unArchiveDocChanges: (project_id, doc_id, callback)->
  48. MongoManager.getArchivedDocChanges doc_id, (error, count) ->
  49. return callback(error) if error?
  50. if count == 0
  51. return callback()
  52. else
  53. MongoAWS.unArchiveDocHistory project_id, doc_id, (error) ->
  54. return callback(error) if error?
  55. logger.log doc_id:doc_id, project_id:project_id, "imported document from S3"
  56. MongoManager.markDocHistoryAsUnarchived doc_id, (error) ->
  57. return callback(error) if error?
  58. callback()