Handle inavailability of cache gracefully. No longer crashes when memcache is not available.
This commit is contained in:
1 parent
cd67e50062
commit
d739adc32c
3 files changed
+39
-9
No files matched your search
+3
-4
@@ -98,7 +98,7 @@ runTask = (task, reqParams) ->
|
||||
updateDevice(currentRequest.deviceId, actions)
|
||||
|
||||
if Object.keys(resParams).length > 0
|
||||
db.memcached.set(String(task._id), task, config.CACHE_DURATION, (err, result) ->
|
||||
db.updateTask(task, (err) ->
|
||||
res = tr069.response(currentRequest.sessionId, resParams, {task : String(task._id)})
|
||||
writeResponse res
|
||||
)
|
||||
@@ -106,7 +106,7 @@ runTask = (task, reqParams) ->
|
||||
|
||||
# Task finished
|
||||
db.memcached.del(String(task._id))
|
||||
db.tasksCollection.remove({'_id' : db.mongo.ObjectID(task._id)}, {safe: true}, (err, removed) ->
|
||||
db.tasksCollection.remove({'_id' : db.mongo.ObjectID(String(task._id))}, {safe: true}, (err, removed) ->
|
||||
util.log("#{currentRequest.deviceId}: completed task #{task.name}(#{task._id})")
|
||||
cookies = {task : null}
|
||||
nextTask(cookies)
|
||||
@@ -246,8 +246,7 @@ else
|
||||
if not taskId
|
||||
nextTask(cookies)
|
||||
else
|
||||
db.memcached.get(taskId, (err, task) ->
|
||||
# TODO if not found in memcached, fetch from mongo
|
||||
db.getTask(taskId, (task) ->
|
||||
runTask(task, reqParams)
|
||||
)
|
||||
|
||||
|
||||
@@ -2,27 +2,60 @@ config = require './config'
|
||||
mongo = require 'mongodb'
|
||||
Memcached = require 'memcached'
|
||||
Memcached.config.maxExpiration = 86400
|
||||
Memcached.config.timeout = 1000
|
||||
Memcached.config.retries = 0
|
||||
Memcached.config.reconnect = 1000
|
||||
memcached = new Memcached(config.MEMCACHED_SOCKET)
|
||||
|
||||
tasksCollection = null
|
||||
devicesCollection = null
|
||||
presetsCollection = null
|
||||
|
||||
dbserver = new mongo.Server(config.MONGODB_SOCKET, 0, {auto_reconnect: true})
|
||||
db = new mongo.Db(config.DATABASE_NAME, dbserver, {native_parser:true, safe:true})
|
||||
|
||||
db.open( (err, db) ->
|
||||
db.collection('tasks', (err, collection) ->
|
||||
exports.tasksCollection = collection
|
||||
exports.tasksCollection = tasksCollection = collection
|
||||
collection.ensureIndex({device: 1, timestamp: 1}, (err) ->
|
||||
)
|
||||
)
|
||||
|
||||
db.collection('devices', (err, collection) ->
|
||||
exports.devicesCollection = collection
|
||||
exports.devicesCollection = devicesCollection = collection
|
||||
)
|
||||
|
||||
db.collection('presets', (err, collection) ->
|
||||
exports.presetsCollection = collection
|
||||
exports.presetsCollection = presetsCollection = collection
|
||||
)
|
||||
)
|
||||
|
||||
getTask = (taskId, callback) ->
|
||||
memcached.get(taskId, (err, task) ->
|
||||
if not task?
|
||||
tasksCollection.findOne({_id : mongo.ObjectID(String(taskId))}, (err, task) ->
|
||||
callback(task)
|
||||
)
|
||||
else
|
||||
callback(task)
|
||||
)
|
||||
|
||||
|
||||
updateTask = (task, callback) ->
|
||||
id = String(task._id)
|
||||
|
||||
memcached.set(id, task, config.CACHE_DURATION, (err, res) ->
|
||||
if res
|
||||
callback()
|
||||
else
|
||||
task._id = mongo.ObjectID(id)
|
||||
tasksCollection.save(task, (err) ->
|
||||
callback(err)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
exports.mongo = mongo
|
||||
exports.memcached = memcached
|
||||
exports.getTask = getTask
|
||||
exports.updateTask = updateTask
|
||||
@@ -6,8 +6,6 @@ mongoQuery = require './mongo-query'
|
||||
|
||||
getPresets = (callback) ->
|
||||
db.memcached.get('presets', (err, res) ->
|
||||
throw new Error(err) if err
|
||||
|
||||
if res
|
||||
callback(res)
|
||||
return
|
||||
|
||||
Reference in new issue
Block a user