event: Add deduplication of server restart events.

(imported from commit e464aa8b68958fb9f9fe8c199b9e73df510d22bc)
This commit is contained in:
Tim Abbott
2013-11-22 14:53:59 -05:00
parent 0156e72352
commit d2486670a8
2 changed files with 17 additions and 6 deletions

View File

@@ -157,7 +157,7 @@ def compute_full_event_type(event):
# Virtual events are a mechanism for storing pointer changes and other # Virtual events are a mechanism for storing pointer changes and other
# easily collapsed event types efficiently. # easily collapsed event types efficiently.
VIRTUAL_EVENT_TYPES = ["pointer", "read/add"] VIRTUAL_EVENT_TYPES = ["pointer", "read/add", "restart"]
class EventQueue(object): class EventQueue(object):
def __init__(self, id): def __init__(self, id):
self.queue = deque() self.queue = deque()
@@ -199,6 +199,8 @@ class EventQueue(object):
virtual_event["pointer"] = event["pointer"] virtual_event["pointer"] = event["pointer"]
elif full_event_type == "read/add": elif full_event_type == "read/add":
virtual_event["messages"] += event["messages"] virtual_event["messages"] += event["messages"]
elif full_event_type == "restart":
virtual_event["server_generation"] = event["server_generation"]
else: else:
self.queue.append(event) self.queue.append(event)

View File

@@ -2507,17 +2507,22 @@ class EventQueueTest(TestCase):
"pointer": pointer_val, "pointer": pointer_val,
"timestamp": str(pointer_val)}) "timestamp": str(pointer_val)})
queue.push({"type": "unknown"}) queue.push({"type": "unknown"})
queue.push({"type": "restart", "server_generation": "1"})
for pointer_val in xrange(11, 20): for pointer_val in xrange(11, 20):
queue.push({"type": "pointer", queue.push({"type": "pointer",
"pointer": pointer_val, "pointer": pointer_val,
"timestamp": str(pointer_val)}) "timestamp": str(pointer_val)})
queue.push({"type": "restart", "server_generation": "2"})
self.assertEqual(queue.contents(), self.assertEqual(queue.contents(),
[{"type": "unknown", [{"type": "unknown",
"id": 9,}, "id": 9,},
{'id': 18, {'id': 19,
'type': 'pointer', 'type': 'pointer',
"pointer": 19, "pointer": 19,
"timestamp": "19"}]) "timestamp": "19"},
{"id": 20,
"type": "restart",
"server_generation": "2"}])
for pointer_val in xrange(21, 23): for pointer_val in xrange(21, 23):
queue.push({"type": "pointer", queue.push({"type": "pointer",
"pointer": pointer_val, "pointer": pointer_val,
@@ -2525,14 +2530,18 @@ class EventQueueTest(TestCase):
self.assertEqual(queue.contents(), self.assertEqual(queue.contents(),
[{"type": "unknown", [{"type": "unknown",
"id": 9,}, "id": 9,},
{'id': 18, {'id': 19,
'type': 'pointer', 'type': 'pointer',
"pointer": 19, "pointer": 19,
"timestamp": "19"}, "timestamp": "19"},
{'id': 20, {"id": 20,
"type": "restart",
"server_generation": "2"},
{'id': 22,
'type': 'pointer', 'type': 'pointer',
"pointer": 22, "pointer": 22,
"timestamp": "22"},]) "timestamp": "22"},
])
def test_flag_collapsing(self): def test_flag_collapsing(self):
queue = EventQueue("1") queue = EventQueue("1")