DocArchiveManager.coffee 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. if settings.filestore?.backend != "s3"
  12. return callback(null)
  13. DocstoreHandler.getAllDocs project_id, (error, docs) ->
  14. if error?
  15. return callback(error)
  16. else if !docs?
  17. return callback new Error("No docs for project #{project_id}")
  18. jobs = _.map docs, (doc) ->
  19. (cb)-> DocArchiveManager.archiveDocChangesWithLock project_id, doc._id, cb
  20. async.series jobs, callback
  21. archiveDocChangesWithLock: (project_id, doc_id, callback = (error) ->) ->
  22. LockManager.runWithLock(
  23. "HistoryArchiveLock:#{doc_id}",
  24. (releaseLock) ->
  25. DocArchiveManager.archiveDocChanges project_id, doc_id, releaseLock
  26. callback
  27. )
  28. archiveDocChanges: (project_id, doc_id, callback)->
  29. MongoManager.getDocChangesCount doc_id, (error, count) ->
  30. if count == 0
  31. return callback()
  32. else
  33. MongoManager.getLastCompressedUpdate doc_id, (error, update) ->
  34. MongoAWS.archiveDocHistory project_id, doc_id, (error) ->
  35. logger.log doc_id:doc_id, error: error, "mongoexport"
  36. MongoManager.markDocHistoryAsArchived doc_id, update, (error) ->
  37. return callback(error) if error?
  38. callback()
  39. unArchiveAllDocsChanges: (project_id, callback = (error, docs) ->) ->
  40. if settings.filestore?.backend != "s3"
  41. return callback(null)
  42. DocstoreHandler.getAllDocs project_id, (error, docs) ->
  43. if error?
  44. return callback(error)
  45. else if !docs?
  46. return callback new Error("No docs for project #{project_id}")
  47. jobs = _.map docs, (doc) ->
  48. (cb)-> DocArchiveManager.unArchiveDocChanges project_id, doc._id, cb
  49. async.series jobs, callback
  50. unArchiveDocChanges: (project_id, doc_id, callback)->
  51. MongoManager.getArchivedDocChanges doc_id, (error, count) ->
  52. if count == 0
  53. return callback()
  54. else
  55. MongoAWS.unArchiveDocHistory project_id, doc_id, (error) ->
  56. logger.log doc_id:doc_id, error: error, "mongoimport"
  57. MongoManager.markDocHistoryAsUnarchived doc_id, (error) ->
  58. return callback(error) if error?
  59. callback()