}
}
+ var parsed = JSON.parse(new_json_contents);
+
+ if (parsed['internal']) {
+ if (parsed['internal']['grpc_backends'] &&
+ hash_lookup.need_reinit(parsed['internal']['grpc_backends'])) {
+ hash_lookup.init(parsed['internal']['grpc_backends']);
+ }
+ delete parsed['internal'];
+ new_json_contents = JSON.stringify(parsed);
+ }
+
var new_json = {
- parsed: JSON.parse(new_json_contents),
+ parsed: parsed,
plain: new_json_contents,
last_modified: mtime
};
var histobj = history_left.shift();
var diff = delta.JSON_delta.diff(histobj.parsed, new_json.parsed);
var diff_text = JSON.stringify(diff);
+
+ // Verify that the delta is correct
+ var base = JSON.parse(histobj.plain);
+ delta.JSON_delta.patch(base, diff);
+ var correct_pv = JSON.stringify(base['pv']);
+ var wrong_pv = JSON.stringify(new_json.parsed['pv']);
+ if (correct_pv !== wrong_pv) {
+ console.log("Patch went wrong:", histobj.plain, new_json.plain);
+ exit();
+ }
+
zlib.gzip(diff_text, function(err, buffer) {
if (err) throw err;
new_diff_json[histobj.last_modified] = {
touch_timer = setTimeout(function() {
console.log("Touching analysis.json due to no other activity");
var now = Date.now() / 1000;
- fs.utimes(json_filename, now, now);
+ fs.utimes(json_filename, now, now, function() {});
}, 30000);
}
var possibly_wakeup_clients = function() {