Commit Graph

191 Commits (4b2170dc814a4caf82b4fa6eda2f2dec339e8ce4)
 

Author SHA1 Message Date
David Wilson 4b2170dc81 Wire up ModuleForwarder; closes #3 7 years ago
David Wilson e8b1ebc434 issue #3: Teach core.py the difference between its parent context and the master context.
Needed to allow GET_MODULE calls to reach the parent rather than the
master, when they are not the same context.
7 years ago
David Wilson c7b619a50a It's safe for Waker.on_receive() to drain all bytes.
By the the time Waker.wake() writes to the pipe, any shared state that
would trigger action on the Broker thread has already been updated, so
reading subsequent bytes caused by later Waker.wake() can't miss
anything.

This avoids spewing tons of logs messages every time there is a storm of
user-generated log messages.
7 years ago
David Wilson 821c9dfcb6 Generalize ECONNRESET, EIO handling. 7 years ago
David Wilson 0aff1d82c6 Reads more neatly. 7 years ago
David Wilson 17c2fe68f2 Add Router.enable_debug() rather than cutpasting snippets constantly. 7 years ago
David Wilson a76d871a70 issue #3: Initial ModuleForwarder implementation.
Not wired up yet.
7 years ago
David Wilson fcd3f42f9e Quieten noisy logging 7 years ago
David Wilson a87194a9b8 Uniformly call Context.on_disconnect(), not just for parent. 7 years ago
dmw 64f628d590 fix crash during on_shutdown 7 years ago
dmw 92a4a61f11 Generate context IDs like handles. 7 years ago
David Wilson f9df857a57 Tidy up API. 7 years ago
David Wilson 4969d7ba61 Fix various bits of bad logging and hard-wired timeouts. 7 years ago
David Wilson 2d92455103 Update example. 7 years ago
David Wilson 0d0c87f910 Get routing working well. 7 years ago
David Wilson 0a0a060492 Introduce econtext.core.Router, refactor everything
* Header now contains (src, dst) context IDs for routing.
* econtext.context_id now contains current process' context ID.
* Now do 16kb-sized reads rather than 4kb.
* econtext package is uniformly imported in econtext/core.py in slave
  and master.
* Introduce econtext.core.Message() to centralize pickling policy, and
  various function interfaces, may rip it out again later.
* Teach slave/first stage to preserve the copy of econtext.core sent to
  it, so that it can be used for subsequent slave-of-slave bootstraps.
* Disconnect Stream from Context, and teach Context to send messages via
  Router. In this way the Context class works identically for slaves
  directly connected via a Stream, or those for whom other slaves are
  acting as proxies.
* Implement Router, which knows a list of contexts reachable via a
  Stream. Move context registry out of Broker and into Router.
* Move _invoke crap out of stream and into Context.
* Try to avoid pickling on the Broker thread wherever possible.
* Delete connection-specific fields from Context, they live on the
  associated Stream subclass now instead.
* Merge alloc_handle() and add_handle_cb() into add_handler().
* s/enqueue/send/
* Add a hacky guard to prevent send_await() deadlock from Broker thread.
* Temporarily break shutdown logic: graceful shutdown is broken since
  Broker doesn't know about which contexts exist any more.
* Handle EIO in iter_read() too. Also need to support ECONNRESET in here.
* Make iter_read() show last 100 bytes on failure.
* econtext.master.connect() is now econtext.master.Router.connect(),
  move most of the context/stream construction cutpaste into a single
  function, and Stream.construct().
* Stop using sys.executable, since it is the empty string when Python
  has been started with a custom argv[0]. Hard-wire python2.7 for now.
* Streams now have names, which are used as the default name for the
  associated Context during construction. That way Stream<->Context
  association is still fairly obviously and Stream.repr() prints
  something nice.
7 years ago
David Wilson 0c8e486891 Clarify. 7 years ago
David Wilson e374f85888 Fix module loader deadlock
Stop using cPickle on the broker thread where it is not known whether
the pickle data would cause the import machinery to be invoked, which
currently relies on blocking calls. Huge mess but it works.

This is due to:

        context.call(some.module.func, another.module.func)

We stringify ("some.module", "func"), but the reference to
another.module.func is passed into the pickle machinery, and there's no
way to generically stringify all function references in user data for
reification on the main thread, without doing something like this
instead.
7 years ago
David Wilson 48b4ac17b7 Revert "Fix messed up font on desktop."
This reverts commit 82257c2c37.
8 years ago
David Wilson f3cf9a5501 Format string error. 8 years ago
David Wilson 2150f82af0 Remove junk, fix context name. 8 years ago
David Wilson 808af10754 Add sudo to module list. 8 years ago
David Wilson 6c8be56c63 Move write_all() to where it's used. 8 years ago
David Wilson 669cc4fdb6 Docstring for econtext.sudo.connect 8 years ago
David Wilson 42732c90b6 Add sudo factory to docs. 8 years ago
David Wilson bad745515c Measure new modules too. 8 years ago
David Wilson 7c8c406cfa Ensure sudo is started with a new controlling TTY. 8 years ago
David Wilson 0ec8b6c206 Extraneous junk 8 years ago
David Wilson 7cbb74f9ef Handle password incorrect in econtext.sudo. 8 years ago
David Wilson 358e753010 Don't keep buffer of all previously received data. 8 years ago
David Wilson 57a7395b8a Treat EIO like an empty read. 8 years ago
David Wilson 99a2ccf68c First draft of econtext/sudo.py. 8 years ago
David Wilson 9733668b50 Replace OK indicator with EC0/EC1. 8 years ago
David Wilson 82257c2c37 Fix messed up font on desktop. 8 years ago
David Wilson 961a9549bd Better method to ensure __module__ is set consistently.
PyFunction_New() and type_new() both simply lookup the __name__ of the
global scope in which a function or class is defined in order to
determine its __module__. So we can do a better job of ensuring
__module__ is set correctly by simply overriding __name__ before
defining any functions or classes.

Works identically in Python 3.
8 years ago
David Wilson 9cd9f1fec2 Update module forwarder blurb. 8 years ago
David Wilson 571cc00dc3 Import incomplete econtext.tcp implementation. 8 years ago
David Wilson fe171cd8cf Parameterize create_child() in order to support non-pipe children. 8 years ago
David Wilson ae7fcb75e4 Fix run_with_broker test. 8 years ago
David Wilson 959839cbbf Fix log message. 8 years ago
David Wilson 4de557d304 Somre more basic tests. 8 years ago
David Wilson b964cc6f18 Import preamble_size.py. 8 years ago
David Wilson 5a4fc577cd disable_site_packages() helper for ssh_test. 8 years ago
David Wilson ba85638c78 Module __file__ fixes. 8 years ago
David Wilson 2e675c47a1 Beginnings of Django integration test project/app. 8 years ago
David Wilson 3535e45245 Broken SSH unit test. 8 years ago
David Wilson 341a90e173 Allow setting ssh_path in econtext.ssh.connect(). 8 years ago
David Wilson 7465e5b283 Add missing econtext.ssh to present list. 8 years ago
David Wilson bdc2f291ca Some importers don't implement all the optional interfaces. 8 years ago
David Wilson ff903b1bcd Rearrange docs, split connection methods into submodules. 8 years ago