Fix bug updating tags not triggering preset rerun

This commit is contained in:
Zaid Abdulla committed 2017-11-04 20:47:55 -07:00
1 parent a436f17888
commit 93452d445f
2 files changed
+18

No files matched your search

+7
View File
@@ -356,6 +356,9 @@ applyPresets = (sessionContext) ->
session.clearProvisions(sessionContext) session.clearProvisions(sessionContext)
return sendAcsRequest(sessionContext) return sendAcsRequest(sessionContext)
sessionContext.deviceData.timestamps.dirty = 0;
sessionContext.deviceData.attributes.dirty = 0;
session.rpcRequest(sessionContext, null, (err, fault, id, acsRequest) -> session.rpcRequest(sessionContext, null, (err, fault, id, acsRequest) ->
return throwError(err, sessionContext.httpResponse) if err return throwError(err, sessionContext.httpResponse) if err
@@ -374,6 +377,10 @@ applyPresets = (sessionContext) ->
if whiteList? if whiteList?
return applyPresets(sessionContext) return applyPresets(sessionContext)
if sessionContext.deviceData.timestamps.dirty > 1 or
sessionContext.deviceData.attributes.dirty > 1
return applyPresets(sessionContext)
sendAcsRequest(sessionContext, id, acsRequest) sendAcsRequest(sessionContext, id, acsRequest)
) )
) )
+11
View File
@@ -36,6 +36,7 @@ class VersionedMap {
this._sizeDiff = [0]; this._sizeDiff = [0];
this._revision = 0; this._revision = 0;
this.map = new Map(); this.map = new Map();
this.dirty = 0;
} }
@@ -100,6 +101,7 @@ class VersionedMap {
var v = this.map.get(key); var v = this.map.get(key);
if (!v) { if (!v) {
this.dirty |= 1 << rev;
for (let i = 0; i < rev; ++ i) for (let i = 0; i < rev; ++ i)
this._sizeDiff[i] -= 1; this._sizeDiff[i] -= 1;
@@ -118,6 +120,7 @@ class VersionedMap {
throw new Error('Cannot modify old revisions'); throw new Error('Cannot modify old revisions');
} }
this.dirty |= 1 << rev;
if (old === NONEXISTENT) if (old === NONEXISTENT)
++ this._sizeDiff[rev]; ++ this._sizeDiff[rev];
@@ -140,6 +143,7 @@ class VersionedMap {
if (old === NONEXISTENT) if (old === NONEXISTENT)
return false; return false;
this.dirty |= 1 << rev;
-- this._sizeDiff[rev]; -- this._sizeDiff[rev];
v[rev] = NONEXISTENT; v[rev] = NONEXISTENT;
@@ -177,6 +181,7 @@ class VersionedMap {
for (let i = this._sizeDiff.length; i <= r; ++ i) for (let i = this._sizeDiff.length; i <= r; ++ i)
this._sizeDiff[i] = this._sizeDiff[i - 1]; this._sizeDiff[i] = this._sizeDiff[i - 1];
this.dirty |= 1 << r;
rev[r] = revisions[k]; rev[r] = revisions[k];
} }
} }
@@ -184,6 +189,8 @@ class VersionedMap {
for (let i = 0; i < minKey; ++ i) for (let i = 0; i < minKey; ++ i)
-- this._sizeDiff[i]; -- this._sizeDiff[i];
this.dirty |= del;
for (let i = 0; del > 0; del >>= 1, ++ i) for (let i = 0; del > 0; del >>= 1, ++ i)
if (del & 1) if (del & 1)
rev[i] = NONEXISTENT; rev[i] = NONEXISTENT;
@@ -233,6 +240,10 @@ class VersionedMap {
this._sizeDiff[revision] = this._sizeDiff[this._sizeDiff.length - 1]; this._sizeDiff[revision] = this._sizeDiff[this._sizeDiff.length - 1];
this._sizeDiff.splice(revision + 1, this._sizeDiff.length); this._sizeDiff.splice(revision + 1, this._sizeDiff.length);
let d = this.dirty >> revision;
this.dirty = this.dirty ^ (d << revision);
this.dirty |= (+!!d) << revision;
for (let pair of this.map) { for (let pair of this.map) {
let k = pair[0]; let k = pair[0];
let v = pair[1]; let v = pair[1];