fix: re-introduce to known starcharts

This commit is contained in:
Aravinth Manivannan 2023-03-25 22:47:28 +05:30
parent 124d8d7b34
commit 2890bf566c
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88

View file

@ -19,7 +19,7 @@ use std::collections::HashSet;
use std::future::Future; use std::future::Future;
use actix::clock::sleep; use actix::clock::sleep;
use actix_web::web; use actix_web::web::{self, Data};
use actix_web::{HttpResponse, Responder}; use actix_web::{HttpResponse, Responder};
use actix_web_codegen_const_routes::get; use actix_web_codegen_const_routes::get;
use actix_web_codegen_const_routes::post; use actix_web_codegen_const_routes::post;
@ -112,15 +112,9 @@ impl Ctx {
panic!() panic!()
} }
starchart_url.set_path(ROUTES.introducer.get_mini_index); starchart_url.set_path(ROUTES.introducer.get_mini_index);
Ok(self let resp = self.client.get(starchart_url).send().await.unwrap();
.client println!("{:?}", resp);
.get(starchart_url) Ok(resp.json().await.unwrap())
.send()
.await
.unwrap()
.json()
.await
.unwrap())
} }
async fn client_introduce_starchart(&self, mut starchart_url: Url) -> ServiceResult<()> { async fn client_introduce_starchart(&self, mut starchart_url: Url) -> ServiceResult<()> {
@ -178,15 +172,17 @@ impl Ctx {
} }
pub async fn bootstrap(&self, db: &Box<dyn SCDatabase>) -> ServiceResult<()> { pub async fn bootstrap(&self, db: &Box<dyn SCDatabase>) -> ServiceResult<()> {
let mut known_starcharts = HashSet::with_capacity(self.settings.introducer.nodes.len()); async fn run(
for starchart in self.settings.introducer.nodes.iter() { ctx: &Ctx,
db: &Box<dyn SCDatabase>,
starchart: &Url,
known_starcharts: &mut HashSet<Url>,
) -> ServiceResult<()> {
let mut page = 1; let mut page = 1;
loop { loop {
let mut nodes = self let mut nodes = ctx.client_get_introducions(starchart.clone(), page).await?;
.client_get_introducions(starchart.clone(), page)
.await?;
self.client_introduce_starchart(starchart.clone()).await?; ctx.client_introduce_starchart(starchart.clone()).await?;
if nodes.is_empty() { if nodes.is_empty() {
break; break;
@ -209,6 +205,10 @@ impl Ctx {
} }
ctx.import_forges(node_url.clone(), db).await?; ctx.import_forges(node_url.clone(), db).await?;
let mini_index = ctx.client_get_mini_index(node_url.clone()).await?; let mini_index = ctx.client_get_mini_index(node_url.clone()).await?;
log::info!(
"Received mini_index {} from {node_url}",
mini_index.mini_index
);
db.rm_imported_mini_index(&node_url).await?; db.rm_imported_mini_index(&node_url).await?;
db.import_mini_index(&node_url, &mini_index.mini_index) db.import_mini_index(&node_url, &mini_index.mini_index)
.await?; .await?;
@ -216,16 +216,37 @@ impl Ctx {
Ok(()) Ok(())
} }
_bootstrap(self, db, &mut known_starcharts, starchart.as_str()).await?; _bootstrap(ctx, db, known_starcharts, starchart.as_str()).await?;
for node in nodes.drain(0..) { for node in nodes.drain(0..) {
if node.instance_url == self.settings.introducer.public_url.as_str() { if node.instance_url == ctx.settings.introducer.public_url.as_str() {
continue; continue;
} }
_bootstrap(self, db, &mut known_starcharts, &node.instance_url).await?; _bootstrap(ctx, db, known_starcharts, &node.instance_url).await?;
} }
page += 1; page += 1;
} }
Ok(())
}
let mut known_starcharts = HashSet::with_capacity(self.settings.introducer.nodes.len());
for starchart in self.settings.introducer.nodes.iter() {
run(self, db, starchart, &mut known_starcharts).await?;
}
let mut page = 0;
loop {
let offset = page * LIMIT;
let starcharts = db
.get_all_introduced_starchart_instances(offset, LIMIT)
.await?;
for starchart in self.settings.introducer.nodes.iter() {
run(self, db, starchart, &mut known_starcharts).await?;
}
if starcharts.len() < LIMIT as usize {
break;
} else {
page += 1;
}
} }
Ok(()) Ok(())
} }