)]}'
{"zuul/cmd/executor.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"7c3ab3d8d95b73e48139a2c30a57becb80d1e198","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class LogStreamerManager(threading.Thread):"},{"line_number":31,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":32,"context_line":"        super(LogStreamerManager, self).__init__(*args, **kwargs)"},{"line_number":33,"context_line":"        self._log_streamer_pid \u003d None"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def run(self):"},{"line_number":36,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_25d6b6c4","line":33,"updated":"2019-08-21 22:13:08.000000000","message":"Does this need to be a daemon thread?","commit_id":"45a088323469f74e7d070c91cf0472cec1c639e4"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"7c3ab3d8d95b73e48139a2c30a57becb80d1e198","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            while self._log_streamer_pid:"},{"line_number":39,"context_line":"                time.sleep(5)"},{"line_number":40,"context_line":"                pid, rc \u003d os.waitpid(self._log_streamer_pid, os.WNOHANG)"},{"line_number":41,"context_line":"                if pid !\u003d 0:"},{"line_number":42,"context_line":"                    # TODO does this leak the control pipe?"},{"line_number":43,"context_line":"                    self._log_streamer_pid \u003d None"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_65e90e7d","line":41,"updated":"2019-08-21 22:13:08.000000000","message":"Might want to make this\n\n  if pid \u003d\u003d self._log_streamer_pid\n\nSo that we are sure this is the child that died.","commit_id":"45a088323469f74e7d070c91cf0472cec1c639e4"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"bccc9a5be6eaab46bef9e8124840f44ab1e79183","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            self.log.info(\"Starting log streamer\")"},{"line_number":55,"context_line":"            streamer \u003d zuul.lib.log_streamer.LogStreamer("},{"line_number":56,"context_line":"                \u0027::\u0027, self.finger_port, self.job_dir)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            # Keep running until the parent dies:"},{"line_number":59,"context_line":"            pipe_read \u003d os.fdopen(pipe_read)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_77b8cfe7","line":56,"range":{"start_line":56,"start_character":22,"end_line":56,"end_character":52},"updated":"2019-08-22 19:50:57.000000000","message":"These vars need to be defined.","commit_id":"89c7e430f9ac1195f498d2b5fc5b9c105f9fd805"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"72343cef608daec6faebca65fc5b7008fb03f108","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class LogStreamerManager(object):"},{"line_number":31,"context_line":"    def __init__(self, finger_port, job_dir):"},{"line_number":32,"context_line":"        self._log_streamer_pid \u003d None"},{"line_number":33,"context_line":"        self.log \u003d logging.getLogger(\"zuul.Executor.LogStreamerManager\")"},{"line_number":34,"context_line":"        self.finger_port \u003d finger_port"},{"line_number":35,"context_line":"        self.job_dir \u003d job_dir"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_0e693d25","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":72},"updated":"2019-08-23 06:41:59.000000000","message":"nit: in most of the places I saw logger to be defined outside the class\u0027s __init__ method. Since it does not need any constructor\u0027s parameters -maybe just for consistency.","commit_id":"f7b731519b944f7c3a8bec2f7e6156a1c14e4069"}]}
