Skip to main content

ChunkStore

Struct ChunkStore 

Source
pub struct ChunkStore { /* private fields */ }
Expand description

Everything needed to build custom ChunkStoreSubscribers. A complete chunk store: covers all timelines, all entities, everything.

The chunk store always works at the chunk level, whether it is for write & read queries or garbage collection. It is completely oblivious to individual rows.

Use the Display implementation for a detailed view of the internals.

Implementations§

Source§

impl ChunkStore

Source

pub fn compacted( &self, options: &CompactionOptions, ) -> Result<ChunkStore, ChunkStoreError>

Return a new, compacted version of this store.

Compaction merges small neighboring chunks that share the same entity path, timelines, and datatypes, up to the thresholds in the config. Large chunks may be split.

If is_start_of_gop is provided, video stream chunks are rebatched to align with GoP boundaries after compaction, and sparse is_keyframe marker chunks are emitted.

If split_size_ratio is provided, chunks are split on entry so no two archetype groups sharing a chunk differ in byte size by more than that factor.

The returned store has compaction disabled (ChunkStoreConfig::ALL_DISABLED).

Source

pub fn finalize_compaction( self, options: &CompactionOptions, ) -> Result<ChunkStore, ChunkStoreError>

Finalize a compaction-enabled store: run up to CompactionOptions::num_extra_passes additional compaction passes (stopping early when the chunk count stops decreasing), optionally rebatch video chunks along GoP boundaries, then disable compaction on the returned store (ChunkStoreConfig::ALL_DISABLED config).

Consumes self. Assumes self was built with a compaction-enabled config (otherwise each pass is a no-op).

Source§

impl ChunkStore

Source

pub fn row_id_descriptor(&self) -> RowIdColumnDescriptor

Source

pub fn resolve_time_selector( &self, selector: &TimeColumnSelector, ) -> IndexColumnDescriptor

Given a TimeColumnSelector, returns the corresponding IndexColumnDescriptor.

Source

pub fn resolve_component_selector( &self, selector: &ComponentColumnSelector, ) -> Option<ComponentColumnDescriptor>

Given a ComponentColumnSelector, returns the corresponding ComponentColumnDescriptor.

If the component is not found in the store, None is returned.

Source

pub fn schema_for_query( &self, query: &QueryExpression, ) -> ChunkColumnDescriptors

Returns the filtered schema for the given QueryExpression.

The order of the columns is guaranteed to be in a specific order:

  • first, the time columns in lexical order (frame_nr, log_time, …);
  • second, the component columns in lexical order (Color, Radius, ...).
Source

pub fn create_component_filter_from_query( query: &QueryExpression, ) -> impl Fn(&ComponentColumnDescriptor)

Source§

impl ChunkStore

Source

pub fn drop_time_range_shallow( &mut self, timeline: &TimelineName, drop_range: AbsoluteTimeRange, reason: ChunkDeletionReason, ) -> Vec<ChunkStoreEvent>

Drop all events that are in the given range on the given timeline.

Note that matching events will be dropped from all timelines they appear on.

Chunks are shallowly removed: they can be recovered if they were originally fetched from a known RRD manifest. Static chunks are unaffected.

Source

pub fn drop_time_range_deep( &mut self, timeline: &TimelineName, drop_range: AbsoluteTimeRange, reason: ChunkDeletionReason, ) -> Vec<ChunkStoreEvent>

Drop all events that are in the given range on the given timeline.

Note that matching events will be dropped from all timelines they appear on.

Chunks are deeply removed: they won’t be recoverable. Static chunks are unaffected.

Used to implement undo (erase the last event from the blueprint db).

Source§

impl ChunkStore

Source

pub fn gc( &mut self, options: &GarbageCollectionOptions, ) -> (Vec<ChunkStoreEvent>, ChunkStoreStats)

Triggers a garbage collection according to the desired target.

Returns the list of physical Chunks that were purged from the store in the form of ChunkStoreEvents.

§Semantics

Garbage collection works on a chunk-level basis, giving priority to those that are the furthest away from the timestamp specified in GarbageCollectionOptions::furthest_from.

If no timestamp is specified, or if not enough data could be collected during the timestamp-driven pass, then garbage collection falls back to RowId order (specifically, the smallest RowId of each respective Chunk), i.e. the order defined by the clients’ wall-clocks, allowing it to drop data across the different timelines in a fair, deterministic manner. Similarly, out-of-order data is supported out of the box.

The garbage collector doesn’t deallocate data in and of itself: all it does is drop the store’s internal references to that data (the Chunks), which will be deallocated once their reference count reaches 0.

§Limitations

The garbage collector has limited support for latest-at semantics. The configuration option: GarbageCollectionOptions::protect_latest will protect the N latest values of each component on each timeline. The only practical guarantee this gives is that a latest-at query with a value of max-int will be unchanged. However, latest-at queries from other arbitrary points in time may provide different results pre- and post- GC.

Source

pub fn remove_chunks_deep( &mut self, chunks_to_be_removed: Vec<Arc<Chunk>>, time_budget: Option<Duration>, reason: ChunkDeletionReason, ) -> Vec<ChunkStoreDiffDeletion>

Surgically removes a set of temporal ChunkIds from all physical & virtual indices.

This only makes sense to use on chunks that resulted from the compaction of other chunks. These chunks, by definition, only ever exist locally, and therefore there is never any good reason to let them linger on in our internal indices, physical or virtual, since they cannot possibly be re-fetched. Note that this only applies to compaction, not splitting, since the chunk being split never makes it into the store in the first place. For garbage collection purposes, refer to Self::remove_chunks_shallow instead.

This is orders of magnitude faster than trying to retain() on all our internal indices, when you already know where these chunks live.

Source

pub fn remove_chunks_shallow( &mut self, chunks_to_be_removed: Vec<Arc<Chunk>>, time_budget: Option<Duration>, reason: ChunkDeletionReason, ) -> Vec<ChunkStoreDiffDeletion>

Surgically removes a set of temporal ChunkIds from all physical indices only.

This only makes sense to use with garbage collection: you want to make sure that a chunk that was garbage collected away stills lingers on in our internal virtual indices, so we can know at query time that some data was missing from local memory. into a new larger chunk to linger on in our internal indices, both physical and virtual. For compaction purposes, refer to Self::remove_chunks_deep instead.

This is orders of magnitude faster than trying to retain() on all our internal indices, when you already know where these chunks live.

Source§

impl ChunkStore

Source

pub fn format_lineage(&self, chunk_id: &ChunkId) -> String

Formats the complete lineage tree of a chunk in a human readable fashion.

This is a debugging tool, it makes no effort whatsoever to try and be performant.

Source

pub fn is_root_chunk(&self, chunk_id: &ChunkId) -> bool

Returns true if this is a root-level chunk.

Root-level chunks sit directly at the top of the lineage tree: they cannot be issued from either a split or a compaction. I.e. the next layer is necessarily either a reference to volatile memory, or to an RRD manifest.

Source

pub fn find_root_chunks(&self, chunk_id: &ChunkId) -> Vec<ChunkId>

Returns the roots from which a given chunk was derived from.

Due to compaction, lineage forms a tree rather than a straight line, and therefore it is possible (and even common) for a chunk to have more than one root.

The resulting root chunks might or might not be volatile. If you only care about chunks that are still available for download, see Self::find_root_manifest_chunks.

Source

pub fn collect_root_ids(&self, chunk_id: &ChunkId, roots: &mut Vec<ChunkId>)

Source

pub fn find_root_manifest_chunks(&self, chunk_id: &ChunkId) -> Vec<ChunkId>

Returns the top-level non-volatile roots of a given chunk, if any.

Due to compaction, lineage forms a tree rather than a straight line, and therefore it is possible (and even common) for a chunk to have more than one root, from possibly more than one RRD manifest.

The resulting root chunks are guaranteed to be backed by an RRD manifest (non-volatile). If you want to find all root chunks regardless of their origin, refer to Self::find_root_chunks instead.

Source

pub fn collect_physical_descendents_of( &self, chunk_id: &ChunkId, descendents: &mut Vec<ChunkId>, )

Collects all physical chunks that descend from the given chunk in some way.

Source

pub fn descends_from_manifest(&self, chunk: &ChunkId) -> bool

Returns true if either the specified chunk or one of its ancestors is from a manifest.

Source

pub fn descends_from_a_split(&self, chunk_id: &ChunkId) -> bool

Returns true if either the specified chunk or one of its ancestors resulted from a split.

Source

pub fn descends_from_a_compaction(&self, chunk_id: &ChunkId) -> bool

Returns true if either the specified chunk or one of its ancestors resulted from a compaction.

Source

pub fn direct_lineage(&self, chunk_id: &ChunkId) -> Option<&ChunkDirectLineage>

Returns the direct lineage of a chunk.

Source§

impl ChunkStore

Source

pub fn extract_properties(&self) -> Result<RecordBatch, ExtractPropertiesError>

Extract a one-row RecordBatch containing the properties for this chunk store.

The column names are based on the following proposals and are further sanitized to ensure compatibility with Lance datasets.

https://www.notion.so/rerunio/Canonical-column-identifier-for-dataframe-queries-206b24554b1980d98454eb989703ce2b https://www.notion.so/rerunio/Canonical-column-identifier-for-properties-215b24554b1980029ff1cc6cdfad3f76

Source

pub fn property_entities_query_results(&self) -> Vec<(EntityPath, QueryResults)>

Run the property-entity latest-at queries used by both the pure-ChunkStore path and the split property_entities_query_results / extract_properties_from_chunks path used by lazy stores.

Source§

impl ChunkStore

Source

pub fn all_entities( &self, ) -> HashSet<EntityPath, BuildHasherDefault<NoHashHasher<EntityPath>>>

Retrieve all EntityPaths in the store.

Source

pub fn find_temporal_chunks_furthest_from( &self, timeline: &TimelineName, time: TimeInt, ) -> Vec<Arc<Chunk>>

Returns a vector with all the chunks in this store, sorted in descending order relative to their distance from the given (timeline, time) cursor.

Source

pub fn all_entities_sorted(&self) -> BTreeSet<EntityPath>

Retrieve all EntityPaths in the store.

Source

pub fn all_components( &self, ) -> HashSet<ComponentIdentifier, BuildHasherDefault<NoHashHasher<ComponentIdentifier>>>

Retrieve all ComponentIdentifiers in the store.

See also Self::all_components_sorted.

Source

pub fn all_components_sorted(&self) -> BTreeSet<ComponentIdentifier>

Retrieve all ComponentIdentifiers in the store.

See also Self::all_components.

Source

pub fn all_components_on_timeline( &self, timeline: Option<&TimelineName>, entity_path: &EntityPath, ) -> Option<HashSet<ComponentIdentifier, BuildHasherDefault<NoHashHasher<ComponentIdentifier>>>>

Retrieve all the ComponentIdentifiers that have been written to for a given EntityPath on the specified re_chunk::Timeline.

Static components are always included in the results.

A None timeline (a static-only query) yields only the static components.

Returns None if the entity doesn’t exist at all on this timeline.

Source

pub fn all_components_on_timeline_sorted( &self, timeline: &TimelineName, entity_path: &EntityPath, ) -> Option<BTreeSet<ComponentIdentifier>>

Retrieve all the ComponentIdentifiers that have been written to for a given EntityPath on the specified re_chunk::Timeline.

Static components are always included in the results.

Returns None if the entity doesn’t exist at all on this timeline.

Source

pub fn entity_has_component_on_timeline( &self, timeline: Option<&TimelineName>, entity_path: &EntityPath, component: ComponentIdentifier, ) -> bool

Check whether an entity has a static component or a temporal component on the specified timeline.

This does not check if the entity actually currently holds any data for that component.

Source

pub fn entity_has_component( &self, entity_path: &EntityPath, component: ComponentIdentifier, ) -> bool

Check whether an entity has a static component or a temporal component on any timeline.

This does not check if the entity actually currently holds any data for that component.

Source

pub fn entity_has_static_component( &self, entity_path: &EntityPath, component: ComponentIdentifier, ) -> bool

Check whether an entity has a specific static component.

This does not check if the entity actually currently holds any data for that component.

Source

pub fn entity_has_temporal_component( &self, entity_path: &EntityPath, component: ComponentIdentifier, ) -> bool

Check whether an entity has a temporal component on any timeline.

This does not check if the entity actually currently holds any data for that component.

Source

pub fn entity_has_temporal_component_on_timeline( &self, timeline: &TimelineName, entity_path: &EntityPath, component: ComponentIdentifier, ) -> bool

Check whether an entity has a temporal component on a specific timeline.

This does not check if the entity actually currently holds any data for that component.

Source

pub fn entity_has_physical_data_on_timeline( &self, timeline: &TimelineName, entity_path: &EntityPath, ) -> bool

Check whether an entity has any physical data on a specific timeline, or any static data.

This is different from checking if the entity has any component, it also ensures that some data currently exists in the store for this entity.

Source

pub fn entity_has_data(&self, entity_path: &EntityPath) -> bool

Check whether an entity has any indexed data, physical or virtual.

Returns true if the entity has any static or temporal chunk IDs, regardless of whether those chunks are currently loaded in memory.

An entity path can exist in the schema/entity tree but return false here if all of its chunks have been removed by garbage collection or otherwise removed.

Source

pub fn entity_has_physical_data(&self, entity_path: &EntityPath) -> bool

Check whether an entity has any physical data.

This is different from checking if the entity has any component, it also ensures that some data currently exists in the store for this entity.

Source

pub fn entity_has_physical_static_data(&self, entity_path: &EntityPath) -> bool

Check whether an entity has any static data.

This is different from checking if the entity has any component, it also ensures that some data currently exists in the store for this entity.

Source

pub fn entity_has_physical_temporal_data( &self, entity_path: &EntityPath, ) -> bool

Check whether an entity has any temporal data.

This is different from checking if the entity has any component, it also ensures that some data currently exists in the store for this entity.

Source

pub fn entity_has_physical_temporal_data_on_timeline( &self, entity_path: &EntityPath, timeline: &TimelineName, ) -> bool

Check whether an entity has any physical temporal data on any timeline.

This is different from checking if the entity has any component, it also ensures that some data currently exists in the store for this entity.

Source

pub fn entity_has_physical_temporal_data_on_timeline_for_component( &self, entity_path: &EntityPath, timeline: &TimelineName, component: &ComponentIdentifier, ) -> bool

Check whether an entity has any physical temporal data for a given component.

This is different from checking if the entity has any component, it also ensures that some data currently exists in the store for this entity.

See Self::entity_has_physical_temporal_data_on_timeline if you don’t care about any particular component.

Source

pub fn entity_min_time( &self, timeline: &TimelineName, entity_path: &EntityPath, ) -> Option<TimeInt>

Find the earliest time at which something was logged for a given entity on the specified timeline.

This includes both physical & virtual chunks. Ignores static data.

Source

pub fn entity_time_range( &self, timeline: &TimelineName, entity_path: &EntityPath, ) -> Option<AbsoluteTimeRange>

Returns the min and max times at which data was logged for an entity on a specific timeline.

This includes both physical & virtual chunks. This ignores static data.

Source

pub fn next_time_on_timeline( &self, timeline: &TimelineName, after: TimeInt, ) -> Option<TimeInt>

Returns the next non-static time with data on the given timeline, strictly after after.

Searches physical chunks across all entities. Returns None if there is no later temporal data.

This scales linearly with the number of chunks on the timeline.

Source

pub fn prev_time_on_timeline( &self, timeline: &TimelineName, before: TimeInt, ) -> Option<TimeInt>

Returns the previous non-static time with data on the given timeline, strictly before before.

Searches physical chunks across all entities. Returns None if there is no earlier temporal data.

This scales linearly with the number of chunks on the timeline.

Source

pub fn time_range(&self, timeline: &TimelineName) -> Option<AbsoluteTimeRange>

Returns the min and max times at which data was logged on a specific timeline, considering all entities.

This includes both physical & virtual chunks. This ignores static data.

Source§

impl ChunkStore

Source

pub fn latest_at_relevant_chunks( &self, report_mode: ChunkTrackingMode, query: &LatestAtQuery, entity_path: &EntityPath, component: ComponentIdentifier, ) -> QueryResults

Returns the most-relevant chunk(s) for the given LatestAtQuery and ComponentIdentifier.

The returned vector is guaranteed free of duplicates, by definition.

The ChunkStore always work at the Chunk level (as opposed to the row level): it is oblivious to the data therein. For that reason, and because Chunks are allowed to temporally overlap, it is possible that a query has more than one relevant chunk.

The caller should filter the returned chunks further (see Chunk::latest_at) in order to determine what exact row contains the final result.

If the entity has static component data associated with it, it will unconditionally override any temporal component data.

Source

pub fn latest_at_relevant_chunks_for_all_components( &self, report_mode: ChunkTrackingMode, query: &LatestAtQuery, entity_path: &EntityPath, include_static: bool, ) -> QueryResults

Returns the most-relevant chunk(s) for the given LatestAtQuery.

Optionally include static data.

The ChunkStore always work at the Chunk level (as opposed to the row level): it is oblivious to the data therein. For that reason, and because Chunks are allowed to temporally overlap, it is possible that a query has more than one relevant chunk.

The returned vector is free of duplicates.

The caller should filter the returned chunks further (see Chunk::latest_at) in order to determine what exact row contains the final result.

Source§

impl ChunkStore

Source

pub fn range_relevant_chunks( &self, report_mode: ChunkTrackingMode, query: &RangeQuery, entity_path: &EntityPath, component: ComponentIdentifier, ) -> QueryResults

Returns the most-relevant chunk(s) for the given RangeQuery and ComponentIdentifier.

The returned vector is guaranteed free of duplicates, by definition.

The criteria for returning a chunk is only that it may contain data that overlaps with the queried range.

The caller should filter the returned chunks further (see Chunk::range) in order to determine how exactly each row of data fit with the rest.

If the entity has static component data associated with it, it will unconditionally override any temporal component data.

Source

pub fn range_relevant_chunks_for_all_components( &self, report_mode: ChunkTrackingMode, query: &RangeQuery, entity_path: &EntityPath, include_static: bool, ) -> QueryResults

Returns the most-relevant chunk(s) for the given RangeQuery.

The criteria for returning a chunk is only that it may contain data that overlaps with the queried range, or that it is static.

The returned vector is free of duplicates.

The caller should filter the returned chunks further (see Chunk::range) in order to determine how exactly each row of data fit with the rest.

Source§

impl ChunkStore

Source

pub fn stats(&self) -> ChunkStoreStats

Returns the physical stats for this store.

I.e. this only accounts for chunks that are physically loaded in memory.

Source§

impl ChunkStore

§Entity stats
Source

pub fn entity_stats_static( &self, entity_path: &EntityPath, ) -> ChunkStoreChunkStats

Physical stats about all chunks with static data for an entity.

I.e. this only accounts for chunks that are physically loaded in memory.

Source

pub fn entity_stats_on_timeline( &self, entity_path: &EntityPath, timeline: &TimelineName, ) -> ChunkStoreChunkStats

Physical stats about all the chunks that has data for an entity on a specific timeline.

I.e. this only accounts for chunks that are physically loaded in memory.

Does NOT include static data.

Source§

impl ChunkStore

§Component path stats
Source

pub fn num_physical_static_events_for_component( &self, entity_path: &EntityPath, component: ComponentIdentifier, ) -> u64

Returns the number of physical static events logged for an entity for a specific component.

I.e. this only accounts for chunks that are physically loaded in memory.

This ignores temporal events.

Source

pub fn num_physical_temporal_events_for_component_on_timeline( &self, timeline: &TimelineName, entity_path: &EntityPath, component: ComponentIdentifier, ) -> u64

Returns the number of physical temporal events logged for an entity for a specific component on a given timeline.

I.e. this only accounts for chunks that are physically loaded in memory.

This ignores static events.

Source

pub fn num_physical_temporal_events_for_component_on_all_timelines( &self, entity_path: &EntityPath, component: ComponentIdentifier, ) -> u64

Returns the number of physical temporal events logged for an entity for a specific component on all timelines.

I.e. this only accounts for chunks that are physically loaded in memory.

This ignores static events.

Source§

impl ChunkStore

Source

pub fn new(id: StoreId, config: ChunkStoreConfig) -> ChunkStore

Instantiate a new empty ChunkStore with the given ChunkStoreConfig.

See also:

Source

pub fn new_handle(id: StoreId, config: ChunkStoreConfig) -> ChunkStoreHandle

