feat(tvix/castore): add RedbDirectoryService

This provides a DirectoryService implementation which uses
redb (https://github.com/cberner/redb) as the database. It provides both
in-memory and persistent on-filesystem implementations.

Change-Id: Id8f7c812e2cf401cccd1c382b19907b17a6887bc
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12038
Tested-by: BuildkiteCI
Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Ilan Joselevich 2024-07-26 22:46:24 +02:00 committed by clbot
parent 87d4b00ff5
commit 41dc9ee6a2
6 changed files with 341 additions and 0 deletions

View file

@ -26,6 +26,11 @@ impl From<B3Digest> for bytes::Bytes {
}
}
impl From<blake3::Hash> for B3Digest {
fn from(value: blake3::Hash) -> Self {
Self(Bytes::copy_from_slice(value.as_bytes()))
}
}
impl From<digest::Output<blake3::Hasher>> for B3Digest {
fn from(value: digest::Output<blake3::Hasher>) -> Self {
let v = Into::<[u8; B3_LEN]>::into(value);
@ -67,6 +72,12 @@ impl From<&[u8; B3_LEN]> for B3Digest {
}
}
impl From<B3Digest> for [u8; B3_LEN] {
fn from(value: B3Digest) -> Self {
value.0.to_vec().try_into().unwrap()
}
}
impl Clone for B3Digest {
fn clone(&self) -> Self {
Self(self.0.to_owned())