Fault when provisions repeat indefinitely
This commit is contained in:
1 parent
bc1f6311a0
commit
c4880b636b
2 files changed
+33
-7
No files matched your search
@@ -483,6 +483,9 @@ listener = (httpRequest, httpResponse) ->
|
|||||||
throw err if err
|
throw err if err
|
||||||
sessionData.tasks = dueTasks
|
sessionData.tasks = dueTasks
|
||||||
sessionData.faults = faults
|
sessionData.faults = faults
|
||||||
|
sessionData.retries = {}
|
||||||
|
for k, v of faults
|
||||||
|
sessionData.retries[k] = v.retries
|
||||||
sessionData.operations = operations
|
sessionData.operations = operations
|
||||||
|
|
||||||
# Delete expired faults
|
# Delete expired faults
|
||||||
|
|||||||
+30
-7
@@ -103,9 +103,6 @@ loadParameters = (sessionData, callback) ->
|
|||||||
|
|
||||||
|
|
||||||
generateRpcId = (sessionData) ->
|
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)
|
return sessionData.timestamp.toString(16) + "0#{sessionData.rpcCount.toString(16)}".slice(-2)
|
||||||
|
|
||||||
|
|
||||||
@@ -611,8 +608,8 @@ rpcRequest = (sessionData, _declarations, callback) ->
|
|||||||
detail: fault.detail
|
detail: fault.detail
|
||||||
}
|
}
|
||||||
|
|
||||||
if sessionData.faults[channel]?
|
if sessionData.retries[channel]?
|
||||||
f.retries = (sessionData.faults[channel].retries or 0) + 1
|
f.retries = sessionData.retries[channel] + 1
|
||||||
|
|
||||||
faults[channel] = f
|
faults[channel] = f
|
||||||
|
|
||||||
@@ -686,6 +683,32 @@ rpcRequest = (sessionData, _declarations, callback) ->
|
|||||||
if not sessionData.syncState?
|
if not sessionData.syncState?
|
||||||
return callback()
|
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
|
inception = sessionData.declarations.length - 1
|
||||||
|
|
||||||
provisions = generateGetVirtualParameterProvisions(sessionData, sessionData.syncState.virtualParameterDeclarations[inception])
|
provisions = generateGetVirtualParameterProvisions(sessionData, sessionData.syncState.virtualParameterDeclarations[inception])
|
||||||
@@ -1551,8 +1574,8 @@ rpcFault = (sessionData, id, faultResponse, callback) ->
|
|||||||
detail: faultResponse.detail
|
detail: faultResponse.detail
|
||||||
}
|
}
|
||||||
|
|
||||||
if sessionData.faults[channel]?
|
if sessionData.retries[channel]?
|
||||||
fault.retries = (sessionData.faults[channel].retries or 0) + 1
|
fault.retries = sessionData.retries[channel] + 1
|
||||||
|
|
||||||
faults[channel] = fault
|
faults[channel] = fault
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user