]> git.sesse.net Git - remoteglot/blobdiff - server/serve-analysis.js
Verify that JSON_delta does not have any strangeness.
[remoteglot] / server / serve-analysis.js
index 22bc20d337d1585cb99df43e41519d0ff67ac1c5..41610e1439d733d2f73c0389351f711454a5e9a0 100644 (file)
@@ -93,8 +93,19 @@ var replace_json = function(new_json_contents, mtime) {
                }
        }
 
+       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
        };
@@ -123,6 +134,17 @@ var create_json_historic_diff = function(new_json, history_left, new_diff_json,
        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] = {
@@ -172,7 +194,7 @@ var reread_file = function(event, filename) {
        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() {