Handle inavailability of cache gracefully. No longer crashes when memcache is not available.

This commit is contained in:
Zaid Abdulla committed 2013-01-15 22:01:57 +03:00
1 parent cd67e50062
commit d739adc32c
3 files changed
+39 -9

No files matched your search

+3 -4
View File
@@ -98,7 +98,7 @@ runTask = (task, reqParams) ->
updateDevice(currentRequest.deviceId, actions) updateDevice(currentRequest.deviceId, actions)
if Object.keys(resParams).length > 0 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)}) res = tr069.response(currentRequest.sessionId, resParams, {task : String(task._id)})
writeResponse res writeResponse res
) )
@@ -106,7 +106,7 @@ runTask = (task, reqParams) ->
# Task finished # Task finished
db.memcached.del(String(task._id)) 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})") util.log("#{currentRequest.deviceId}: completed task #{task.name}(#{task._id})")
cookies = {task : null} cookies = {task : null}
nextTask(cookies) nextTask(cookies)
@@ -246,8 +246,7 @@ else
if not taskId if not taskId
nextTask(cookies) nextTask(cookies)
else else
db.memcached.get(taskId, (err, task) -> db.getTask(taskId, (task) ->
# TODO if not found in memcached, fetch from mongo
runTask(task, reqParams) runTask(task, reqParams)
) )
+36 -3
View File
@@ -2,27 +2,60 @@ config = require './config'
mongo = require 'mongodb' mongo = require 'mongodb'
Memcached = require 'memcached' Memcached = require 'memcached'
Memcached.config.maxExpiration = 86400 Memcached.config.maxExpiration = 86400
Memcached.config.timeout = 1000
Memcached.config.retries = 0
Memcached.config.reconnect = 1000
memcached = new Memcached(config.MEMCACHED_SOCKET) memcached = new Memcached(config.MEMCACHED_SOCKET)
tasksCollection = null
devicesCollection = null
presetsCollection = null
dbserver = new mongo.Server(config.MONGODB_SOCKET, 0, {auto_reconnect: true}) 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 = new mongo.Db(config.DATABASE_NAME, dbserver, {native_parser:true, safe:true})
db.open( (err, db) -> db.open( (err, db) ->
db.collection('tasks', (err, collection) -> db.collection('tasks', (err, collection) ->
exports.tasksCollection = collection exports.tasksCollection = tasksCollection = collection
collection.ensureIndex({device: 1, timestamp: 1}, (err) -> collection.ensureIndex({device: 1, timestamp: 1}, (err) ->
) )
) )
db.collection('devices', (err, collection) -> db.collection('devices', (err, collection) ->
exports.devicesCollection = collection exports.devicesCollection = devicesCollection = collection
) )
db.collection('presets', (err, 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.mongo = mongo
exports.memcached = memcached exports.memcached = memcached
exports.getTask = getTask
exports.updateTask = updateTask
-2
View File
@@ -6,8 +6,6 @@ mongoQuery = require './mongo-query'
getPresets = (callback) -> getPresets = (callback) ->
db.memcached.get('presets', (err, res) -> db.memcached.get('presets', (err, res) ->
throw new Error(err) if err
if res if res
callback(res) callback(res)
return return