remove rkyv
This commit is contained in:
		@@ -195,15 +195,6 @@ impl TableDB {
 | 
			
		||||
        db.write(dbt).await.map_err(VeilidAPIError::generic)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Store a key in rkyv format with a value in a column in the TableDB. Performs a single transaction immediately.
 | 
			
		||||
    pub async fn store_rkyv<T>(&self, col: u32, key: &[u8], value: &T) -> VeilidAPIResult<()>
 | 
			
		||||
    where
 | 
			
		||||
        T: RkyvSerialize<DefaultVeilidRkyvSerializer>,
 | 
			
		||||
    {
 | 
			
		||||
        let value = to_rkyv(value)?;
 | 
			
		||||
        self.store(col, key, &value).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Store a key in json format with a value in a column in the TableDB. Performs a single transaction immediately.
 | 
			
		||||
    pub async fn store_json<T>(&self, col: u32, key: &[u8], value: &T) -> VeilidAPIResult<()>
 | 
			
		||||
    where
 | 
			
		||||
@@ -230,21 +221,6 @@ impl TableDB {
 | 
			
		||||
            .map(|v| self.maybe_decrypt(&v)))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Read an rkyv key from a column in the TableDB immediately
 | 
			
		||||
    pub async fn load_rkyv<T>(&self, col: u32, key: &[u8]) -> VeilidAPIResult<Option<T>>
 | 
			
		||||
    where
 | 
			
		||||
        T: RkyvArchive,
 | 
			
		||||
        <T as RkyvArchive>::Archived:
 | 
			
		||||
            for<'t> CheckBytes<rkyv::validation::validators::DefaultValidator<'t>>,
 | 
			
		||||
        <T as RkyvArchive>::Archived: RkyvDeserialize<T, VeilidSharedDeserializeMap>,
 | 
			
		||||
    {
 | 
			
		||||
        let out = match self.load(col, key).await? {
 | 
			
		||||
            Some(v) => Some(from_rkyv(v)?),
 | 
			
		||||
            None => None,
 | 
			
		||||
        };
 | 
			
		||||
        Ok(out)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Read an serde-json key from a column in the TableDB immediately
 | 
			
		||||
    pub async fn load_json<T>(&self, col: u32, key: &[u8]) -> VeilidAPIResult<Option<T>>
 | 
			
		||||
    where
 | 
			
		||||
@@ -276,21 +252,6 @@ impl TableDB {
 | 
			
		||||
        Ok(old_value)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Delete rkyv key with from a column in the TableDB
 | 
			
		||||
    pub async fn delete_rkyv<T>(&self, col: u32, key: &[u8]) -> VeilidAPIResult<Option<T>>
 | 
			
		||||
    where
 | 
			
		||||
        T: RkyvArchive,
 | 
			
		||||
        <T as RkyvArchive>::Archived:
 | 
			
		||||
            for<'t> CheckBytes<rkyv::validation::validators::DefaultValidator<'t>>,
 | 
			
		||||
        <T as RkyvArchive>::Archived: RkyvDeserialize<T, VeilidSharedDeserializeMap>,
 | 
			
		||||
    {
 | 
			
		||||
        let old_value = match self.delete(col, key).await? {
 | 
			
		||||
            Some(v) => Some(from_rkyv(v)?),
 | 
			
		||||
            None => None,
 | 
			
		||||
        };
 | 
			
		||||
        Ok(old_value)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Delete serde-json key with from a column in the TableDB
 | 
			
		||||
    pub async fn delete_json<T>(&self, col: u32, key: &[u8]) -> VeilidAPIResult<Option<T>>
 | 
			
		||||
    where
 | 
			
		||||
@@ -377,16 +338,7 @@ impl TableDBTransaction {
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Store a key in rkyv format with a value in a column in the TableDB
 | 
			
		||||
    pub fn store_rkyv<T>(&self, col: u32, key: &[u8], value: &T) -> VeilidAPIResult<()>
 | 
			
		||||
    where
 | 
			
		||||
        T: RkyvSerialize<DefaultVeilidRkyvSerializer>,
 | 
			
		||||
    {
 | 
			
		||||
        let value = to_rkyv(value)?;
 | 
			
		||||
        self.store(col, key, &value)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Store a key in rkyv format with a value in a column in the TableDB
 | 
			
		||||
    /// Store a key in json format with a value in a column in the TableDB
 | 
			
		||||
    pub fn store_json<T>(&self, col: u32, key: &[u8], value: &T) -> VeilidAPIResult<()>
 | 
			
		||||
    where
 | 
			
		||||
        T: serde::Serialize,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
use super::*;
 | 
			
		||||
use keyvaluedb::*;
 | 
			
		||||
 | 
			
		||||
const ALL_TABLE_NAMES: &[u8] = b"all_table_names";
 | 
			
		||||
 | 
			
		||||
struct TableStoreInner {
 | 
			
		||||
    opened: BTreeMap<String, Weak<TableDBUnlockedInner>>,
 | 
			
		||||
    encryption_key: Option<TypedSharedSecret>,
 | 
			
		||||
@@ -52,12 +54,11 @@ impl TableStore {
 | 
			
		||||
    async fn flush(&self) {
 | 
			
		||||
        let (all_table_names_value, all_tables_db) = {
 | 
			
		||||
            let inner = self.inner.lock();
 | 
			
		||||
            let all_table_names_value =
 | 
			
		||||
                to_rkyv(&inner.all_table_names).expect("failed to archive all_table_names");
 | 
			
		||||
            let all_table_names_value = serialize_json_bytes(&inner.all_table_names);
 | 
			
		||||
            (all_table_names_value, inner.all_tables_db.clone().unwrap())
 | 
			
		||||
        };
 | 
			
		||||
        let mut dbt = DBTransaction::new();
 | 
			
		||||
        dbt.put(0, b"all_table_names", &all_table_names_value);
 | 
			
		||||
        dbt.put(0, ALL_TABLE_NAMES, &all_table_names_value);
 | 
			
		||||
        if let Err(e) = all_tables_db.write(dbt).await {
 | 
			
		||||
            error!("failed to write all tables db: {}", e);
 | 
			
		||||
        }
 | 
			
		||||
@@ -373,8 +374,8 @@ impl TableStore {
 | 
			
		||||
            .open("__veilid_all_tables", 1)
 | 
			
		||||
            .await
 | 
			
		||||
            .wrap_err("failed to create all tables table")?;
 | 
			
		||||
        match all_tables_db.get(0, b"all_table_names").await {
 | 
			
		||||
            Ok(Some(v)) => match from_rkyv::<HashMap<String, String>>(v) {
 | 
			
		||||
        match all_tables_db.get(0, ALL_TABLE_NAMES).await {
 | 
			
		||||
            Ok(Some(v)) => match deserialize_json_bytes::<HashMap<String, String>>(&v) {
 | 
			
		||||
                Ok(all_table_names) => {
 | 
			
		||||
                    let mut inner = self.inner.lock();
 | 
			
		||||
                    inner.all_table_names = all_table_names;
 | 
			
		||||
 
 | 
			
		||||
@@ -145,7 +145,6 @@ pub async fn test_transaction(ts: TableStore) {
 | 
			
		||||
    let tx = db.transact();
 | 
			
		||||
    assert!(tx.store(0, b"aaa", b"a-value").is_ok());
 | 
			
		||||
    assert!(tx.store_json(1, b"bbb", &"b-value".to_owned()).is_ok());
 | 
			
		||||
    assert!(tx.store_rkyv(2, b"ccc", &"c-value".to_owned()).is_ok());
 | 
			
		||||
    assert!(tx.store(3, b"ddd", b"d-value").is_err());
 | 
			
		||||
    assert!(tx.store(0, b"ddd", b"d-value").is_ok());
 | 
			
		||||
    assert!(tx.delete(0, b"ddd").is_ok());
 | 
			
		||||
@@ -160,51 +159,9 @@ pub async fn test_transaction(ts: TableStore) {
 | 
			
		||||
        db.load_json::<String>(1, b"bbb").await,
 | 
			
		||||
        Ok(Some("b-value".to_owned()))
 | 
			
		||||
    );
 | 
			
		||||
    assert_eq!(
 | 
			
		||||
        db.load_rkyv::<String>(2, b"ccc").await,
 | 
			
		||||
        Ok(Some("c-value".to_owned()))
 | 
			
		||||
    );
 | 
			
		||||
    assert_eq!(db.load(0, b"ddd").await, Ok(None));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn test_rkyv(vcrypto: CryptoSystemVersion, ts: TableStore) {
 | 
			
		||||
    trace!("test_rkyv");
 | 
			
		||||
 | 
			
		||||
    let _ = ts.delete("test");
 | 
			
		||||
    let db = ts.open("test", 3).await.expect("should have opened");
 | 
			
		||||
    let keypair = vcrypto.generate_keypair();
 | 
			
		||||
 | 
			
		||||
    assert!(db.store_rkyv(0, b"asdf", &keypair).await.is_ok());
 | 
			
		||||
 | 
			
		||||
    assert_eq!(db.load_rkyv::<KeyPair>(0, b"qwer").await.unwrap(), None);
 | 
			
		||||
 | 
			
		||||
    let d = match db.load_rkyv::<KeyPair>(0, b"asdf").await {
 | 
			
		||||
        Ok(x) => x,
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            panic!("couldn't decode: {}", e);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    assert_eq!(d, Some(keypair), "keys should be equal");
 | 
			
		||||
 | 
			
		||||
    let d = match db.delete_rkyv::<KeyPair>(0, b"asdf").await {
 | 
			
		||||
        Ok(x) => x,
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            panic!("couldn't decode: {}", e);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    assert_eq!(d, Some(keypair), "keys should be equal");
 | 
			
		||||
 | 
			
		||||
    assert!(
 | 
			
		||||
        db.store(1, b"foo", b"1234567890").await.is_ok(),
 | 
			
		||||
        "should store new key"
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    assert!(
 | 
			
		||||
        db.load_rkyv::<TypedKey>(1, b"foo").await.is_err(),
 | 
			
		||||
        "should fail to unfreeze"
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn test_json(vcrypto: CryptoSystemVersion, ts: TableStore) {
 | 
			
		||||
    trace!("test_json");
 | 
			
		||||
 | 
			
		||||
@@ -304,7 +261,6 @@ pub async fn test_all() {
 | 
			
		||||
        test_delete_open_delete(ts.clone()).await;
 | 
			
		||||
        test_store_delete_load(ts.clone()).await;
 | 
			
		||||
        test_transaction(ts.clone()).await;
 | 
			
		||||
        test_rkyv(vcrypto.clone(), ts.clone()).await;
 | 
			
		||||
        test_json(vcrypto, ts.clone()).await;
 | 
			
		||||
        let _ = ts.delete("test").await;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user