{"action":"created","issue":{"url":"https://api.github.com/repos/flux-framework/rfc/issues/120","repository_url":"https://api.github.com/repos/flux-framework/rfc","labels_url":"https://api.github.com/repos/flux-framework/rfc/issues/120/labels{/name}","comments_url":"https://api.github.com/repos/flux-framework/rfc/issues/120/comments","events_url":"https://api.github.com/repos/flux-framework/rfc/issues/120/events","html_url":"https://github.com/flux-framework/rfc/issues/120","id":279820401,"number":120,"title":"rfc3: ABNF grammar","user":{"login":"SteVwonder","id":874707,"avatar_url":"https://avatars2.githubusercontent.com/u/874707?v=4","gravatar_id":"","url":"https://api.github.com/users/SteVwonder","html_url":"https://github.com/SteVwonder","followers_url":"https://api.github.com/users/SteVwonder/followers","following_url":"https://api.github.com/users/SteVwonder/following{/other_user}","gists_url":"https://api.github.com/users/SteVwonder/gists{/gist_id}","starred_url":"https://api.github.com/users/SteVwonder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SteVwonder/subscriptions","organizations_url":"https://api.github.com/users/SteVwonder/orgs","repos_url":"https://api.github.com/users/SteVwonder/repos","events_url":"https://api.github.com/users/SteVwonder/events{/privacy}","received_events_url":"https://api.github.com/users/SteVwonder/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2017-12-06T16:34:09Z","updated_at":"2017-12-20T19:27:48Z","closed_at":null,"author_association":"MEMBER","body":"I have been re-reading older RFCs while working on #112. While digging through the ABNF grammar for CMB1 messages, I ran into three things that I couldn't quite reason out.\r\n\r\nFirst, what do the `C` and the `S` in front of `request`, `response`, `event`, and `keepalive` mean?    I presume they stand for client and server, but I couldn't find them defined in [Wikipedia's ABNF page](https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form).\r\n\r\n----\r\n\r\nSecond, in the top definition,\r\n```\r\nCMB1\t\t= C:request *S:response\r\n\t\t/ S:event\r\n\t\t/ C:keepalive\r\n```\r\nis the asterisk in front of `S:response` intentional?\r\n\r\n----\r\n\r\nThird, (which is more of a comment than a question) in both the grammar and the text there are references to a \"zero-sized delimiter\":\r\n```\r\n If message identity parts are present, a zero-size route delimiter frame MUST be present and positioned next.\r\n```\r\n```\r\n; Route frame stack, ZeroMQ DEALER-ROUTER format\r\nrouting\t\t= *identity delimiter\r\nidentity\t        = 1*OCTET\t\t; socket identity ZeroMQ frame\r\ndelimiter\t= 0OCTET\t\t; empty delimiter ZeroMQ frame\r\n```\r\nLooking solely at the grammar, it wasn't clear to me what it means for a zero-sized frame to be present. Digging into the [flux-core code](https://github.com/flux-framework/flux-core/blob/fd68af2c62dac25068a28e53e7d400ca5b275b25/src/common/libflux/message.c#L723), I see that a call to [zmsg_pushmem](https://github.com/zeromq/czmq/blob/dd252dbf9ab345f401e468ec6a2d001ae5a344fc/src/zmsg.c#L304) with a size of 0 is called, which creates a `zframe` of size 0.  It all seems really clear in hindsight, but without digging into the actual code, I was left confused as to how a zero-sized object could be present and be positioned at all.  Wrapping this data in a `zframe` also makes clear how you can have an arbitrary number of identities of arbitrary size and still be able to disambiguate each identity.  I'm not really suggesting any changes with this third comment, but maybe this will help someone stuck where I was."},"comment":{"url":"https://api.github.com/repos/flux-framework/rfc/issues/comments/353159619","html_url":"https://github.com/flux-framework/rfc/issues/120#issuecomment-353159619","issue_url":"https://api.github.com/repos/flux-framework/rfc/issues/120","id":353159619,"user":{"login":"SteVwonder","id":874707,"avatar_url":"https://avatars2.githubusercontent.com/u/874707?v=4","gravatar_id":"","url":"https://api.github.com/users/SteVwonder","html_url":"https://github.com/SteVwonder","followers_url":"https://api.github.com/users/SteVwonder/followers","following_url":"https://api.github.com/users/SteVwonder/following{/other_user}","gists_url":"https://api.github.com/users/SteVwonder/gists{/gist_id}","starred_url":"https://api.github.com/users/SteVwonder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SteVwonder/subscriptions","organizations_url":"https://api.github.com/users/SteVwonder/orgs","repos_url":"https://api.github.com/users/SteVwonder/repos","events_url":"https://api.github.com/users/SteVwonder/events{/privacy}","received_events_url":"https://api.github.com/users/SteVwonder/received_events","type":"User","site_admin":false},"created_at":"2017-12-20T19:27:48Z","updated_at":"2017-12-20T19:27:48Z","author_association":"MEMBER","body":"So I was looking into how to use streaming RPCs and I found this in RFC 6:\r\n\r\n> The server SHALL send zero or one responses to each request, as established by prior agreement between client and server (e.g. defined in their protocol specification).\r\n\r\nSo I guess RFC 6 needs to be updated the reflect the ability for multiple responses to be sent.  "}}
{"actor":{"display_login":"SteVwonder"}}