diff options
author | Alex Auvolat <alex@adnab.me> | 2020-04-10 23:11:52 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2020-04-10 23:11:52 +0200 |
commit | cf8fd948fc4bb6a9f48100ebf89df3752371805d (patch) | |
tree | 77fcb45f80ab75da2e5cdf520a50ab7192f9e25c /src/block_ref_table.rs | |
parent | ff4fb9756810abeff17c360f3055c3865160b240 (diff) | |
download | garage-cf8fd948fc4bb6a9f48100ebf89df3752371805d.tar.gz garage-cf8fd948fc4bb6a9f48100ebf89df3752371805d.zip |
Add block ref table
Diffstat (limited to 'src/block_ref_table.rs')
-rw-r--r-- | src/block_ref_table.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/block_ref_table.rs b/src/block_ref_table.rs new file mode 100644 index 00000000..9ba87f0c --- /dev/null +++ b/src/block_ref_table.rs @@ -0,0 +1,51 @@ +use async_trait::async_trait; +use serde::{Deserialize, Serialize}; +use std::sync::Arc; +use tokio::sync::RwLock; + +use crate::data::*; +use crate::server::Garage; +use crate::table::*; + +#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)] +pub struct BlockRef { + // Primary key + pub block: Hash, + + // Sort key + pub version: UUID, + + // Keep track of deleted status + pub deleted: bool, +} + +impl Entry<Hash, UUID> for BlockRef { + fn partition_key(&self) -> &Hash { + &self.block + } + fn sort_key(&self) -> &UUID { + &self.version + } + + fn merge(&mut self, other: &Self) { + if other.deleted { + self.deleted = true; + } + } +} + +pub struct BlockRefTable { + pub garage: RwLock<Option<Arc<Garage>>>, +} + +#[async_trait] +impl TableFormat for BlockRefTable { + type P = Hash; + type S = UUID; + type E = BlockRef; + + async fn updated(&self, old: Option<&Self::E>, new: &Self::E) { + //unimplemented!() + // TODO + } +} |