Refactor local cache
This commit is contained in:
1 parent
8b18f97d12
commit
e909d783e2
3 files changed
+444
-465
No files matched your search
+33
-44
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user