From 339b0c02f2cec25ae804dc882f5ce7d1dd58b9a6 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Fri, 5 Dec 2025 12:03:52 +0000 Subject: rename sunc_bootstrap_relay_url --- src/config.rs | 10 ++++++---- src/http/nip11.rs | 6 ++++-- src/main.rs | 8 ++++---- src/sync/manager.rs | 33 +++++++++++++++++---------------- 4 files changed, 31 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/config.rs b/src/config.rs index 07e67c8..69a160a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -84,9 +84,10 @@ pub struct Config { #[arg(long = "metrics-top-n-repos", env = "NGIT_METRICS_TOP_N_REPOS", default_value_t = 10)] pub metrics_top_n_repos: usize, - /// URL of relay to sync kind 30617 events from (optional, enables proactive sync) - #[arg(long, env = "NGIT_SYNC_RELAY_URL")] - pub sync_relay_url: Option, + /// URL of bootstrap relay to sync from on startup (optional) + /// Sync discovers additional relays from repository announcements that list our service + #[arg(long, env = "NGIT_SYNC_BOOTSTRAP_RELAY_URL")] + pub sync_bootstrap_relay_url: Option, /// Maximum backoff time in seconds for sync relay reconnection (default: 3600 = 1 hour) #[arg(long, env = "NGIT_SYNC_MAX_BACKOFF_SECS", default_value_t = 3600)] @@ -163,11 +164,12 @@ impl Config { metrics_enabled: true, metrics_connection_per_ip_abuse_threshold: 10, metrics_top_n_repos: 10, - sync_relay_url: None, + sync_bootstrap_relay_url: None, sync_max_backoff_secs: 3600, sync_startup_delay_secs: 30, sync_reconnect_delay_secs: 10, sync_reconnect_lookback_days: 3, + sync_startup_jitter_ms: 10_000, } } } diff --git a/src/http/nip11.rs b/src/http/nip11.rs index 5d362bb..80165ee 100644 --- a/src/http/nip11.rs +++ b/src/http/nip11.rs @@ -105,11 +105,12 @@ mod tests { metrics_enabled: true, metrics_connection_per_ip_abuse_threshold: 10, metrics_top_n_repos: 10, - sync_relay_url: None, + sync_bootstrap_relay_url: None, sync_max_backoff_secs: 3600, sync_startup_delay_secs: 30, sync_reconnect_delay_secs: 10, sync_reconnect_lookback_days: 3, + sync_startup_jitter_ms: 10_000, }; let doc = RelayInformationDocument::from_config(&config); @@ -144,11 +145,12 @@ mod tests { metrics_enabled: true, metrics_connection_per_ip_abuse_threshold: 10, metrics_top_n_repos: 10, - sync_relay_url: None, + sync_bootstrap_relay_url: None, sync_max_backoff_secs: 3600, sync_startup_delay_secs: 30, sync_reconnect_delay_secs: 10, sync_reconnect_lookback_days: 3, + sync_startup_jitter_ms: 10_000, }; let doc = RelayInformationDocument::from_config(&config); diff --git a/src/main.rs b/src/main.rs index 9273afd..f887e42 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,17 +52,17 @@ async fn main() -> Result<()> { ); // Start SyncManager for proactive sync (Phase 2: multi-relay support, Phase 3: health tracking) - // Even without initial sync_relay_url, SyncManager can discover relays from stored announcements + // Even without bootstrap relay, SyncManager discovers relays from stored announcements let sync_manager = SyncManager::new( - config.sync_relay_url.clone(), + config.sync_bootstrap_relay_url.clone(), config.domain.clone(), relay_with_db.database.clone(), relay_with_db.write_policy.clone(), &config, ); - if config.sync_relay_url.is_some() { - info!("Starting proactive sync from: {:?}", config.sync_relay_url); + if config.sync_bootstrap_relay_url.is_some() { + info!("Starting proactive sync with bootstrap relay: {:?}", config.sync_bootstrap_relay_url); } else { info!("Proactive sync enabled (will discover relays from stored announcements)"); } 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 { /// Coordinates proactive sync from configured and discovered relays pub struct SyncManager { - /// Initial relay URL to sync from (from config) - initial_relay_url: Option, + /// Bootstrap relay URL for initial sync (from config) + /// Additional relays are discovered from repository announcements that list our service + bootstrap_relay_url: Option, /// Our relay's domain (for filtering) relay_domain: String, /// Database for storing accepted events @@ -82,20 +83,20 @@ impl SyncManager { /// Create a new SyncManager /// /// # Arguments - /// * `initial_relay_url` - Optional initial relay URL from config + /// * `bootstrap_relay_url` - Optional bootstrap relay URL from config /// * `relay_domain` - Our relay's domain (used to exclude self from sync) /// * `database` - Shared database for storing events and querying announcements /// * `write_policy` - Write policy for validating synced events /// * `config` - Configuration for health tracking settings pub fn new( - initial_relay_url: Option, + bootstrap_relay_url: Option, relay_domain: String, database: SharedDatabase, write_policy: Nip34WritePolicy, config: &Config, ) -> Self { Self { - initial_relay_url, + bootstrap_relay_url, relay_domain, database, write_policy, @@ -109,14 +110,14 @@ impl SyncManager { /// Create a new SyncManager with metrics /// /// # Arguments - /// * `initial_relay_url` - Optional initial relay URL from config + /// * `bootstrap_relay_url` - Optional bootstrap relay URL from config /// * `relay_domain` - Our relay's domain (used to exclude self from sync) /// * `database` - Shared database for storing events and querying announcements /// * `write_policy` - Write policy for validating synced events /// * `config` - Configuration for health tracking settings /// * `metrics` - Sync metrics for Prometheus pub fn with_metrics( - initial_relay_url: Option, + bootstrap_relay_url: Option, relay_domain: String, database: SharedDatabase, write_policy: Nip34WritePolicy, @@ -124,7 +125,7 @@ impl SyncManager { metrics: SyncMetrics, ) -> Self { Self { - initial_relay_url, + bootstrap_relay_url, relay_domain, database, write_policy, @@ -137,14 +138,14 @@ impl SyncManager { /// Create a SyncManager with a single relay URL (Phase 1 compatibility) pub fn with_single_relay( - sync_relay_url: String, + bootstrap_url: String, database: SharedDatabase, write_policy: Nip34WritePolicy, ) -> Self { // Extract domain from URL for filtering - let relay_domain = extract_domain_from_url(&sync_relay_url).unwrap_or_default(); + let relay_domain = extract_domain_from_url(&bootstrap_url).unwrap_or_default(); Self { - initial_relay_url: Some(sync_relay_url), + bootstrap_relay_url: Some(bootstrap_url), relay_domain, database, write_policy, @@ -176,9 +177,9 @@ impl SyncManager { /// and processes incoming events. Runs indefinitely until cancelled. pub async fn run(self) { tracing::info!( - "Starting SyncManager (domain: {}, initial relay: {:?})", + "Starting SyncManager (domain: {}, bootstrap relay: {:?})", self.relay_domain, - self.initial_relay_url + self.bootstrap_relay_url ); // Create the filter service @@ -196,13 +197,13 @@ impl SyncManager { // Collect all relays to connect to let mut relays_to_connect: Vec = Vec::new(); - // Start with initial relay if configured - if let Some(ref url) = self.initial_relay_url { + // Start with bootstrap relay if configured + if let Some(ref url) = self.bootstrap_relay_url { if !self.is_own_relay(url) { relays_to_connect.push(url.clone()); active_relays.insert(url.clone()); } else { - tracing::info!("Skipping initial relay (is our own relay): {}", url); + tracing::info!("Skipping bootstrap relay (is our own relay): {}", url); } } -- cgit v1.2.3