| 12345678910111213141516171819202122232425262728293031323334 |
- MongoManager = require "./MongoManager"
- UpdateCompressor = require "./UpdateCompressor"
- logger = require "logger-sharelatex"
- module.exports = HistoryManager =
- compressAndSaveRawUpdates: (doc_id, rawUpdates, callback = (error) ->) ->
- length = rawUpdates.length
- if length == 0
- return callback()
- MongoManager.popLastCompressedUpdate doc_id, (error, lastCompressedUpdate) ->
- return callback(error) if error?
- # Ensure that raw updates start where lastCompressedUpdate left off
- if lastCompressedUpdate?
- rawUpdates = rawUpdates.slice(0)
- while rawUpdates[0]? and rawUpdates[0].v <= lastCompressedUpdate.v
- rawUpdates.shift()
- if rawUpdates[0]? and rawUpdates[0].v != lastCompressedUpdate.v + 1
- return callback new Error("Tried to apply raw op at version #{rawUpdates[0].v} to last compressed update with version #{lastCompressedUpdate.v}")
- compressedUpdates = UpdateCompressor.compressRawUpdates lastCompressedUpdate, rawUpdates
- MongoManager.insertCompressedUpdates doc_id, compressedUpdates, (error) ->
- return callback(error) if error?
- logger.log doc_id: doc_id, rawUpdatesLength: length, compressedUpdatesLength: compressedUpdates.length, "compressed doc updates"
- callback()
- processUncompressedUpdates: (doc_id, callback = (error) ->) ->
- # Get lock - here or elsewhere?
- # Get batch from Redis left hand side (oldest)
- # pass batch to compressAndSaveRawUpdates
- # Delete batch from redis
- # release lock
|