forked from Deuxfleurs/garage
bucket_table: data model for lifecycle configuration
This commit is contained in:
parent
2e90e1c124
commit
0b83e0558e
2 changed files with 41 additions and 0 deletions
|
@ -48,6 +48,9 @@ mod v08 {
|
||||||
pub website_config: crdt::Lww<Option<WebsiteConfig>>,
|
pub website_config: crdt::Lww<Option<WebsiteConfig>>,
|
||||||
/// CORS rules
|
/// CORS rules
|
||||||
pub cors_config: crdt::Lww<Option<Vec<CorsRule>>>,
|
pub cors_config: crdt::Lww<Option<Vec<CorsRule>>>,
|
||||||
|
/// Lifecycle configuration
|
||||||
|
#[serde(default)]
|
||||||
|
pub lifecycle_config: crdt::Lww<Option<Vec<LifecycleRule>>>,
|
||||||
/// Bucket quotas
|
/// Bucket quotas
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub quotas: crdt::Lww<BucketQuotas>,
|
pub quotas: crdt::Lww<BucketQuotas>,
|
||||||
|
@ -69,6 +72,42 @@ mod v08 {
|
||||||
pub expose_headers: Vec<String>,
|
pub expose_headers: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Lifecycle configuration rule
|
||||||
|
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)]
|
||||||
|
pub struct LifecycleRule {
|
||||||
|
/// The ID of the rule
|
||||||
|
pub id: Option<String>,
|
||||||
|
/// Whether the rule is active
|
||||||
|
pub enabled: bool,
|
||||||
|
/// The filter to check whether rule applies to a given object
|
||||||
|
pub filter: LifecycleFilter,
|
||||||
|
/// Number of days after which incomplete multipart uploads are aborted
|
||||||
|
pub abort_incomplete_mpu_days: Option<usize>,
|
||||||
|
/// Expiration policy for stored objects
|
||||||
|
pub expiration: Option<LifecycleExpiration>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A lifecycle filter is a set of conditions that must all be true.
|
||||||
|
/// For each condition, if it is None, it is not verified (always true),
|
||||||
|
/// and if it is Some(x), then it is verified for value x
|
||||||
|
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)]
|
||||||
|
pub struct LifecycleFilter {
|
||||||
|
/// If Some(x), object key has to start with prefix x
|
||||||
|
pub prefix: Option<String>,
|
||||||
|
/// If Some(x), object size has to be more than x
|
||||||
|
pub size_gt: Option<usize>,
|
||||||
|
/// If Some(x), object size has to be less than x
|
||||||
|
pub size_lt: Option<usize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)]
|
||||||
|
pub enum LifecycleExpiration {
|
||||||
|
/// Objects expire x days after they were created
|
||||||
|
AfterDays(usize),
|
||||||
|
/// Objects expire at date x (must be in yyyy-mm-dd format)
|
||||||
|
AtDate(String),
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default, PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)]
|
#[derive(Default, PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)]
|
||||||
pub struct BucketQuotas {
|
pub struct BucketQuotas {
|
||||||
/// Maximum size in bytes (bucket size = sum of sizes of objects in the bucket)
|
/// Maximum size in bytes (bucket size = sum of sizes of objects in the bucket)
|
||||||
|
@ -96,6 +135,7 @@ impl BucketParams {
|
||||||
local_aliases: crdt::LwwMap::new(),
|
local_aliases: crdt::LwwMap::new(),
|
||||||
website_config: crdt::Lww::new(None),
|
website_config: crdt::Lww::new(None),
|
||||||
cors_config: crdt::Lww::new(None),
|
cors_config: crdt::Lww::new(None),
|
||||||
|
lifecycle_config: crdt::Lww::new(None),
|
||||||
quotas: crdt::Lww::new(BucketQuotas::default()),
|
quotas: crdt::Lww::new(BucketQuotas::default()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ impl Migrate {
|
||||||
local_aliases: LwwMap::new(),
|
local_aliases: LwwMap::new(),
|
||||||
website_config: Lww::new(website),
|
website_config: Lww::new(website),
|
||||||
cors_config: Lww::new(None),
|
cors_config: Lww::new(None),
|
||||||
|
lifecycle_config: Lww::new(None),
|
||||||
quotas: Lww::new(Default::default()),
|
quotas: Lww::new(Default::default()),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue