-
Notifications
You must be signed in to change notification settings - Fork 35
Clarify Latest Object Filter #853
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
Changes from 5 commits
a15ceff
2fea33f
93b1ecc
c31f2f6
bfd0911
46f777a
d626e11
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -879,7 +879,7 @@ allows relays to make only a single upstream subscription for the | |
track. The published content received from the upstream subscription | ||
request is cached and shared among the pending subscribers. | ||
Because SUBSCRIBE_UPDATE only allows narrowing a subscription, relays that | ||
aggregate upstream subscriptions can subscribe using the Latest Object | ||
aggregate upstream subscriptions can subscribe using the Higher Objects | ||
filter to avoid churn as downstream subscribers with disparate filters | ||
subscribe and unsubscribe from a track. | ||
|
||
|
@@ -1343,14 +1343,10 @@ the publisher to identify which objects need to be delivered. | |
|
||
There are 3 types of filters: | ||
|
||
Latest Object (0x2): Specifies an open-ended subscription beginning from | ||
the current object of the current group. If no content has been delivered yet, | ||
the subscription starts with the first published or received group. | ||
|
||
AbsoluteStart (0x3): Specifies an open-ended subscription beginning | ||
from the object identified in the StartGroup and StartObject fields. If the | ||
StartGroup is prior to the current group, the subscription starts at the | ||
beginning of the current object like the 'Latest Object' filter. | ||
beginning of the current object like the 'Higher Objects' filter. | ||
|
||
AbsoluteRange (0x4): Specifies a closed subscription starting at StartObject | ||
in StartGroup and ending at the largest object in EndGroup. The start and | ||
|
@@ -1359,13 +1355,23 @@ group than StartGroup. If the StartGroup is prior to the current group, the | |
subscription starts at the beginning of the current object like the 'Latest | ||
Object' filter. | ||
|
||
Higher Objects (0x5): Specifies an open-ended subscription. All objects with | ||
a Location greater than the Largest Group ID and Latest Object ID fields in the | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this is the wrong definition and will result in really hard to resolve race conditions. I think you should take it off the highest group / object the relay has received, not what was in the Subscribe OK. I'm speaking from implementation experience here. Think hard about the case of a non cacheing relay that got the object refereed to the the subscribe OK multiple object before it got the OK There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would that actually work, given that joining FETCH relies on the SUBSCRIBE_OK-provided values? |
||
SUBSCRIBE_OK will be delivered by the publisher. This is most useful where the | ||
Group ID implies a temporal relationship. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am not comfortable of adding group relationship in these filters. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's useful to provide a hint to the reader on why you'd want to use each of these, but I won't lie down in the road over that sentence. |
||
|
||
All Objects (0x6): All objects that arrive via upstream SUBSCRIBE at, or are | ||
created by, the publisher after processing the SUBSCRIBE, whether or not the | ||
Location is higher than the highest observed when the SUBSCRIBE is processed. | ||
This is most useful for tracks where the Group ID does not imply a temporal | ||
relationship. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Subscription filters should be agnostic of group structure. This seems to be adding application semantics and feels fragile to me. I am bit unsure on how this filter is addressing the original linked issue There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The original issue is that people read the LatestObject definition and had two different interpretations. Both interpretations serve valid use cases. So now there are two precise filter definitions, one for each use case. |
||
|
||
A filter type other than the above MUST be treated as error. | ||
|
||
If a subscriber wants to subscribe to Objects both before and after | ||
the Latest Object, it can send a SUBSCRIBE for the Latest Object | ||
followed by a FETCH. Depending upon the application, one might want to send | ||
both messages at the same time or wait for the first to return before sending | ||
the second. | ||
If a subscriber wants to subscribe to Objects that precede the Higher Objects | ||
filter, it can send a SUBSCRIBE for Higher Objects followed by a FETCH. | ||
Depending upon the application, one might want to send both messages at the same | ||
time or wait for the first to return before sending the second. | ||
|
||
The format of SUBSCRIBE is as follows: | ||
|
||
|
@@ -1772,7 +1778,7 @@ A Subscriber can use a Joining Fetch to, for example, fill a playback buffer wit | |
certain number of groups prior to the live edge of a track. | ||
|
||
A Joining Fetch is only permitted when the associated Subscribe has the Filter | ||
Type Latest Object. | ||
Type Higher Objects. | ||
|
||
A Fetch Type other than 0x1, 0x2 or 0x3 MUST be treated as an error. | ||
|
||
|
Uh oh!
There was an error while loading. Please reload this page.