parent
6f524d3ff8
commit
053c594d65
|
@ -27,6 +27,7 @@
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
import atexit
|
||||||
import errno
|
import errno
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
@ -53,6 +54,23 @@ from mitogen.core import b
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def clean_shutdown(sock):
|
||||||
|
"""
|
||||||
|
Shut the write end of `sock`, causing `recv` in the worker process to wake
|
||||||
|
up with a 0-byte read and initiate mux process exit, then wait for a 0-byte
|
||||||
|
read from the read end, which will occur after the the child closes the
|
||||||
|
descriptor on exit.
|
||||||
|
|
||||||
|
This is done using :mod:`atexit` since Ansible lacks any more sensible hook
|
||||||
|
to run code during exit, and unless some synchronization exists with
|
||||||
|
MuxProcess, debug logs may appear on the user's terminal *after* the prompt
|
||||||
|
has been printed.
|
||||||
|
"""
|
||||||
|
sock.shutdown(socket.SHUT_WR)
|
||||||
|
while sock.recv(1):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MuxProcess(object):
|
class MuxProcess(object):
|
||||||
"""
|
"""
|
||||||
Implement a subprocess forked from the Ansible top-level, as a safe place
|
Implement a subprocess forked from the Ansible top-level, as a safe place
|
||||||
|
@ -112,6 +130,7 @@ class MuxProcess(object):
|
||||||
|
|
||||||
cls.unix_listener_path = mitogen.unix.make_socket_path()
|
cls.unix_listener_path = mitogen.unix.make_socket_path()
|
||||||
cls.worker_sock, cls.child_sock = socket.socketpair()
|
cls.worker_sock, cls.child_sock = socket.socketpair()
|
||||||
|
atexit.register(lambda: clean_shutdown(cls.worker_sock))
|
||||||
mitogen.core.set_cloexec(cls.worker_sock.fileno())
|
mitogen.core.set_cloexec(cls.worker_sock.fileno())
|
||||||
mitogen.core.set_cloexec(cls.child_sock.fileno())
|
mitogen.core.set_cloexec(cls.child_sock.fileno())
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,18 @@ Release Notes
|
||||||
* Compatible with development versions of Ansible post https://github.com/ansible/ansible/pull/41749
|
* Compatible with development versions of Ansible post https://github.com/ansible/ansible/pull/41749
|
||||||
|
|
||||||
|
|
||||||
|
v0.2.3 (2018-08-??)
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Mitogen for Ansible
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* `#331 <https://github.com/dw/mitogen/issues/331>`_: fixed known issue: the
|
||||||
|
connection multiplexer subprocess always exits before the main Ansible
|
||||||
|
process exits, ensuring logs generated by it do not overwrite the user's
|
||||||
|
prompt when ``-vvv`` is enabled.
|
||||||
|
|
||||||
|
|
||||||
v0.2.2 (2018-07-26)
|
v0.2.2 (2018-07-26)
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
@ -204,11 +216,11 @@ Mitogen for Ansible
|
||||||
for Message(..., 102, ...), my ID is ...* may be visible. These are due to a
|
for Message(..., 102, ...), my ID is ...* may be visible. These are due to a
|
||||||
minor race while initializing logging and can be ignored.
|
minor race while initializing logging and can be ignored.
|
||||||
|
|
||||||
* When running with ``-vvv``, log messages will be printed to the console
|
.. * When running with ``-vvv``, log messages will be printed to the console
|
||||||
*after* the Ansible run completes, as connection multiplexer shutdown only
|
*after* the Ansible run completes, as connection multiplexer shutdown only
|
||||||
begins after Ansible exits. This is due to a lack of suitable shutdown hook
|
begins after Ansible exits. This is due to a lack of suitable shutdown hook
|
||||||
in Ansible, and is fairly harmless, albeit cosmetically annoying. A future
|
in Ansible, and is fairly harmless, albeit cosmetically annoying. A future
|
||||||
release may include a solution.
|
release may include a solution.
|
||||||
|
|
||||||
* Performance does not scale linearly with target count. This requires
|
* Performance does not scale linearly with target count. This requires
|
||||||
significant additional work, as major bottlenecks exist in the surrounding
|
significant additional work, as major bottlenecks exist in the surrounding
|
||||||
|
|
Loading…
Reference in New Issue