diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-13 12:45:55 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-01-13 12:49:30 +0000 |
| commit | 7dba18eb9ae64d429fef1a1f5437981efefb86b6 (patch) | |
| tree | f1bb2d7a173e164edb8c402f0121a146fe53bcbf /src/sync/self_subscriber.rs | |
| parent | d399bd0bcfba3a3f500421a954257ada034283f8 (diff) | |
fix: Enable sync relay discovery in archive_all mode
The bug: SelfSubscriber filtered announcements with lists_our_relay() check,
preventing archive_all mode from discovering relays in announcements that
don't list our relay domain.
The insight: SelfSubscriber only receives events that ALREADY passed
write policy validation (archive_all, archive_whitelist, blacklist, etc.)
via admit_event() before being saved to the database. The event flow:
External relay → process_event_static() → write_policy.admit_event()
→ (validation happens here) → save to DB → notify_event()
→ SelfSubscriber receives via WebSocket
So the lists_our_relay() check was redundant double-validation that
broke archive_all mode by filtering events that had already been
accepted by the write policy.
The fix: Simply remove the lists_our_relay() filtering. Events reaching
SelfSubscriber are pre-validated and should all be processed for relay
discovery according to the configured archive policy.
Changes:
- Removed lists_our_relay() check from process_notification() (4 lines)
- Removed unused lists_our_relay() helper function (9 lines)
- Added comment explaining events are pre-validated (3 lines)
- Total: 13 lines removed, 3 lines added
Fixes #194d
Diffstat (limited to 'src/sync/self_subscriber.rs')
| -rw-r--r-- | src/sync/self_subscriber.rs | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/sync/self_subscriber.rs b/src/sync/self_subscriber.rs index 9f6fa70..3cc408d 100644 --- a/src/sync/self_subscriber.rs +++ b/src/sync/self_subscriber.rs | |||
| @@ -148,12 +148,11 @@ impl SelfSubscriber { | |||
| 148 | ) -> LoopControl { | 148 | ) -> LoopControl { |
| 149 | match notification { | 149 | match notification { |
| 150 | Ok(RelayPoolNotification::Event { event, .. }) => { | 150 | Ok(RelayPoolNotification::Event { event, .. }) => { |
| 151 | // Only process 30617 events that list our relay | 151 | // Process 30617 events for relay discovery |
| 152 | // Note: Events reaching here have already passed write policy validation | ||
| 153 | // (archive_all, archive_whitelist, blacklist, etc.) so no additional | ||
| 154 | // filtering is needed. | ||
| 152 | if event.kind == Kind::GitRepoAnnouncement { | 155 | if event.kind == Kind::GitRepoAnnouncement { |
| 153 | if !self.lists_our_relay(&event) { | ||
| 154 | return LoopControl::Continue; | ||
| 155 | } | ||
| 156 | |||
| 157 | // Extract repo ID and relays | 156 | // Extract repo ID and relays |
| 158 | if let Some(repo_id) = Self::extract_repo_id(&event) { | 157 | if let Some(repo_id) = Self::extract_repo_id(&event) { |
| 159 | let relays = Self::extract_relay_urls(&event); | 158 | let relays = Self::extract_relay_urls(&event); |
| @@ -251,15 +250,6 @@ impl SelfSubscriber { | |||
| 251 | None | 250 | None |
| 252 | } | 251 | } |
| 253 | 252 | ||
| 254 | /// Check if announcement lists our relay | ||
| 255 | /// | ||
| 256 | /// Returns true if any extracted relay URL contains our domain | ||
| 257 | fn lists_our_relay(&self, event: &Event) -> bool { | ||
| 258 | Self::extract_relay_urls(event) | ||
| 259 | .iter() | ||
| 260 | .any(|url| url.contains(&self.relay_domain) || url == &self.own_relay_url) | ||
| 261 | } | ||
| 262 | |||
| 263 | /// Main run loop | 253 | /// Main run loop |
| 264 | /// | 254 | /// |
| 265 | /// Connects to own relay, subscribes to relevant event kinds, | 255 | /// Connects to own relay, subscribes to relevant event kinds, |