event: Add deduplication of server restart events.

(imported from commit 05467929ba376a0ce173119c5d90d83671fc544b)
This commit is contained in:
Tim Abbott
2013-11-22 14:53:59 -05:00
parent 5a4df81202
commit fb5c42707e
2 changed files with 17 additions and 6 deletions

View File

@@ -153,7 +153,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()
@@ -192,6 +192,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)

View File

@@ -2506,17 +2506,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,
@@ -2524,14 +2529,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")