@benh thanks for the info.
On Mon, Apr 14, 2014 at 12:50 PM, Benjamin Hindman <b...@eecs.berkeley.edu>wrote: > Not the Event/Call stuff but the 'libprocess-from' and '202 Accepted' > reviews. > > > On Mon, Apr 14, 2014 at 10:40 AM, Kevin Sweeney > <kevin.t.swee...@gmail.com>wrote: > > > Didn't see the Event/Call review so current version uses the undocumented > > internal API. Should be straightforward to migrate though > > > > > > On Monday, April 14, 2014, Benjamin Hindman <b...@eecs.berkeley.edu> > > wrote: > > > >> Very cool Kevin. Was this using the patches on Review Board I linked? > >> > >> > >> On Sun, Apr 13, 2014 at 11:28 PM, Kevin Sweeney < > >> kevin.t.swee...@gmail.com> wrote: > >> > >> I've got the start of a JVM verson on github - it can currently register > >> a framework and parse the response. Client-side I still need to figure > out > >> how to properly configure Keep-Alive. Servlet can dispatch messages to > >> message handlers in a type-safe way and returns a 202 for messages it's > >> going to handle. Code's a mess currently. > >> > >> https://github.com/kevints/mesos-framework-api > >> > >> > >> On Fri, Apr 11, 2014 at 7:12 PM, Benjamin Hindman < > b...@eecs.berkeley.edu > >> > wrote: > >> > >> First, my apologies for getting to this party so late. It's great to see > >> people interested in helping create native-language Mesos libraries. > >> > >> Vladimir: my presentation was definitely referring to the the low-level > >> protocol between master, framework (scheduler), slave, and executors. > I'll > >> do my best here to clarify how the current protocol works and what we > need > >> to do to get it to the point where we can write native-language > libraries. > >> (Eventually it would be great to move some of this into documentation as > >> necessary.) > >> > >> As Nikita pointed out, the protocol is currently "HTTP-like". As my > >> presentation describes, think actors and one-way message passing when > >> considering how the protocol works. > >> > >> To send a message an actor POSTs an HTTP request where the actor that is > >> supposed to receive the message is the first component of the request > path > >> and the name of the message is the remaining part of the path. To > >> distinguish one of these "messages" from a normal HTTP request we look > to > >> see if the 'User-Agent' is 'libprocess/...'. For example: > >> > >> POST /master/mesos.internal.RegisterFrameworkMessage HTTP/1.1 > >> User-Agent: libprocess/scheduler(1)@10.0.1.7:53523 > >> > >> ... represents a message with the name > >> 'mesos.internal.RegisterFrameworkMessage' destined for the actor > 'master' > >> coming from the actor 'scheduler(1)' at 10.0.1.7:53523. If the 'master' > >> actor were to send a message back it would look something like this: > >> > >> POST /scheduler(1)/mesos.internal.FrameworkRegisteredMessage HTTP/1.1 > >> User-Agent: libprocess/master@10.0.1.7:5050 > >> > >> So, one-way message passing via HTTP POST. > >> > >> The message data is captured as the body of the HTTP request (which can > >> be specified using _either_ Content-Length or a Transfer-Encoding, and > as > >> Nikita points out we use chunked transfer encoding internally). The > data is > >> arbitrary and the actor ultimately decides how it wants to "parse" it. > In > >> Mesos, 99% of our messages use serialized protobufs, but we also send a > few > >> messages with just arbitrary data. All this really means is that knowing > >> the actor and message name is not enough, you also need to know what the > >> body type is supposed to be for that message. In the future we'll > probably > >> enable messages with either JSON or serialized protobuf[1] ... for now, > >> just serialized protobuf. > >> > >> Okay, so where does this break down when trying to do this > >> language-natively? I've had some of this in the works and this > conversation > >> has motivated me to publish some reviews addressing the issues: > >> > >> (1) We'll need to return a response if one plans to use a native HTTP > >> library since it'll expect request/response. > >> https://reviews.apache.org/r/20276 introduces responding with a '202 > >> Accepted' for these messages (from the HTTP specification, a '202 > >> Accepted': "The request has been accepted for processing, but the > >> processing has not been completed. The request might or might not > >> eventually be acted upon, as it might be disallowed when processing > >> actually takes place. There is no facility for re-sending a status code > >> from an asynchronous operation such as this."). > >> > >> (2) Most HTTP libraries will set their 'User-Agent' themselves > >> > >> > > > > -- > > Sent from Gmail Mobile > > > -- Vladimir Vivien