New multipart upload table layout

This commit is contained in:
Alex Auvolat
2023-04-27 17:57:54 +02:00
parent 6005491cd8
commit 38d6ac4295
8 changed files with 468 additions and 34 deletions
+12
View File
@@ -8,6 +8,8 @@ use garage_util::migrate::Migrate;
use crate::crdt::Crdt;
// =================================== PARTITION KEYS
/// Trait for field used to partition data
pub trait PartitionKey:
Clone + PartialEq + Serialize + for<'de> Deserialize<'de> + Send + Sync + 'static
@@ -31,6 +33,8 @@ impl PartitionKey for FixedBytes32 {
}
}
// =================================== SORT KEYS
/// Trait for field used to sort data
pub trait SortKey: Clone + Serialize + for<'de> Deserialize<'de> + Send + Sync + 'static {
/// Get the key used to sort
@@ -49,6 +53,14 @@ impl SortKey for FixedBytes32 {
}
}
impl SortKey for u32 {
fn sort_key(&self) -> Cow<'_, [u8]> {
Cow::from(u32::to_be_bytes(*self).to_vec())
}
}
// =================================== SCHEMA
/// Trait for an entry in a table. It must be sortable and partitionnable.
pub trait Entry<P: PartitionKey, S: SortKey>:
Crdt + PartialEq + Clone + Migrate + Send + Sync + 'static