From 2dd6c3151343f1604e0a591413628332415e7459 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 25 Mar 2016 16:44:28 -0400 Subject: [PATCH] Fix deleted logs breaking partial buffer rebuild When the read_recent_text ran off a cliff looking for buffer data, it left the current textfile handle in a bad state. This caused the buffer rebuild to fail completely in a scenario where all the current logs put together don't have enough data to satisfy the buffer. Fix this by making the handle more obviously broken, and repairing while seeking out data. --- confluent_server/confluent/log.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/confluent_server/confluent/log.py b/confluent_server/confluent/log.py index 9ff001c5..9269c359 100644 --- a/confluent_server/confluent/log.py +++ b/confluent_server/confluent/log.py @@ -625,6 +625,8 @@ class Logger(object): binfile = open(binpath, mode='r') textfile = open(textpath, mode='r') except IOError: + binfile = None + textfile = None break flock(binfile, LOCK_SH) flock(textfile, LOCK_SH) @@ -649,11 +651,15 @@ class Logger(object): textdata = '' while offsets: (offset, length, textpath) = offsets.pop() + if textfile is None: + textfile = open(textpath, mode='r') + flock(textfile, LOCK_SH) if textfile.name != textpath: try: flock(textfile, LOCK_UN) textfile.close() textfile = open(textpath, mode='r') + flock(textfile, LOCK_SH) except (ValueError, IOError) as e: break try: