From c6c1739cd323c6b886df274051c2e7da90c07bf8 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 24 Aug 2024 22:48:12 -0400 Subject: [PATCH 1/9] Simplify SUBSCRIBE This is another effort at the SUBSCRIBE vs FETCH concept. I've reduced the number of modes for SUBSCRIBE to 3, and only one of them subscribes to Objects in the future. I removed Latest Group because the other two modes operate on the latest Object and I wasn't sure how practical it is to expect every relay to cache all of the latest group. And if they don't, implementations get complex. This is an opinionated approach, but it has quite a bit of flexibility now that the new priority design has landed. In particular, it gives the subscriber lots of control over what order Objects on either side of the live head are delivered. --- draft-ietf-moq-transport.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index bb0d399d..2c9e1e61 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1014,23 +1014,24 @@ GOAWAY Message { The subscriber specifies a filter on the subscription to allow the publisher to identify which objects need to be delivered. -There are 4 types of filters: - -Latest Group (0x1) : Specifies an open-ended subscription with objects -from the beginning of the current group. If no content has been delivered yet, -the subscription starts with the first published or received group. +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. +from the Object identified in the StartGroup and StartObject fields and ending +at the Latest Object, exclusive. If no Objects have been published after +StartGroup and StartObject, the subscription is immediately closed with a +SUBSCRIBE_ERROR. AbsoluteRange (0x4): Specifies a closed subscription starting at StartObject in StartGroup and ending at EndObject in EndGroup. The start and end of the range are inclusive. EndGroup and EndObject MUST specify the same or a later -object than StartGroup and StartObject. +object than StartGroup and StartObject. If no Objects have been published +within the range, the subscription is immediately closed with a +SUBSCRIBE_ERROR. A filter type other than the above MUST be treated as error. @@ -1069,7 +1070,9 @@ SUBSCRIBE_ERROR messages. * Track Alias: A session specific identifier for the track. Messages that reference a track, such as OBJECT ({{message-object}}), reference this Track Alias instead of the Track Name and Track Namespace to -reduce overhead. If the Track Alias is already being used for a different track, the publisher MUST close the session with a Duplicate Track Alias error ({{session-termination}}). +reduce overhead. If the Track Alias is already being used for a different track, +the publisher MUST close the session with a +Duplicate Track Alias error ({{session-termination}}). * Track Namespace: Identifies the namespace of the track as defined in ({{track-name}}). From 8eff815a810b59ca3a6fc9441816afb5d5a63e91 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 24 Aug 2024 22:54:49 -0400 Subject: [PATCH 2/9] Explain how to create subscriptions spanning the Current Object --- draft-ietf-moq-transport.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index 2c9e1e61..b4d58263 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1014,6 +1014,12 @@ GOAWAY Message { The subscriber specifies a filter on the subscription to allow the publisher to identify which objects need to be delivered. +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 SUBSCRIBE of type AbsoluteStart. Depending upon the +application, one might want to send both SUBSCRIBEs at the same time +or wait for the first to return before sending the second. + There are 3 types of filters: Latest Object (0x2): Specifies an open-ended subscription beginning from From 035915ac432e6584889725c63824febdfb5d5bb6 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 24 Aug 2024 22:57:27 -0400 Subject: [PATCH 3/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index b4d58263..f6a6578e 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1014,11 +1014,6 @@ GOAWAY Message { The subscriber specifies a filter on the subscription to allow the publisher to identify which objects need to be delivered. -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 SUBSCRIBE of type AbsoluteStart. Depending upon the -application, one might want to send both SUBSCRIBEs at the same time -or wait for the first to return before sending the second. There are 3 types of filters: @@ -1041,6 +1036,11 @@ SUBSCRIBE_ERROR. 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 SUBSCRIBE of type AbsoluteStart. Depending upon the +application, one might want to send both SUBSCRIBEs at the same time +or wait for the first to return before sending the second. ### SUBSCRIBE Format A subscriber issues a SUBSCRIBE to a publisher to request a track. From 3a251c8050855b4481f0bf9a79bfaa8ad2302e5a Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 24 Aug 2024 23:00:35 -0400 Subject: [PATCH 4/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index f6a6578e..3dd87e25 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1019,7 +1019,9 @@ 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. +the subscription starts with the first published or received group. Subscribers +MUST NOT issue more than one subscription for the Latest Object of a track +within the same session. AbsoluteStart (0x3): Specifies an open-ended subscription beginning from the Object identified in the StartGroup and StartObject fields and ending From 3b66713d76ba918af81a722499ea76ea41f6ccab Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 24 Aug 2024 23:03:47 -0400 Subject: [PATCH 5/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index 3dd87e25..4ab61530 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1040,9 +1040,9 @@ 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 SUBSCRIBE of type AbsoluteStart. Depending upon the -application, one might want to send both SUBSCRIBEs at the same time -or wait for the first to return before sending the second. +followed by a SUBSCRIBE of type AbsoluteStart or AbsoluteRange. +Depending upon the application, one might want to send both SUBSCRIBEs +at the same time or wait for the first to return before sending the second. ### SUBSCRIBE Format A subscriber issues a SUBSCRIBE to a publisher to request a track. From bbce70dc5b9468d01943a595f3c983167e9e8cf6 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 19 Oct 2024 09:27:02 -0400 Subject: [PATCH 6/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index b13dc55f..bf72c7a9 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1215,7 +1215,7 @@ The subscriber specifies a filter on the subscription to allow the publisher to identify which objects need to be delivered. -There are 3 types of filters: +There are 4 types of filters: Latest Group (0x1) : Specifies an open-ended subscription with objects from the beginning of the current group. If no content has been delivered yet, @@ -1223,9 +1223,7 @@ the subscription starts with the first published or received group. 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. Subscribers -MUST NOT issue more than one subscription for the Latest Object of a track -within the same session. +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 and ending From 06e5b66b0aa5f02fba760e2348d418bf79c0b41e Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 19 Oct 2024 09:31:51 -0400 Subject: [PATCH 7/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index bf72c7a9..1b4c52c6 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1226,10 +1226,9 @@ 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 and ending -at the Latest Object, exclusive. If no Objects have been published after -StartGroup and StartObject, the subscription is immediately closed with a -SUBSCRIBE_ERROR. +from the object identified in the StartGroup and StartObject fields. If the +StartGroup is prior to the current group, the publisher SHOULD reply with a +SUBSCRIBE_ERROR with code 'Invalid Range'. AbsoluteRange (0x4): Specifies a closed subscription starting at StartObject in StartGroup and ending at EndObject in EndGroup. The start and end of the @@ -1241,9 +1240,9 @@ 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 SUBSCRIBE of type AbsoluteStart or AbsoluteRange. -Depending upon the application, one might want to send both SUBSCRIBEs -at the same time or wait for the first to return before sending the second. +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: From 45e79e4911bb404ea0b90845057200bdc4c31450 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 19 Oct 2024 09:34:57 -0400 Subject: [PATCH 8/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index 1b4c52c6..ddc7587f 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1233,8 +1233,9 @@ SUBSCRIBE_ERROR with code 'Invalid Range'. AbsoluteRange (0x4): Specifies a closed subscription starting at StartObject in StartGroup and ending at EndObject in EndGroup. The start and end of the range are inclusive. EndGroup and EndObject MUST specify the same or a later -object than StartGroup and StartObject. If the end has already been published, -the publisher SHOULD reply with a SUBSCRIBE_ERROR with code 'Invalid Range'. +object than StartGroup and StartObject. If the StartGroup is prior +to the current group, the publisher SHOULD reply with a +SUBSCRIBE_ERROR with code 'Invalid Range'. A filter type other than the above MUST be treated as error. From 8083bcd57f8fc689d617166b099cdc0db3141039 Mon Sep 17 00:00:00 2001 From: ianswett Date: Sat, 19 Oct 2024 09:35:19 -0400 Subject: [PATCH 9/9] Update draft-ietf-moq-transport.md --- draft-ietf-moq-transport.md | 1 - 1 file changed, 1 deletion(-) diff --git a/draft-ietf-moq-transport.md b/draft-ietf-moq-transport.md index ddc7587f..2b175745 100644 --- a/draft-ietf-moq-transport.md +++ b/draft-ietf-moq-transport.md @@ -1214,7 +1214,6 @@ in the current group, via the 'Latest Group' filter. The subscriber specifies a filter on the subscription to allow the publisher to identify which objects need to be delivered. - There are 4 types of filters: Latest Group (0x1) : Specifies an open-ended subscription with objects