Struct re_viewer::external::re_entity_db::EntityDb
source · pub struct EntityDb {
pub data_source: Option<SmartChannelSource>,
set_store_info: Option<SetStoreInfo>,
last_modified_at: Instant,
latest_row_id: Option<RowId>,
entity_path_from_hash: HashMap<EntityPathHash, EntityPath, BuildHasherDefault<NoHashHasher<EntityPathHash>>>,
times_per_timeline: TimesPerTimeline,
time_histogram_per_timeline: TimeHistogramPerTimeline,
tree: EntityTree,
storage_engine: StorageEngine,
stats: IngestionStatistics,
}
Expand description
An in-memory database built from a stream of LogMsg
es.
NOTE: all mutation is to be done via public functions!
Fields§
§data_source: Option<SmartChannelSource>
§set_store_info: Option<SetStoreInfo>
§last_modified_at: Instant
§latest_row_id: Option<RowId>
§entity_path_from_hash: HashMap<EntityPathHash, EntityPath, BuildHasherDefault<NoHashHasher<EntityPathHash>>>
§times_per_timeline: TimesPerTimeline
§time_histogram_per_timeline: TimeHistogramPerTimeline
§tree: EntityTree
§storage_engine: StorageEngine
§stats: IngestionStatistics
Implementations§
source§impl EntityDb
impl EntityDb
pub fn new(store_id: StoreId) -> EntityDb
pub fn with_store_config( store_id: StoreId, store_config: ChunkStoreConfig ) -> EntityDb
pub fn tree(&self) -> &EntityTree
sourcepub fn storage_engine(&self) -> StorageEngineReadGuard<'_>
pub fn storage_engine(&self) -> StorageEngineReadGuard<'_>
Returns a read-only guard to the backing StorageEngine
.
sourcepub fn storage_engine_arc(&self) -> StorageEngineArcReadGuard
pub fn storage_engine_arc(&self) -> StorageEngineArcReadGuard
Returns a read-only guard to the backing StorageEngine
.
That guard can be cloned at will and has a static lifetime.
It is not possible to insert any more data in this EntityDb
until the returned guard,
and any clones, have been dropped.
pub fn store_info_msg(&self) -> Option<&SetStoreInfo>
pub fn store_info(&self) -> Option<&StoreInfo>
pub fn app_id(&self) -> Option<&ApplicationId>
sourcepub fn latest_at(
&self,
query: &LatestAtQuery,
entity_path: &EntityPath,
component_names: impl IntoIterator<Item = ComponentName>
) -> LatestAtResults
pub fn latest_at( &self, query: &LatestAtQuery, entity_path: &EntityPath, component_names: impl IntoIterator<Item = ComponentName> ) -> LatestAtResults
Queries for the given component_names
using latest-at semantics.
See re_query::LatestAtResults
for more information about how to handle the results.
This is a cached API – data will be lazily cached upon access.
sourcepub fn latest_at_component<C>(
&self,
entity_path: &EntityPath,
query: &LatestAtQuery
) -> Option<((TimeInt, RowId), C)>where
C: Component,
pub fn latest_at_component<C>(
&self,
entity_path: &EntityPath,
query: &LatestAtQuery
) -> Option<((TimeInt, RowId), C)>where
C: Component,
Get the latest index and value for a given dense re_types_core::Component
.
This assumes that the row we get from the store contains at most one instance for this component; it will log a warning otherwise.
This should only be used for “mono-components” such as Transform
and Tensor
.
This is a best-effort helper, it will merely log errors on failure.
sourcepub fn latest_at_component_quiet<C>(
&self,
entity_path: &EntityPath,
query: &LatestAtQuery
) -> Option<((TimeInt, RowId), C)>where
C: Component,
pub fn latest_at_component_quiet<C>(
&self,
entity_path: &EntityPath,
query: &LatestAtQuery
) -> Option<((TimeInt, RowId), C)>where
C: Component,
Get the latest index and value for a given dense re_types_core::Component
.
This assumes that the row we get from the store contains at most one instance for this component; it will log a warning otherwise.
This should only be used for “mono-components” such as Transform
and Tensor
.
This is a best-effort helper, and will quietly swallow any errors.
pub fn latest_at_component_at_closest_ancestor<C>(
&self,
entity_path: &EntityPath,
query: &LatestAtQuery
) -> Option<(EntityPath, (TimeInt, RowId), C)>where
C: Component,
pub fn store_kind(&self) -> StoreKind
pub fn store_id(&self) -> StoreId
sourcepub fn cloned_from(&self) -> Option<&StoreId>
pub fn cloned_from(&self) -> Option<&StoreId>
If this entity db is the result of a clone, which store was it cloned from?
A cloned store always gets a new unique ID.
We currently only use entity db cloning for blueprints: when we activate a default blueprint that was received on the wire (e.g. from a recording), we clone it and make the clone the active blueprint. This means all active blueprints are clones.
pub fn timelines(&self) -> impl ExactSizeIterator
pub fn times_per_timeline(&self) -> &TimesPerTimeline
pub fn has_any_data_on_timeline(&self, timeline: &Timeline) -> bool
sourcepub fn time_range_for(&self, timeline: &Timeline) -> Option<ResolvedTimeRange>
pub fn time_range_for(&self, timeline: &Timeline) -> Option<ResolvedTimeRange>
Returns the time range of data on the given timeline, ignoring any static times.
sourcepub fn time_histogram(&self, timeline: &Timeline) -> Option<&Int64Histogram>
pub fn time_histogram(&self, timeline: &Timeline) -> Option<&Int64Histogram>
Histogram of all events on the timeeline, of all entities.
pub fn num_rows(&self) -> u64
sourcepub fn generation(&self) -> ChunkStoreGeneration
pub fn generation(&self) -> ChunkStoreGeneration
Return the current ChunkStoreGeneration
. This can be used to determine whether the
database has been modified since the last time it was queried.
pub fn last_modified_at(&self) -> Instant
sourcepub fn latest_row_id(&self) -> Option<RowId>
pub fn latest_row_id(&self) -> Option<RowId>
The highest RowId
in the store,
which corresponds to the last edit time.
Ignores deletions.
pub fn is_empty(&self) -> bool
sourcepub fn entity_paths(&self) -> Vec<&EntityPath>
pub fn entity_paths(&self) -> Vec<&EntityPath>
A sorted list of all the entity paths in this database.
pub fn ingestion_stats(&self) -> &IngestionStatistics
pub fn entity_path_from_hash( &self, entity_path_hash: &EntityPathHash ) -> Option<&EntityPath>
sourcepub fn is_known_entity(&self, entity_path: &EntityPath) -> bool
pub fn is_known_entity(&self, entity_path: &EntityPath) -> bool
Returns true
also for entities higher up in the hierarchy.
sourcepub fn is_logged_entity(&self, entity_path: &EntityPath) -> bool
pub fn is_logged_entity(&self, entity_path: &EntityPath) -> bool
If you log world/points
, then that is a logged entity, but world
is not,
unless you log something to world
too.
pub fn add(&mut self, msg: &LogMsg) -> Result<Vec<ChunkStoreEvent>, Error>
pub fn add_chunk( &mut self, chunk: &Arc<Chunk> ) -> Result<Vec<ChunkStoreEvent>, Error>
pub fn set_store_info(&mut self, store_info: SetStoreInfo)
pub fn gc_everything_but_the_latest_row_on_non_default_timelines( &mut self ) -> Vec<ChunkStoreEvent>
sourcepub fn purge_fraction_of_ram(
&mut self,
fraction_to_purge: f32
) -> Vec<ChunkStoreEvent>
pub fn purge_fraction_of_ram( &mut self, fraction_to_purge: f32 ) -> Vec<ChunkStoreEvent>
Free up some RAM by forgetting the older parts of all timelines.
sourcepub fn drop_time_range(
&mut self,
timeline: &Timeline,
drop_range: ResolvedTimeRange
) -> Vec<ChunkStoreEvent>
pub fn drop_time_range( &mut self, timeline: &Timeline, drop_range: ResolvedTimeRange ) -> Vec<ChunkStoreEvent>
Drop all events in the given time range from the given timeline.
Used to implement undo (erase the last event from the blueprint db).
sourcepub fn drop_entity_path(&mut self, entity_path: &EntityPath)
pub fn drop_entity_path(&mut self, entity_path: &EntityPath)
Unconditionally drops all the data for a given EntityPath
.
This is not recursive. Children of this entity will not be affected.
To drop the entire subtree below an entity, see: Self::drop_entity_path_recursive
.
sourcepub fn drop_entity_path_recursive(&mut self, entity_path: &EntityPath)
pub fn drop_entity_path_recursive(&mut self, entity_path: &EntityPath)
Unconditionally drops all the data for a given EntityPath
and all its children.
sourcepub fn to_messages(
&self,
time_selection: Option<(Timeline, ResolvedTimeRangeF)>
) -> impl Iterator<Item = Result<LogMsg, ChunkError>>
pub fn to_messages( &self, time_selection: Option<(Timeline, ResolvedTimeRangeF)> ) -> impl Iterator<Item = Result<LogMsg, ChunkError>>
Export the contents of the current database to a sequence of messages.
If time_selection
is specified, then only data for that specific timeline over that
specific time range will be accounted for.
source§impl EntityDb
impl EntityDb
§Stats
sourcepub fn subtree_stats_static(
&self,
engine: &StorageEngineReadGuard<'_>,
entity_path: &EntityPath
) -> ChunkStoreChunkStats
pub fn subtree_stats_static( &self, engine: &StorageEngineReadGuard<'_>, entity_path: &EntityPath ) -> ChunkStoreChunkStats
Returns the stats for the static store of the entity and all its children, recursively.
This excludes temporal data.
sourcepub fn subtree_stats_on_timeline(
&self,
engine: &StorageEngineReadGuard<'_>,
entity_path: &EntityPath,
timeline: &Timeline
) -> ChunkStoreChunkStats
pub fn subtree_stats_on_timeline( &self, engine: &StorageEngineReadGuard<'_>, entity_path: &EntityPath, timeline: &Timeline ) -> ChunkStoreChunkStats
Returns the stats for the entity and all its children on the given timeline, recursively.
This excludes static data.
sourcepub fn subtree_has_data_on_timeline(
&self,
engine: &StorageEngineReadGuard<'_>,
timeline: &Timeline,
entity_path: &EntityPath
) -> bool
pub fn subtree_has_data_on_timeline( &self, engine: &StorageEngineReadGuard<'_>, timeline: &Timeline, entity_path: &EntityPath ) -> bool
Returns true if an entity or any of its children have any data on the given timeline.
This includes static data.
sourcepub fn subtree_has_temporal_data_on_timeline(
&self,
engine: &StorageEngineReadGuard<'_>,
timeline: &Timeline,
entity_path: &EntityPath
) -> bool
pub fn subtree_has_temporal_data_on_timeline( &self, engine: &StorageEngineReadGuard<'_>, timeline: &Timeline, entity_path: &EntityPath ) -> bool
Returns true if an entity or any of its children have any temporal data on the given timeline.
This ignores static data.
Trait Implementations§
source§impl DataUi for EntityDb
impl DataUi for EntityDb
source§fn data_ui(
&self,
ctx: &ViewerContext<'_>,
ui: &mut Ui,
ui_layout: UiLayout,
_query: &LatestAtQuery,
_db: &EntityDb
)
fn data_ui( &self, ctx: &ViewerContext<'_>, ui: &mut Ui, ui_layout: UiLayout, _query: &LatestAtQuery, _db: &EntityDb )
source§fn data_ui_recording(
&self,
ctx: &ViewerContext<'_>,
ui: &mut Ui,
ui_layout: UiLayout
)
fn data_ui_recording( &self, ctx: &ViewerContext<'_>, ui: &mut Ui, ui_layout: UiLayout )
Self::data_ui
using the default query and recording.source§impl SizeBytes for EntityDb
impl SizeBytes for EntityDb
source§fn heap_size_bytes(&self) -> u64
fn heap_size_bytes(&self) -> u64
self
on the heap, in bytes.source§fn total_size_bytes(&self) -> u64
fn total_size_bytes(&self) -> u64
self
in bytes, accounting for both stack and heap space.source§fn stack_size_bytes(&self) -> u64
fn stack_size_bytes(&self) -> u64
self
on the stack, in bytes. Read moreAuto Trait Implementations§
impl !Freeze for EntityDb
impl !RefUnwindSafe for EntityDb
impl Send for EntityDb
impl Sync for EntityDb
impl Unpin for EntityDb
impl !UnwindSafe for EntityDb
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
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> EntityDataUi for Twhere
T: DataUi,
impl<T> EntityDataUi for Twhere
T: DataUi,
source§fn entity_data_ui(
&self,
ctx: &ViewerContext<'_>,
ui: &mut Ui,
ui_layout: UiLayout,
entity_path: &EntityPath,
_row_id: Option<RowId>,
query: &LatestAtQuery,
db: &EntityDb
)
fn entity_data_ui( &self, ctx: &ViewerContext<'_>, ui: &mut Ui, ui_layout: UiLayout, entity_path: &EntityPath, _row_id: Option<RowId>, query: &LatestAtQuery, db: &EntityDb )
§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> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§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