And I've started a skeleton implementation of the Mesos framework API at
https://github.com/wickman/pesos

While I vendored the translated protobuf, it would be great to tackle
https://issues.apache.org/jira/browse/MESOS-857 at some point.


On Sun, Apr 27, 2014 at 12:50 PM, Brian Wickman <wick...@gmail.com> wrote:

> I've implemented a pure python version of the basic
> Process/ProtobufProcess mechanics and wire protocol.  I haven't gone so far
> as Kevin and tried to register a framework or maybe talk to a replicated
> log, but it shouldn't be much more work:
>
> https://github.com/wickman/compactor
>
> Zero documentation but you can read the tests for a general idea of what's
> going on.
>
> cheers,
> brian
>
>
>
> On Sun, Apr 13, 2014 at 10: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, so
>>> https://reviews.apache.org/r/20277 introduces a 'libprocess-from'
>>> header that works similar to User-Agent. There is still some cleanup I'd
>>> love to do around stringification of PIDs (the underlying type Mesos uses
>>> for remote actors, inspired by Erlang). Until then, the 'libprocess-from'
>>> string is unfortunately esoteric (see the test).
>>>
>>> The combination of these two patches should make sending and receiving
>>> messages straightforward. However, we still plan to expose the low-level
>>> Event and Call protobuf messages and that will be the preferred approach
>>> for building a native-language library. Follow along at
>>> https://issues.apache.org/jira/browse/MESOS-1127 for more details. (To
>>> be clear, you'd still be able to implement native-language libraries with
>>> the patches above but we'll be deprecating the protobufs you'd be using in
>>> favor of Event and Call protobufs instead. If you're eager to get that
>>> going before Event and Call are committed I'm happy to discuss the existing
>>> protobufs in more detail.)
>>>
>>> I hope this helps.
>>>
>>> Ben.
>>>
>>>
>>> On Fri, Apr 11, 2014 at 4:54 AM, Vladimir Vivien <
>>> vladimir.viv...@gmail.com> wrote:
>>>
>>>> Nikita
>>>> Thanks for the JIRA.
>>>>
>>>>
>>>> On Wed, Apr 9, 2014 at 2:16 PM, Vetoshkin Nikita <
>>>> nikita.vetosh...@gmail.com
>>>> > wrote:
>>>>
>>>> > BTW, there is also somehow related ticket
>>>> > https://issues.apache.org/jira/browse/MESOS-930
>>>> >
>>>> >
>>>> > On Wed, Apr 9, 2014 at 9:54 PM, Benjamin Mahler
>>>> > <benjamin.mah...@gmail.com>wrote:
>>>> >
>>>> > > >
>>>> > > > I thought the low-level api being referred in the
>>>> > > > video had to do with communication between master and
>>>> > framework|executor
>>>> > > > for scheduling.  But, it's really administrative.  I thought that
>>>> would
>>>> > > > have been an opportunity for a Go binding that did not require
>>>> the C++
>>>> > > > libraries.
>>>> > > >
>>>> > >
>>>> > > Vladimir, the low-level API referred to in the talk is exactly what
>>>> > you're
>>>> > > interpreting, it is for communication between master and scheduler,
>>>> and
>>>> > > slave and executor. You could definitely build pure go bindings as
>>>> you
>>>> > > described, just not with JSON.
>>>> > >
>>>> > > Forget I mentioned anything about the administrative endpoints and
>>>> JSON,
>>>> > as
>>>> > > I see that's leading to confusion. ;)
>>>> > >
>>>> > > On Wed, Apr 9, 2014 at 3:39 AM, Vladimir Vivien
>>>> > > <vladimir.viv...@gmail.com>wrote:
>>>> > >
>>>> > > > Ben,
>>>> > > > Thank you for clarifying. I thought the low-level api being
>>>> referred in
>>>> > > the
>>>> > > > video had to do with communication between master and
>>>> > framework|executor
>>>> > > > for scheduling.  But, it's really administrative.  I thought that
>>>> would
>>>> > > > have been an opportunity for a Go binding that did not require
>>>> the C++
>>>> > > > libraries.
>>>> > > >
>>>> > > > Thanks anyway.
>>>> > > >
>>>> > > >
>>>> > > >
>>>> > > >
>>>> > > >
>>>> > > >
>>>> > > > On Tue, Apr 8, 2014 at 4:52 PM, Benjamin Mahler
>>>> > > > <benjamin.mah...@gmail.com>wrote:
>>>> > > >
>>>> > > > > Sorry, I was not referring to implementing a scheduler via JSON
>>>> > instead
>>>> > > > of
>>>> > > > > protobuf, in theory that would be possible but there has been no
>>>> > > planning
>>>> > > > > in this area. Sorry for the confusion.
>>>> > > > >
>>>> > > > > I was referring to administrative endpoints. For example,
>>>> kicking a
>>>> > > > > framework out or telling the master a slave is needs to be
>>>> repaired.
>>>> > > > These
>>>> > > > > endpoints may rely on the ability to convert JSON to internal
>>>> > > protobufs.
>>>> > > > >
>>>> > > > > Can you clarify what you're looking to do? Are you looking to
>>>> > implement
>>>> > > > an
>>>> > > > > API in Go that communicates with JSON instead of serialized
>>>> protobuf?
>>>> > > > >
>>>> > > > > On Tue, Apr 8, 2014 at 1:19 PM, Vladimir Vivien
>>>> > > > > <vladimir.viv...@gmail.com>wrote:
>>>> > > > >
>>>> > > > > > Ben,
>>>> > > > > > That is exactly what I am asking.
>>>> > > > > > Is that something coming up soon, is there a JIRA I can look
>>>> at?
>>>> > > > > > I wanna get early start on a native json Go api or even help
>>>> out if
>>>> > > > > > possible.
>>>> > > > > >
>>>> > > > > >
>>>> > > > > > On Tue, Apr 8, 2014 at 3:25 PM, Benjamin Mahler
>>>> > > > > > <benjamin.mah...@gmail.com>wrote:
>>>> > > > > >
>>>> > > > > > > +vinod, benh
>>>> > > > > > >
>>>> > > > > > > Hey Vladimir, there will be some authenticated REST
>>>> endpoints at
>>>> > > some
>>>> > > > > > > point, there is some work in this area underway.
>>>> > > > > > >
>>>> > > > > > > We have the ability to encode protobuf messages as JSON, so
>>>> the
>>>> > > plan
>>>> > > > > was
>>>> > > > > > to
>>>> > > > > > > have any REST endpoints directly use JSON to send us
>>>> protobuf
>>>> > > > messages.
>>>> > > > > > I'm
>>>> > > > > > > not sure if this is what you're asking though?
>>>> > > > > > >
>>>> > > > > > >
>>>> > > > > > > On Tue, Apr 8, 2014 at 11:13 AM, Vetoshkin Nikita <
>>>> > > > > > > nikita.vetosh...@gmail.com> wrote:
>>>> > > > > > >
>>>> > > > > > > > I'm not a mesos guy, just very curious. But in my opinion
>>>> - I
>>>> > > doubt
>>>> > > > > it,
>>>> > > > > > > > HTTP is synchronous request-response protocol. Mesos needs
>>>> > > > something
>>>> > > > > > more
>>>> > > > > > > > robust for message passing. Websockets anyone? :)
>>>> > > > > > > >
>>>> > > > > > > >
>>>> > > > > > > > On Tue, Apr 8, 2014 at 10:08 PM, Vladimir Vivien
>>>> > > > > > > > <vladimir.viv...@gmail.com>wrote:
>>>> > > > > > > >
>>>> > > > > > > > > Ben / Nikita
>>>> > > > > > > > > Thanks for the pointers.
>>>> > > > > > > > > So, (without digging yet) is it a fair summary to say
>>>> that
>>>> > > > > libprocess
>>>> > > > > > > > wraps
>>>> > > > > > > > > protobufs-encoded calls and push them over HTTP to
>>>> > > master/slaves
>>>> > > > ?
>>>> > > > > > Will
>>>> > > > > > > > > protobuf (eventually) be supplanted by direct HTTP via
>>>> REST
>>>> > or
>>>> > > > > > similar
>>>> > > > > > > ?
>>>> > > > > > > > >
>>>> > > > > > > > >
>>>> > > > > > > > > On Mon, Apr 7, 2014 at 2:54 PM, Vetoshkin Nikita <
>>>> > > > > > > > > nikita.vetosh...@gmail.com
>>>> > > > > > > > > > wrote:
>>>> > > > > > > > >
>>>> > > > > > > > > > Or, just to get to know - you can take tcpdump and
>>>> take a
>>>> > > look
>>>> > > > :)
>>>> > > > > > > > > >
>>>> > > > > > > > > > I personally wouldn't call that HTTP. Something
>>>> "HTTP-like"
>>>> > > > would
>>>> > > > > > > > > describe
>>>> > > > > > > > > > it better. Because it's not request-response. It's
>>>> just
>>>> > > message
>>>> > > > > > > > passing,
>>>> > > > > > > > > no
>>>> > > > > > > > > > need to wait for the answer - send new message one
>>>> after
>>>> > > > another.
>>>> > > > > > > Every
>>>> > > > > > > > > > message is POST with address and message type encoded
>>>> in
>>>> > URI:
>>>> > > > > POST
>>>> > > > > > > > > > /executor(1)/mesos.internal.RunTaskMessage. Sender is
>>>> > encoded
>>>> > > > in
>>>> > > > > > > > > User-Agent
>>>> > > > > > > > > > header, e.g: libprocess/slave(1)@127.0.0.1:5051. Body
>>>> > > contains
>>>> > > > > > > > protobuf
>>>> > > > > > > > > > message, Transfer-Encoding is always "chunked".
>>>> > > > > > > > > >
>>>> > > > > > > > > >
>>>> > > > > > > > > > On Mon, Apr 7, 2014 at 10:42 PM, Benjamin Mahler
>>>> > > > > > > > > > <benjamin.mah...@gmail.com>wrote:
>>>> > > > > > > > > >
>>>> > > > > > > > > > > Unfortunately you will need to learn this by
>>>> looking at
>>>> > the
>>>> > > > > code
>>>> > > > > > in
>>>> > > > > > > > > > > libprocess, as the message passing format is not
>>>> > explicitly
>>>> > > > > > > > documented
>>>> > > > > > > > > at
>>>> > > > > > > > > > > the current time.
>>>> > > > > > > > > > >
>>>> > > > > > > > > > > Start with calls like ProtobufProcess::send() and
>>>> dig
>>>> > your
>>>> > > > way
>>>> > > > > > > down.
>>>> > > > > > > > > > >
>>>> > > > > > > > > > >
>>>> > > > > > > > > > > On Sat, Apr 5, 2014 at 7:52 AM, Vladimir Vivien
>>>> > > > > > > > > > > <vladimir.viv...@gmail.com>wrote:
>>>> > > > > > > > > > >
>>>> > > > > > > > > > > > I was watching this video from
>>>> > > > > > > > > > > > https://www.youtube.com/watch?v=n5GT7OFSh58fromBen
>>>> > > where
>>>> > > > he
>>>> > > > > > > > talked
>>>> > > > > > > > > > > > about the wire protocol for Mesos being done in
>>>> > > > > > > > > > > > HTTP.
>>>> > > > > > > > > > > >
>>>> > > > > > > > > > > > Where can I learn about the low-level wire
>>>> protocol
>>>> > > either
>>>> > > > in
>>>> > > > > > > > > > > documentation
>>>> > > > > > > > > > > > or browsing through the code.
>>>> > > > > > > > > > > >
>>>> > > > > > > > > > > > Thanks.
>>>> > > > > > > > > > > >
>>>> > > > > > > > > > > > --
>>>> > > > > > > > > > > > Vladimir Vivien
>>>> > > > > > > > > > > >
>>>> > > > > > > > > > >
>>>> > > > > > > > > >
>>>> > > > > > > > >
>>>> > > > > > > > >
>>>> > > > > > > > >
>>>> > > > > > > > > --
>>>> > > > > > > > > Vladimir Vivien
>>>> > > > > > > > >
>>>> > > > > > > >
>>>> > > > > > >
>>>> > > > > >
>>>> > > > > >
>>>> > > > > >
>>>> > > > > > --
>>>> > > > > > Vladimir Vivien
>>>> > > > > >
>>>> > > > >
>>>> > > >
>>>> > > >
>>>> > > >
>>>> > > > --
>>>> > > > Vladimir Vivien
>>>> > > >
>>>> > >
>>>> >
>>>>
>>>>
>>>>
>>>> --
>>>> Vladimir Vivien
>>>>
>>>
>>>
>>
>

Reply via email to