aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin <quentin@deuxfleurs.fr>2020-12-12 21:35:29 +0100
committerQuentin <quentin@deuxfleurs.fr>2020-12-12 21:35:29 +0100
commit96388acf230d48877a037b21931f61e2c63d2574 (patch)
tree091b48fd2ec868abe38afde891dd2c22df6eddaf
parente1ce2b228aaacd5984bf4e1b73a0a6c1276f78e5 (diff)
downloadgarage-96388acf230d48877a037b21931f61e2c63d2574.tar.gz
garage-96388acf230d48877a037b21931f61e2c63d2574.zip
Implement migration
-rw-r--r--src/garage/admin_rpc.rs9
-rw-r--r--src/model/bucket_table.rs13
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)),
})
}
}