Struct massa_db_worker::RawMassaDB
source · pub struct RawMassaDB<ChangeID: PartialOrd + Ord + PartialEq + Eq + Clone + Debug, ChangeIDSerializer: Serializer<ChangeID>, ChangeIDDeserializer: Deserializer<ChangeID>> {
pub db: DB,
pub config: MassaDBConfig,
pub change_history: BTreeMap<ChangeID, BTreeMap<Key, Option<Value>>>,
pub change_history_versioning: BTreeMap<ChangeID, BTreeMap<Key, Option<Value>>>,
pub change_id_serializer: ChangeIDSerializer,
pub change_id_deserializer: ChangeIDDeserializer,
pub current_batch: Arc<Mutex<WriteBatch>>,
pub change_history_sizes: BTreeMap<ChangeID, (usize, usize)>,
}Expand description
A generic wrapped RocksDB database.
The added features are:
- Hash tracking with Xor
- Streaming the database while it is being actively updated
Fields§
§db: DBThe rocksdb instance
config: MassaDBConfigconfiguration for the RawMassaDB
change_history: BTreeMap<ChangeID, BTreeMap<Key, Option<Value>>>In change_history, we keep the latest changes made to the database, useful for streaming them to a client.
change_history_versioning: BTreeMap<ChangeID, BTreeMap<Key, Option<Value>>>same as change_history but for versioning
change_id_serializer: ChangeIDSerializerA serializer for the ChangeID type
change_id_deserializer: ChangeIDDeserializerA deserializer for the ChangeID type
current_batch: Arc<Mutex<WriteBatch>>The current RocksDB batch of the database, in a Mutex to share it
change_history_sizes: BTreeMap<ChangeID, (usize, usize)>If metrics are enabled, we keep track of the size of the changes associated to each change_id
Implementations§
source§impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>where
ChangeID: PartialOrd + Ord + PartialEq + Eq + Clone + Debug,
ChangeIDSerializer: Serializer<ChangeID>,
ChangeIDDeserializer: Deserializer<ChangeID>,
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>where
ChangeID: PartialOrd + Ord + PartialEq + Eq + Clone + Debug,
ChangeIDSerializer: Serializer<ChangeID>,
ChangeIDDeserializer: Deserializer<ChangeID>,
sourcepub fn read_opts_for_full_db_traversal() -> ReadOptions
pub fn read_opts_for_full_db_traversal() -> ReadOptions
If we read the db with these options, cache will be disabled (useful for scanning the whole db)
sourcepub fn get_batch_to_stream(
&self,
last_state_step: &StreamingStep<Vec<u8>>,
last_change_id: Option<ChangeID>,
) -> Result<StreamBatch<ChangeID>, MassaDBError>
pub fn get_batch_to_stream( &self, last_state_step: &StreamingStep<Vec<u8>>, last_change_id: Option<ChangeID>, ) -> Result<StreamBatch<ChangeID>, MassaDBError>
Used for bootstrap servers (get a new batch of data from STATE_CF to stream to the client)
Returns a StreamBatch
sourcepub fn get_versioning_batch_to_stream(
&self,
last_versioning_step: &StreamingStep<Vec<u8>>,
last_change_id: Option<ChangeID>,
) -> Result<StreamBatch<ChangeID>, MassaDBError>
pub fn get_versioning_batch_to_stream( &self, last_versioning_step: &StreamingStep<Vec<u8>>, last_change_id: Option<ChangeID>, ) -> Result<StreamBatch<ChangeID>, MassaDBError>
Used for bootstrap servers (get a new batch of data from VERSIONING_CF to stream to the client)
Returns a StreamBatch
sourcepub fn write_changes(
&mut self,
changes: BTreeMap<Key, Option<Value>>,
versioning_changes: BTreeMap<Key, Option<Value>>,
change_id: Option<ChangeID>,
reset_history: bool,
) -> Result<(), MassaDBError>
pub fn write_changes( &mut self, changes: BTreeMap<Key, Option<Value>>, versioning_changes: BTreeMap<Key, Option<Value>>, change_id: Option<ChangeID>, reset_history: bool, ) -> Result<(), MassaDBError>
Used for:
- Bootstrap clients, to write on disk a new received Stream (reset_history: true)
- Normal operations, to write changes associated to a given change_id (reset_history: false)
sourcepub fn get_change_id(&self) -> Result<ChangeID, ModelsError>
pub fn get_change_id(&self) -> Result<ChangeID, ModelsError>
Get the current change_id attached to the database.
sourcepub fn set_initial_change_id(&self, change_id: ChangeID)
pub fn set_initial_change_id(&self, change_id: ChangeID)
Set the initial change_id. This function should only be called at startup/reset, as it does not batch this set with other changes.
sourcepub fn set_change_id_to_batch(&self, change_id: ChangeID)
pub fn set_change_id_to_batch(&self, change_id: ChangeID)
Set the current change_id in the batch
sourcepub fn write_batch_bootstrap_client(
&mut self,
stream_changes: StreamBatch<ChangeID>,
stream_changes_versioning: StreamBatch<ChangeID>,
) -> Result<(StreamingStep<Key>, StreamingStep<Key>), MassaDBError>
pub fn write_batch_bootstrap_client( &mut self, stream_changes: StreamBatch<ChangeID>, stream_changes_versioning: StreamBatch<ChangeID>, ) -> Result<(StreamingStep<Key>, StreamingStep<Key>), MassaDBError>
Write a stream_batch of database entries received from a bootstrap server
sourcepub fn get_xof_db_hash(&self) -> HashXof<HASH_XOF_SIZE_BYTES>
pub fn get_xof_db_hash(&self) -> HashXof<HASH_XOF_SIZE_BYTES>
Get the current XOF state hash of the database
sourcefn get_xof_db_hash_opt(&self) -> Option<HashXof<HASH_XOF_SIZE_BYTES>>
fn get_xof_db_hash_opt(&self) -> Option<HashXof<HASH_XOF_SIZE_BYTES>>
Get the current XOF state hash of the database
source§impl RawMassaDB<Slot, SlotSerializer, SlotDeserializer>
impl RawMassaDB<Slot, SlotSerializer, SlotDeserializer>
sourcepub fn default_db_opts() -> Options
pub fn default_db_opts() -> Options
Sets various db options for RocksDB
sourcefn new_with_options(
config: MassaDBConfig,
db_opts: Options,
) -> Result<Self, Error>
fn new_with_options( config: MassaDBConfig, db_opts: Options, ) -> Result<Self, Error>
Returns a new MassaDB instance given a config and RocksDB options
Trait Implementations§
source§impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> Debug for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>where
ChangeID: PartialOrd + Ord + PartialEq + Eq + Clone + Debug,
ChangeIDSerializer: Serializer<ChangeID>,
ChangeIDDeserializer: Deserializer<ChangeID>,
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> Debug for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>where
ChangeID: PartialOrd + Ord + PartialEq + Eq + Clone + Debug,
ChangeIDSerializer: Serializer<ChangeID>,
ChangeIDDeserializer: Deserializer<ChangeID>,
source§impl MassaDBController for RawMassaDB<Slot, SlotSerializer, SlotDeserializer>
impl MassaDBController for RawMassaDB<Slot, SlotSerializer, SlotDeserializer>
source§fn backup_db(&self, slot: Slot) -> PathBuf
fn backup_db(&self, slot: Slot) -> PathBuf
Creates a new hard copy of the DB, for the given slot
source§fn write_batch(
&mut self,
batch: DBBatch,
versioning_batch: DBBatch,
change_id: Option<Slot>,
)
fn write_batch( &mut self, batch: DBBatch, versioning_batch: DBBatch, change_id: Option<Slot>, )
Writes the batch to the DB
source§fn put_or_update_entry_value(
&self,
batch: &mut DBBatch,
key: Vec<u8>,
value: &[u8],
)
fn put_or_update_entry_value( &self, batch: &mut DBBatch, key: Vec<u8>, value: &[u8], )
Utility function to put / update a key & value in the batch
source§fn delete_key(&self, batch: &mut DBBatch, key: Vec<u8>)
fn delete_key(&self, batch: &mut DBBatch, key: Vec<u8>)
Utility function to delete a key & value in the batch
source§fn delete_prefix(
&mut self,
prefix: &str,
handle_str: &str,
change_id: Option<Slot>,
)
fn delete_prefix( &mut self, prefix: &str, handle_str: &str, change_id: Option<Slot>, )
Utility function to delete all keys in a prefix
source§fn reset(&mut self, slot: Slot)
fn reset(&mut self, slot: Slot)
Reset the database, and attach it to the given slot.
This function is used in the FinalStateController::reset method which is used in the Bootstrap process when the bootstrap fails (Bootstrap slot too old). A bootstrap to another node will likely occur after this reset.
source§fn multi_get_cf(
&self,
query: Vec<(&str, Key)>,
) -> Vec<Result<Option<Value>, MassaDBError>>
fn multi_get_cf( &self, query: Vec<(&str, Key)>, ) -> Vec<Result<Option<Value>, MassaDBError>>
Exposes RocksDB’s “multi_get_cf” function
source§fn iterator_cf(
&self,
handle_cf: &str,
mode: MassaIteratorMode<'_>,
) -> Box<dyn Iterator<Item = (Key, Value)> + '_>
fn iterator_cf( &self, handle_cf: &str, mode: MassaIteratorMode<'_>, ) -> Box<dyn Iterator<Item = (Key, Value)> + '_>
Exposes RocksDB’s “iterator_cf” function
source§fn iterator_cf_for_full_db_traversal(
&self,
handle_cf: &str,
mode: MassaIteratorMode<'_>,
) -> Box<dyn Iterator<Item = (Key, Value)> + '_>
fn iterator_cf_for_full_db_traversal( &self, handle_cf: &str, mode: MassaIteratorMode<'_>, ) -> Box<dyn Iterator<Item = (Key, Value)> + '_>
Exposes RocksDB’s “iterator_cf” function
source§fn prefix_iterator_cf(
&self,
handle_cf: &str,
prefix: &[u8],
) -> Box<dyn Iterator<Item = (Key, Value)> + '_>
fn prefix_iterator_cf( &self, handle_cf: &str, prefix: &[u8], ) -> Box<dyn Iterator<Item = (Key, Value)> + '_>
Exposes RocksDB’s “prefix_iterator_cf” function
source§fn get_xof_db_hash(&self) -> HashXof<HASH_XOF_SIZE_BYTES>
fn get_xof_db_hash(&self) -> HashXof<HASH_XOF_SIZE_BYTES>
Get the current extended state hash of the database
source§fn get_change_id(&self) -> Result<Slot, ModelsError>
fn get_change_id(&self) -> Result<Slot, ModelsError>
Get the current change_id attached to the database.
source§fn set_initial_change_id(&self, change_id: Slot)
fn set_initial_change_id(&self, change_id: Slot)
Set the initial change_id. This function should only be called at startup/reset, as it does not batch this set with other changes.
source§fn write_batch_bootstrap_client(
&mut self,
stream_changes: StreamBatch<Slot>,
stream_changes_versioning: StreamBatch<Slot>,
) -> Result<(StreamingStep<Key>, StreamingStep<Key>), MassaDBError>
fn write_batch_bootstrap_client( &mut self, stream_changes: StreamBatch<Slot>, stream_changes_versioning: StreamBatch<Slot>, ) -> Result<(StreamingStep<Key>, StreamingStep<Key>), MassaDBError>
Write a stream_batch of database entries received from a bootstrap server
source§fn get_batch_to_stream(
&self,
last_state_step: &StreamingStep<Vec<u8>>,
last_change_id: Option<Slot>,
) -> Result<StreamBatch<Slot>, MassaDBError>
fn get_batch_to_stream( &self, last_state_step: &StreamingStep<Vec<u8>>, last_change_id: Option<Slot>, ) -> Result<StreamBatch<Slot>, MassaDBError>
Used for bootstrap servers (get a new batch of data from STATE_CF to stream to the client)
Returns a StreamBatch
source§fn get_versioning_batch_to_stream(
&self,
last_versioning_step: &StreamingStep<Vec<u8>>,
last_change_id: Option<Slot>,
) -> Result<StreamBatch<Slot>, MassaDBError>
fn get_versioning_batch_to_stream( &self, last_versioning_step: &StreamingStep<Vec<u8>>, last_change_id: Option<Slot>, ) -> Result<StreamBatch<Slot>, MassaDBError>
Used for bootstrap servers (get a new batch of data from VERSIONING_CF to stream to the client)
Returns a StreamBatch
source§fn get_cf(
&self,
handle_cf: &str,
key: Key,
) -> Result<Option<Value>, MassaDBError>
fn get_cf( &self, handle_cf: &str, key: Key, ) -> Result<Option<Value>, MassaDBError>
source§fn get_change_history_sizes(&self) -> (usize, usize)
fn get_change_history_sizes(&self) -> (usize, usize)
Auto Trait Implementations§
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> Freeze for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> !RefUnwindSafe for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> Send for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> Sync for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> Unpin for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>
impl<ChangeID, ChangeIDSerializer, ChangeIDDeserializer> !UnwindSafe for RawMassaDB<ChangeID, ChangeIDSerializer, ChangeIDDeserializer>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.