aboutsummaryrefslogtreecommitdiff
path: root/src/rpc/system.rs
diff options
context:
space:
mode:
authorMendes <mendes.oulamara@pm.me>2022-09-21 14:39:59 +0200
committerMendes <mendes.oulamara@pm.me>2022-09-21 14:39:59 +0200
commit7f3249a23770fd4da981c2ecb1126da97e9b4ca5 (patch)
tree93d3dec24948a8dcd5cf42b2889f67c414a9bf42 /src/rpc/system.rs
parentc4adbeed515c571369453d23c7f1d84b1db994ec (diff)
downloadgarage-7f3249a23770fd4da981c2ecb1126da97e9b4ca5.tar.gz
garage-7f3249a23770fd4da981c2ecb1126da97e9b4ca5.zip
New version of the algorithm that calculate the layout.
It takes as paramters the replication factor and the zone redundancy, computes the largest partition size reachable with these constraints, and among the possible assignation with this partition size, it computes the one that moves the least number of partitions compared to the previous assignation. This computation uses graph algorithms defined in graph_algo.rs
Diffstat (limited to 'src/rpc/system.rs')
-rw-r--r--src/rpc/system.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/rpc/system.rs b/src/rpc/system.rs
index 68d94ea5..313671ca 100644
--- a/src/rpc/system.rs
+++ b/src/rpc/system.rs
@@ -97,6 +97,7 @@ pub struct System {
kubernetes_discovery: Option<KubernetesDiscoveryParam>,
replication_factor: usize,
+ zone_redundancy: usize,
/// The ring
pub ring: watch::Receiver<Arc<Ring>>,
@@ -192,6 +193,7 @@ impl System {
network_key: NetworkKey,
background: Arc<BackgroundRunner>,
replication_factor: usize,
+ zone_redundancy: usize,
config: &Config,
) -> Arc<Self> {
let node_key =
@@ -211,7 +213,7 @@ impl System {
"No valid previous cluster layout stored ({}), starting fresh.",
e
);
- ClusterLayout::new(replication_factor)
+ ClusterLayout::new(replication_factor, zone_redundancy)
}
};
@@ -285,6 +287,7 @@ impl System {
rpc: RpcHelper::new(netapp.id.into(), fullmesh, background.clone(), ring.clone()),
system_endpoint,
replication_factor,
+ zone_redundancy,
rpc_listen_addr: config.rpc_bind_addr,
rpc_public_addr,
bootstrap_peers: config.bootstrap_peers.clone(),