summaryrefslogtreecommitdiffstats
path: root/trace_reader.py
diff options
context:
space:
mode:
Diffstat (limited to 'trace_reader.py')
-rw-r--r--trace_reader.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/trace_reader.py b/trace_reader.py
index 2e5f65d..e18547e 100644
--- a/trace_reader.py
+++ b/trace_reader.py
@@ -53,12 +53,19 @@ def trace_reader(files):
53 53
54 # We keep 100 records in each buffer and then keep the buffer sorted 54 # We keep 100 records in each buffer and then keep the buffer sorted
55 # This is because records may have been recorded slightly out of order 55 # This is because records may have been recorded slightly out of order
56 # This cannot guarantee records are produced in order, but it makes it
57 # overwhelmingly probably.
56 for x in range(0,len(file_iter_buff)): 58 for x in range(0,len(file_iter_buff)):
57 for y in range(0,100): 59 for y in range(0,100):
58 file_iter_buff[x].append(next(file_iters[x])) 60 file_iter_buff[x].append(next(file_iters[x]))
59 for x in range(0,len(file_iter_buff)): 61 for x in range(0,len(file_iter_buff)):
60 file_iter_buff[x] = sorted(file_iter_buff[x],key=lambda rec: rec.when) 62 file_iter_buff[x] = sorted(file_iter_buff[x],key=lambda rec: rec.when)
61 63
64 # Remember the time of the last record. This way, we can make sure records
65 # truly are produced in monotonically increasing order by time and terminate
66 # fatally if they are not.
67 last_time = None
68
62 # Keep pulling records as long as we have a buffer 69 # Keep pulling records as long as we have a buffer
63 while len(file_iter_buff) > 0: 70 while len(file_iter_buff) > 0:
64 71
@@ -87,6 +94,12 @@ def trace_reader(files):
87 del file_iter_buff[buff_to_refill] 94 del file_iter_buff[buff_to_refill]
88 del file_iters[buff_to_refill] 95 del file_iters[buff_to_refill]
89 96
97 # Check for monotonically increasing time
98 if last_time is not None and earliest.when < last_time:
99 exit("FATAL ERROR: trace_reader.py: out-of-order record produced")
100 else:
101 last_time = earliest.when
102
90 # Yield the record 103 # Yield the record
91 yield earliest 104 yield earliest
92 105