forked from Deuxfleurs/garage
Persist peer list to file
This commit is contained in:
parent
1dc7cc7936
commit
2fa65554f1
1 changed files with 17 additions and 5 deletions
|
@ -69,6 +69,7 @@ pub struct System {
|
||||||
pub id: Uuid,
|
pub id: Uuid,
|
||||||
|
|
||||||
persist_config: Persister<NetworkConfig>,
|
persist_config: Persister<NetworkConfig>,
|
||||||
|
persist_peer_list: Persister<Vec<(Uuid, SocketAddr)>>,
|
||||||
|
|
||||||
local_status: ArcSwap<NodeStatus>,
|
local_status: ArcSwap<NodeStatus>,
|
||||||
node_status: RwLock<HashMap<Uuid, (u64, NodeStatus)>>,
|
node_status: RwLock<HashMap<Uuid, (u64, NodeStatus)>>,
|
||||||
|
@ -148,6 +149,7 @@ impl System {
|
||||||
info!("Node public key: {}", hex::encode(&node_key.public_key()));
|
info!("Node public key: {}", hex::encode(&node_key.public_key()));
|
||||||
|
|
||||||
let persist_config = Persister::new(&config.metadata_dir, "network_config");
|
let persist_config = Persister::new(&config.metadata_dir, "network_config");
|
||||||
|
let persist_peer_list = Persister::new(&config.metadata_dir, "peer_list");
|
||||||
|
|
||||||
let net_config = match persist_config.load() {
|
let net_config = match persist_config.load() {
|
||||||
Ok(x) => x,
|
Ok(x) => x,
|
||||||
|
@ -189,6 +191,7 @@ impl System {
|
||||||
let sys = Arc::new(System {
|
let sys = Arc::new(System {
|
||||||
id: netapp.id.into(),
|
id: netapp.id.into(),
|
||||||
persist_config,
|
persist_config,
|
||||||
|
persist_peer_list,
|
||||||
local_status: ArcSwap::new(Arc::new(local_status)),
|
local_status: ArcSwap::new(Arc::new(local_status)),
|
||||||
node_status: RwLock::new(HashMap::new()),
|
node_status: RwLock::new(HashMap::new()),
|
||||||
netapp: netapp.clone(),
|
netapp: netapp.clone(),
|
||||||
|
@ -424,13 +427,12 @@ impl System {
|
||||||
|
|
||||||
let mut ping_list = self.bootstrap_peers.clone();
|
let mut ping_list = self.bootstrap_peers.clone();
|
||||||
|
|
||||||
/*
|
// Add peer list from list stored on disk
|
||||||
*TODO bring this back: persisted list of peers
|
if let Ok(peers) = self.persist_peer_list.load_async().await {
|
||||||
if let Ok(peers) = self.persist_status.load_async().await {
|
ping_list.extend(peers.iter().map(|(id, addr)| ((*id).into(), *addr)))
|
||||||
ping_list.extend(peers.iter().map(|x| (x.addr, Some(x.id))));
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
// Fetch peer list from Consul
|
||||||
if let Some((consul_host, consul_service_name)) = &consul_config {
|
if let Some((consul_host, consul_service_name)) = &consul_config {
|
||||||
match get_consul_nodes(consul_host, consul_service_name).await {
|
match get_consul_nodes(consul_host, consul_service_name).await {
|
||||||
Ok(node_list) => {
|
Ok(node_list) => {
|
||||||
|
@ -447,6 +449,16 @@ impl System {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let peer_list = self
|
||||||
|
.fullmesh
|
||||||
|
.get_peer_list()
|
||||||
|
.iter()
|
||||||
|
.map(|n| (n.id.into(), n.addr))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
if let Err(e) = self.persist_peer_list.save_async(&peer_list).await {
|
||||||
|
warn!("Could not save peer list to file: {}", e);
|
||||||
|
}
|
||||||
|
|
||||||
self.background.spawn(self.clone().advertise_to_consul());
|
self.background.spawn(self.clone().advertise_to_consul());
|
||||||
|
|
||||||
let restart_at = tokio::time::sleep(DISCOVERY_INTERVAL);
|
let restart_at = tokio::time::sleep(DISCOVERY_INTERVAL);
|
||||||
|
|
Loading…
Reference in a new issue