upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-12-05 12:03:52 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2025-12-05 12:03:52 +0000
commit339b0c02f2cec25ae804dc882f5ce7d1dd58b9a6 (patch)
treee3d80676913de96c2ac75eb2dc9a8954c88ab633 /src
parentef7ba7c59b8e0b6369f63b8a46e202693963d92b (diff)
rename sunc_bootstrap_relay_url
Diffstat (limited to 'src')
-rw-r--r--src/config.rs10
-rw-r--r--src/http/nip11.rs6
-rw-r--r--src/main.rs8
-rw-r--r--src/sync/manager.rs33
4 files changed, 31 insertions, 26 deletions
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 {
84 #[arg(long = "metrics-top-n-repos", env = "NGIT_METRICS_TOP_N_REPOS", default_value_t = 10)] 84 #[arg(long = "metrics-top-n-repos", env = "NGIT_METRICS_TOP_N_REPOS", default_value_t = 10)]
85 pub metrics_top_n_repos: usize, 85 pub metrics_top_n_repos: usize,
86 86
87 /// URL of relay to sync kind 30617 events from (optional, enables proactive sync) 87 /// URL of bootstrap relay to sync from on startup (optional)
88 #[arg(long, env = "NGIT_SYNC_RELAY_URL")] 88 /// Sync discovers additional relays from repository announcements that list our service
89 pub sync_relay_url: Option<String>, 89 #[arg(long, env = "NGIT_SYNC_BOOTSTRAP_RELAY_URL")]
90 pub sync_bootstrap_relay_url: Option<String>,
90 91
91 /// Maximum backoff time in seconds for sync relay reconnection (default: 3600 = 1 hour) 92 /// Maximum backoff time in seconds for sync relay reconnection (default: 3600 = 1 hour)
92 #[arg(long, env = "NGIT_SYNC_MAX_BACKOFF_SECS", default_value_t = 3600)] 93 #[arg(long, env = "NGIT_SYNC_MAX_BACKOFF_SECS", default_value_t = 3600)]
@@ -163,11 +164,12 @@ impl Config {
163 metrics_enabled: true, 164 metrics_enabled: true,
164 metrics_connection_per_ip_abuse_threshold: 10, 165 metrics_connection_per_ip_abuse_threshold: 10,
165 metrics_top_n_repos: 10, 166 metrics_top_n_repos: 10,
166 sync_relay_url: None, 167 sync_bootstrap_relay_url: None,
167 sync_max_backoff_secs: 3600, 168 sync_max_backoff_secs: 3600,
168 sync_startup_delay_secs: 30, 169 sync_startup_delay_secs: 30,
169 sync_reconnect_delay_secs: 10, 170 sync_reconnect_delay_secs: 10,
170 sync_reconnect_lookback_days: 3, 171 sync_reconnect_lookback_days: 3,
172 sync_startup_jitter_ms: 10_000,
171 } 173 }
172 } 174 }
173} 175}
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 {
105 metrics_enabled: true, 105 metrics_enabled: true,
106 metrics_connection_per_ip_abuse_threshold: 10, 106 metrics_connection_per_ip_abuse_threshold: 10,
107 metrics_top_n_repos: 10, 107 metrics_top_n_repos: 10,
108 sync_relay_url: None, 108 sync_bootstrap_relay_url: None,
109 sync_max_backoff_secs: 3600, 109 sync_max_backoff_secs: 3600,
110 sync_startup_delay_secs: 30, 110 sync_startup_delay_secs: 30,
111 sync_reconnect_delay_secs: 10, 111 sync_reconnect_delay_secs: 10,
112 sync_reconnect_lookback_days: 3, 112 sync_reconnect_lookback_days: 3,
113 sync_startup_jitter_ms: 10_000,
113 }; 114 };
114 115
115 let doc = RelayInformationDocument::from_config(&config); 116 let doc = RelayInformationDocument::from_config(&config);
@@ -144,11 +145,12 @@ mod tests {
144 metrics_enabled: true, 145 metrics_enabled: true,
145 metrics_connection_per_ip_abuse_threshold: 10, 146 metrics_connection_per_ip_abuse_threshold: 10,
146 metrics_top_n_repos: 10, 147 metrics_top_n_repos: 10,
147 sync_relay_url: None, 148 sync_bootstrap_relay_url: None,
148 sync_max_backoff_secs: 3600, 149 sync_max_backoff_secs: 3600,
149 sync_startup_delay_secs: 30, 150 sync_startup_delay_secs: 30,
150 sync_reconnect_delay_secs: 10, 151 sync_reconnect_delay_secs: 10,
151 sync_reconnect_lookback_days: 3, 152 sync_reconnect_lookback_days: 3,
153 sync_startup_jitter_ms: 10_000,
152 }; 154 };
153 155
154 let doc = RelayInformationDocument::from_config(&config); 156 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<()> {
52 ); 52 );
53 53
54 // Start SyncManager for proactive sync (Phase 2: multi-relay support, Phase 3: health tracking) 54 // Start SyncManager for proactive sync (Phase 2: multi-relay support, Phase 3: health tracking)
55 // Even without initial sync_relay_url, SyncManager can discover relays from stored announcements 55 // Even without bootstrap relay, SyncManager discovers relays from stored announcements
56 let sync_manager = SyncManager::new( 56 let sync_manager = SyncManager::new(
57 config.sync_relay_url.clone(), 57 config.sync_bootstrap_relay_url.clone(),
58 config.domain.clone(), 58 config.domain.clone(),
59 relay_with_db.database.clone(), 59 relay_with_db.database.clone(),
60 relay_with_db.write_policy.clone(), 60 relay_with_db.write_policy.clone(),
61 &config, 61 &config,
62 ); 62 );
63 63
64 if config.sync_relay_url.is_some() { 64 if config.sync_bootstrap_relay_url.is_some() {
65 info!("Starting proactive sync from: {:?}", config.sync_relay_url); 65 info!("Starting proactive sync with bootstrap relay: {:?}", config.sync_bootstrap_relay_url);
66 } else { 66 } else {
67 info!("Proactive sync enabled (will discover relays from stored announcements)"); 67 info!("Proactive sync enabled (will discover relays from stored announcements)");
68 } 68 }
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
62pub struct SyncManager { 62pub 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