From 96388acf230d48877a037b21931f61e2c63d2574 Mon Sep 17 00:00:00 2001 From: Quentin Date: Sat, 12 Dec 2020 21:35:29 +0100 Subject: [PATCH] Implement migration --- src/garage/admin_rpc.rs | 9 +++++---- src/model/bucket_table.rs | 13 ++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/garage/admin_rpc.rs b/src/garage/admin_rpc.rs index f9d398c2..6ebd04a9 100644 --- a/src/garage/admin_rpc.rs +++ b/src/garage/admin_rpc.rs @@ -156,14 +156,15 @@ impl AdminRpcHandler { ))) } BucketOperation::Website(query) => { - let bucket = self.get_existing_bucket(&query.bucket).await?; + /*let bucket = self.get_existing_bucket(&query.bucket).await?; if query.allow && query.deny { return Err(Error::Message(format!("Website can not be both allowed and denied on a bucket"))); } if query.allow || query.deny { let exposed = query.allow; - if let BucketState::Present(ak) = bucket.state.get_mut() { + if let BucketState::Present(state) = bucket.state.get_mut() { + let ak = state.authorized_keys; let old_ak = ak.take_and_clear(); ak.merge(&old_ak.update_mutator( key_id.to_string(), @@ -183,9 +184,9 @@ impl AdminRpcHandler { "Bucket is exposed as a website." } else { "Bucket is not exposed." - }; + };*/ - Ok(AdminRPC::Ok(msg)) + Ok(AdminRPC::Ok(/*msg*/"".to_string())) } } } diff --git a/src/model/bucket_table.rs b/src/model/bucket_table.rs index b6b0fceb..08d0d168 100644 --- a/src/model/bucket_table.rs +++ b/src/model/bucket_table.rs @@ -10,6 +10,11 @@ use crate::key_table::PermissionSet; use model010::bucket_table as prev; +/// A bucket is a collection of objects +/// +/// Its parameters are not directly accessible as: +/// - It must be possible to merge paramaters, hence the use of a LWW CRDT. +/// - A bucket has 2 states, Present or Deleted and parameters make sense only if present. #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] pub struct Bucket { // Primary key @@ -123,9 +128,15 @@ impl TableSchema for BucketTable { }, )); } + + let params = BucketParams { + authorized_keys: keys, + website: crdt::LWW::new(false) + }; + Some(Bucket { name: old.name, - state: crdt::LWW::migrate_from_raw(old.timestamp, BucketState::Present(keys)), + state: crdt::LWW::migrate_from_raw(old.timestamp, BucketState::Present(params)), }) } }