feat: orchestrator switches to FDv1 fallback on directive#539
Conversation
1833a9c to
d795752
Compare
9f04fa3 to
ea3b92b
Compare
d795752 to
12b23ec
Compare
ea3b92b to
142b2ff
Compare
12b23ec to
96a7f5a
Compare
e2824ec to
f0b2aab
Compare
762768c to
57d4dfb
Compare
f0b2aab to
f94ce01
Compare
57d4dfb to
c95b74a
Compare
eb28df0 to
3e76ae5
Compare
bfe0441 to
af660a0
Compare
18951d8 to
35aa744
Compare
1714aee to
3488e09
Compare
35aa744 to
5a2a9bc
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 303b3a8. Configure here.
| data_interfaces::FDv1FallbackDirective{ | ||
| std::chrono::seconds(*r.protocol_fallback_ttl)}; | ||
| } | ||
| Notify(std::move(goodbye_result)); |
There was a problem hiding this comment.
Fallback goodbye still restarts SSE
Medium Severity
When a goodbye event includes an FDv1 fallback directive (protocolFallbackTTL or a merged fallback header on the result), the orchestrator now switches away from the FDv2 streaming synchronizer and shuts it down. The goodbye handler still always calls async_restart afterward, so the client can start a reconnect on the same connection the orchestrator is closing.
Reviewed by Cursor Bugbot for commit 303b3a8. Configure here.


Summary
Implements the FDv1 fallback directive in the FDv2 data system with TTL-based recovery.
FDv2SourceResultcarriesstd::optional<FDv1FallbackDirective>with a TTL (default 1h, 0 = indefinite).X-LD-FD-Fallback-TTL(header) andprotocolFallbackTTL(goodbye).kInterrupted). Schedule retry after TTL.SourceManager::SwitchBackToFDv2()re-enables FDv2 (including previously terminal-error-blocked factories), blocks FDv1, restarts synchronizers.End-to-end fallback will work once an FDv1 streaming source is wrapped as an
IFDv2Synchronizer(#540).Test plan
SourceManagertests cover the new block/unblock semantics