Improve set and clear data model functions

This commit is contained in:
Zaid Abdulla committed 2017-08-04 19:29:25 -07:00
1 parent 4eb1c61c4b
commit 7306f7a8a5
2 files changed
+106 -98

No files matched your search

+18 -4
View File
@@ -506,7 +506,7 @@ runDeclarations = (sessionContext, declarations) ->
attrTrackers.push(k)
cur[k] = Math.max(v, cur[k] or 0)
device.track(sessionContext.deviceData, p, 'prerequisite', false, null, true, attrTrackers)
device.track(sessionContext.deviceData, p, 'prerequisite', attrTrackers)
unpacked = device.unpack(sessionContext.deviceData, path)
for u in unpacked
@@ -538,7 +538,7 @@ runDeclarations = (sessionContext, declarations) ->
for k, v of declaration[4]
cur[k] = v
device.track(sessionContext.deviceData, path, 'prerequisite', false, null, true)
device.track(sessionContext.deviceData, path, 'prerequisite')
if declaration[3]?
if Array.isArray(declaration[3])
@@ -603,6 +603,14 @@ rpcRequest = (sessionContext, _declarations, callback) ->
fault.timestamp = sessionContext.timestamp
return callback(null, fault)
# Enforce max clear timestamp
for c in toClear
if c[1] > sessionContext.timestamp
c[1] = sessionContext.timestamp
for k, v of c[2]
if v > sessionContext.timestamp
c[2] = sessionContext.timestamp
sessionContext.declarations.push(decs)
sessionContext.provisionsRet[inception] = ret
@@ -1307,14 +1315,20 @@ clear = (sessionContext, toClear, callback) ->
MAX_DEPTH = config.get('MAX_DEPTH', sessionContext.deviceId)
toClear.forEach((c) ->
loadPath(sessionContext, c[0], ((1 << c[0].length) - 1) ^ ((1 << MAX_DEPTH) - 1))
if c[1]
p = c[0].slice(0, -1) # in order to include superset
loadPath(sessionContext, p, ((1 << p.length) - 1) ^ ((1 << MAX_DEPTH) - 1))
else if (c[2] and c[2].object)
loadPath(sessionContext, c[0], (((1 << c[0].length) - 1) >> 1) ^ ((1 << MAX_DEPTH) - 1))
else
loadPath(sessionContext, c[0], (1 << c[0].length) >> 1)
)
loadParameters(sessionContext, (err) ->
return callback(err) if err
toClear.forEach((c) ->
device.clear(sessionContext.deviceData, c[0], c[1], c[2])
device.clear(sessionContext.deviceData, c[0], c[1], c[2], c[3])
)
return callback()
)