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

Joining fetch #521

Merged
merged 15 commits into from
Mar 19, 2025
Merged

Joining fetch #521

merged 15 commits into from
Mar 19, 2025

Conversation

RichLogan
Copy link
Contributor

@RichLogan RichLogan commented Mar 12, 2025

Implement joining fetch.

The idea here, (if others agree), if that joining fetches are so tied to subscriptions that the former is an extension of the latter in terms of the public facing API. When you create a SubscribeTrackHandler you can optionally do so with a joining fetch. Those objects will be returned to your subscribe track handler identically to how live objects would be for convenience. A fetch handler is used internally to make facilitate that mapping, although there are no guarantees about ordering or interleaving with the live stream.

./qserver # Server.
./qclient --pub_namespace=ns --pub_name=name --clock # Publisher
./qclient --sub_namespace=ns --sub_name=name # Regular Subscriber
./qclient --sub_namespace=ns --sub_name=name --joining_fetch # 2nd Subscribe using Joining Fetch (allow time for some objects to be published). 

Fixes #362

@RichLogan RichLogan changed the base branch from main to fetch-header March 14, 2025 14:46
@RichLogan RichLogan marked this pull request as ready for review March 17, 2025 10:24
@RichLogan
Copy link
Contributor Author

I am sure there is some state cleanup missing here.

Copy link
Collaborator

@TimEvens TimEvens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some comments/changes. Joining fetch does appear to work nicely but with this branch fetch doesn't appear to work with qclient.

