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 >