Instantiate a new empty ChunkStore with the given ChunkStoreConfig.

Pre-wraps the result in a ChunkStoreHandle.

See also:

Source

pub fn id(&self) -> StoreId

Source

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.

Source

pub fn config(&self) -> &ChunkStoreConfig

See ChunkStoreConfig for more information about configuration.

Source

pub fn entity_tree(&self) -> &EntityTree

The hierarchical tree of all entities registered in the store.

Source

pub fn iter_physical_chunks(&self) -> impl Iterator<Item = &Arc<Chunk>>

Iterate over all physical chunks in the store, in ascending ChunkId order.

Source

pub fn physical_chunk(&self, physical_chunk_id: &ChunkId) -> Option<&Arc<Chunk>>

Get a physical chunk based on its ID.

Source

pub fn use_chunk_or_report_missing(&self, id: &ChunkId) -> Option<&Arc<Chunk>>

Get a physical chunk based on its ID and track the chunk as either used or missing, to signal that it should be kept or fetched.

If the given chunk isn’t physical None is returned and the ID is reported missing.

Source

pub fn use_transient_chunk_or_report_missing( &self, id: &ChunkId, ) -> Option<&Arc<Chunk>>

Get a physical chunk based on its ID and track the chunk as either used or missing, to signal that it should be kept or fetched.

If the given chunk isn’t physical None is returned and the ID is reported missing.

Unlike ChunkStore::use_chunk_or_report_missing, this does not signal that similar chunks should also be downloaded.

Source

pub fn use_chunk_or_indicate(&self, id: &ChunkId) -> Option<&Arc<Chunk>>

Get a physical chunk based on its ID and track the chunk as either used or indicated, to signal that it should be kept or fetched.

If the given chunk isn’t physical None is returned and the ID is reported as possibly needed in the future.

Unlike ChunkStore::use_chunk_or_report_missing, this does make missing chunks required.

Source

pub fn num_physical_chunks(&self) -> usize

Get the number of physical chunks in the store.

Source

pub fn schema(&self) -> &StoreSchema

The incrementally maintained store schema.

Contains all column descriptors, per-entity component sets, timeline types, and per-column metadata.

Source

pub fn physical_chunks(&self) -> impl Iterator<Item = &Arc<Chunk>>

All the currently loaded chunks

Source

pub fn lookup_column_metadata( &self, entity_path: &EntityPath, component: ComponentIdentifier, ) -> Option<ColumnMetadata>

Lookup the ColumnMetadata for a specific EntityPath and re_types_core::Component.

Source

pub fn take_tracked_chunk_ids(&self) -> QueriedChunkIdTracker

Returns and iterator over ChunkIds that were detected as used or missing since the last time since method was called.

Chunks are considered missing when they are required to compute the results of a query, but cannot be found in local memory.

Calling this method is destructive: the internal set is cleared on every call, and will grow back as new queries are run. Callers are expected to call this once per frame in order to know which chunks were missing during the previous frame.

The returned ChunkIds can live anywhere within the lineage tree, and therefore might not be usable for downstream consumers that did not track even compaction/split-off events. Use Self::find_root_chunks to find the original chunks that those IDs descended from.

Source

pub fn tracked_chunk_ids(&self) -> QueriedChunkIdTracker

See Self::take_tracked_chunk_ids for more details.

Source

pub fn report_used_physical_chunk_id(&self, chunk_id: ChunkId)

Signal that the chunk was used and should not be evicted by gc.

Source

pub fn report_missing_virtual_chunk_id(&self, chunk_id: ChunkId)

Signal that a chunk is missing and should be fetched when possible.

Source

pub fn report_transient_used_physical_chunk_id(&self, chunk_id: ChunkId)

Signal that the chunk was used and should not be evicted by gc.

Unlike ChunkStore::report_used_physical_chunk_id, this does not signal that similar chunks should also be downloaded.

Source

pub fn report_transient_missing_virtual_chunk_id(&self, chunk_id: ChunkId)

Signal that a chunk is missing and should be fetched when possible.

Unlike ChunkStore::report_missing_virtual_chunk_id, this does not signal that similar chunks should also be downloaded.

Source

pub fn indicate_virtual_chunk_id(&self, chunk_id: ChunkId)

Signal that a chunk should be fetched when possible.

Unlike ChunkStore::report_missing_virtual_chunk_id, this does not make the missing chunk required.

Source

pub fn num_missing_chunk_ids(&self) -> usize

How many missing chunk IDs are currently registered?

See also ChunkStore::take_tracked_chunk_ids.

Source§

impl ChunkStore

Source

pub fn from_rrd_reader( store_config: &ChunkStoreConfig, reader: &mut dyn Read, ) -> Result<BTreeMap<StoreId, ChunkStore>, Error>

Instantiate a new ChunkStore with the given ChunkStoreConfig.

The stores will be prefilled with the data from the given RRD reader.

See also:

Source

pub async fn from_rrd_reader_async( store_config: &ChunkStoreConfig, reader: &mut (dyn AsyncRead + Unpin + Send), ) -> Result<BTreeMap<StoreId, ChunkStore>, Error>

Instantiate a new ChunkStore with the given ChunkStoreConfig.

The stores will be prefilled with the data from the given RRD reader.

See also:

Source

pub fn from_log_msgs( store_config: &ChunkStoreConfig, log_msgs: impl IntoIterator<Item = LogMsg>, ) -> Result<BTreeMap<StoreId, ChunkStore>, Error>

Instantiate a new ChunkStore with the given ChunkStoreConfig.

The stores will be prefilled with the data in the given log_msgs.

See also:

Source

pub fn handle_from_rrd_reader( store_config: &ChunkStoreConfig, reader: impl Read, ) -> Result<BTreeMap<StoreId, ChunkStoreHandle>, Error>

Instantiate a new ChunkStore with the given ChunkStoreConfig.

Wraps the results in ChunkStoreHandles.

The stores will be prefilled with the data from the given RRD reader.

See also:

Source

pub async fn handle_from_rrd_reader_async<R>( store_config: &ChunkStoreConfig, reader: R, ) -> Result<BTreeMap<StoreId, ChunkStoreHandle>, Error>
where R: AsyncRead + Unpin + Send,

Instantiate new ChunkStoreHandles with the given ChunkStoreConfig.

The stores will be prefilled with the data from the given RRD reader.

See also:

Source§

impl ChunkStore

Source

pub fn register_subscriber( subscriber: Box<dyn ChunkStoreSubscriber>, ) -> ChunkStoreSubscriberHandle

Registers a ChunkStoreSubscriber so it gets automatically notified when data gets added and/or removed to/from a ChunkStore.

Refer to ChunkStoreEvent’s documentation for more information about these events.

§Scope

Registered ChunkStoreSubscribers are global scope: they get notified of all events from all existing ChunkStores, including ChunkStores created after the subscriber was registered.

Use ChunkStoreEvent::store_id to identify the source of an event.

§Late registration

Subscribers must be registered before a store gets created to guarantee that no events were missed.

ChunkStoreEvent::event_id can be used to identify missing events.

§Ordering

The order in which registered subscribers are notified is undefined and will likely become concurrent in the future.

If you need a specific order across multiple subscribers, embed them into an orchestrating subscriber.

Source

pub fn with_subscriber<V, T, F>( _: ChunkStoreSubscriberHandle, f: F, ) -> Option<T>
where V: ChunkStoreSubscriber, F: FnMut(&V) -> T,

Passes a reference to the downcasted subscriber to the given FnMut callback.

Returns None if the subscriber doesn’t exist or downcasting failed.

Source

pub fn with_subscriber_once<V, T, F>( _: ChunkStoreSubscriberHandle, f: F, ) -> Option<T>
where V: ChunkStoreSubscriber, F: FnOnce(&V) -> T,

Passes a reference to the downcasted subscriber to the given FnOnce callback.

Returns None if the subscriber doesn’t exist or downcasting failed.

Source

pub fn with_subscriber_mut<V, T, F>( _: ChunkStoreSubscriberHandle, f: F, ) -> Option<T>
where V: ChunkStoreSubscriber, F: FnMut(&mut V) -> T,

Passes a mutable reference to the downcasted subscriber to the given callback.

Returns None if the subscriber doesn’t exist or downcasting failed.

Source

pub fn register_per_store_subscriber<S>() -> ChunkStoreSubscriberHandle
where S: PerStoreChunkSubscriber + Default + 'static,

Registers a PerStoreChunkSubscriber type so it gets automatically notified when data gets added and/or removed to/from a ChunkStore.

Source

pub fn drop_per_store_subscribers(store_id: &StoreId)

Notifies all PerStoreChunkSubscribers that a store was dropped.

Source

pub fn with_per_store_subscriber<S, T, F>( _: ChunkStoreSubscriberHandle, store_id: &StoreId, f: F, ) -> Option<T>
where S: PerStoreChunkSubscriber + 'static, F: FnMut(&S) -> T,

Passes a reference to the downcasted per-store subscriber to the given FnMut callback.

Returns None if the subscriber doesn’t exist or downcasting failed.

Source

pub fn with_per_store_subscriber_once<S, T, F>( _: ChunkStoreSubscriberHandle, store_id: &StoreId, f: F, ) -> Option<T>
where S: PerStoreChunkSubscriber + 'static, F: FnOnce(&S) -> T,

Passes a reference to the downcasted per-store subscriber to the given FnOnce callback.

Returns None if the subscriber doesn’t exist or downcasting failed.

Source

pub fn with_per_store_subscriber_mut<S, T, F>( _: ChunkStoreSubscriberHandle, store_id: &StoreId, f: F, ) -> Option<T>
where S: PerStoreChunkSubscriber + 'static, F: FnMut(&mut S) -> T,

Passes a mutable reference to the downcasted per-store subscriber to the given callback.

Returns None if the subscriber doesn’t exist or downcasting failed.

Source

pub fn capture_all_subscribers_mem_usage_tree() -> MemUsageTree

Captures the memory usage of all registered subscribers.

Names are disambiguated with a #idx suffix when multiple subscribers share the same name.

Source§

impl ChunkStore

Source

pub fn insert_rrd_manifest( &mut self, rrd_manifest: Arc<RrdManifest>, ) -> Vec<ChunkStoreEvent>

This insert a batch of virtual chunks into the store, according to the given RrdManifest.

All queries will return partial results until the missing physical data gets loaded in.

Source

pub fn insert_chunk( &mut self, chunk: &Arc<Chunk>, ) -> Result<Vec<ChunkStoreEvent>, ChunkStoreError>

Inserts a Chunk in the store.

Iff the store was modified, all registered subscribers will be notified and the resulting ChunkStoreEvent will be returned, or None otherwise.

  • Trying to insert an unsorted chunk (Chunk::is_sorted) will fail with an error.
  • Inserting a duplicated ChunkId will result in a no-op.
  • Inserting an empty Chunk will result in a no-op.
Source

pub fn drop_entity_path( &mut self, entity_path: &EntityPath, ) -> Vec<ChunkStoreEvent>

Unconditionally drops all the data for a given entity_path.

Returns the list of Chunks that were dropped from the store in the form of ChunkStoreEvents.

This is not recursive. The store is unaware of the entity hierarchy.

Trait Implementations§

Source§

impl Clone for ChunkStore

Source§

fn clone(&self) -> ChunkStore

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChunkStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Display for ChunkStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Drop for ChunkStore

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl MemUsageTreeCapture for ChunkStore

Source§

impl SizeBytes for ChunkStore

Source§

fn heap_size_bytes(&self) -> u64

Returns how many bytes self uses on the heap. Read more
Source§

const IS_POD: bool = false

Source§

fn total_size_bytes(&self) -> u64

Returns the total size of self in bytes, accounting for both stack and heap space.
Source§

fn stack_size_bytes(&self) -> u64

Returns the total size of self on the stack, in bytes. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> CustomError for T
where T: Display + Debug + Send + Sync + 'static,

Source§

fn as_any(&self) -> &(dyn Any + Sync + Send + 'static)

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + Sync + Send + 'static)

Source§

fn as_box_any(self: Box<T>) -> Box<dyn Any + Sync + Send>

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> To for T
where T: ?Sized,

Source§

fn to<T>(self) -> T
where Self: Into<T>,

Converts to T by calling Into<T>::into.
Source§

fn try_to<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Tries to convert to T by calling TryInto<T>::try_into.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.