Add a crude re-seed for populating actors
This commit is contained in:
		
							parent
							
								
									e4c95a8168
								
							
						
					
					
						commit
						bd75b1f958
					
				
					 2 changed files with 33 additions and 1 deletions
				
			
		|  | @ -1,6 +1,6 @@ | ||||||
| use crate::{apub::AcceptedActors, db::Db, error::MyError, requests::Requests}; | use crate::{apub::AcceptedActors, db::Db, error::MyError, requests::Requests}; | ||||||
| use activitystreams::primitives::XsdAnyUri; | use activitystreams::primitives::XsdAnyUri; | ||||||
| use log::error; | use log::{error, info, warn}; | ||||||
| use std::{collections::HashSet, sync::Arc, time::Duration}; | use std::{collections::HashSet, sync::Arc, time::Duration}; | ||||||
| use tokio::sync::RwLock; | use tokio::sync::RwLock; | ||||||
| use ttl_cache::TtlCache; | use ttl_cache::TtlCache; | ||||||
|  | @ -28,6 +28,34 @@ impl ActorCache { | ||||||
|         cache |         cache | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub async fn re_seed( | ||||||
|  |         &self, | ||||||
|  |         listeners: &[XsdAnyUri], | ||||||
|  |         requests: &Requests, | ||||||
|  |     ) -> Result<(), MyError> { | ||||||
|  |         info!("Seeding actors with {:?}", listeners); | ||||||
|  |         for listener in listeners { | ||||||
|  |             let mut listener = listener.clone(); | ||||||
|  |             listener.as_url_mut().set_path("/actor"); | ||||||
|  | 
 | ||||||
|  |             let actor = match self.get(&listener, requests).await { | ||||||
|  |                 Ok(actor) => actor, | ||||||
|  |                 Err(e) => { | ||||||
|  |                     warn!("Couldn't seed {} due to {}, continuing", e, listener); | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             match self.save(actor).await { | ||||||
|  |                 Ok(_) => (), | ||||||
|  |                 Err(e) => { | ||||||
|  |                     warn!("Coudn't seed {} due to {}, continuing", listener, e); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         Ok(()) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub async fn is_following(&self, id: &XsdAnyUri) -> bool { |     pub async fn is_following(&self, id: &XsdAnyUri) -> bool { | ||||||
|         self.following.read().await.contains(id) |         self.following.read().await.contains(id) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -66,6 +66,10 @@ async fn main() -> Result<(), anyhow::Error> { | ||||||
|     let actors = ActorCache::new(db.clone()); |     let actors = ActorCache::new(db.clone()); | ||||||
|     let job_server = create_server(db.clone()); |     let job_server = create_server(db.clone()); | ||||||
| 
 | 
 | ||||||
|  |     actors | ||||||
|  |         .re_seed(&state.listeners().await, &state.requests()) | ||||||
|  |         .await?; | ||||||
|  | 
 | ||||||
|     notify::spawn(state.clone(), actors.clone(), job_server.clone(), &config)?; |     notify::spawn(state.clone(), actors.clone(), job_server.clone(), &config)?; | ||||||
| 
 | 
 | ||||||
|     if args.jobs_only() { |     if args.jobs_only() { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue