forked from Deuxfleurs/garage
Persist directly and not in background
This commit is contained in:
parent
15ae74b080
commit
e16077f40a
1 changed files with 11 additions and 12 deletions
|
@ -410,7 +410,7 @@ impl System {
|
||||||
if has_changes {
|
if has_changes {
|
||||||
status.recalculate_hash();
|
status.recalculate_hash();
|
||||||
}
|
}
|
||||||
self.update_status(&update_locked, status);
|
self.update_status(&update_locked, status).await;
|
||||||
drop(update_locked);
|
drop(update_locked);
|
||||||
|
|
||||||
if to_advertise.len() > 0 {
|
if to_advertise.len() > 0 {
|
||||||
|
@ -434,7 +434,7 @@ impl System {
|
||||||
let status_hash = status.hash;
|
let status_hash = status.hash;
|
||||||
let config_version = self.ring.borrow().config.version;
|
let config_version = self.ring.borrow().config.version;
|
||||||
|
|
||||||
self.update_status(&update_locked, status);
|
self.update_status(&update_locked, status).await;
|
||||||
drop(update_locked);
|
drop(update_locked);
|
||||||
|
|
||||||
if is_new || status_hash != ping.status_hash {
|
if is_new || status_hash != ping.status_hash {
|
||||||
|
@ -502,7 +502,7 @@ impl System {
|
||||||
if has_changed {
|
if has_changed {
|
||||||
status.recalculate_hash();
|
status.recalculate_hash();
|
||||||
}
|
}
|
||||||
self.update_status(&update_lock, status);
|
self.update_status(&update_lock, status).await;
|
||||||
drop(update_lock);
|
drop(update_lock);
|
||||||
|
|
||||||
if to_ping.len() > 0 {
|
if to_ping.len() > 0 {
|
||||||
|
@ -650,19 +650,18 @@ impl System {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_status(self: &Arc<Self>, updaters: &Updaters, status: Status) {
|
async fn update_status(self: &Arc<Self>, updaters: &Updaters, status: Status) {
|
||||||
|
if status.hash != self.status.borrow().hash {
|
||||||
|
info!("Persisting new peer list");
|
||||||
|
let serializable_status = status.to_serializable_membership(&self);
|
||||||
|
self.persist_status.save_async(&serializable_status).await
|
||||||
|
.expect("Unable to persist peer list");
|
||||||
|
}
|
||||||
|
|
||||||
let status = Arc::new(status);
|
let status = Arc::new(status);
|
||||||
updaters
|
updaters
|
||||||
.update_status
|
.update_status
|
||||||
.send(status.clone())
|
.send(status.clone())
|
||||||
.expect("Could not update internal membership status");
|
.expect("Could not update internal membership status");
|
||||||
self.background
|
|
||||||
.spawn_cancellable(self.clone().persist_status(status));
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn persist_status(self: Arc<Self>, status: Arc<Status>) -> Result<(), Error> {
|
|
||||||
let serializable_status = status.to_serializable_membership(&self);
|
|
||||||
self.persist_status.save_async(&serializable_status).await?;
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue