This commit is contained in:
Mike Dilger 2023-02-08 18:50:25 +13:00
parent 52e6d83861
commit bcad46849a
8 changed files with 61 additions and 43 deletions

View File

@ -201,7 +201,12 @@ impl Globals {
relays: Vec::new(),
};
for ri in GLOBALS.relay_tracker.all_relays.iter().filter(|ri| ri.value().write) {
for ri in GLOBALS
.relay_tracker
.all_relays
.iter()
.filter(|ri| ri.value().write)
{
profile.relays.push(ri.key().to_unchecked_url())
}
@ -216,7 +221,7 @@ impl Globals {
.all_relays
.iter()
.filter_map(|r| {
if f(&r.value()) {
if f(r.value()) {
Some(r.value().clone())
} else {
None
@ -233,7 +238,7 @@ impl Globals {
.all_relays
.iter()
.filter_map(|r| {
if f(&r.value()) {
if f(r.value()) {
Some(r.key().clone())
} else {
None

View File

@ -1,4 +1,6 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
// TEMPORARILY
#![allow(clippy::uninlined_format_args)]
#[macro_use]
extern crate lazy_static;

View File

@ -125,7 +125,8 @@ async fn update_relays(
let db_relay = DbRelay::new(relay_url.clone());
DbRelay::insert(db_relay.clone()).await?;
if let Entry::Vacant(entry) = GLOBALS.relay_tracker.all_relays.entry(relay_url.clone()) {
if let Entry::Vacant(entry) = GLOBALS.relay_tracker.all_relays.entry(relay_url.clone())
{
entry.insert(db_relay);
}

View File

@ -53,9 +53,10 @@ impl Minion {
)
.await?;
// set in globals
if let Some(mut dbrelay) = GLOBALS.relay_tracker.all_relays.get_mut(&self.dbrelay.url) {
dbrelay.last_general_eose_at =
Some(event.created_at.0 as u64);
if let Some(mut dbrelay) =
GLOBALS.relay_tracker.all_relays.get_mut(&self.dbrelay.url)
{
dbrelay.last_general_eose_at = Some(event.created_at.0 as u64);
}
}
}

View File

@ -96,10 +96,10 @@ impl Overlord {
{
let mut all_relays: Vec<DbRelay> = DbRelay::fetch(None).await?;
for dbrelay in all_relays.drain(..) {
GLOBALS.relay_tracker.all_relays.insert(
dbrelay.url.clone(),
dbrelay
);
GLOBALS
.relay_tracker
.all_relays
.insert(dbrelay.url.clone(), dbrelay);
}
}
@ -259,7 +259,11 @@ impl Overlord {
}
Ok(relay_url) => {
if let Some(elem) = GLOBALS.relay_tracker.relay_assignments.get(&relay_url) {
tracing::debug!("Picked {} covering {} pubkeys", &relay_url, elem.value().pubkeys.len());
tracing::debug!(
"Picked {} covering {} pubkeys",
&relay_url,
elem.value().pubkeys.len()
);
// Apply the relay assignment
if let Err(e) = self.apply_relay_assignment(elem.value().to_owned()).await {
tracing::error!("{}", e);
@ -283,9 +287,7 @@ impl Overlord {
// Subscribe to the general feed
let _ = self.to_minions.send(ToMinionMessage {
target: assignment.relay_url.0.clone(),
payload: ToMinionPayload::SubscribeGeneralFeed(
assignment.pubkeys.clone(),
),
payload: ToMinionPayload::SubscribeGeneralFeed(assignment.pubkeys.clone()),
});
// Until NIP-65 is in widespread use, we should listen for mentions
@ -410,7 +412,11 @@ impl Overlord {
async fn recover_from_minion_exit(&mut self, url: RelayUrl) {
GLOBALS.relay_tracker.relay_disconnected(&url);
if let Err(e) = GLOBALS.relay_tracker.refresh_person_relay_scores(false).await {
if let Err(e) = GLOBALS
.relay_tracker
.refresh_person_relay_scores(false)
.await
{
tracing::error!("Error: {}", e);
}
self.pick_relays().await;
@ -421,10 +427,7 @@ impl Overlord {
ToOverlordMessage::AddRelay(relay_str) => {
let dbrelay = DbRelay::new(relay_str.clone());
DbRelay::insert(dbrelay.clone()).await?;
GLOBALS.relay_tracker.all_relays.insert(
relay_str,
dbrelay
);
GLOBALS.relay_tracker.all_relays.insert(relay_str, dbrelay);
}
ToOverlordMessage::AdvertiseRelayList => {
self.advertise_relay_list().await?;
@ -447,11 +450,11 @@ impl Overlord {
Overlord::follow_pubkey_and_relay(pubkeystr, relay).await?;
}
ToOverlordMessage::FollowNip05(nip05) => {
let _ = tokio::spawn(async move {
std::mem::drop(tokio::spawn(async move {
if let Err(e) = crate::nip05::get_and_follow_nip05(nip05).await {
tracing::error!("{}", e);
}
});
}));
}
ToOverlordMessage::FollowNprofile(nprofile) => {
match Profile::try_from_bech32_string(&nprofile) {
@ -508,19 +511,19 @@ impl Overlord {
// Clear new events
GLOBALS.events.clear_new();
let _ = tokio::spawn(async move {
std::mem::drop(tokio::spawn(async move {
for (event, url, sub) in GLOBALS.incoming_events.write().await.drain(..) {
let _ =
crate::process::process_new_event(&event, true, Some(url), sub).await;
}
});
}));
}
ToOverlordMessage::PruneDatabase => {
let _ = tokio::spawn(async move {
std::mem::drop(tokio::spawn(async move {
if let Err(e) = crate::db::prune().await {
tracing::error!("{}", e);
}
});
}));
}
ToOverlordMessage::Post(content, tags, reply_to) => {
self.post(content, tags, reply_to).await?;
@ -1170,7 +1173,9 @@ impl Overlord {
let db_relay = DbRelay::new(relay_url.clone());
DbRelay::insert(db_relay.clone()).await?;
if let Entry::Vacant(entry) = GLOBALS.relay_tracker.all_relays.entry(relay_url.clone()) {
if let Entry::Vacant(entry) =
GLOBALS.relay_tracker.all_relays.entry(relay_url.clone())
{
entry.insert(db_relay);
}

View File

@ -16,7 +16,9 @@ pub struct RelayAssignment {
impl RelayAssignment {
pub fn merge_in(&mut self, other: RelayAssignment) -> Result<(), Error> {
if self.relay_url != other.relay_url {
return Err(Error::General("Attempted to merge relay assignments on different relays".to_owned()));
return Err(Error::General(
"Attempted to merge relay assignments on different relays".to_owned(),
));
}
self.pubkeys.extend(other.pubkeys);
Ok(())
@ -42,7 +44,9 @@ impl fmt::Display for RelayPickFailure {
match *self {
RelayPickFailure::NoPeopleLeft => write!(f, "All people accounted for."),
RelayPickFailure::NoProgress => write!(f, "Unable to make further progress."),
RelayPickFailure::MaxConnectedRelays => write!(f, "We have hit the maximum number of connected relays"),
RelayPickFailure::MaxConnectedRelays => {
write!(f, "We have hit the maximum number of connected relays")
}
}
}
}
@ -162,11 +166,7 @@ impl RelayTracker {
pub async fn pick(&self) -> Result<RelayUrl, RelayPickFailure> {
// Maybe we hit max
let max_relays = GLOBALS.settings.read().await.max_relays as usize;
if self
.relay_assignments
.len()
>= max_relays
{
if self.relay_assignments.len() >= max_relays {
return Err(RelayPickFailure::MaxConnectedRelays);
}
@ -277,11 +277,12 @@ impl RelayTracker {
};
// Put assignment into relay_assignments
if let Some(mut maybe_elem) = self.relay_assignments.get_mut(&winning_url) {
if let Some(mut maybe_elem) = self.relay_assignments.get_mut(&winning_url) {
// FIXME this could cause a panic, but it would mean we have bad code.
maybe_elem.value_mut().merge_in(assignment).unwrap();
} else {
self.relay_assignments.insert(winning_url.clone(), assignment);
self.relay_assignments
.insert(winning_url.clone(), assignment);
}
Ok(winning_url)

View File

@ -23,7 +23,12 @@ pub(super) fn posting_area(
}
ui.label(" to post.");
});
} else if !GLOBALS.relay_tracker.all_relays.iter().any(|r| r.value().write) {
} else if !GLOBALS
.relay_tracker
.all_relays
.iter()
.any(|r| r.value().write)
{
ui.horizontal_wrapped(|ui| {
ui.label("You need to ");
if ui.link("choose write relays").clicked() {

View File

@ -65,7 +65,9 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
ui.label(&relay_url.0);
});
row.col(|ui| {
if let Some(ref assignment) = GLOBALS.relay_tracker.relay_assignments.get(relay_url) {
if let Some(ref assignment) =
GLOBALS.relay_tracker.relay_assignments.get(relay_url)
{
ui.label(format!("{}", assignment.pubkeys.len()));
}
});
@ -80,11 +82,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
ui.add_space(12.0);
ui.heading("Coverage");
if !GLOBALS
.relay_tracker
.pubkey_counts
.is_empty()
{
if !GLOBALS.relay_tracker.pubkey_counts.is_empty() {
for elem in GLOBALS.relay_tracker.pubkey_counts.iter() {
let pk = elem.key();
let count = elem.value();