[stable-2.9] Fix missing persistent connection messages (#68496) (#68562)

* [stable-2.9] Fix missing persistent connection messages (#68496)

* Be more proactive about returning module messages

* Move message display to a function, and replace handling already in shutdown().
(cherry picked from commit 5f6427b1fc)

Co-authored-by: Nathaniel Case <ncase@redhat.com>

* Add changelog
pull/68620/merge
Nathaniel Case 6 years ago committed by GitHub
parent ea4f6e1539
commit a41f09901b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,3 @@
bugfixes:
- Log additional messages from persistent connection modules that may be
missed if the module fails or returns early.

@ -147,6 +147,8 @@ class ConnectionProcess(object):
resp = self.srv.handle_request(data)
signal.alarm(0)
display_messages(self.connection)
if log_messages:
display.display("jsonrpc response: %s" % resp, log_only=True)
@ -196,6 +198,7 @@ class ConnectionProcess(object):
self.sock.close()
if self.connection:
self.connection.close()
display_messages(self.connection)
except Exception:
pass
finally:
@ -332,6 +335,24 @@ def main():
sys.exit(rc)
def display_messages(connection):
# This should be handled elsewhere, but if this is the last task, nothing will
# come back to collect the messages. So now each task will dump its own messages
# to stdout before logging the response message. This may make some other
# pop_messages calls redundant.
for level, message in connection.pop_messages():
if connection.get_option('persistent_log_messages') and level == "log":
display.display(message, log_only=True)
else:
# These should be keyed by valid method names, but
# fail gracefully just in case.
display_method = getattr(display, level, None)
if display_method:
display_method(message)
else:
display.display((level, message))
if __name__ == '__main__':
display = Display()
main()

Loading…
Cancel
Save