diff --git a/server/src/engine/storage/common_encoding/mod.rs b/server/src/engine/storage/common_encoding/mod.rs new file mode 100644 index 00000000..eaffa549 --- /dev/null +++ b/server/src/engine/storage/common_encoding/mod.rs @@ -0,0 +1,27 @@ +/* + * Created on Sun Feb 11 2024 + * + * This file is a part of Skytable + * Skytable (formerly known as TerrabaseDB or Skybase) is a free and open-source + * NoSQL database written by Sayan Nandan ("the Author") with the + * vision to provide flexibility in data modelling without compromising + * on performance, queryability or scalability. + * + * Copyright (c) 2024, Sayan Nandan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * +*/ + +pub mod r1; diff --git a/server/src/engine/storage/v1/inf/map.rs b/server/src/engine/storage/common_encoding/r1/map.rs similarity index 98% rename from server/src/engine/storage/v1/inf/map.rs rename to server/src/engine/storage/common_encoding/r1/map.rs index 1914eee0..3d7d0010 100644 --- a/server/src/engine/storage/v1/inf/map.rs +++ b/server/src/engine/storage/common_encoding/r1/map.rs @@ -39,7 +39,6 @@ use { error::{RuntimeResult, StorageError}, idx::{IndexSTSeqCns, STIndexSeq}, mem::{BufferedScanner, StatelessLen}, - storage::v1::inf, }, util::{copy_slice_to_array as memcpy, EndianQW}, }, @@ -214,7 +213,7 @@ impl MapStorageSpec for GenericDictSpec { s: &mut BufferedScanner, md: &Self::EntryMetadata, ) -> Option { - inf::dec::utils::decode_string(s, md.klen as usize) + super::dec::utils::decode_string(s, md.klen as usize) .map(|s| s.into_boxed_str()) .ok() } @@ -366,7 +365,7 @@ impl MapStorageSpec for FieldMapSpec { scanner: &mut BufferedScanner, md: &Self::EntryMetadata, ) -> Option { - inf::dec::utils::decode_string(scanner, md.field_id_l as usize) + super::dec::utils::decode_string(scanner, md.field_id_l as usize) .map(|s| s.into_boxed_str()) .ok() } diff --git a/server/src/engine/storage/v1/inf/mod.rs b/server/src/engine/storage/common_encoding/r1/mod.rs similarity index 98% rename from server/src/engine/storage/v1/inf/mod.rs rename to server/src/engine/storage/common_encoding/r1/mod.rs index 8a367b90..4810aba5 100644 --- a/server/src/engine/storage/v1/inf/mod.rs +++ b/server/src/engine/storage/common_encoding/r1/mod.rs @@ -24,7 +24,10 @@ * */ -//! High level interfaces +//! High level interfaces (r1) +//! +//! This is revision 1 of high-level interface encoding. +//! pub mod map; pub mod obj; diff --git a/server/src/engine/storage/v1/inf/obj.rs b/server/src/engine/storage/common_encoding/r1/obj.rs similarity index 98% rename from server/src/engine/storage/v1/inf/obj.rs rename to server/src/engine/storage/common_encoding/r1/obj.rs index 62cb7679..0fa8adcb 100644 --- a/server/src/engine/storage/v1/inf/obj.rs +++ b/server/src/engine/storage/common_encoding/r1/obj.rs @@ -25,7 +25,7 @@ */ use { - super::{PersistObject, VecU8}, + super::{dec, PersistObject, VecU8}, crate::{ engine::{ core::{ @@ -40,7 +40,6 @@ use { error::{RuntimeResult, StorageError}, idx::IndexSTSeqCns, mem::{BufferedScanner, VInline}, - storage::v1::inf, }, util::EndianQW, }, @@ -51,17 +50,16 @@ use { */ pub mod cell { - use crate::{ - engine::{ - data::{ + use { + super::super::{DataSource, VecU8}, + crate::{ + engine::data::{ cell::Datacell, tag::{DataTag, TagClass, TagSelector}, }, - storage::v1::inf::{DataSource, VecU8}, + util::EndianQW, }, - util::EndianQW, }; - #[derive(Debug, PartialEq, Eq, Clone, Copy, PartialOrd, Ord, Hash, sky_macros::EnumMethods)] #[repr(u8)] #[allow(dead_code)] @@ -446,7 +444,7 @@ impl<'a> PersistObject for ModelLayoutRef<'a> { scanner: &mut BufferedScanner, md: Self::Metadata, ) -> RuntimeResult { - let key = inf::dec::utils::decode_string(scanner, md.p_key_len as usize)?; + let key = dec::utils::decode_string(scanner, md.p_key_len as usize)?; let fieldmap = , _>>, > as PersistObject>::obj_dec( diff --git a/server/src/engine/storage/v1/inf/tests.rs b/server/src/engine/storage/common_encoding/r1/tests.rs similarity index 100% rename from server/src/engine/storage/v1/inf/tests.rs rename to server/src/engine/storage/common_encoding/r1/tests.rs diff --git a/server/src/engine/storage/mod.rs b/server/src/engine/storage/mod.rs index 1c083088..e7ea8b0b 100644 --- a/server/src/engine/storage/mod.rs +++ b/server/src/engine/storage/mod.rs @@ -27,6 +27,7 @@ //! Implementations of the Skytable Disk Storage Subsystem (SDSS) mod common; +mod common_encoding; // driver versions pub mod v1; pub mod v2; diff --git a/server/src/engine/storage/v1/impls/gns/mod.rs b/server/src/engine/storage/v1/impls/gns/mod.rs index faa60458..49a15b28 100644 --- a/server/src/engine/storage/v1/impls/gns/mod.rs +++ b/server/src/engine/storage/v1/impls/gns/mod.rs @@ -33,8 +33,8 @@ use { error::{RuntimeResult, TransactionError}, mem::BufferedScanner, storage::{ + common_encoding::r1::{self, PersistObject}, safe_interfaces::{FSInterface, LocalFS}, - v1::inf::{self, PersistObject}, }, txn::{gns, SpaceIDRef}, }, @@ -149,7 +149,7 @@ where type RestoreType; /// Encodes the event into the given buffer fn encode_super_event(commit: Self, buf: &mut Vec) { - inf::enc::enc_full_into_buffer::(buf, commit) + r1::enc::enc_full_into_buffer::(buf, commit) } fn decode_and_update_global_state( scanner: &mut BufferedScanner, @@ -159,7 +159,7 @@ where } /// Attempts to decode the event using the given scanner fn decode(scanner: &mut BufferedScanner) -> RuntimeResult { - inf::dec::dec_full_from_scanner::(scanner).map_err(|e| e.into()) + r1::dec::dec_full_from_scanner::(scanner).map_err(|e| e.into()) } /// Update the global state from the restored event fn update_global_state(restore: Self::RestoreType, gns: &GlobalNS) -> RuntimeResult<()>; @@ -208,7 +208,7 @@ impl<'a> PersistObject for SpaceID<'a> { s: &mut BufferedScanner, md: Self::Metadata, ) -> RuntimeResult { - let str = inf::dec::utils::decode_string(s, md.space_name_l as usize)?; + let str = r1::dec::utils::decode_string(s, md.space_name_l as usize)?; Ok(SpaceIDRes { uuid: md.uuid, name: str.into_boxed_str(), diff --git a/server/src/engine/storage/v1/impls/gns/model.rs b/server/src/engine/storage/v1/impls/gns/model.rs index d2adc78b..4c750c6e 100644 --- a/server/src/engine/storage/v1/impls/gns/model.rs +++ b/server/src/engine/storage/v1/impls/gns/model.rs @@ -37,7 +37,7 @@ use { error::{RuntimeResult, StorageError, TransactionError}, idx::{IndexSTSeqCns, STIndex, STIndexSeq}, mem::BufferedScanner, - storage::v1::inf::{self, map, obj, PersistObject}, + storage::common_encoding::r1::{self, map, obj, PersistObject}, txn::{ gns::model::{ AlterModelAddTxn, AlterModelRemoveTxn, AlterModelUpdateTxn, CreateModelTxn, @@ -117,7 +117,7 @@ impl<'a> PersistObject for ModelID<'a> { ) -> RuntimeResult { Ok(ModelIDRes { space_id: ::obj_dec(s, md.space_id)?, - model_name: inf::dec::utils::decode_string(s, md.model_name_l as usize)? + model_name: r1::dec::utils::decode_string(s, md.model_name_l as usize)? .into_boxed_str(), model_uuid: md.model_uuid, model_version: md.model_version, @@ -241,7 +241,7 @@ impl<'a> PersistObject for CreateModelTxn<'a> { ) -> RuntimeResult { let space_id = ::obj_dec(s, md.space_id_meta)?; let model_name = - inf::dec::utils::decode_string(s, md.model_name_l as usize)?.into_boxed_str(); + r1::dec::utils::decode_string(s, md.model_name_l as usize)?.into_boxed_str(); let model = ::obj_dec(s, md.model_meta)?; Ok(CreateModelTxnRestorePL { space_id, @@ -427,7 +427,7 @@ impl<'a> PersistObject for AlterModelRemoveTxn<'a> { if !s.has_left(len) { break; } - removed_fields.push(inf::dec::utils::decode_string(s, len)?.into_boxed_str()); + removed_fields.push(r1::dec::utils::decode_string(s, len)?.into_boxed_str()); } if removed_fields.len() as u64 != md.remove_field_c { return Err(StorageError::InternalDecodeStructureCorruptedPayload.into()); diff --git a/server/src/engine/storage/v1/impls/gns/space.rs b/server/src/engine/storage/v1/impls/gns/space.rs index c90fef42..4249c462 100644 --- a/server/src/engine/storage/v1/impls/gns/space.rs +++ b/server/src/engine/storage/v1/impls/gns/space.rs @@ -33,7 +33,7 @@ use { error::{RuntimeResult, TransactionError}, idx::STIndex, mem::BufferedScanner, - storage::v1::inf::{self, map, obj, PersistObject}, + storage::common_encoding::r1::{dec, map, obj, PersistObject}, txn::gns::space::{AlterSpaceTxn, CreateSpaceTxn, DropSpaceTxn}, }, util::EndianQW, @@ -91,8 +91,7 @@ impl<'a> PersistObject for CreateSpaceTxn<'a> { s: &mut BufferedScanner, md: Self::Metadata, ) -> RuntimeResult { - let space_name = - inf::dec::utils::decode_string(s, md.space_name_l as usize)?.into_boxed_str(); + let space_name = dec::utils::decode_string(s, md.space_name_l as usize)?.into_boxed_str(); let space = ::obj_dec(s, md.space_meta)?; Ok(CreateSpaceTxnRestorePL { space_name, space }) } diff --git a/server/src/engine/storage/v1/impls/gns/tests/io.rs b/server/src/engine/storage/v1/impls/gns/tests/io.rs index 8dc85535..6e24645b 100644 --- a/server/src/engine/storage/v1/impls/gns/tests/io.rs +++ b/server/src/engine/storage/v1/impls/gns/tests/io.rs @@ -31,7 +31,7 @@ use { }, crate::engine::{ core::{model::Model, space::Space}, - storage::v1::inf::{dec, enc}, + storage::common_encoding::r1::{dec, enc}, txn::ModelIDRef, }, }; diff --git a/server/src/engine/storage/v1/mod.rs b/server/src/engine/storage/v1/mod.rs index 5292316e..60e3c0a9 100644 --- a/server/src/engine/storage/v1/mod.rs +++ b/server/src/engine/storage/v1/mod.rs @@ -29,7 +29,6 @@ //! Target tags: `0.8.0-beta`, `0.8.0-beta.2`, `0.8.0-beta.3` mod impls; -pub mod inf; pub mod loader; pub mod raw; diff --git a/server/src/engine/storage/v1/raw/batch_jrnl/persist.rs b/server/src/engine/storage/v1/raw/batch_jrnl/persist.rs index 21b9f313..c8e98049 100644 --- a/server/src/engine/storage/v1/raw/batch_jrnl/persist.rs +++ b/server/src/engine/storage/v1/raw/batch_jrnl/persist.rs @@ -46,10 +46,8 @@ use { idx::STIndexSeq, storage::{ common::interface::fs_traits::FSInterface, - v1::{ - inf::obj::cell, - raw::rw::{SDSSFileIO, TrackedWriter}, - }, + common_encoding::r1, + v1::raw::rw::{SDSSFileIO, TrackedWriter}, }, }, util::EndianQW, @@ -225,7 +223,7 @@ impl DataBatchPersistDriver { /// Encode a single cell fn encode_cell(&mut self, value: &Datacell) -> RuntimeResult<()> { let mut buf = vec![]; - cell::encode(&mut buf, value); + r1::obj::cell::encode(&mut buf, value); self.f.tracked_write(&buf)?; Ok(()) } diff --git a/server/src/engine/storage/v1/raw/batch_jrnl/restore.rs b/server/src/engine/storage/v1/raw/batch_jrnl/restore.rs index d033ae4e..2882e028 100644 --- a/server/src/engine/storage/v1/raw/batch_jrnl/restore.rs +++ b/server/src/engine/storage/v1/raw/batch_jrnl/restore.rs @@ -39,13 +39,11 @@ use { idx::{MTIndex, STIndex, STIndexSeq}, storage::{ common::interface::fs_traits::FSInterface, - v1::{ - inf::{ - obj::cell::{self, StorageCellTypeID}, - DataSource, - }, - raw::rw::{SDSSFileIO, TrackedReader}, + common_encoding::r1::{ + obj::cell::{self, StorageCellTypeID}, + DataSource, }, + v1::raw::rw::{SDSSFileIO, TrackedReader}, }, }, std::{ diff --git a/server/src/engine/storage/v1/raw/sysdb.rs b/server/src/engine/storage/v1/raw/sysdb.rs index 11789720..987a6b34 100644 --- a/server/src/engine/storage/v1/raw/sysdb.rs +++ b/server/src/engine/storage/v1/raw/sysdb.rs @@ -32,10 +32,8 @@ use { fractal::sys_store::{SysAuth, SysAuthUser, SysConfig, SysHostData, SystemStore}, storage::{ common::interface::fs_traits::{FSInterface, FileOpen}, - v1::{ - inf, - raw::{rw::SDSSFileIO, spec}, - }, + common_encoding::r1, + v1::raw::{rw::SDSSFileIO, spec}, }, }, parking_lot::RwLock, @@ -140,7 +138,7 @@ impl SystemStore { ), ); // write - let buf = inf::enc::enc_dict_full::(&map); + let buf = r1::enc::enc_dict_full::(&map); f.fsynced_write(&buf) } fn _sync_with(&self, target: &str, cow: &str, auth: &SysAuth) -> RuntimeResult<()> { @@ -184,7 +182,7 @@ impl SystemStore { Ok((slf, state)) } fn _restore(mut f: SDSSFileIO, run_mode: ConfigMode) -> RuntimeResult { - let mut sysdb_data = inf::dec::dec_dict_full::(&f.read_full()?)?; + let mut sysdb_data = r1::dec::dec_dict_full::(&f.read_full()?)?; // get our auth and sys stores let mut auth_store = rkey( &mut sysdb_data, diff --git a/server/src/engine/txn/gns/mod.rs b/server/src/engine/txn/gns/mod.rs index a44b262c..fef130cb 100644 --- a/server/src/engine/txn/gns/mod.rs +++ b/server/src/engine/txn/gns/mod.rs @@ -24,5 +24,5 @@ * */ -pub mod space; pub mod model; +pub mod space;