Faulty tasks automatically retried later rather than hold the taks queue.
This commit is contained in:
1 parent
2e4a524d90
commit
e77cdd10c8
3 files changed
+10
-13
No files matched your search
+8
-12
@@ -179,16 +179,15 @@ runTask = (currentRequest, task, methodResponse) ->
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
when tasks.STATUS_FAULT
|
when tasks.STATUS_FAULT
|
||||||
util.log("#{currentRequest.deviceId}: Fault response for task #{task._id}")
|
retryAfter = config.RETRY_DELAY * Math.pow(2, task.retries ? 0)
|
||||||
taskUpdate = {fault : task.fault}
|
util.log("#{currentRequest.deviceId}: Fault response for task #{task._id}. Retrying after #{retryAfter} seconds.")
|
||||||
|
taskUpdate = {fault : task.fault, timestamp : new Date(Date.now() + retryAfter * 1000)}
|
||||||
if save
|
if save
|
||||||
taskUpdate.session = task.session
|
taskUpdate.session = task.session
|
||||||
|
|
||||||
db.tasksCollection.update({_id : mongodb.ObjectID(String(task._id))}, {$set : taskUpdate}, (err) ->
|
db.tasksCollection.update({_id : mongodb.ObjectID(String(task._id))}, {$set : taskUpdate, $inc : {retries : 1}}, (err) ->
|
||||||
throw err if err
|
throw err if err
|
||||||
# Faulty task. No more work to do until task is deleted.
|
nextTask(currentRequest)
|
||||||
res = tr069.response(null, cwmpResponse)
|
|
||||||
writeResponse(currentRequest, res)
|
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
throw Error('Unknown task status')
|
throw Error('Unknown task status')
|
||||||
@@ -256,18 +255,15 @@ assertPresets = (currentRequest) ->
|
|||||||
|
|
||||||
|
|
||||||
nextTask = (currentRequest) ->
|
nextTask = (currentRequest) ->
|
||||||
cur = db.tasksCollection.find({'device' : currentRequest.deviceId}).sort(['timestamp']).limit(1)
|
now = new Date()
|
||||||
|
cur = db.tasksCollection.find({'device' : currentRequest.deviceId, timestamp : {$lte : now}}).sort(['timestamp']).limit(1)
|
||||||
cur.nextObject((err, task) ->
|
cur.nextObject((err, task) ->
|
||||||
throw new Error(err) if err?
|
throw err if err
|
||||||
cwmpResponse = {}
|
cwmpResponse = {}
|
||||||
|
|
||||||
if not task
|
if not task
|
||||||
# no more tasks, check presets discrepancy
|
# no more tasks, check presets discrepancy
|
||||||
assertPresets(currentRequest)
|
assertPresets(currentRequest)
|
||||||
else if task.fault?
|
|
||||||
# last task was faulty. Do nothing until until task is deleted
|
|
||||||
res = tr069.response(null, cwmpResponse)
|
|
||||||
writeResponse(currentRequest, res)
|
|
||||||
else if isTaskExpired(task)
|
else if isTaskExpired(task)
|
||||||
util.log("#{currentRequest.deviceId}: Task is expired #{task.name}(#{task._id})")
|
util.log("#{currentRequest.deviceId}: Task is expired #{task.name}(#{task._id})")
|
||||||
db.tasksCollection.remove({'_id' : mongodb.ObjectID(String(task._id))}, {safe: true}, (err, removed) ->
|
db.tasksCollection.remove({'_id' : mongodb.ObjectID(String(task._id))}, {safe: true}, (err, removed) ->
|
||||||
|
|||||||
+1
-1
@@ -239,7 +239,7 @@ else
|
|||||||
response.end('405 Method Not Allowed')
|
response.end('405 Method Not Allowed')
|
||||||
else if action is '/retry'
|
else if action is '/retry'
|
||||||
if request.method == 'POST'
|
if request.method == 'POST'
|
||||||
db.tasksCollection.update({_id : taskId}, {$unset : {fault : 1}, $inc : {retries : 1}, '$set' : {timestamp : new Date()}}, (err, count) ->
|
db.tasksCollection.update({_id : taskId}, {$unset : {fault : 1}, $set : {timestamp : new Date()}}, (err, count) ->
|
||||||
# TODO need to invalidate presets hash for the device
|
# TODO need to invalidate presets hash for the device
|
||||||
response.writeHead(200)
|
response.writeHead(200)
|
||||||
response.end()
|
response.end()
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ exports.WORKER_RESPAWN_TIME = 60000
|
|||||||
exports.LOG_INFORMS = false
|
exports.LOG_INFORMS = false
|
||||||
exports.DEBUG_DEVICES = {} # {'202BC1-BM632w-8KA8WA1151100043' : true}
|
exports.DEBUG_DEVICES = {} # {'202BC1-BM632w-8KA8WA1151100043' : true}
|
||||||
exports.DEVICE_ONLINE_THRESHOLD = 4000
|
exports.DEVICE_ONLINE_THRESHOLD = 4000
|
||||||
|
exports.RETRY_DELAY = 300
|
||||||
|
|
||||||
exports.MONGODB_OPTIONS = {
|
exports.MONGODB_OPTIONS = {
|
||||||
db : {
|
db : {
|
||||||
|
|||||||
Reference in new issue
Block a user