From 360e840169f38e5cb7a5afa8a4e6ddc272203eee Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 20 Jan 2018 22:38:30 +0200 Subject: Fix: flush all buffers, not just first non-empty one --- worker_manager | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'worker_manager') diff --git a/worker_manager b/worker_manager index 1cc012e..9e16d19 100755 --- a/worker_manager +++ b/worker_manager @@ -19,6 +19,7 @@ import base64 import json import logging import os +import subprocess import tempfile import time @@ -338,8 +339,7 @@ class Runner: exit_code, _, _ = cliapp.runcmd_unchecked( argv, stdout_callback=self.capture_stdout, - stderr_callback=self.capture_stderr, - timeout_callback=self.flush, + stderr=subprocess.STDOUT, **kwargs ) self.flush() @@ -353,18 +353,23 @@ class Runner: return self.capture('stderr', data) def capture(self, stream_name, data): + logging.debug('CAPTURE %s: %r', stream_name, data) self._buffers[stream_name] += data.decode('UTF-8') if len(self._buffers[stream_name]) >= self._maxbuf: self.flush() return None def flush(self): - for stream in self._buffers: + logging.debug('flushing: self._buffers=%r', self._buffers) + streams = list(self._buffers.keys()) + logging.debug('streams: %r', streams) + for stream in streams: buf = self._buffers[stream] + logging.debug('FLUSH: %s: %r', stream, buf) self._buffers[stream] = '' if buf: logging.debug('Posting %d bytes of %s', len(buf), stream) - return self._post(stream, buf) + self._post(stream, buf) class WorkerBase: -- cgit v1.2.1