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