aboutsummaryrefslogtreecommitdiff
path: root/src/model/migrate.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2021-12-17 11:53:13 +0100
committerAlex Auvolat <alex@adnab.me>2022-01-04 12:46:41 +0100
commitb1cfd16913e6957739958ef729b87c1bf3674a5d (patch)
tree781245de967e0c7a14cbdc0f2a610787f3b852d4 /src/model/migrate.rs
parent5db600e2316b80102e3fd4df9e8974c9586aec9c (diff)
downloadgarage-b1cfd16913e6957739958ef729b87c1bf3674a5d.tar.gz
garage-b1cfd16913e6957739958ef729b87c1bf3674a5d.zip
New buckets for 0.6.0: small fixes, including:
- ensure bucket names are correct aws s3 names - when making aliases, ensure timestamps of links in both ways are the same - fix small remarks by trinity - don't have a separate website_access field
Diffstat (limited to 'src/model/migrate.rs')
-rw-r--r--src/model/migrate.rs32
1 files changed, 22 insertions, 10 deletions
diff --git a/src/model/migrate.rs b/src/model/migrate.rs
index 35ff1807..e4469e64 100644
--- a/src/model/migrate.rs
+++ b/src/model/migrate.rs
@@ -1,5 +1,7 @@
use std::sync::Arc;
+use serde_bytes::ByteBuf;
+
use garage_table::util::EmptyKey;
use garage_util::crdt::*;
use garage_util::data::*;
@@ -38,6 +40,16 @@ impl Migrate {
old_bucket: &old_bucket::Bucket,
old_bucket_p: &old_bucket::BucketParams,
) -> Result<(), Error> {
+ let bucket_id = blake2sum(old_bucket.name.as_bytes());
+
+ let new_name = if is_valid_bucket_name(&old_bucket.name) {
+ old_bucket.name.clone()
+ } else {
+ // if old bucket name was not valid, replace it by
+ // a hex-encoded name derived from its identifier
+ hex::encode(&bucket_id.as_slice()[..16])
+ };
+
let mut new_ak = Map::new();
for (k, ts, perm) in old_bucket_p.authorized_keys.items().iter() {
new_ak.put(
@@ -52,27 +64,27 @@ impl Migrate {
}
let mut aliases = LwwMap::new();
- aliases.update_in_place(old_bucket.name.clone(), true);
+ aliases.update_in_place(new_name.clone(), true);
+
+ let website = if *old_bucket_p.website.get() {
+ Some(ByteBuf::from(DEFAULT_WEBSITE_CONFIGURATION.to_vec()))
+ } else {
+ None
+ };
let new_bucket = Bucket {
- id: blake2sum(old_bucket.name.as_bytes()),
+ id: bucket_id,
state: Deletable::Present(BucketParams {
creation_date: now_msec(),
authorized_keys: new_ak.clone(),
- website_access: Lww::new(*old_bucket_p.website.get()),
- website_config: Lww::new(None),
+ website_config: Lww::new(website),
aliases,
local_aliases: LwwMap::new(),
}),
};
self.garage.bucket_table.insert(&new_bucket).await?;
- let new_alias = BucketAlias {
- name: old_bucket.name.clone(),
- state: Lww::new(Deletable::Present(AliasParams {
- bucket_id: new_bucket.id,
- })),
- };
+ let new_alias = BucketAlias::new(new_name.clone(), new_bucket.id).unwrap();
self.garage.bucket_alias_table.insert(&new_alias).await?;
for (k, perm) in new_ak.items().iter() {