*
* @returns true if the range of groups and objects exist in the cache, otherwise returns false.
*/
bool FetchReceived([[maybe_unused]] quicr::ConnectionHandle connection_handle,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The thought here is that a fetch could be denied. We still need that for the future, but I suppose we can add it back then.

@@ -279,20 +289,14 @@ namespace quicr {
*/
virtual void UnsubscribeReceived(ConnectionHandle connection_handle, uint64_t subscribe_id) = 0;

// TODO: Their is probably a distinction between track not found, and no objects.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// TODO: Their is probably a distinction between track not found, and no objects.
// TODO: There is probably a distinction between track not found, and no objects.

@@ -86,7 +86,7 @@ namespace quicr {
conn_ctx.current_subscribe_id = msg.subscribe_id + 1;
}

conn_ctx.recv_sub_id[msg.subscribe_id] = { th.track_namespace_hash, th.track_name_hash };
conn_ctx.recv_sub_id[msg.subscribe_id] = { .track_full_name = tfn };
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Supported >= c++20

src/client.cpp Outdated
@@ -120,7 +120,7 @@ namespace quicr {
ptd->SetTrackAlias(msg.track_alias);
ptd->SetStatus(PublishTrackHandler::Status::kOk);

conn_ctx.recv_sub_id[msg.subscribe_id] = { th.track_namespace_hash, th.track_name_hash };
conn_ctx.recv_sub_id[msg.subscribe_id] = { .track_full_name = tfn };
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Supported >= c++20

@RichLogan
Copy link
Contributor Author

RichLogan commented Mar 19, 2025

@TimEvens Thanks for the review. I'm not sure I can reproduce fetch not working here. I ran a few sessions using these commands:

./qserver
./qclient --pub_namespace=ns --pub_name=name --clock
./qclient --sub_namespace=ns --sub_name=name
./qclient --fetch_namespace=ns --fetch_name=name --start_group=0 --end_group=0 --start_object=0 --end_object=2

The subscriber shows:

[2025-03-19 09:13:18.448] [info] [client.cpp:150] Received message: Group:0, Object:0 - 2025-03-19 09:13:18.446318
[2025-03-19 09:13:19.447] [info] [client.cpp:150] Received message: Group:0, Object:1 - 2025-03-19 09:13:19.445657
[2025-03-19 09:13:20.446] [info] [client.cpp:150] Received message: Group:0, Object:2 - 2025-03-19 09:13:20.444915
[2025-03-19 09:13:21.446] [info] [client.cpp:150] Received message: Group:0, Object:3 - 2025-03-19 09:13:21.445055
[2025-03-19 09:13:22.448] [info] [client.cpp:150] Received message: Group:0, Object:4 - 2025-03-19 09:13:22.445498
[2025-03-19 09:13:23.446] [info] [client.cpp:150] Received message: Group:0, Object:5 - 2025-03-19 09:13:23.444751

And the fetcher shows:

[2025-03-19 09:13:28.493] [info] [client.cpp:293] Received fetched object: 2025-03-19 09:13:18.446318
[2025-03-19 09:13:28.494] [info] [client.cpp:293] Received fetched object: 2025-03-19 09:13:19.445657

@RichLogan
Copy link
Contributor Author

RichLogan commented Mar 19, 2025

I do see that potentially a valid range per the spec could get rejected here. But the logic for what to deliver seems complicated / not that well defined. Especially when start of ranges are no longer available, or whole groups are missing. Even with gaps, we need end of group implemented to be able to tell the difference between something missing and something that was never there. Even then I think there's potential fragility. Perhaps we should cover cache retrieval / fetch resolution as a whole new thing.

@TimEvens
Copy link
Collaborator

I do see that potentially a valid range per the spec could get rejected here. But the logic for what to deliver seems complicated / not that well defined. Especially when start of ranges are no longer available, or whole groups are missing. Even with gaps, we need end of group implemented to be able to tell the difference between something missing and something that was never there. Even then I think there's potential fragility. Perhaps we should cover cache retrieval / fetch resolution as a whole new thing.

Yes, it's the range that doesn't work. Requesting group ZERO and just an object works, but requesting a range or even another group doesn't work.

For example, run the below to start things off and wait for groups to increment a few.

# Start publisher
./qclient --pub_namespace clock --pub_name second --clock

# Start consumer to kick off the caching
 ./qclient --sub_namespace clock --sub_name second

Now request any range of objects or groups, it doesn't work.

# sub shows many groups and objects available
[2025-03-19 06:14:01.818] [info] [client.cpp:158] Track alias: 175679474156732 is ready to read
[2025-03-19 06:14:04.096] [info] [client.cpp:150] Received message: Group:0, Object:0 - 2025-03-19 06:14:04.093127
[2025-03-19 06:14:05.094] [info] [client.cpp:150] Received message: Group:0, Object:1 - 2025-03-19 06:14:05.092474
[2025-03-19 06:14:06.094] [info] [client.cpp:150] Received message: Group:0, Object:2 - 2025-03-19 06:14:06.092296
[2025-03-19 06:14:07.099] [info] [client.cpp:150] Received message: Group:0, Object:3 - 2025-03-19 06:14:07.096741
[2025-03-19 06:14:08.101] [info] [client.cpp:150] Received message: Group:0, Object:4 - 2025-03-19 06:14:08.098934
[2025-03-19 06:14:09.100] [info] [client.cpp:150] Received message: Group:0, Object:5 - 2025-03-19 06:14:09.098788
[2025-03-19 06:14:10.103] [info] [client.cpp:150] Received message: Group:0, Object:6 - 2025-03-19 06:14:10.101094
[2025-03-19 06:14:11.104] [info] [client.cpp:150] Received message: Group:0, Object:7 - 2025-03-19 06:14:11.102306
[2025-03-19 06:14:12.109] [info] [client.cpp:150] Received message: Group:0, Object:8 - 2025-03-19 06:14:12.106549
[2025-03-19 06:14:13.109] [info] [client.cpp:150] Received message: Group:0, Object:9 - 2025-03-19 06:14:13.106872
[2025-03-19 06:14:14.110] [info] [client.cpp:150] Received message: Group:0, Object:10 - 2025-03-19 06:14:14.108238
[2025-03-19 06:14:15.109] [info] [client.cpp:150] Received message: Group:0, Object:11 - 2025-03-19 06:14:15.107668
[2025-03-19 06:14:16.110] [info] [client.cpp:150] Received message: Group:0, Object:12 - 2025-03-19 06:14:16.107986
[2025-03-19 06:14:17.110] [info] [client.cpp:150] Received message: Group:0, Object:13 - 2025-03-19 06:14:17.108334
[2025-03-19 06:14:18.110] [info] [client.cpp:150] Received message: Group:0, Object:14 - 2025-03-19 06:14:18.108101
[2025-03-19 06:14:19.113] [info] [client.cpp:150] Received message: Group:1, Object:0 - 2025-03-19 06:14:19.111487
[2025-03-19 06:14:20.112] [info] [client.cpp:150] Received message: Group:1, Object:1 - 2025-03-19 06:14:20.111049
[2025-03-19 06:14:21.118] [info] [client.cpp:150] Received message: Group:1, Object:2 - 2025-03-19 06:14:21.115206
[2025-03-19 06:14:22.122] [info] [client.cpp:150] Received message: Group:1, Object:3 - 2025-03-19 06:14:22.119427
[2025-03-19 06:14:23.122] [info] [client.cpp:150] Received message: Group:1, Object:4 - 2025-03-19 06:14:23.119565
[2025-03-19 06:14:24.121] [info] [client.cpp:150] Received message: Group:1, Object:5 - 2025-03-19 06:14:24.119271
[2025-03-19 06:14:25.125] [info] [client.cpp:150] Received message: Group:1, Object:6 - 2025-03-19 06:14:25.123517
[2025-03-19 06:14:26.129] [info] [client.cpp:150] Received message: Group:1, Object:7 - 2025-03-19 06:14:26.126983
[2025-03-19 06:14:27.131] [info] [client.cpp:150] Received message: Group:1, Object:8 - 2025-03-19 06:14:27.129443
[2025-03-19 06:14:28.132] [info] [client.cpp:150] Received message: Group:1, Object:9 - 2025-03-19 06:14:28.130283
[2025-03-19 06:14:29.136] [info] [client.cpp:150] Received message: Group:1, Object:10 - 2025-03-19 06:14:29.134451
[2025-03-19 06:14:30.141] [info] [client.cpp:150] Received message: Group:1, Object:11 - 2025-03-19 06:14:30.138585
[2025-03-19 06:14:31.142] [info] [client.cpp:150] Received message: Group:1, Object:12 - 2025-03-19 06:14:31.140618
[2025-03-19 06:14:32.145] [info] [client.cpp:150] Received message: Group:1, Object:13 - 2025-03-19 06:14:32.143534
[2025-03-19 06:14:33.149] [info] [client.cpp:150] Received message: Group:1, Object:14 - 2025-03-19 06:14:33.147594
[2025-03-19 06:14:34.149] [info] [client.cpp:150] Received message: Group:2, Object:0 - 2025-03-19 06:14:34.146960
[2025-03-19 06:14:35.148] [info] [client.cpp:150] Received message: Group:2, Object:1 - 2025-03-19 06:14:35.146454
[2025-03-19 06:14:36.153] [info] [client.cpp:150] Received message: Group:2, Object:2 - 2025-03-19 06:14:36.150675
[2025-03-19 06:14:37.157] [info] [client.cpp:150] Received message: Group:2, Object:3 - 2025-03-19 06:14:37.155107
[2025-03-19 06:14:38.157] [info] [client.cpp:150] Received message: Group:2, Object:4 - 2025-03-19 06:14:38.155298
[2025-03-19 06:14:39.161] [info] [client.cpp:150] Received message: Group:2, Object:5 - 2025-03-19 06:14:39.159479
[2025-03-19 06:14:40.166] [info] [client.cpp:150] Received message: Group:2, Object:6 - 2025-03-19 06:14:40.163681
[2025-03-19 06:14:41.167] [info] [client.cpp:150] Received message: Group:2, Object:7 - 2025-03-19 06:14:41.164679
[2025-03-19 06:14:42.169] [info] [client.cpp:150] Received message: Group:2, Object:8 - 2025-03-19 06:14:42.166999
[2025-03-19 06:14:43.169] [info] [client.cpp:150] Received message: Group:2, Object:9 - 2025-03-19 06:14:43.166985
[2025-03-19 06:14:44.172] [info] [client.cpp:150] Received message: Group:2, Object:10 - 2025-03-19 06:14:44.171166
[2025-03-19 06:14:45.173] [info] [client.cpp:150] Received message: Group:2, Object:11 - 2025-03-19 06:14:45.171540
[2025-03-19 06:14:46.173] [info] [client.cpp:150] Received message: Group:2, Object:12 - 2025-03-19 06:14:46.171891
[2025-03-19 06:14:47.178] [info] [client.cpp:150] Received message: Group:2, Object:13 - 2025-03-19 06:14:47.176024
[2025-03-19 06:14:48.180] [info] [client.cpp:150] Received message: Group:2, Object:14 - 2025-03-19 06:14:48.179204
[2025-03-19 06:14:49.184] [info] [client.cpp:150] Received message: Group:3, Object:0 - 2025-03-19 06:14:49.181189
[2025-03-19 06:14:50.183] [info] [client.cpp:150] Received message: Group:3, Object:1 - 2025-03-19 06:14:50.181987
[2025-03-19 06:14:51.189] [info] [client.cpp:150] Received message: Group:3, Object:2 - 2025-03-19 06:14:51.186170
[2025-03-19 06:14:52.192] [info] [client.cpp:150] Received message: Group:3, Object:3 - 2025-03-19 06:14:52.188958
[2025-03-19 06:14:53.195] [info] [client.cpp:150] Received message: Group:3, Object:4 - 2025-03-19 06:14:53.192634
[2025-03-19 06:14:54.194] [info] [client.cpp:150] Received message: Group:3, Object:5 - 2025-03-19 06:14:54.192972
[2025-03-19 06:14:55.198] [info] [client.cpp:150] Received message: Group:3, Object:6 - 2025-03-19 06:14:55.197080
[2025-03-19 06:14:56.204] [info] [client.cpp:150] Received message: Group:3, Object:7 - 2025-03-19 06:14:56.201207
[2025-03-19 06:14:57.206] [info] [client.cpp:150] Received message: Group:3, Object:8 - 2025-03-19 06:14:57.203351
[2025-03-19 06:14:58.209] [info] [client.cpp:150] Received message: Group:3, Object:9 - 2025-03-19 06:14:58.206869
[2025-03-19 06:14:59.210] [info] [client.cpp:150] Received message: Group:3, Object:10 - 2025-03-19 06:14:59.207654
[2025-03-19 06:15:00.214] [info] [client.cpp:150] Received message: Group:3, Object:11 - 2025-03-19 06:15:00.210927
[2025-03-19 06:15:01.214] [info] [client.cpp:150] Received message: Group:3, Object:12 - 2025-03-19 06:15:01.212148
[2025-03-19 06:15:02.219] [info] [client.cpp:150] Received message: Group:3, Object:13 - 2025-03-19 06:15:02.216164
[2025-03-19 06:15:03.219] [info] [client.cpp:150] Received message: Group:3, Object:14 - 2025-03-19 06:15:03.216647
[2025-03-19 06:15:04.223] [info] [client.cpp:150] Received message: Group:4, Object:0 - 2025-03-19 06:15:04.220481
[2025-03-19 06:15:05.222] [info] [client.cpp:150] Received message: Group:4, Object:1 - 2025-03-19 06:15:05.220416
[2025-03-19 06:15:06.221] [info] [client.cpp:150] Received message: Group:4, Object:2 - 2025-03-19 06:15:06.219877
[2025-03-19 06:15:07.222] [info] [client.cpp:150] Received message: Group:4, Object:3 - 2025-03-19 06:15:07.221080
[2025-03-19 06:15:08.223] [info] [client.cpp:150] Received message: Group:4, Object:4 - 2025-03-19 06:15:08.220597
[2025-03-19 06:15:09.222] [info] [client.cpp:150] Received message: Group:4, Object:5 - 2025-03-19 06:15:09.220354
[2025-03-19 06:15:10.227] [info] [client.cpp:150] Received message: Group:4, Object:6 - 2025-03-19 06:15:10.224562
[2025-03-19 06:15:11.230] [info] [client.cpp:150] Received message: Group:4, Object:7 - 2025-03-19 06:15:11.227422
[2025-03-19 06:15:12.230] [info] [client.cpp:150] Received message: Group:4, Object:8 - 2025-03-19 06:15:12.228401
[2025-03-19 06:15:13.230] [info] [client.cpp:150] Received message: Group:4, Object:9 - 2025-03-19 06:15:13.227701
[2025-03-19 06:15:14.231] [info] [client.cpp:150] Received message: Group:4, Object:10 - 2025-03-19 06:15:14.229011
[2025-03-19 06:15:15.231] [info] [client.cpp:150] Received message: Group:4, Object:11 - 2025-03-19 06:15:15.228579
[2025-03-19 06:15:16.230] [info] [client.cpp:150] Received message: Group:4, Object:12 - 2025-03-19 06:15:16.228436
[2025-03-19 06:15:17.235] [info] [client.cpp:150] Received message: Group:4, Object:13 - 2025-03-19 06:15:17.232632
[2025-03-19 06:15:18.236] [info] [client.cpp:150] Received message: Group:4, Object:14 - 2025-03-19 06:15:18.233534
[2025-03-19 06:15:19.237] [info] [client.cpp:150] Received message: Group:5, Object:0 - 2025-03-19 06:15:19.234044
[2025-03-19 06:15:20.237] [info] [client.cpp:150] Received message: Group:5, Object:1 - 2025-03-19 06:15:20.234823
[2025-03-19 06:15:21.239] [info] [client.cpp:150] Received message: Group:5, Object:2 - 2025-03-19 06:15:21.237326
[2025-03-19 06:15:22.242] [info] [client.cpp:150] Received message: Group:5, Object:3 - 2025-03-19 06:15:22.239494
[2025-03-19 06:15:23.243] [info] [client.cpp:150] Received message: Group:5, Object:4 - 2025-03-19 06:15:23.240915
[2025-03-19 06:15:24.248] [info] [client.cpp:150] Received message: Group:5, Object:5 - 2025-03-19 06:15:24.245110
[2025-03-19 06:15:25.247] [info] [client.cpp:150] Received message: Group:5, Object:6 - 2025-03-19 06:15:25.244900
[2025-03-19 06:15:26.249] [info] [client.cpp:150] Received message: Group:5, Object:7 - 2025-03-19 06:15:26.246467
[2025-03-19 06:15:27.250] [info] [client.cpp:150] Received message: Group:5, Object:8 - 2025-03-19 06:15:27.248635
[2025-03-19 06:15:28.253] [info] [client.cpp:150] Received message: Group:5, Object:9 - 2025-03-19 06:15:28.251164
[2025-03-19 06:15:29.258] [info] [client.cpp:150] Received message: Group:5, Object:10 - 2025-03-19 06:15:29.255412
[2025-03-19 06:15:30.259] [info] [client.cpp:150] Received message: Group:5, Object:11 - 2025-03-19 06:15:30.257319
[2025-03-19 06:15:31.260] [info] [client.cpp:150] Received message: Group:5, Object:12 - 2025-03-19 06:15:31.258189
[2025-03-19 06:15:32.264] [info] [client.cpp:150] Received message: Group:5, Object:13 - 2025-03-19 06:15:32.262412
[2025-03-19 06:15:33.264] [info] [client.cpp:150] Received message: Group:5, Object:14 - 2025-03-19 06:15:33.262696
[2025-03-19 06:15:34.270] [info] [client.cpp:150] Received message: Group:6, Object:0 - 2025-03-19 06:15:34.266958
[2025-03-19 06:15:35.271] [info] [client.cpp:150] Received message: Group:6, Object:1 - 2025-03-19 06:15:35.269462
[2025-03-19 06:15:36.271] [info] [client.cpp:150] Received message: Group:6, Object:2 - 2025-03-19 06:15:36.269591
[2025-03-19 06:15:37.276] [info] [client.cpp:150] Received message: Group:6, Object:3 - 2025-03-19 06:15:37.273813
[2025-03-19 06:15:38.279] [info] [client.cpp:150] Received message: Group:6, Object:4 - 2025-03-19 06:15:38.277281
[2025-03-19 06:15:39.283] [info] [client.cpp:150] Received message: Group:6, Object:5 - 2025-03-19 06:15:39.280639
[2025-03-19 06:15:40.286] [info] [client.cpp:150] Received message: Group:6, Object:6 - 2025-03-19 06:15:40.283346
[2025-03-19 06:15:41.288] [info] [client.cpp:150] Received message: Group:6, Object:7 - 2025-03-19 06:15:41.286114
[2025-03-19 06:15:42.290] [info] [client.cpp:150] Received message: Group:6, Object:8 - 2025-03-19 06:15:42.287741
[2025-03-19 06:15:43.293] [info] [client.cpp:150] Received message: Group:6, Object:9 - 2025-03-19 06:15:43.291878
[2025-03-19 06:15:44.294] [info] [client.cpp:150] Received message: Group:6, Object:10 - 2025-03-19 06:15:44.292305
[2025-03-19 06:15:45.294] [info] [client.cpp:150] Received message: Group:6, Object:11 - 2025-03-19 06:15:45.292850
[2025-03-19 06:15:46.297] [info] [client.cpp:150] Received message: Group:6, Object:12 - 2025-03-19 06:15:46.294432
[2025-03-19 06:15:47.300] [info] [client.cpp:150] Received message: Group:6, Object:13 - 2025-03-19 06:15:47.298945
[2025-03-19 06:15:48.305] [info] [client.cpp:150] Received message: Group:6, Object:14 - 2025-03-19 06:15:48.303089
[2025-03-19 06:15:49.306] [info] [client.cpp:150] Received message: Group:7, Object:0 - 2025-03-19 06:15:49.303758
[2025-03-19 06:15:50.305] [info] [client.cpp:150] Received message: Group:7, Object:1 - 2025-03-19 06:15:50.303805
[2025-03-19 06:15:51.306] [info] [client.cpp:150] Received message: Group:7, Object:2 - 2025-03-19 06:15:51.303563
[2025-03-19 06:15:52.307] [info] [client.cpp:150] Received message: Group:7, Object:3 - 2025-03-19 06:15:52.305286
[2025-03-19 06:15:53.310] [info] [client.cpp:150] Received message: Group:7, Object:4 - 2025-03-19 06:15:53.308038
[2025-03-19 06:15:54.314] [info] [client.cpp:150] Received message: Group:7, Object:5 - 2025-03-19 06:15:54.312253
[2025-03-19 06:15:55.318] [info] [client.cpp:150] Received message: Group:7, Object:6 - 2025-03-19 06:15:55.316453
[2025-03-19 06:15:56.321] [info] [client.cpp:150] Received message: Group:7, Object:7 - 2025-03-19 06:15:56.318652
[2025-03-19 06:15:57.323] [info] [client.cpp:150] Received message: Group:7, Object:8 - 2025-03-19 06:15:57.321193
[2025-03-19 06:15:58.322] [info] [client.cpp:150] Received message: Group:7, Object:9 - 2025-03-19 06:15:58.320669
[2025-03-19 06:15:59.322] [info] [client.cpp:150] Received message: Group:7, Object:10 - 2025-03-19 06:15:59.320922
[2025-03-19 06:16:00.322] [info] [client.cpp:150] Received message: Group:7, Object:11 - 2025-03-19 06:16:00.320563
[2025-03-19 06:16:01.325] [info] [client.cpp:150] Received message: Group:7, Object:12 - 2025-03-19 06:16:01.323886
[2025-03-19 06:16:02.325] [info] [client.cpp:150] Received message: Group:7, Object:13 - 2025-03-19 06:16:02.323316
[2025-03-19 06:16:03.327] [info] [client.cpp:150] Received message: Group:7, Object:14 - 2025-03-19 06:16:03.326015
[2025-03-19 06:16:04.333] [info] [client.cpp:150] Received message: Group:8, Object:0 - 2025-03-19 06:16:04.330230
[2025-03-19 06:16:05.332] [info] [client.cpp:150] Received message: Group:8, Object:1 - 2025-03-19 06:16:05.329928
[2025-03-19 06:16:06.332] [info] [client.cpp:150] Received message: Group:8, Object:2 - 2025-03-19 06:16:06.330341
[2025-03-19 06:16:07.331] [info] [client.cpp:150] Received message: Group:8, Object:3 - 2025-03-19 06:16:07.329914
[2025-03-19 06:16:08.331] [info] [client.cpp:150] Received message: Group:8, Object:4 - 2025-03-19 06:16:08.329558
[2025-03-19 06:16:09.335] [info] [client.cpp:150] Received message: Group:8, Object:5 - 2025-03-19 06:16:09.333644
[2025-03-19 06:16:10.336] [info] [client.cpp:150] Received message: Group:8, Object:6 - 2025-03-19 06:16:10.333753
[2025-03-19 06:16:11.337] [info] [client.cpp:150] Received message: Group:8, Object:7 - 2025-03-19 06:16:11.335428
# Try to request a range from this set, it doesn't work. 
 ./qclient  --fetch_namespace clock --fetch_name second --start_group 1  --end_group 2 --start_object 0 --end_object 0
 ...
 [2025-03-19 06:16:52.215] [info] [client.cpp:779] Connected to server
[2025-03-19 06:16:52.215] [info] [client.cpp:598] Started fetch
[2025-03-19 06:16:52.215] [info] [client.cpp:604] Fetching track
[2025-03-19 06:16:52.215] [MTC] [info] [transport.cpp:911] Fetch track conn_id: 5167415808 hash: 175679474156732
[2025-03-19 06:16:52.217] [info] [client.cpp:301] Track alias: 175679474156732 is ready to read

# Try again, to just request a range within one of the groups that is there.
./qclient  --fetch_namespace clock --fetch_name second --start_group 7  --end_group 7 --start_object 0 --end_object 8
...
[2025-03-19 06:17:59.105] [MTC] [info] [client.cpp:458] Server setup received conn_id: 4647322112 from: moq-server selected_version: 4278190088
[2025-03-19 06:17:59.301] [info] [client.cpp:779] Connected to server
[2025-03-19 06:17:59.301] [info] [client.cpp:598] Started fetch
[2025-03-19 06:17:59.301] [info] [client.cpp:604] Fetching track
[2025-03-19 06:17:59.301] [MTC] [info] [transport.cpp:911] Fetch track conn_id: 4647322112 hash: 175679474156732
[2025-03-19 06:17:59.304] [info] [client.cpp:301] Track alias: 175679474156732 is ready to read

* Fix subscribe ID in fetch error
* Fix cache not expiring
* Add fetch error reason to log message on client side
* Terminate client after end of fetch, including on error
Copy link
Collaborator

@TimEvens TimEvens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fetch should be working now as expected. There is still a lot that needs to be done with fetch, including handling race conditions, but the MoQT spec is in flux and will likely change because it's flawed.

@TimEvens TimEvens merged commit 3bb4ae6 into fetch-header Mar 19, 2025
@TimEvens TimEvens deleted the joining-fetch branch March 25, 2025 20:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants