diff options
Diffstat (limited to 'trace_reader.py')
| -rw-r--r-- | trace_reader.py | 13 |
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 | ||
