|
|
@@ -6,6 +6,11 @@ _ = require('underscore')
|
|
|
keys = require('./RedisKeyBuilder')
|
|
|
logger = require('logger-sharelatex')
|
|
|
metrics = require('./Metrics')
|
|
|
+ZipManager = require('./ZipManager')
|
|
|
+
|
|
|
+redisOptions = _.clone(Settings.redis.web)
|
|
|
+redisOptions.return_buffers = true
|
|
|
+rclientBuffer = redis.createClient(redisOptions)
|
|
|
|
|
|
# Make times easy to read
|
|
|
minutes = 60 # seconds for Redis expire
|
|
|
@@ -44,19 +49,21 @@ module.exports = RedisManager =
|
|
|
|
|
|
getDoc : (doc_id, callback = (error, lines, version) ->)->
|
|
|
timer = new metrics.Timer("redis.get-doc")
|
|
|
- multi = rclient.multi()
|
|
|
+ # use Buffer when retrieving data as it may be gzipped
|
|
|
+ multi = rclientBuffer.multi()
|
|
|
linesKey = keys.docLines(doc_id:doc_id)
|
|
|
multi.get linesKey
|
|
|
multi.get keys.docVersion(doc_id:doc_id)
|
|
|
multi.exec (error, result)->
|
|
|
timer.done()
|
|
|
return callback(error) if error?
|
|
|
- try
|
|
|
- docLines = JSON.parse result[0]
|
|
|
- catch e
|
|
|
- return callback(e)
|
|
|
- version = parseInt(result[1] or 0, 10)
|
|
|
- callback null, docLines, version
|
|
|
+ ZipManager.uncompressIfNeeded doc_id, result, (error, result) ->
|
|
|
+ try
|
|
|
+ docLines = JSON.parse result[0]
|
|
|
+ catch e
|
|
|
+ return callback(e)
|
|
|
+ version = parseInt(result[1] or 0, 10)
|
|
|
+ callback null, docLines, version
|
|
|
|
|
|
getDocVersion: (doc_id, callback = (error, version) ->) ->
|
|
|
rclient.get keys.docVersion(doc_id: doc_id), (error, version) ->
|
|
|
@@ -70,11 +77,12 @@ module.exports = RedisManager =
|
|
|
callback null, len
|
|
|
|
|
|
setDocument : (doc_id, docLines, version, callback = (error) ->)->
|
|
|
- multi = rclient.multi()
|
|
|
- multi.set keys.docLines(doc_id:doc_id), JSON.stringify(docLines)
|
|
|
- multi.set keys.docVersion(doc_id:doc_id), version
|
|
|
- multi.incr keys.now("docsets")
|
|
|
- multi.exec (error, replys) -> callback(error)
|
|
|
+ ZipManager.compressIfNeeded doc_id, JSON.stringify(docLines), (err, result) ->
|
|
|
+ multi = rclient.multi()
|
|
|
+ multi.set keys.docLines(doc_id:doc_id), result
|
|
|
+ multi.set keys.docVersion(doc_id:doc_id), version
|
|
|
+ multi.incr keys.now("docsets")
|
|
|
+ multi.exec (error, replys) -> callback(error)
|
|
|
|
|
|
getPendingUpdatesForDoc : (doc_id, callback)->
|
|
|
multi = rclient.multi()
|