forked from Deuxfleurs/garage
layout: fix tracker bugs
This commit is contained in:
parent
bad7cc812e
commit
9d95f6f704
2 changed files with 10 additions and 4 deletions
|
@ -125,10 +125,10 @@ impl LayoutManager {
|
||||||
|
|
||||||
if !prev_layout_check || adv.check().is_ok() {
|
if !prev_layout_check || adv.check().is_ok() {
|
||||||
if layout.merge(adv) {
|
if layout.merge(adv) {
|
||||||
|
layout.update_trackers(self.node_id);
|
||||||
if prev_layout_check && layout.check().is_err() {
|
if prev_layout_check && layout.check().is_err() {
|
||||||
panic!("Merged two correct layouts and got an incorrect layout.");
|
panic!("Merged two correct layouts and got an incorrect layout.");
|
||||||
}
|
}
|
||||||
layout.update_trackers(self.node_id);
|
|
||||||
return Some(layout.clone());
|
return Some(layout.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,6 +245,8 @@ impl LayoutManager {
|
||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
adv: &LayoutHistory,
|
adv: &LayoutHistory,
|
||||||
) -> Result<SystemRpc, Error> {
|
) -> Result<SystemRpc, Error> {
|
||||||
|
debug!("handle_advertise_cluster_layout: {:?}", adv);
|
||||||
|
|
||||||
if adv.current().replication_factor != self.replication_factor {
|
if adv.current().replication_factor != self.replication_factor {
|
||||||
let msg = format!(
|
let msg = format!(
|
||||||
"Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.",
|
"Received a cluster layout from another node with replication factor {}, which is different from what we have in our configuration ({}). Discarding the cluster layout we received.",
|
||||||
|
@ -256,6 +258,8 @@ impl LayoutManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(new_layout) = self.merge_layout(adv) {
|
if let Some(new_layout) = self.merge_layout(adv) {
|
||||||
|
debug!("handle_advertise_cluster_layout: some changes were added to the current stuff");
|
||||||
|
|
||||||
self.change_notify.notify_waiters();
|
self.change_notify.notify_waiters();
|
||||||
self.broadcast_update(SystemRpc::AdvertiseClusterLayout(new_layout));
|
self.broadcast_update(SystemRpc::AdvertiseClusterLayout(new_layout));
|
||||||
self.save_cluster_layout().await?;
|
self.save_cluster_layout().await?;
|
||||||
|
@ -268,6 +272,8 @@ impl LayoutManager {
|
||||||
self: &Arc<Self>,
|
self: &Arc<Self>,
|
||||||
trackers: &UpdateTrackers,
|
trackers: &UpdateTrackers,
|
||||||
) -> Result<SystemRpc, Error> {
|
) -> Result<SystemRpc, Error> {
|
||||||
|
debug!("handle_advertise_cluster_layout_trackers: {:?}", trackers);
|
||||||
|
|
||||||
if let Some(new_trackers) = self.merge_layout_trackers(trackers) {
|
if let Some(new_trackers) = self.merge_layout_trackers(trackers) {
|
||||||
self.change_notify.notify_waiters();
|
self.change_notify.notify_waiters();
|
||||||
self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers(new_trackers));
|
self.broadcast_update(SystemRpc::AdvertiseClusterLayoutTrackers(new_trackers));
|
||||||
|
|
|
@ -190,7 +190,7 @@ mod v010 {
|
||||||
use garage_util::crdt::{Lww, LwwMap};
|
use garage_util::crdt::{Lww, LwwMap};
|
||||||
use garage_util::data::{Hash, Uuid};
|
use garage_util::data::{Hash, Uuid};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::BTreeMap;
|
||||||
pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy};
|
pub use v09::{LayoutParameters, NodeRole, NodeRoleV, ZoneRedundancy};
|
||||||
|
|
||||||
/// The layout of the cluster, i.e. the list of roles
|
/// The layout of the cluster, i.e. the list of roles
|
||||||
|
@ -257,7 +257,7 @@ mod v010 {
|
||||||
|
|
||||||
/// The history of cluster layouts
|
/// The history of cluster layouts
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
|
#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq)]
|
||||||
pub struct UpdateTracker(pub HashMap<Uuid, u64>);
|
pub struct UpdateTracker(pub BTreeMap<Uuid, u64>);
|
||||||
|
|
||||||
impl garage_util::migrate::Migrate for LayoutHistory {
|
impl garage_util::migrate::Migrate for LayoutHistory {
|
||||||
const VERSION_MARKER: &'static [u8] = b"G010lh";
|
const VERSION_MARKER: &'static [u8] = b"G010lh";
|
||||||
|
@ -278,7 +278,7 @@ mod v010 {
|
||||||
version
|
version
|
||||||
.nongateway_nodes()
|
.nongateway_nodes()
|
||||||
.map(|x| (x, version.version))
|
.map(|x| (x, version.version))
|
||||||
.collect::<HashMap<Uuid, u64>>(),
|
.collect::<BTreeMap<Uuid, u64>>(),
|
||||||
);
|
);
|
||||||
let staging = LayoutStaging {
|
let staging = LayoutStaging {
|
||||||
parameters: previous.staging_parameters,
|
parameters: previous.staging_parameters,
|
||||||
|
|
Loading…
Reference in a new issue