diff options
Diffstat (limited to 'src/sync')
| -rw-r--r-- | src/sync/manager.rs | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/sync/manager.rs b/src/sync/manager.rs index 6fcfcd7..96bf0f4 100644 --- a/src/sync/manager.rs +++ b/src/sync/manager.rs | |||
| @@ -60,8 +60,9 @@ fn get_sync_source_addr(bind_address: &str) -> SocketAddr { | |||
| 60 | 60 | ||
| 61 | /// Coordinates proactive sync from configured and discovered relays | 61 | /// Coordinates proactive sync from configured and discovered relays |
| 62 | pub struct SyncManager { | 62 | pub struct SyncManager { |
| 63 | /// Initial relay URL to sync from (from config) | 63 | /// Bootstrap relay URL for initial sync (from config) |
| 64 | initial_relay_url: Option<String>, | 64 | /// Additional relays are discovered from repository announcements that list our service |
| 65 | bootstrap_relay_url: Option<String>, | ||
| 65 | /// Our relay's domain (for filtering) | 66 | /// Our relay's domain (for filtering) |
| 66 | relay_domain: String, | 67 | relay_domain: String, |
| 67 | /// Database for storing accepted events | 68 | /// Database for storing accepted events |
| @@ -82,20 +83,20 @@ impl SyncManager { | |||
| 82 | /// Create a new SyncManager | 83 | /// Create a new SyncManager |
| 83 | /// | 84 | /// |
| 84 | /// # Arguments | 85 | /// # Arguments |
| 85 | /// * `initial_relay_url` - Optional initial relay URL from config | 86 | /// * `bootstrap_relay_url` - Optional bootstrap relay URL from config |
| 86 | /// * `relay_domain` - Our relay's domain (used to exclude self from sync) | 87 | /// * `relay_domain` - Our relay's domain (used to exclude self from sync) |
| 87 | /// * `database` - Shared database for storing events and querying announcements | 88 | /// * `database` - Shared database for storing events and querying announcements |
| 88 | /// * `write_policy` - Write policy for validating synced events | 89 | /// * `write_policy` - Write policy for validating synced events |
| 89 | /// * `config` - Configuration for health tracking settings | 90 | /// * `config` - Configuration for health tracking settings |
| 90 | pub fn new( | 91 | pub fn new( |
| 91 | initial_relay_url: Option<String>, | 92 | bootstrap_relay_url: Option<String>, |
| 92 | relay_domain: String, | 93 | relay_domain: String, |
| 93 | database: SharedDatabase, | 94 | database: SharedDatabase, |
| 94 | write_policy: Nip34WritePolicy, | 95 | write_policy: Nip34WritePolicy, |
| 95 | config: &Config, | 96 | config: &Config, |
| 96 | ) -> Self { | 97 | ) -> Self { |
| 97 | Self { | 98 | Self { |
| 98 | initial_relay_url, | 99 | bootstrap_relay_url, |
| 99 | relay_domain, | 100 | relay_domain, |
| 100 | database, | 101 | database, |
| 101 | write_policy, | 102 | write_policy, |
| @@ -109,14 +110,14 @@ impl SyncManager { | |||
| 109 | /// Create a new SyncManager with metrics | 110 | /// Create a new SyncManager with metrics |
| 110 | /// | 111 | /// |
| 111 | /// # Arguments | 112 | /// # Arguments |
| 112 | /// * `initial_relay_url` - Optional initial relay URL from config | 113 | /// * `bootstrap_relay_url` - Optional bootstrap relay URL from config |
| 113 | /// * `relay_domain` - Our relay's domain (used to exclude self from sync) | 114 | /// * `relay_domain` - Our relay's domain (used to exclude self from sync) |
| 114 | /// * `database` - Shared database for storing events and querying announcements | 115 | /// * `database` - Shared database for storing events and querying announcements |
| 115 | /// * `write_policy` - Write policy for validating synced events | 116 | /// * `write_policy` - Write policy for validating synced events |
| 116 | /// * `config` - Configuration for health tracking settings | 117 | /// * `config` - Configuration for health tracking settings |
| 117 | /// * `metrics` - Sync metrics for Prometheus | 118 | /// * `metrics` - Sync metrics for Prometheus |
| 118 | pub fn with_metrics( | 119 | pub fn with_metrics( |
| 119 | initial_relay_url: Option<String>, | 120 | bootstrap_relay_url: Option<String>, |
| 120 | relay_domain: String, | 121 | relay_domain: String, |
| 121 | database: SharedDatabase, | 122 | database: SharedDatabase, |
| 122 | write_policy: Nip34WritePolicy, | 123 | write_policy: Nip34WritePolicy, |
| @@ -124,7 +125,7 @@ impl SyncManager { | |||
| 124 | metrics: SyncMetrics, | 125 | metrics: SyncMetrics, |
| 125 | ) -> Self { | 126 | ) -> Self { |
| 126 | Self { | 127 | Self { |
| 127 | initial_relay_url, | 128 | bootstrap_relay_url, |
| 128 | relay_domain, | 129 | relay_domain, |
| 129 | database, | 130 | database, |
| 130 | write_policy, | 131 | write_policy, |
| @@ -137,14 +138,14 @@ impl SyncManager { | |||
| 137 | 138 | ||
| 138 | /// Create a SyncManager with a single relay URL (Phase 1 compatibility) | 139 | /// Create a SyncManager with a single relay URL (Phase 1 compatibility) |
| 139 | pub fn with_single_relay( | 140 | pub fn with_single_relay( |
| 140 | sync_relay_url: String, | 141 | bootstrap_url: String, |
| 141 | database: SharedDatabase, | 142 | database: SharedDatabase, |
| 142 | write_policy: Nip34WritePolicy, | 143 | write_policy: Nip34WritePolicy, |
| 143 | ) -> Self { | 144 | ) -> Self { |
| 144 | // Extract domain from URL for filtering | 145 | // Extract domain from URL for filtering |
| 145 | let relay_domain = extract_domain_from_url(&sync_relay_url).unwrap_or_default(); | 146 | let relay_domain = extract_domain_from_url(&bootstrap_url).unwrap_or_default(); |
| 146 | Self { | 147 | Self { |
| 147 | initial_relay_url: Some(sync_relay_url), | 148 | bootstrap_relay_url: Some(bootstrap_url), |
| 148 | relay_domain, | 149 | relay_domain, |
| 149 | database, | 150 | database, |
| 150 | write_policy, | 151 | write_policy, |
| @@ -176,9 +177,9 @@ impl SyncManager { | |||
| 176 | /// and processes incoming events. Runs indefinitely until cancelled. | 177 | /// and processes incoming events. Runs indefinitely until cancelled. |
| 177 | pub async fn run(self) { | 178 | pub async fn run(self) { |
| 178 | tracing::info!( | 179 | tracing::info!( |
| 179 | "Starting SyncManager (domain: {}, initial relay: {:?})", | 180 | "Starting SyncManager (domain: {}, bootstrap relay: {:?})", |
| 180 | self.relay_domain, | 181 | self.relay_domain, |
| 181 | self.initial_relay_url | 182 | self.bootstrap_relay_url |
| 182 | ); | 183 | ); |
| 183 | 184 | ||
| 184 | // Create the filter service | 185 | // Create the filter service |
| @@ -196,13 +197,13 @@ impl SyncManager { | |||
| 196 | // Collect all relays to connect to | 197 | // Collect all relays to connect to |
| 197 | let mut relays_to_connect: Vec<String> = Vec::new(); | 198 | let mut relays_to_connect: Vec<String> = Vec::new(); |
| 198 | 199 | ||
| 199 | // Start with initial relay if configured | 200 | // Start with bootstrap relay if configured |
| 200 | if let Some(ref url) = self.initial_relay_url { | 201 | if let Some(ref url) = self.bootstrap_relay_url { |
| 201 | if !self.is_own_relay(url) { | 202 | if !self.is_own_relay(url) { |
| 202 | relays_to_connect.push(url.clone()); | 203 | relays_to_connect.push(url.clone()); |
| 203 | active_relays.insert(url.clone()); | 204 | active_relays.insert(url.clone()); |
| 204 | } else { | 205 | } else { |
| 205 | tracing::info!("Skipping initial relay (is our own relay): {}", url); | 206 | tracing::info!("Skipping bootstrap relay (is our own relay): {}", url); |
| 206 | } | 207 | } |
| 207 | } | 208 | } |
| 208 | 209 | ||