Sounds neat!<div><br></div><div>What do you expect/want to happen regarding tasks that are </div><div><br></div><div>a) waiting in the Scheduler<br>b) *finished* on engines</div><div>c) submitted by clients</div><div><br></div>

<div>while the controller is down?</div><div><br></div><div>-MinRK</div><div><br><div class="gmail_quote">On Tue, Mar 6, 2012 at 14:23,  <span dir="ltr">&lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sure.<br>
<br>
We&#39;re developing a cloud-based software system that processes<br>
documents/files etc. It is currently built around Amazon cloud APIs but we<br>
want to lose that dependency. So we have a single portal server that<br>
provides the user experience and acts as &quot;controller&quot; of the other<br>
servers. They can launch up to 100 virtual servers and then assign those<br>
servers to queues.<br>
<br>
Work messages are sent to the queues and each server fetches one message.<br>
Amazon has a queue service for this, but its not as fast as ipython. It<br>
is, however, fault tolerant.<br>
<br>
We want to move that internally to ipython with its nice load balancing<br>
features. The portal server will house the controller and each possible<br>
server (up to 100) will have 1 or more engines connected to it.<br>
<br>
One aspect of our design is that it must accommodate hardware failures.<br>
Currently any of the worker servers can just &quot;disappear&quot; without affecting<br>
the outcome. Likewise, new ones can emerge and help with the work.<br>
<br>
The portal server can also be rebooted or relaunched if necessary because<br>
all the cloud data is &quot;in the cloud&quot;.<br>
<br>
Since our portal acts as the &quot;head&quot; of the system, if it runs ipcontroller<br>
and is rebooted (which is allowed), then all 100 servers get confused and<br>
won&#39;t know to reconnect. I can write some logic to force this, but seems<br>
easier for ipcontroller to remember itself. Glad to see its a coming<br>
feature!<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; Can I ask more about what your environment is like, and the typical<br>
&gt; circumstances of controller shutdown / crash?<br>
&gt;<br>
&gt; How often does the controller die, how many tasks are pending in the<br>
&gt; Schedulers, and how many are active on engines when this happens?  What<br>
&gt; are<br>
&gt; your expectations/hopes/dreams for behavior if the controller goes down<br>
&gt; while a bunch of work is in-flight?<br>
&gt;<br>
&gt; -MinRK<br>
&gt;<br>
&gt; On Tue, Mar 6, 2012 at 13:20, &lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; Wow. Awesome. Let me try it. Many thanks.<br>
&gt;&gt;<br>
&gt;&gt; &gt; You might check out this first-go implementation:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; <a href="https://github.com/ipython/ipython/pull/1471" target="_blank">https://github.com/ipython/ipython/pull/1471</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; It seems to work fine if the cluster was idle at controller crash, but<br>
&gt;&gt; I<br>
&gt;&gt; &gt; haven&#39;t tested the behavior of running jobs.  I&#39;m certain that the<br>
&gt;&gt; &gt; propagation of results of jobs submitted before shutdown all the way<br>
&gt;&gt; up<br>
&gt;&gt; to<br>
&gt;&gt; &gt; interactive Clients is broken, but the results should still arrive in<br>
&gt;&gt; the<br>
&gt;&gt; &gt; Hub&#39;s db.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; -MinRK<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mon, Mar 5, 2012 at 16:38, MinRK &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; Correct, engines do not reconnect to a new controller, and right now<br>
&gt;&gt; a<br>
&gt;&gt; &gt;&gt; Controller is a single point of failure.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; We absolutely do intend to enable restarting the controller, and it<br>
&gt;&gt; &gt;&gt; wouldn&#39;t be remotely difficult, the code just isn&#39;t written yet.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Steps required for this:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 1. persist engine connection state to files/db (engine ID/UUID<br>
&gt;&gt; mapping<br>
&gt;&gt; &gt;&gt; should)<br>
&gt;&gt; &gt;&gt; 2. when starting up, load this information into the Hub, instead of<br>
&gt;&gt; &gt;&gt; starting from scratch<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; That is all.  No change should be required in the engines or clients,<br>
&gt;&gt; as<br>
&gt;&gt; &gt;&gt; zeromq handles the reconnect automagically.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; There is already enough information stored in the *task* database to<br>
&gt;&gt; &gt;&gt; resume all tasks that were waiting in the Scheduler, but I&#39;m not sure<br>
&gt;&gt; &gt;&gt; whether this should be done by default, or only on request.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; -MinRK<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Mon, Mar 5, 2012 at 15:17, Darren Govoni &lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; On Sun, 2012-02-12 at 13:19 -0800, MinRK wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt; It may also be unnecessary, because if the controller comes up at<br>
&gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt; same endpoint(s), then zeromq handles all the reconnects<br>
&gt;&gt; invisibly.<br>
&gt;&gt; &gt;&gt;&gt; A<br>
&gt;&gt; &gt;&gt;&gt; &gt; connection to an endpoint is always valid, whether or not there is<br>
&gt;&gt; a<br>
&gt;&gt; &gt;&gt;&gt; &gt; socket present at any given point in time.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;   I tried an example to see this. I ran an ipcontroller on one<br>
&gt;&gt; machine<br>
&gt;&gt; &gt;&gt;&gt; with static --port=21001 so engine client files would always be<br>
&gt;&gt; valid.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Just specifying the registration port isn&#39;t enough information, and<br>
&gt;&gt; you<br>
&gt;&gt; &gt;&gt; should be using `--reuse` or `IPControllerApp.reuse_files=True` for<br>
&gt;&gt; &gt;&gt; connection files to remain valid across sessions.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; I connected one engine from another server.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; I killed the controller and restarted it.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; After doing:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; client = Client()<br>
&gt;&gt; &gt;&gt;&gt; client.ids<br>
&gt;&gt; &gt;&gt;&gt; []<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; There are no longer any engines connected.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; dview = client[:]<br>
&gt;&gt; &gt;&gt;&gt; ...<br>
&gt;&gt; &gt;&gt;&gt; NoEnginesRegistered: Can&#39;t build targets without any engines<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; The problem perhaps is that for any large scale system, say 1<br>
&gt;&gt; &gt;&gt;&gt; controller<br>
&gt;&gt; &gt;&gt;&gt; with 50 engines running on 50 servers, this single-point-of-failure<br>
&gt;&gt; is<br>
&gt;&gt; &gt;&gt;&gt; hard to remedy.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Is there a way to tell the controller to reconnect to last known<br>
&gt;&gt; engine<br>
&gt;&gt; &gt;&gt;&gt; IP addresses? Or some other way to re-establish the grid? Rebooting<br>
&gt;&gt; 50<br>
&gt;&gt; &gt;&gt;&gt; servers is not a good option for us.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; On Sun, 2012-02-12 at 13:19 -0800, MinRK wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; On Sun, Feb 12, 2012 at 13:02, Darren Govoni &lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         Correct me if I&#39;m wrong, but do the ipengines &#39;connect&#39; or<br>
&gt;&gt; &gt;&gt;&gt; &gt;         otherwise<br>
&gt;&gt; &gt;&gt;&gt; &gt;         announce their presence to the controller?<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Yes, 100% of the connections are inbound to the controller<br>
&gt;&gt; processes,<br>
&gt;&gt; &gt;&gt;&gt; &gt; from clients and engines alike.  This is a strict requirement,<br>
&gt;&gt; &gt;&gt;&gt; because<br>
&gt;&gt; &gt;&gt;&gt; &gt; it would not be acceptable for engines to need open ports for<br>
&gt;&gt; inbound<br>
&gt;&gt; &gt;&gt;&gt; &gt; connections.  Simply bringing up a new controller with the same<br>
&gt;&gt; &gt;&gt;&gt; &gt; connection information would result in the cluster continuing to<br>
&gt;&gt; &gt;&gt;&gt; &gt; function, with the engines and client never realizing the<br>
&gt;&gt; controller<br>
&gt;&gt; &gt;&gt;&gt; &gt; went down at all, nor having to act on it in any way.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         If it were the other way<br>
&gt;&gt; &gt;&gt;&gt; &gt;         around, then this would accommodate some degree of fault<br>
&gt;&gt; &gt;&gt;&gt; &gt;         tolerance for<br>
&gt;&gt; &gt;&gt;&gt; &gt;         the controller because it could be restarted by a watching<br>
&gt;&gt; &gt;&gt;&gt; dog<br>
&gt;&gt; &gt;&gt;&gt; &gt;         and the<br>
&gt;&gt; &gt;&gt;&gt; &gt;         re-establish the connected state of the cluster. i.e. a<br>
&gt;&gt; &gt;&gt;&gt; &gt;         controller comes<br>
&gt;&gt; &gt;&gt;&gt; &gt;         online. a pub/sub message is sent to a known channel and<br>
&gt;&gt; &gt;&gt;&gt; &gt;         clients or<br>
&gt;&gt; &gt;&gt;&gt; &gt;         engines add the new ipcontroller to its internal list as a<br>
&gt;&gt; &gt;&gt;&gt; &gt;         failover<br>
&gt;&gt; &gt;&gt;&gt; &gt;         endpoint.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; This is still possible without reversing connection direction.<br>
&gt;&gt; Note<br>
&gt;&gt; &gt;&gt;&gt; &gt; that in zeromq there is *exactly zero* correlation between<br>
&gt;&gt; &gt;&gt;&gt; &gt; communication direction and connection direction.  PUB can connect<br>
&gt;&gt; to<br>
&gt;&gt; &gt;&gt;&gt; &gt; SUB, and vice versa.  In fact a single socket can bind and connect<br>
&gt;&gt; at<br>
&gt;&gt; &gt;&gt;&gt; &gt; the same time.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; It may also be unnecessary, because if the controller comes up at<br>
&gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt; same endpoint(s), then zeromq handles all the reconnects<br>
&gt;&gt; invisibly.<br>
&gt;&gt; &gt;&gt;&gt; A<br>
&gt;&gt; &gt;&gt;&gt; &gt; connection to an endpoint is always valid, whether or not there is<br>
&gt;&gt; a<br>
&gt;&gt; &gt;&gt;&gt; &gt; socket present at any given point in time.<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         On Sun, 2012-02-12 at 12:06 -0800, MinRK wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; On Sun, Feb 12, 2012 at 11:48, Darren Govoni<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         On Sun, 2012-02-12 at 11:12 -0800, MinRK wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; On Sun, Feb 12, 2012 at 10:42, Darren Govoni<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         Thanks Min,<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         Is it possible to open a ticket for<br>
&gt;&gt; this<br>
&gt;&gt; &gt;&gt;&gt; &gt;         capability<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         for a<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         (near) future<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         release? It compliments that already<br>
&gt;&gt; &gt;&gt;&gt; &gt;         amazing load<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         balancing<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         capability.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; You are welcome to open an Issue.  I don&#39;t<br>
&gt;&gt; know<br>
&gt;&gt; &gt;&gt;&gt; if<br>
&gt;&gt; &gt;&gt;&gt; &gt;         it will<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         make it<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; into one of the next few releases, but it is<br>
&gt;&gt; on<br>
&gt;&gt; &gt;&gt;&gt; my<br>
&gt;&gt; &gt;&gt;&gt; &gt;         todo<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         list.  The<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; best way to get this sort of thing going is to<br>
&gt;&gt; &gt;&gt;&gt; &gt;         start with a<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         Pull<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; Request.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         Ok, I will open an issue. Thanks. In the<br>
&gt;&gt; meantime,<br>
&gt;&gt; &gt;&gt;&gt; &gt;         is it<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         possible for<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         clients to &#39;know&#39; when a controller is no longer<br>
&gt;&gt; &gt;&gt;&gt; &gt;         available?<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         For example,<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         it would be nice if I can insert a callback<br>
&gt;&gt; handler<br>
&gt;&gt; &gt;&gt;&gt; &gt;         for this<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         sort of<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         internal exception so I can provide some<br>
&gt;&gt; graceful<br>
&gt;&gt; &gt;&gt;&gt; &gt;         recovery<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         options.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; It would be sensible to add a heartbeat mechanism on the<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; controller-&gt;client PUB channel for this information.<br>
&gt;&gt; Until<br>
&gt;&gt; &gt;&gt;&gt; &gt;         then, your<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; main controller crash detection is going to be simple<br>
&gt;&gt; &gt;&gt;&gt; &gt;         timeouts.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; ZeroMQ makes disconnect detection a challenge (because<br>
&gt;&gt; &gt;&gt;&gt; there<br>
&gt;&gt; &gt;&gt;&gt; &gt;         are no<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; disconnect events, because a disconnected channel is<br>
&gt;&gt; still<br>
&gt;&gt; &gt;&gt;&gt; &gt;         valid, as<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; the peer is allowed to just come back up).<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         Perhaps a related but separate notion<br>
&gt;&gt; &gt;&gt;&gt; &gt;         would be the<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         ability to<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         have<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         clustered controllers for HA.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; I do have a model in mind for this sort of<br>
&gt;&gt; thing,<br>
&gt;&gt; &gt;&gt;&gt; &gt;         though not<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         multiple<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; *controllers*, rather multiple Schedulers.<br>
&gt;&gt; Our<br>
&gt;&gt; &gt;&gt;&gt; &gt;         design with<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         0MQ would<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; make this pretty simple (just start another<br>
&gt;&gt; &gt;&gt;&gt; &gt;         scheduler, and<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         make an<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; extra call to socket.connect() on the Client<br>
&gt;&gt; and<br>
&gt;&gt; &gt;&gt;&gt; &gt;         Engine is<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         all that&#39;s<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; needed), and this should allow scaling to tens<br>
&gt;&gt; of<br>
&gt;&gt; &gt;&gt;&gt; &gt;         thousands<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         of<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; engines.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         Yes! That&#39;s what I&#39;m after. In this cloud-scale<br>
&gt;&gt; age<br>
&gt;&gt; &gt;&gt;&gt; &gt;         of<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         computing, that<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         would be ideal.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         Thanks Min.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         On Sun, 2012-02-12 at 08:32 -0800, Min<br>
&gt;&gt; RK<br>
&gt;&gt; &gt;&gt;&gt; &gt;         wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; No, there is no failover mechanism.<br>
&gt;&gt; &gt;&gt;&gt; &gt;          When the<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         controller<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         goes down, further requests will<br>
&gt;&gt; simply<br>
&gt;&gt; &gt;&gt;&gt; &gt;         hang.  We<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         have almost<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         all the information we need to bring<br>
&gt;&gt; up a<br>
&gt;&gt; &gt;&gt;&gt; &gt;         new<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         controller in<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         its place (restart it), in which case<br>
&gt;&gt; the<br>
&gt;&gt; &gt;&gt;&gt; &gt;         Client<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         wouldn&#39;t even<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         need to know that it went down, and<br>
&gt;&gt; would<br>
&gt;&gt; &gt;&gt;&gt; &gt;         continue<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         to just<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         work, thanks to some zeromq magic.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; -MinRK<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; On Feb 12, 2012, at 5:02, Darren<br>
&gt;&gt; Govoni<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &lt;<a href="mailto:darren@ontrenet.com">darren@ontrenet.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; Hi,<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt;  Does ipython support any kind of<br>
&gt;&gt; &gt;&gt;&gt; &gt;         clustering or<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         failover<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         for<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; ipcontrollers? I&#39;m wondering how<br>
&gt;&gt; &gt;&gt;&gt; &gt;         situations are<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         handled<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         where a<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; controller goes down when a client<br>
&gt;&gt; &gt;&gt;&gt; &gt;         needs to<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         perform<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         something.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; thanks for any tips.<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; Darren<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;         <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;         <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         &gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;         _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt;         IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt;         <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;         <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt; IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; IPython-User mailing list<br>
&gt;&gt; &gt;&gt;&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt;&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; IPython-User mailing list<br>
&gt;&gt; &gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; &gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; IPython-User mailing list<br>
&gt;&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;&gt;<br>
&gt; _______________________________________________<br>
&gt; IPython-User mailing list<br>
&gt; <a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;<br>
<br>
_______________________________________________<br>
IPython-User mailing list<br>
<a href="mailto:IPython-User@scipy.org">IPython-User@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
</div></div></blockquote></div><br></div>