don't
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix(knot): prevent jetstream spam on first run

Signed-off-by: tjh <x@tjh.dev>

tjh 6d179eb0 8c055d15

+15 -15
+15 -15
crates/knot/src/main.rs
··· 189 189 .await 190 190 .context("Failed to resolve owner handle")?; 191 191 192 + let needs_backfill = { 193 + let owner = resolved_owner.as_str(); 194 + sqlx::query!( 195 + "INSERT INTO knot_member (did) VALUES (?) ON CONFLICT (did) DO NOTHING RETURNING did", 196 + owner 197 + ) 198 + .fetch_optional(&pool) 199 + .await? 200 + .is_some() 201 + }; 202 + 192 203 let jetstream_config = { 193 204 let cursor = db 194 205 .get_jetstream_cursor() ··· 243 232 KnotState::new(config, resolver, public_http, jetstream_config, db)?; 244 233 let knot: Knot = knot_state.into(); 245 234 246 - let owner = resolved_owner.as_str(); 247 - match sqlx::query!( 248 - "INSERT INTO knot_member (did) VALUES (?) ON CONFLICT (did) DO NOTHING RETURNING did", 249 - owner 250 - ) 251 - .fetch_optional(&pool) 252 - .await 253 - { 254 - Ok(Some(_)) => { 255 - tracing::info!("Appears to be first run, fetching records"); 256 - knot.backfill_public_keys().await.unwrap(); 257 - knot.backfill_repositories(&resolved_owner).await.unwrap(); 258 - } 259 - Ok(None) => {} 260 - Err(error) => tracing::error!(?error), 235 + if needs_backfill { 236 + tracing::info!("Appears to be first run, fetching records"); 237 + knot.backfill_public_keys().await.unwrap(); 238 + knot.backfill_repositories(&resolved_owner).await.unwrap(); 261 239 } 262 240 263 241 let router = knot::public::router()