aboutsummaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
authorQuentin <quentin@deuxfleurs.fr>2020-12-12 17:00:31 +0100
committerQuentin <quentin@deuxfleurs.fr>2020-12-12 17:00:31 +0100
commite1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5 (patch)
treed5a5b5038df8b3c0554b967e5d54f8d7f7659ea8 /src/model
parent1119d466e762b6fe11eb939811c4f24b27a0404f (diff)
downloadgarage-e1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5.tar.gz
garage-e1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5.zip
WIP table migration
Diffstat (limited to 'src/model')
-rw-r--r--src/model/bucket_table.rs28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/model/bucket_table.rs b/src/model/bucket_table.rs
index b7f24d71..b6b0fceb 100644
--- a/src/model/bucket_table.rs
+++ b/src/model/bucket_table.rs
@@ -21,27 +21,43 @@ pub struct Bucket {
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
pub enum BucketState {
Deleted,
- Present(crdt::LWWMap<String, PermissionSet>),
+ Present(BucketParams),
}
impl CRDT for BucketState {
fn merge(&mut self, o: &Self) {
match o {
BucketState::Deleted => *self = BucketState::Deleted,
- BucketState::Present(other_ak) => {
- if let BucketState::Present(ak) = self {
- ak.merge(other_ak);
+ BucketState::Present(other_params) => {
+ if let BucketState::Present(params) = self {
+ params.merge(other_params);
}
}
}
}
}
+#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
+pub struct BucketParams {
+ pub authorized_keys: crdt::LWWMap<String, PermissionSet>,
+ pub website: crdt::LWW<bool>
+}
+
+impl CRDT for BucketParams {
+ fn merge(&mut self, o: &Self) {
+ self.authorized_keys.merge(&o.authorized_keys);
+ self.website.merge(&o.website);
+ }
+}
+
impl Bucket {
pub fn new(name: String) -> Self {
Bucket {
name,
- state: crdt::LWW::new(BucketState::Present(crdt::LWWMap::new())),
+ state: crdt::LWW::new(BucketState::Present(BucketParams {
+ authorized_keys: crdt::LWWMap::new(),
+ website: crdt::LWW::new(false)
+ })),
}
}
pub fn is_deleted(&self) -> bool {
@@ -50,7 +66,7 @@ impl Bucket {
pub fn authorized_keys(&self) -> &[(String, u64, PermissionSet)] {
match self.state.get() {
BucketState::Deleted => &[],
- BucketState::Present(ak) => ak.items(),
+ BucketState::Present(state) => state.authorized_keys.items(),
}
}
}