David Wilson
aba396d4c5
core: bootstrap FD management improvements
...
- open fd 0/1/2 with correct file mode
- trap reserve_tty_fd in a file object, since all other FD manual FD
management is going away.
7 years ago
David Wilson
4f0a946f30
core: pending timers should keep broker alive.
7 years ago
David Wilson
237a3babaf
core: more succinct iter_split().
7 years ago
David Wilson
dfefc4c05c
core: replace UTF8_CODEC with encodings.utf_8.encode() function.
7 years ago
David Wilson
3f90030c1e
core: docstring style cleanups, dead code.
7 years ago
David Wilson
5aca9d6c3f
core: split out iter_split() for use in parent.py.
7 years ago
David Wilson
a5536c3514
core: eliminate some quadratric behaviour from IoLogger
...
This is the same problem as used to afflict Stream: large input buffers
containing many small messages cause intense string copying. This
eliminates the worst of it.
7 years ago
David Wilson
2fbc77a155
issue #170 : implement timers.
7 years ago
Jordan Webb
1a02a86331
Add buildah transport
7 years ago
David Wilson
8f940e2ccb
issue #590 : teach importer to handle self-replacing modules
7 years ago
David Wilson
ee62c57c9d
issue #576 : fix Kwargs minor version check.
...
Unicode kwargs were introduced in Python 2.6.5, not 2.6.0.
7 years ago
David Wilson
87c8ab4323
issue #550 : fix up TTY ioctls on WSL 2016 Anniversary Update
7 years ago
David Wilson
18b984a0b4
issue #535 : activate Corker on 2.4 in master too.
7 years ago
David Wilson
06e52ca89f
issue #535 : wire mitogen.os_fork into Broker and Pool.
7 years ago
David Wilson
63f4864b21
issue #535 : introduce mitogen.os_fork module and Corker class.
7 years ago
David Wilson
eb9ec26622
issue #535 : core: unicode.encode() may take importer lock on 2.x
...
Found on Python 2.4, where import happens immediately following connect.
- Main thread executes import statement, triggers request to parent
- Broker thread attempts to deliver request via Router
- Router discovers parent has disconnected, prepares a dead message
- .dead() calls unicode.encode() to format reason string
- .encode() attemptsto import a codec module
- deadlock
----
(gdb) pystack
/usr/local/python2.4.6/lib/python2.4/encodings/__init__.py (69): search_function
<stdin> (733): dead
<stdin> (2717): _maybe_send_dead
<stdin> (2724): _invoke
<stdin> (2749): _async_route
<stdin> (1635): _receive_one
<stdin> (1603): _internal_receive
<stdin> (1613): on_receive
<stdin> (2931): _call
<stdin> (2942): _loop_once
<stdin> (2988): _do_broker_main
<stdin> (545): _profile_hook
<stdin> (3007): _broker_main
/usr/local/python2.4.6/lib/python2.4/threading.py (420): run
/usr/local/python2.4.6/lib/python2.4/threading.py (424): __bootstrap
7 years ago
David Wilson
b3f592acee
issue #535 : core/select: support selecting from Latches.
7 years ago
David Wilson
7d0480e8bd
core: increase cookie field lengths to 64-bit; closes #545 .
7 years ago
David Wilson
ca63c26e01
core: Make Latch.put(obj=) optional.
7 years ago
David Wilson
9bcd2ec56c
issue #542 : return of select poller, new selection logic
7 years ago
David Wilson
2a8567b432
core: serialize calls to _service_stub_main().
...
See comment.
7 years ago
David Wilson
1f77d24bec
Update copyright year everywhere.
7 years ago
David Wilson
7ff4e6694c
issue #536 : rework how 2.3-compatible simplejson is served
...
Regardless of the version of simplejson loaded in the master, load up
the ModuleResponder cache with our 2.4-compatible version.
To cope with simplejson being loaded due to modules like ec2_group that
try to import it before importing 'json', also update target.py to
remove it from the whitelist if a local 'json' module import succeeds.
7 years ago
David Wilson
78ec634dab
issue #481 : core: preserve stderr TTY FD if one is present.
...
Since 802de6a8d5 , sudo on CentOS 5 had
begun failing due to a TTY FD leak in the parent process being fixed.
The old versions of sudo doesn't hang around after starting a child --
they exec the privilege-escalated child process on top of themselves,
meaning no spare copy of the TTY FD is kept alive by sudo.
When the child starts up, it replaces stdio with IoLoggers, including
the inherited stderr FD connected to DiagLogStream/the slave PTY. When
the last process closes a slave PTY, the kernel sends SIGHUP to any
processes still having it as the controlling TTY.
Therefore we must either ignore SIGHUP until the first stage has been
waited on (since the first stage also preserve the FD), or dup the
inherited TTY FD and keep it around forever.
Wasting one FD seems less annoying than modifying process signals for
all potential library users, so that is the approach taken here.
7 years ago
David Wilson
5ae7464011
core: cProfile is not available in 2.4.
7 years ago
David Wilson
0e193c223c
issue #508 : master: minify all Mitogen/ansible_mitogen sources.
...
Minify-safe files are marked with a magical "# !mitogen: minify_safe"
comment anywhere in the file, which activates the minifier. The result
is naturally cached by ModuleResponder, therefore lru_cache is gone too.
Given:
import os, mitogen
@mitogen.main()
def main(router):
c = router.ssh(hostname='k3')
c.call(os.getpid)
router.sudo(via=c)
SSH footprint drops from 56.2 KiB to 42.75 KiB (-23.9%)
Ansible "shell: hostname" drops 149.26 KiB to 117.42 KiB (-21.3%)
7 years ago
David Wilson
960392cf50
core: tidy up existing profiling code and support MITOGEN_PROFILE_FMT
7 years ago
David Wilson
3606580f05
issue #260 : redundant if statement.
7 years ago
David Wilson
696cee57dd
issue #260 : hide force-disconnect messages.
...
Parent is always force-disconnected, and now it shows up quite visibly
on every exit.
7 years ago
David Wilson
26c6c6d048
issue #498 : fix shutdown crash
...
Traceback (most recent call last):
File "<stdin>", line 2707, in _invoke
File "<stdin>", line 2480, in _on_del_route
NameError: global name 'target_id' is not defined
7 years ago
David Wilson
a18a083c94
issue #260 : avoid start_transmit()/on_transmit()/stop_transmit()
...
Previous transmit sequence was:
Router._async_route -> Stream._send -> Broker._start_transmit ->
Broker.loop -> Stream.on_transmit -> socket.write ->
Broker.stop_transmit
New sequence, when socket buffer can hold message is:
Router._async_route -> Stream._send -> socket.write
bench/roundtrip.py
Before: 240 usec
after: 178 usec
Stat before:
5088.276050 task-clock (msec) # 0.997 CPUs utilized
185,568 context-switches # 0.036 M/sec
0 cpu-migrations # 0.000 K/sec
18,923 page-faults # 0.004 M/sec
13,063,871,501 cycles # 2.567 GHz
12,834,579,684 instructions # 0.98 insn per cycle
2,669,820,684 branches # 524.700 M/sec
107,296,033 branch-misses # 4.02% of all branches
5.105018296 seconds time elapsed
2.350970000 seconds user
0.345497000 seconds sys
Stat after:
4019.208047 task-clock (msec) # 0.998 CPUs utilized
249,471 context-switches # 0.062 M/sec
0 cpu-migrations # 0.000 K/sec
20,990 page-faults # 0.005 M/sec
10,312,535,979 cycles # 2.566 GHz
11,586,365,995 instructions # 1.12 insn per cycle
2,392,933,370 branches # 595.374 M/sec
75,432,205 branch-misses # 3.15% of all branches
4.028763347 seconds time elapsed
3.367051000 seconds user
0.652962000 seconds sys
7 years ago
David Wilson
d4a0b70e15
core: ensure broker profiling output reaches disk
...
Profiler hasn't been used much since the hard exit was added.
7 years ago
David Wilson
0c0d34241b
core: Latch._wake improvements
...
os.write() can fail with EINTR due to signals, so wrap it in
io_op(). Closes #483 .
Masking EBADF looks like it is/was almost certainly papering over a bug,
remove it and suffer the bug reports. Closes #495 .
7 years ago
David Wilson
e2478dcb9f
issue #498 : wrap Router dict mutations in a lock
7 years ago
David Wilson
ec789513dc
ssh: tidy up logs and stream names.
7 years ago
David Wilson
16a2de65c4
issue #493 : another Py3.x fix.
7 years ago
David Wilson
2a70b3d5f4
issue #493 : Py3.x fix.
7 years ago
David Wilson
bc84d1e950
issue #493 : less CPU-intensive cookie format.
7 years ago
David Wilson
7dae88f0f5
issue #490 : have Side._on_fork() empty _fork_refs
...
This is mostly to avoid ugly debugging that depends on the state of GC.
Discard sides from _fork_refs after they have been closed.
7 years ago
David Wilson
2b234936b8
core: docstring tidyups.
7 years ago
David Wilson
f17fb91993
core: ensure early debug messages are logged correctly.
...
The magical _v and _vv were being set too late. Drag _setup_logging()
out of the Router constructor and call it at the right moment during
bootstrap.
7 years ago
David Wilson
8a931e79b0
core: log disconnection reason.
7 years ago
David Wilson
1f59bcc313
issue #477 : fix another Threading.getName() call.
7 years ago
David Wilson
d6dcb8d010
issue #477 : blacklist 'thread' module to avoid roundtrip on 2.x->3.x
7 years ago
David Wilson
4c1ddf6fc1
issue #477 : Python3 does not have Pickler.dispatch.
7 years ago
David Wilson
a31718a6bc
issue #477 : use PY24 constant rather than explicit test.
7 years ago
David Wilson
ffd46e9f1c
issue #477 : parent: make iter_read() log disconnect reason.
7 years ago
David Wilson
e9706a4a09
issue #477 : _update_linecache() must append newlines.
7 years ago
David Wilson
19b708e141
issue #415 , #477 : Poller must handle POLLHUP too.
...
Linux will fire poll() with simply the POLLHUP bit set even though it
was not requested, resulting in an infinite loop.
7 years ago
David Wilson
07f1b9bdd0
issue #477 : Python 2.5 needs next() polyfill too.
7 years ago