From 44a1089d9569b442c098c2ceebb3f691816e52d2 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Thu, 23 Apr 2020 18:16:33 +0000 Subject: Make table objects slightly more fool-proof; add key table --- src/store/object_table.rs | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) (limited to 'src/store/object_table.rs') diff --git a/src/store/object_table.rs b/src/store/object_table.rs index 97de0cdb..f329a7f4 100644 --- a/src/store/object_table.rs +++ b/src/store/object_table.rs @@ -20,7 +20,38 @@ pub struct Object { pub key: String, // Data - pub versions: Vec>, + versions: Vec, +} + +impl Object { + pub fn new(bucket: String, key: String, versions: Vec) -> Self { + let mut ret = Self { + bucket, + key, + versions: vec![], + }; + for v in versions { + ret.add_version(v) + .expect("Twice the same ObjectVersion in Object constructor"); + } + ret + } + /// Adds a version if it wasn't already present + pub fn add_version(&mut self, new: ObjectVersion) -> Result<(), ()> { + match self + .versions + .binary_search_by(|v| v.cmp_key().cmp(&new.cmp_key())) + { + Err(i) => { + self.versions.insert(i, new); + Ok(()) + } + Ok(_) => Err(()), + } + } + pub fn versions(&self) -> &[ObjectVersion] { + &self.versions[..] + } } #[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] @@ -113,13 +144,13 @@ impl TableSchema for ObjectTable { .binary_search_by(|nv| nv.cmp_key().cmp(&v.cmp_key())) .is_err() { - let deleted_version = Version { - uuid: v.uuid, - deleted: true, - blocks: vec![], - bucket: old_v.bucket.clone(), - key: old_v.key.clone(), - }; + let deleted_version = Version::new( + v.uuid, + old_v.bucket.clone(), + old_v.key.clone(), + true, + vec![], + ); version_table.insert(&deleted_version).await?; } } -- cgit v1.2.3