Skip to content
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

SUBSCRIBE(current group) splits past and future #598

Open
afrind opened this issue Oct 25, 2024 · 7 comments
Open

SUBSCRIBE(current group) splits past and future #598

afrind opened this issue Oct 25, 2024 · 7 comments
Labels
Subscribe Related to SUBSCRIBE message and subscription handling

Comments

@afrind
Copy link
Collaborator

afrind commented Oct 25, 2024

One of the principles the group seemed to agree on is that FETCH is for the past and SUBSCRIBE is for the future. Draft-07 however left in SUBSCRIBE(current group) which spans both and seems to violate the principle. I understand that subscribing starting from the current group is likely to be a very common use case, as groups are MOQT join points.

My concern is that all the reasons we decided FETCH semantics were good for past data are being discarded here. If the current group consists of an large number of subgroups or datagrams, the sender can overwhelm the receiver. If the relay has a cache with gaps, we have not explained the interaction.

My strawman is to respond to SUBSCRIBE(current group) with both a FETCH OK and SUBSCRIBE OK, and objects from (current group, 0) to (current group, live edge) are returned in a FETCH stream using those semantics.

@englishm
Copy link
Collaborator

My thought was to resolve this with a new message, JOIN, which is decomposed into a FETCH+SUBSCRIBE at a publisher with sufficient local knowledge to do so.

@englishm
Copy link
Collaborator

I'll make slides for Dublin

@ianswett
Copy link
Collaborator

I'm not arguing for a specific approach, but people did not like removing current group in the past, ie: #510 (review)

A large number of datagrams is a congestion issue, but not a flow control one. For congestion, I'd expect the relay could lower the subscriber priority once it had too much data for a subscription?

If there's only one peep in a group, then starting at the current group doesn't create any problems. If the peeps were all going to be open at once anyway (ie: 3 or 4 enhancement layers), then the stream usage is no different than starting at the current object. As the number of peeps increases, it does start being problematic. If you're doing one Object per peep, for example.

I'd rather not add a 3rd way to retrieve Objects, but I can see an argument for merging the existing functionality of FETCH and SUBSCRIBE and saying:

  • You're getting things before the latest Object on a single stream, and ones after it in peeps or datagrams.

If we want to use track alias, I think we still need to prohibit having two "JOINs" that end beyond the current object? Alternatively, we could just say that you'll only receive one copy of things after the current object, even if there are multiple matching JOINs/SUBSCRIBEs/etc?

@vasilvv
Copy link
Collaborator

vasilvv commented Oct 28, 2024

The problem here is that since the groups are arbitrarily large, asking to subscribe starting with object 0 of the current group is not that different from starting at arbitrary group in the past.

@wilaw
Copy link
Contributor

wilaw commented Oct 28, 2024

To illustrate the problem as I see it, which is similar to Victor's statement above

Screenshot 2024-10-28 at 14 17 59

@gwendalsimon
Copy link

gwendalsimon commented Oct 29, 2024

I distinguish the present to the past and the future. The present is the current group, as seen by the Relay, i.e. the latest object it got from its parent. Let's call it current_ID (in Will's figure, current_ID = 2). Any object with a group ID lesser than current_ID is in the past. They should be obtained by FETCH. Any object with a group ID greater than current_ID is in the future. They typically trigger an error if referenced in a FETCH. The objects with a group ID equal current_ID are the present.

In the present, the Relay has a normative behavior: The Relay sends objects in the current group in the order of the subgroups to each subscriber. Those with a high network connection will be at the latest object, while some subscribers with a much lower connection will be late. In Will's schema, it means that some subscribers are still downloading 2-0 while some others are at 2-1. If we extend it, it means that the Relay must store the ID of the latest sent object within the group for all subscribers. When a new subscriber joins, it is at object 0 while all others will be somewhere between 0 and X (the latest object). It is not a problem, it is the normal behavior.

Yet, I'd see a problem with ascending order in SUBSCRIBE. The subscribers with a slow network will cumulate drift and will eventually be far in the past, at the point that the Relay serves some subscribers in the present (2-1 and 2-0 in Will's schema) and some late subscribers in the past (1-X).

@afrind
Copy link
Collaborator Author

afrind commented Oct 29, 2024

The subscribers with a slow network will cumulate drift

#462 is meant to capture that issue, I think and #582 also discusses it.

@ianswett ianswett added the Subscribe Related to SUBSCRIBE message and subscription handling label Nov 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Subscribe Related to SUBSCRIBE message and subscription handling
Projects
None yet
Development

No branches or pull requests

6 participants