-1 (non-binding)
I found a breaking bug in the new HTTP API. The messages do not conform to the
HTTP standard for chunked transfer encoding. in RFC 2616 Sec. 3
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html
<http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html>) a chunk is defined as:
chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
The HTTP API currently sends a chunk as:
chunk = chunk-size LF
chunk-data
A standard conform HTTP client like curl can’t correctly interpret the data as
a complete chunk. In curl it currently looks like this:
104
{"subscribed":{"framework_id":{"value":"20150820-114552-16777343-5050-43704-0000"}},"type":"SUBSCRIBED"}20
{"type":"HEARTBEAT”}666
…. waiting …
{"offers":{"offers":[{"agent_id":{"value":"20150820-114552-16777343-5050-43704-S0"},"framework_id":{"value":"20150820-114552-16777343-5050-43704-0000"},"hostname":"localhost","id":{"value":"20150820-114552-16777343-5050-43704-O0"},"resources":[{"name":"cpus","role":"*","scalar":{"value":8},"type":"SCALAR"},{"name":"mem","role":"*","scalar":{"value":15360},"type":"SCALAR"},{"name":"disk","role":"*","scalar":{"value":2965448},"type":"SCALAR"},{"name":"ports","ranges":{"range":[{"begin":31000,"end":32000}]},"role":"*","type":"RANGES"}],"url":{"address":{"hostname":"localhost","ip":"127.0.0.1","port":5051},"path":"\/slave(1)","scheme":"http"}}]},"type":"OFFERS”}20
… waiting …
{"type":"HEARTBEAT”}20
… waiting …
It will receive a couple of messages after successful registration with the
master and the last thing printed is a number (in this case 666). Then after
some time it will print the first offers message followed by the number 20. The
explanation for this behavior is, that curl can’t interpret the data it gets
from Mesos as a complete chunk and waits for the missing data. So it prints
what it thinks is a chunk (a message followed by the size of the next messsage)
and keeps the rest of the message until another message arrives and so on. The
fix for this is to terminate both lines, the message size and the message data,
with CRLF.
Cheers,
Dario