remove duplicate request
This commit is contained in:
@@ -1202,7 +1202,7 @@ impl Backend {
|
|||||||
let client = self.client.clone();
|
let client = self.client.clone();
|
||||||
|
|
||||||
self.push_task(cx.spawn(async move |this, cx| {
|
self.push_task(cx.spawn(async move |this, cx| {
|
||||||
if let Err(e) = connect_repo_relays_only(&client, relays, filters).await {
|
if let Err(e) = connect_repo_relays(&client, relays, filters).await {
|
||||||
log::warn!("repo relay fetch failed: {e}");
|
log::warn!("repo relay fetch failed: {e}");
|
||||||
// Allow an immediate retry after a failure.
|
// Allow an immediate retry after a failure.
|
||||||
this.update(cx, |this, _cx| {
|
this.update(cx, |this, _cx| {
|
||||||
@@ -1433,54 +1433,27 @@ fn fetch_fingerprint(relays: &[&str], filters: &[Filter]) -> u64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Add the given relays, connect and fetch the filters.
|
/// Add the given relays, connect and fetch the filters.
|
||||||
async fn connect_repo_relays_only(
|
async fn connect_repo_relays(
|
||||||
client: &Client,
|
client: &Client,
|
||||||
relays: Vec<RelayUrl>,
|
relays: Vec<RelayUrl>,
|
||||||
filters: Vec<Filter>,
|
filters: Vec<Filter>,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
if relays.is_empty() {
|
if relays.is_empty() || filters.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut added = false;
|
// Ensure relay connections
|
||||||
for url in &relays {
|
for url in relays.iter() {
|
||||||
added |= client.add_relay(url).await?;
|
client.add_relay(url).await?;
|
||||||
|
client.connect_relay(url).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect only when the pool grew.
|
// Run neg sync for each filter
|
||||||
if added {
|
for filter in filters.into_iter() {
|
||||||
client.connect().await;
|
if let Err(e) = client.sync(filter).with(relays.iter()).await {
|
||||||
}
|
|
||||||
|
|
||||||
let opts = SubscribeAutoCloseOptions::default()
|
|
||||||
.exit_policy(ReqExitPolicy::ExitOnEOSE)
|
|
||||||
.timeout(Some(Duration::from_secs(10)));
|
|
||||||
|
|
||||||
let target: HashMap<&str, Vec<Filter>> = relays
|
|
||||||
.iter()
|
|
||||||
.map(|url| (url.as_str(), filters.clone()))
|
|
||||||
.collect();
|
|
||||||
client.subscribe(target).close_on(opts).await?;
|
|
||||||
|
|
||||||
// Sync the filters concurrently.
|
|
||||||
let sync_opts = SyncOptions::default().initial_timeout(Duration::from_secs(5));
|
|
||||||
let syncs = filters.into_iter().map(|filter| {
|
|
||||||
let client = &client;
|
|
||||||
let relays = &relays;
|
|
||||||
let sync_opts = sync_opts.clone();
|
|
||||||
async move {
|
|
||||||
if let Err(e) = client
|
|
||||||
.sync(filter)
|
|
||||||
.with(relays.iter())
|
|
||||||
.opts(sync_opts)
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
log::warn!("repo relay negentropy sync failed: {e}");
|
log::warn!("repo relay negentropy sync failed: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
futures::future::join_all(syncs).await;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user