-
Notifications
You must be signed in to change notification settings - Fork 41
RFC: Define End-To-End parameters #1285
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
A strawman that could address #1278 1. Make unknown message params a PROTOCOL_VIOLATION 2. Make all subscriber message params hop-by-hop 3. Define publisher message parameter scope case-by-case: e2e: PUBLISHER_PRIORITY MAX_CACHE_DURATION DELIVERY_TIMEOUT [GROUP_ORDER] [DYNAMIC_GROUPS] hbh: AUTH_TOKEN EXPIRES [LARGEST_OBJECT] [FORWARD]
|
I think we should allow unknown messages that are passed between end subscriber and publisher but that seems a different issue. Perhaps we need a separate issue for this part of it. |
| as noted in the parameter definition. End-to-End Parameters sent in PUBLISH, | ||
| SUBSCRIBE_OK, TRACK_STATUS_OK or FETCH_OK MUST be cached by Relays and included | ||
| in future downstream subscriptions or fetches for that Track. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are the parameters immutable for the lifetime of a given track?
If parameters are mutable, how should the caching work? Only the last one is valid? What should existing connections see?
What about multi-publishers? Must all of them send the same values for e2e params?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh this is a good question. Can a publisher send REQUEST_UPDATE and change either parameters or extensions/track properties, or the properties are immutable?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ian and I were proposing that if you get a new one if a message, it overrides whatever was in cache before for that property. And when downstreams requests, it gets latest in cache with no upstream check to see if the cache i fresh.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think mutability makes sense for some of these but not others, so it might be on a case-by-case what you are allowed to change (with unknown=allow). I do worry a little bit about how that intersects our immutable Track model and what the edge cases might be.
fluffy
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we need to get our extensibility story agreed on before we can do this part of it.
ianswett
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks Alan, I took a closer look at this after the WG discussion in Montreal, and I think it's fairly close.
| elements. | ||
| Some messages include a Parameters field that encodes optional message elements. | ||
| All parameters included in a message MUST be defined in the negotiated version | ||
| of MOQT or negotiated via Setup Parameters. An endpoint that receives an |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's one wrinkle I realize, which is that we are using Parameters in Setup to negotiate which Parameters are supported, but we need to allow for unknown Parameters in Setup.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm I think I was trying to distinguish "message" params from "setup" params, but might need to be more crisp.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Alternatively, we could decide that Setup Messages use Extension Headers of some sort, but that feels odd somehow.
| Some messages include a Parameters field that encodes optional message elements. | ||
| All parameters included in a message MUST be defined in the negotiated version | ||
| of MOQT or negotiated via Setup Parameters. An endpoint that receives an | ||
| unknown message parameters MUST close the session with `PROTOCOL_VIOLATION`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| unknown message parameters MUST close the session with `PROTOCOL_VIOLATION`. | |
| unknown Parameter MUST close the session with `PROTOCOL_VIOLATION`. |
draft-ietf-moq-transport.md
Outdated
| After sending a NEW_GROUP_REQUEST upstream, the request is considered | ||
| outstanding until the Largest Group increases. | ||
|
|
||
| When sent by a publisher, this parameter is not End-To-End (see |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't this sent by a Subscriber?
draft-ietf-moq-transport.md
Outdated
| Objects have expired from cache, their state becomes unknown, and a relay that | ||
| handles a downstream request that includes those Objects re-requests them. | ||
|
|
||
| When sent by a publisher, this parameter is End-To-End (see |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: This is correct, but given the Publisher is the only one who sends it, how about:
| When sent by a publisher, this parameter is End-To-End (see | |
| MAX CACHE DURATION is only sent by a publisher, and is End-To-End (see |
|
|
||
| Message Parameters sent by the subscriber are always intended for the peer | ||
| endpoint and are not forwarded by Relays. Some message parameters sent by the | ||
| publisher are intended for the peer endpoint and are not forwarded by Relays, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| publisher are intended for the peer endpoint and are not forwarded by Relays, | |
| publisher are scoped to the Session and are not forwarded by Relays, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With #1374 I assume all publisher parameters are scoped to a message, while "Extension Headers" (eg: properties) are end-to-end.
| elements. | ||
| Some messages include a Parameters field that encodes optional message elements. | ||
| All parameters included in a message MUST be defined in the negotiated version | ||
| of MOQT or negotiated via Setup Parameters. An endpoint that receives an |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm I think I was trying to distinguish "message" params from "setup" params, but might need to be more crisp.
|
|
||
| Message Parameters sent by the subscriber are always intended for the peer | ||
| endpoint and are not forwarded by Relays. Some message parameters sent by the | ||
| publisher are intended for the peer endpoint and are not forwarded by Relays, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With #1374 I assume all publisher parameters are scoped to a message, while "Extension Headers" (eg: properties) are end-to-end.
| as noted in the parameter definition. End-to-End Parameters sent in PUBLISH, | ||
| SUBSCRIBE_OK, TRACK_STATUS_OK or FETCH_OK MUST be cached by Relays and included | ||
| in future downstream subscriptions or fetches for that Track. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh this is a good question. Can a publisher send REQUEST_UPDATE and change either parameters or extensions/track properties, or the properties are immutable?
draft-ietf-moq-transport.md
Outdated
| When sent by a publisher, this parameter is not End-To-End (see | ||
| {{parameter-scope}}). | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| When sent by a publisher, this parameter is not End-To-End (see | |
| {{parameter-scope}}). |
fluffy
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mostly look good but I have one big concern. Making what we called properties in the presentation just be a type of parameter ( that is an end-to-end parameter ) seem like it will make it hard to describe all the way that they don't follow the rules of normal parameters. I think we should call them properties.
| Message Parameters sent by the subscriber are always intended for the peer | ||
| endpoint and are not forwarded by Relays. Some message parameters sent by the | ||
| publisher are intended for the peer endpoint and are not forwarded by Relays, | ||
| while others relate to the Track or subscription and are considered End-to-End, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't love End-to-end as the name here. The point of these is you do not have to negotiation support for them in the setup and unknown ones are allowed. That is going to make the text really hard for the non end to end parameters. The issue is they only flow one way and end-to-end might suggest they can flow both ways. I did like separating them totally from parameters (other than same code point space) and calling them properties. I think that makes it easier to understand how they are different. Another option might be "track properties" but then I don't want to have to refer to the other ones as "non track propties" everywhere we use them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree it will be easier to explain and conceptualize if we don't call everything "parameters" and have this distinction between end-to-end and not.
| as noted in the parameter definition. End-to-End Parameters sent in PUBLISH, | ||
| SUBSCRIBE_OK, TRACK_STATUS_OK or FETCH_OK MUST be cached by Relays and included | ||
| in future downstream subscriptions or fetches for that Track. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ian and I were proposing that if you get a new one if a message, it overrides whatever was in cache before for that property. And when downstreams requests, it gets latest in cache with no upstream check to see if the cache i fresh.
|
|
||
| When sent by a publisher, this parameter is End-To-End (see | ||
| {{parameter-scope}}). | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This just high lights that we should have two separate things of subscriber group order and publisher group order.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We tried spitting it that way and the PR was incredibly awkward, so we let it roll with the current spelling. Perhaps as this group of extensibility PRs comes into focus we can take another swing at splitting this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd still love to get rid of Group Order, but that's TBD.
ianswett
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is close enough, but happy to refine it.
|
I think we should land #1374 first, then rework this one to use Track Extensions instead of "end-to-end" parameters. |
A strawman that could address #1278
e2e:
PUBLISHER_PRIORITY
MAX_CACHE_DURATION
DELIVERY_TIMEOUT
[GROUP_ORDER]
[DYNAMIC_GROUPS]
hbh:
AUTH_TOKEN
EXPIRES
[LARGEST_OBJECT]
[FORWARD]