فهرست منبع

Don't rely on readable to figure out whether to remove/reopen log files (even if readable returns false, we still may want to reopen or remove the log file).

Chris McDonough 18 سال پیش
والد
کامیت
471a5b0da0
2فایلهای تغییر یافته به همراه11 افزوده شده و 6 حذف شده
  1. 2 2
      src/supervisor/process.py
  2. 9 4
      src/supervisor/tests/base.py

+ 2 - 2
src/supervisor/process.py

@@ -75,12 +75,12 @@ class Subprocess:
 
     def removelogs(self):
         for dispatcher in self.dispatchers.values():
-            if dispatcher.readable():
+            if hasattr(dispatcher, 'removelogs'):
                 dispatcher.removelogs()
 
     def reopenlogs(self):
         for dispatcher in self.dispatchers.values():
-            if dispatcher.readable():
+            if hasattr(dispatcher, 'removelogs'):
                 dispatcher.reopenlogs()
 
     def drain(self):

+ 9 - 4
src/supervisor/tests/base.py

@@ -764,6 +764,15 @@ class DummyDispatcher:
         self._writable = writable
         self._error = error
         self.input_buffer = ''
+        if readable:
+            # only readable dispatchers should have these methods
+            def reopenlogs():
+                self.logs_reopened = True
+            self.reopenlogs = reopenlogs
+            def removelogs():
+                self.logs_removed = True
+            self.removelogs = removelogs
+
     def readable(self):
         return self._readable
     def writable(self):
@@ -778,10 +787,6 @@ class DummyDispatcher:
         self.read_event_handled = True
     def handle_error(self):
         self.error_handled = True
-    def reopenlogs(self):
-        self.logs_reopened = True
-    def removelogs(self):
-        self.logs_removed = True
     def close(self):
         self.closed = True
     def flush(self):