Refactor local cache

This commit is contained in:
Zaid Abdulla committed 2018-12-14 13:24:59 -08:00
1 parent 8b18f97d12
commit e909d783e2
3 files changed
+444 -465

No files matched your search

+33 -44
View File
@@ -34,9 +34,6 @@ const gpnHeuristic = require("./gpn-heuristic");
// phases: read and update
const MAX_ITERATIONS = config.get("MAX_COMMIT_ITERATIONS") * 2;
const provisionsCache = new WeakMap();
const virtualParametersCache = new WeakMap();
function initDeviceData() {
return {
paths: new PathSet(),
@@ -67,16 +64,11 @@ function init(deviceId, cwmpVersion, timeout, callback) {
declarations: []
};
localCache.getProvisionsAndVirtualParameters(
(err, hash, provisions, virtualParameters) => {
if (err) return void callback(err);
sessionContext.presetsHash = hash;
provisionsCache.set(sessionContext, provisions);
virtualParametersCache.set(sessionContext, virtualParameters);
callback(null, sessionContext);
}
);
localCache.getCurrentSnapshot((err, cacheSnapshot) => {
if (err) return void callback(err);
sessionContext.cacheSnapshot = cacheSnapshot;
callback(null, sessionContext);
});
}
function loadParameters(sessionContext, callback) {
@@ -550,7 +542,7 @@ function runProvisions(
let allDeclarations = [];
let allClear = [];
let counter = 3;
const allProvisions = provisionsCache.get(sessionContext);
const allProvisions = localCache.getProvisions(sessionContext.cacheSnapshot);
for (const [j, provision] of provisions.entries()) {
if (!allProvisions[provision[0]]) {
@@ -616,7 +608,9 @@ function runVirtualParameters(
let allDeclarations = [];
let allClear = [];
let counter = 3;
const allVirtualParameters = virtualParametersCache.get(sessionContext);
const allVirtualParameters = localCache.getVirtualParameters(
sessionContext.cacheSnapshot
);
for (const [j, provision] of provisions.entries()) {
counter += 2;
@@ -777,7 +771,9 @@ function runDeclarations(sessionContext, declarations) {
const allDeclareAttributeTimestamps = new Map();
const allDeclareAttributeValues = new Map();
const allVirtualParameters = virtualParametersCache.get(sessionContext);
const allVirtualParameters = localCache.getVirtualParameters(
sessionContext.cacheSnapshot
);
function mergeAttributeTimestamps(p, attrs) {
let cur = allDeclareAttributeTimestamps.get(p);
@@ -1118,7 +1114,9 @@ function rpcRequest(sessionContext, _declarations, callback) {
let toClear;
const allVirtualParameters = virtualParametersCache.get(sessionContext);
const allVirtualParameters = localCache.getVirtualParameters(
sessionContext.cacheSnapshot
);
vpd = vpd.filter(declaration => {
if (Object.keys(allVirtualParameters).length) {
@@ -2595,39 +2593,30 @@ function rpcFault(sessionContext, id, faultResponse, callback) {
}
function deserialize(sessionContextString, callback) {
localCache.getProvisionsAndVirtualParameters(
(err, hash, provisions, virtualParameters) => {
if (err) return void callback(err);
const sessionContext = JSON.parse(sessionContextString);
const sessionContext = JSON.parse(sessionContextString);
for (const decs of sessionContext.declarations)
for (const d of decs) common.addPathMeta(d.path);
if (sessionContext.presetsHash && sessionContext.presetsHash !== hash)
return void callback(new Error("Preset hash mismatch"));
const deviceData = initDeviceData();
for (const r of sessionContext.deviceData) {
const path = deviceData.paths.add(r[0]);
provisionsCache.set(sessionContext, provisions);
virtualParametersCache.set(sessionContext, virtualParameters);
if (r[1]) deviceData.loaded.set(path, r[1]);
for (const decs of sessionContext.declarations)
for (const d of decs) common.addPathMeta(d.path);
if (r[2]) deviceData.trackers.set(path, r[2]);
const deviceData = initDeviceData();
for (const r of sessionContext.deviceData) {
const path = deviceData.paths.add(r[0]);
if (r[1]) deviceData.loaded.set(path, r[1]);
if (r[2]) deviceData.trackers.set(path, r[2]);
if (r[3]) {
deviceData.timestamps.setRevisions(path, r[3]);
if (r[4]) deviceData.attributes.setRevisions(path, r[4]);
}
}
sessionContext.deviceData = deviceData;
callback(null, sessionContext);
if (r[3]) {
deviceData.timestamps.setRevisions(path, r[3]);
if (r[4]) deviceData.attributes.setRevisions(path, r[4]);
}
);
}
sessionContext.deviceData = deviceData;
// Ensure cache is populated
localCache.getCurrentSnapshot(err => {
callback(err, sessionContext);
});
}
function serialize(sessionContext, callback) {