diff options
author | Alex Auvolat <alex@adnab.me> | 2021-03-11 16:54:15 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2021-03-11 16:54:15 +0100 |
commit | 94f3d287742ff90f179f528421c690b00b71a912 (patch) | |
tree | 9269d537da06d609cdc42cba8d9ab3c67d0650b9 /src/table/replication/parameters.rs | |
parent | 8d63738cb062e816fc01c6aa2b32936ad31ff65b (diff) | |
download | garage-94f3d287742ff90f179f528421c690b00b71a912.tar.gz garage-94f3d287742ff90f179f528421c690b00b71a912.zip |
WIP big refactoring
Diffstat (limited to 'src/table/replication/parameters.rs')
-rw-r--r-- | src/table/replication/parameters.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/table/replication/parameters.rs b/src/table/replication/parameters.rs new file mode 100644 index 00000000..4607b050 --- /dev/null +++ b/src/table/replication/parameters.rs @@ -0,0 +1,22 @@ +use garage_rpc::membership::System; +use garage_rpc::ring::Ring; + +use garage_util::data::*; + +pub trait TableReplication: Send + Sync { + // See examples in table_sharded.rs and table_fullcopy.rs + // To understand various replication methods + + // Which nodes to send reads from + fn read_nodes(&self, hash: &Hash, system: &System) -> Vec<UUID>; + fn read_quorum(&self) -> usize; + + // Which nodes to send writes to + fn write_nodes(&self, hash: &Hash, system: &System) -> Vec<UUID>; + fn write_quorum(&self, system: &System) -> usize; + fn max_write_errors(&self) -> usize; + + // Which are the nodes that do actually replicate the data + fn replication_nodes(&self, hash: &Hash, ring: &Ring) -> Vec<UUID>; + fn split_points(&self, ring: &Ring) -> Vec<Hash>; +} |