Fault when provisions repeat indefinitely

This commit is contained in:
Zaid Abdulla committed 2016-12-10 16:01:25 -08:00
1 parent bc1f6311a0
commit c4880b636b
2 files changed
+33 -7

No files matched your search

+3
View File
@@ -483,6 +483,9 @@ listener = (httpRequest, httpResponse) ->
throw err if err
sessionData.tasks = dueTasks
sessionData.faults = faults
sessionData.retries = {}
for k, v of faults
sessionData.retries[k] = v.retries
sessionData.operations = operations
# Delete expired faults
+30 -7
View File
@@ -103,9 +103,6 @@ loadParameters = (sessionData, callback) ->
generateRpcId = (sessionData) ->
if sessionData.rpcCount > 255 or sessionData.revisions.length > 15
throw new Error('Too many RPCs')
return sessionData.timestamp.toString(16) + "0#{sessionData.rpcCount.toString(16)}".slice(-2)
@@ -611,8 +608,8 @@ rpcRequest = (sessionData, _declarations, callback) ->
detail: fault.detail
}
if sessionData.faults[channel]?
f.retries = (sessionData.faults[channel].retries or 0) + 1
if sessionData.retries[channel]?
f.retries = sessionData.retries[channel] + 1
faults[channel] = f
@@ -686,6 +683,32 @@ rpcRequest = (sessionData, _declarations, callback) ->
if not sessionData.syncState?
return callback()
if sessionData.rpcCount >= 255 or
sessionData.revisions.length >= 8 or
sessionData.iteration >= 64
faults = {}
for p, i in sessionData.provisions[0]
channel = sessionData.channels[i]
fault = faults[channel]
if not fault?
fault = {
provisions: []
timestamp: sessionData.timestamp
code: 'endless_cycle'
message: 'The provision seems to be repeating indefinitely'
}
if sessionData.retries[channel]?
fault.retries = sessionData.retries[channel] + 1
faults[channel] = fault
fault.provisions.push(p)
clearProvisions(sessionData)
return callback(null, faults)
inception = sessionData.declarations.length - 1
provisions = generateGetVirtualParameterProvisions(sessionData, sessionData.syncState.virtualParameterDeclarations[inception])
@@ -1551,8 +1574,8 @@ rpcFault = (sessionData, id, faultResponse, callback) ->
detail: faultResponse.detail
}
if sessionData.faults[channel]?
fault.retries = (sessionData.faults[channel].retries or 0) + 1
if sessionData.retries[channel]?
fault.retries = sessionData.retries[channel] + 1
faults[channel] = fault