aboutsummaryrefslogtreecommitdiff
path: root/src/model/bucket_helper.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2021-12-14 13:55:11 +0100
committerAlex Auvolat <alex@adnab.me>2022-01-04 12:45:46 +0100
commit5b1117e582db16cc5aa50840a685875cbd5501f4 (patch)
tree06fec47bf56cb08cb51334454dc15f98352c98f2 /src/model/bucket_helper.rs
parent8f6026de5ecd44cbe0fc0bcd47638a1ece860439 (diff)
downloadgarage-5b1117e582db16cc5aa50840a685875cbd5501f4.tar.gz
garage-5b1117e582db16cc5aa50840a685875cbd5501f4.zip
New model for buckets
Diffstat (limited to 'src/model/bucket_helper.rs')
-rw-r--r--src/model/bucket_helper.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/model/bucket_helper.rs b/src/model/bucket_helper.rs
new file mode 100644
index 00000000..e0720b4e
--- /dev/null
+++ b/src/model/bucket_helper.rs
@@ -0,0 +1,41 @@
+use garage_util::data::*;
+use garage_util::error::*;
+
+use garage_table::util::EmptyKey;
+
+use crate::bucket_table::Bucket;
+use crate::garage::Garage;
+
+pub struct BucketHelper<'a>(pub(crate) &'a Garage);
+
+#[allow(clippy::ptr_arg)]
+impl<'a> BucketHelper<'a> {
+ pub async fn resolve_global_bucket_name(
+ &self,
+ bucket_name: &String,
+ ) -> Result<Option<Uuid>, Error> {
+ Ok(self
+ .0
+ .bucket_alias_table
+ .get(&EmptyKey, bucket_name)
+ .await?
+ .map(|x| x.state.get().as_option().map(|x| x.bucket_id))
+ .flatten())
+ }
+
+ #[allow(clippy::ptr_arg)]
+ pub async fn get_existing_bucket(&self, bucket_id: Uuid) -> Result<Bucket, Error> {
+ self.0
+ .bucket_table
+ .get(&bucket_id, &EmptyKey)
+ .await?
+ .filter(|b| !b.is_deleted())
+ .map(Ok)
+ .unwrap_or_else(|| {
+ Err(Error::BadRpc(format!(
+ "Bucket {:?} does not exist",
+ bucket_id
+ )))
+ })
+ }
+}