Add a crude re-seed for populating actors

This commit is contained in:
asonix 2020-03-23 17:37:23 -05:00
parent e4c95a8168
commit bd75b1f958
2 changed files with 33 additions and 1 deletions

View file

@ -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)
} }

View file

@ -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() {