From f962be6c81107703d8f0c5c6ddf030a35bc23035 Mon Sep 17 00:00:00 2001 From: ph <ph@cesnet.cz> Date: Wed, 29 Apr 2015 15:00:19 +0200 Subject: [PATCH] Server now silently logs and skips events which cannot be deserialized from db. That can happen if too big event slips in and db truncates it, causing invalid JSON. --- warden3/warden_server/warden_server.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index 582aa96..ffbe651 100755 --- a/warden3/warden_server/warden_server.py +++ b/warden3/warden_server/warden_server.py @@ -649,7 +649,18 @@ class MySQL(ObjectReq): else: maxid = self.getLastEventId() - events = [json.loads(r["data"]) for r in row] + events = [] + for r in row: + try: + e = json.loads(r["data"]) + except Exception: + # Note that we use Error object just for proper formatting, + # but do not raise it; from client perspective invalid + # events get skipped silently. + err = self.req.error(message="Unable to deserialize JSON event from db, id=%s" % r["id"], error=500, + exc=sys.exc_info(), id=r["id"]) + err.log(logging.getLogger(), prio=logging.WARNING) + events.append(e) return { "lastid": maxid, -- GitLab