diff --git a/zerver/lib/event_queue.py b/zerver/lib/event_queue.py index 12ce147916..8f2fdb81b7 100644 --- a/zerver/lib/event_queue.py +++ b/zerver/lib/event_queue.py @@ -157,7 +157,7 @@ def compute_full_event_type(event): # Virtual events are a mechanism for storing pointer changes and other # easily collapsed event types efficiently. -VIRTUAL_EVENT_TYPES = ["pointer", "read/add"] +VIRTUAL_EVENT_TYPES = ["pointer", "read/add", "restart"] class EventQueue(object): def __init__(self, id): self.queue = deque() @@ -199,6 +199,8 @@ class EventQueue(object): virtual_event["pointer"] = event["pointer"] elif full_event_type == "read/add": virtual_event["messages"] += event["messages"] + elif full_event_type == "restart": + virtual_event["server_generation"] = event["server_generation"] else: self.queue.append(event) diff --git a/zerver/tests.py b/zerver/tests.py index cfd2b25f2b..66318aa309 100644 --- a/zerver/tests.py +++ b/zerver/tests.py @@ -2507,17 +2507,22 @@ class EventQueueTest(TestCase): "pointer": pointer_val, "timestamp": str(pointer_val)}) queue.push({"type": "unknown"}) + queue.push({"type": "restart", "server_generation": "1"}) for pointer_val in xrange(11, 20): queue.push({"type": "pointer", "pointer": pointer_val, "timestamp": str(pointer_val)}) + queue.push({"type": "restart", "server_generation": "2"}) self.assertEqual(queue.contents(), [{"type": "unknown", "id": 9,}, - {'id': 18, + {'id': 19, 'type': 'pointer', "pointer": 19, - "timestamp": "19"}]) + "timestamp": "19"}, + {"id": 20, + "type": "restart", + "server_generation": "2"}]) for pointer_val in xrange(21, 23): queue.push({"type": "pointer", "pointer": pointer_val, @@ -2525,14 +2530,18 @@ class EventQueueTest(TestCase): self.assertEqual(queue.contents(), [{"type": "unknown", "id": 9,}, - {'id': 18, + {'id': 19, 'type': 'pointer', "pointer": 19, "timestamp": "19"}, - {'id': 20, + {"id": 20, + "type": "restart", + "server_generation": "2"}, + {'id': 22, 'type': 'pointer', "pointer": 22, - "timestamp": "22"},]) + "timestamp": "22"}, + ]) def test_flag_collapsing(self): queue = EventQueue("1")