<br><br><div class="gmail_quote">On Thu, Apr 7, 2011 at 18:27, Jason Grout <span dir="ltr"><<a href="mailto:jason-sage@creativetrax.com">jason-sage@creativetrax.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

I've been pondering the messaging spec quite a bit over the last few<br>
weeks and meshing it in with a project in Sage (a single-cell server,<br>
like a one-off ipython or sage web notebook).  Our architecture is that<br>
we have a big database sitting on the server side that basically acts as<br>
a cache of the zeromq messages between the kernel and the web client. It<br>
is easy enough to store the messages in the database, but we have a<br>
problem that you guys don't have since you use zeromq end-to-end.  Once<br>
we put a list of messages into the database, we don't know what the<br>
right order for the messages is.  So here is a<br>
suggestion/request/proposal for the API:<br>
<br>
PROPOSAL: Can we add another field to the header of a, a msg_order (or<br>
msg_counter?) field, which (across messages with the same<br>
header['session']) is guaranteed to be an increasing integer signifying<br>
the order of messages?<br></blockquote><div><br></div><div>The parallel code uses a slightly more advanced Session object (the thing</div><div>that builds messages) that includes the notion of an extensible 'subheader'.</div>

<div>With this, you can put any extra (jsonable) information you want into the header.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
You might ask why we don't just use the msg_id field for this.  Well, it<br>
seems nice for us to make the msg_id be a mongodb id object, which is<br>
just a hash.  It seems elegant to let the client or server dictate what<br>
how the msg_id's are formed with no insistence on a particular format or<br>
structure for the msg_id, other than it be unique among messages in the<br>
same session.</blockquote><div><br></div><div>The Client's Session object (or whoever builds the message) creates the msg_id, </div><div>and the only restriction is that it be jsonable.  The Client building the message</div>

<div>can use any scheme they like to build msg_ids, same with the Server and its replies, </div><div>and they don't even have to be the same as each other.</div><div><br></div><div> In fact, I'm not even sure there's anywhere in the code that actually requires that msg_id be unique </div>

<div>(though *we* do, for various reasons).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
You must have had a related problem storing history, though.  How did<br>
you sort the messages in the history database?<br></blockquote><div><br></div><div>the IPython console has an execution_count (the number that determines what goes in 'In [nn]'.  the sqlite database stores the session ID and execution counter for every entry.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
On the other hand, since the proposed msg_order *is* guaranteed to be<br>
unique across all messages in a session, maybe there's nothing lost in<br>
(just us?) insisting that the msg_id be an increasing integer sequence.<br></blockquote><div><br></div><div>Originally, the msg_id was just an integer, but that was replaced with UUIDs to </div><div>allow for simultaneous clients.  If you don't have more than one client per kernel,</div>

<div>there is no reason to not use integers for msg_id.</div><div><br></div><div>-MinRK</div><div>  </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Thanks,<br>
<br>
Jason<br>
<font color="#888888"><br>
--<br>
Jason Grout<br>
<br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</font></blockquote></div><br>