Skip to content

Commit 383dd4f

Browse files
authored
RFC: Allow unknown ranges in a FETCH response
This is a proposal to address several open FETCH issues. Replace UNKNOWN_STATUS_IN_RANGE with a data-stream encoding of an UNKNOWN range. This requires leaving DOES_NOT_EXIST serializations in fetch, so a omitted range can be split between DNE and UNKNOWN. But that seems OK to me. I'm unsure if it addresses #945 completely, but it gives a bandwidth constrained publisher another option that doesn't completely fail the fetch. Fixes: #1265 Fixes: #1057 Maybe addresses: #945
1 parent 9cb4a6e commit 383dd4f

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

draft-ietf-moq-transport.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2255,10 +2255,6 @@ INVALID_JOINING_REQUEST_ID(0x32):
22552255
: In response to a Joining FETCH, the referenced Request ID is not an
22562256
`Established` Subscription.
22572257

2258-
UNKNOWN_STATUS_IN_RANGE(0x33):
2259-
: In response to a FETCH, the requested range contains an object with unknown
2260-
status.
2261-
22622258
## SUBSCRIBE {#message-subscribe-req}
22632259

22642260
A subscription causes the publisher to send newly published objects for a track.
@@ -2761,9 +2757,11 @@ A publisher MUST send fetched groups in the requested group order, either
27612757
ascending or descending. Within each group, objects are sent in Object ID order;
27622758
subgroup ID is not used for ordering.
27632759

2764-
If an Original Publisher receives a FETCH with a range that includes an object with
2765-
unknown status, it MUST return REQUEST_ERROR with code UNKNOWN_STATUS_IN_RANGE.
2766-
2760+
If a Publisher receives a FETCH with a range that includes an object with
2761+
unknown status (e.g. a Relay has temporarily lost contact with the Original
2762+
Publisher and does not have the Object in cache), it can choose to reset the
2763+
FETCH data stream with UNKNOWN_OBJECT_STATUS, or indicate the range of unknown
2764+
Objects and continue serving other known Objects.
27672765

27682766
## FETCH_OK {#message-fetch-ok}
27692767

@@ -3524,6 +3522,10 @@ DELIVERY_TIMEOUT (0x2):
35243522
SESSION_CLOSED (0x3):
35253523
: The publisher session is being closed.
35263524

3525+
UNKOWN_OBJECT_STATUS (0x4):
3526+
: In response to a FETCH, the publisher is unable to determine the Status
3527+
of the next Object in the requested range.
3528+
35273529
### Fetch Header {#fetch-header}
35283530

35293531
When a stream begins with `FETCH_HEADER`, all objects on the stream belong to the
@@ -3551,7 +3553,7 @@ format:
35513553
[Extensions (..),]
35523554
Object Payload Length (i),
35533555
[Object Status (i),]
3554-
[Object Payload (..),]
3556+
[Object Payload (..)]
35553557
}
35563558
~~~
35573559
{: #object-fetch-format title="MOQT Fetch Object Fields"}
@@ -3588,6 +3590,9 @@ the prior Object, the Subscriber MUST close the session with a
35883590
The Extensions structure is defined in {{object-extensions}}.
35893591

35903592
The Object Status field is only present if the Object Payload Length is zero.
3593+
FETCH responses have a special Object Status `UNKNOWN` (0x5). When Object
3594+
Status is `UNKNOWN`, all Objects between the last serialized Object, if any, and
3595+
this one, inclusive, have `UNKNOWN` status, rather than `Object Does Not Exist`.
35913596

35923597
When encoding an Object with a Forwarding Preference of "Datagram" (see
35933598
{{object-properties}}), the Publisher treats it as having a Subgroup ID equal to
@@ -3901,7 +3906,6 @@ TODO: register the URI scheme and the ALPN and grease the Extension types
39013906
| UNINTERESTED | 0x20 | {{message-request-error}} |
39023907
| PREFIX_OVERLAP | 0x30 | {{message-request-error}} |
39033908
| INVALID_JOINING_REQUEST_ID | 0x32 | {{message-request-error}} |
3904-
| UNKNOWN_STATUS_IN_RANGE | 0x33 | {{message-request-error}} |
39053909

39063910
### PUBLISH_DONE Codes {#iana-publish-done}
39073911

0 commit comments

Comments
 (0)