Struct mz_storage::storage_state::StorageState
source · pub struct StorageState {Show 24 fields
pub source_uppers: BTreeMap<GlobalId, Rc<RefCell<Antichain<Timestamp>>>>,
pub source_tokens: BTreeMap<GlobalId, Vec<PressOnDropButton>>,
pub metrics: StorageMetrics,
pub reported_frontiers: BTreeMap<GlobalId, Antichain<Timestamp>>,
pub ingestions: BTreeMap<GlobalId, IngestionDescription<CollectionMetadata>>,
pub exports: BTreeMap<GlobalId, StorageSinkDesc<MetadataFilled, Timestamp>>,
pub now: NowFn,
pub timely_worker_index: usize,
pub timely_worker_peers: usize,
pub instance_context: StorageInstanceContext,
pub persist_clients: Arc<PersistClientCache>,
pub txns_ctx: TxnsContext,
pub sink_tokens: BTreeMap<GlobalId, Vec<PressOnDropButton>>,
pub sink_write_frontiers: BTreeMap<GlobalId, Rc<RefCell<Antichain<Timestamp>>>>,
pub dropped_ids: BTreeSet<GlobalId>,
pub aggregated_statistics: AggregatedStatistics,
pub object_status_updates: Rc<RefCell<Vec<StatusUpdate>>>,
pub internal_cmd_tx: Rc<RefCell<dyn InternalCommandSender>>,
pub read_only_rx: Receiver<bool>,
pub read_only_tx: Sender<bool>,
pub async_worker: AsyncStorageWorker<Timestamp>,
pub storage_configuration: StorageConfiguration,
pub dataflow_parameters: DataflowParameters,
pub tracing_handle: Arc<TracingHandle>,
}
Expand description
Worker-local state related to the ingress or egress of collections of data.
Fields§
§source_uppers: BTreeMap<GlobalId, Rc<RefCell<Antichain<Timestamp>>>>
The highest observed upper frontier for collection.
This is shared among all source instances, so that they can jointly advance the frontier even as other instances are created and dropped. Ideally, the Storage module would eventually provide one source of truth on this rather than multiple, and we should aim for that but are not there yet.
source_tokens: BTreeMap<GlobalId, Vec<PressOnDropButton>>
Handles to created sources, keyed by ID
NB: The type of the tokens must not be changed to something other than PressOnDropButton
to prevent usage of custom shutdown tokens that are tricky to get right.
metrics: StorageMetrics
Metrics for storage objects.
reported_frontiers: BTreeMap<GlobalId, Antichain<Timestamp>>
Tracks the conditional write frontiers we have reported.
ingestions: BTreeMap<GlobalId, IngestionDescription<CollectionMetadata>>
Descriptions of each installed ingestion.
exports: BTreeMap<GlobalId, StorageSinkDesc<MetadataFilled, Timestamp>>
Descriptions of each installed export.
now: NowFn
Undocumented
timely_worker_index: usize
Index of the associated timely dataflow worker.
timely_worker_peers: usize
Peers in the associated timely dataflow worker.
instance_context: StorageInstanceContext
Other configuration for sources and sinks.
persist_clients: Arc<PersistClientCache>
A process-global cache of (blob_uri, consensus_uri) -> PersistClient. This is intentionally shared between workers
txns_ctx: TxnsContext
Context necessary for rendering txn-wal operators.
sink_tokens: BTreeMap<GlobalId, Vec<PressOnDropButton>>
Tokens that should be dropped when a dataflow is dropped to clean up
associated state.
NB: The type of the tokens must not be changed to something other than PressOnDropButton
to prevent usage of custom shutdown tokens that are tricky to get right.
sink_write_frontiers: BTreeMap<GlobalId, Rc<RefCell<Antichain<Timestamp>>>>
Frontier of sink writes (all subsequent writes will be at times at or equal to this frontier)
dropped_ids: BTreeSet<GlobalId>
Collection ids that have been dropped but not yet reported as dropped
aggregated_statistics: AggregatedStatistics
Statistics for sources and sinks.
object_status_updates: Rc<RefCell<Vec<StatusUpdate>>>
Status updates reported by health operators.
NOTE: Operators that append to this collection should take care to only add new status updates if the status of the ingestion/export in question has changed.
internal_cmd_tx: Rc<RefCell<dyn InternalCommandSender>>
Sender for cluster-internal storage commands. These can be sent from within workers/operators and will be distributed to all workers. For example, for shutting down an entire dataflow from within a operator/worker.
read_only_rx: Receiver<bool>
When this replica/cluster is in read-only mode it must not affect any changes to external state. This flag can only be changed by a StorageCommand::AllowWrites.
Everything running on this replica/cluster must obey this flag. At the time of writing, nothing currently looks at this flag. TODO(benesch): fix this.
NOTE: In the future, we might want a more complicated flag, for example something that tells us after which timestamp we are allowed to write. In this first version we are keeping things as simple as possible!
read_only_tx: Sender<bool>
Send-side for read-only state.
async_worker: AsyncStorageWorker<Timestamp>
Async worker companion, used for running code that requires async, which the timely main loop cannot do.
storage_configuration: StorageConfiguration
Configuration for source and sink connections.
dataflow_parameters: DataflowParameters
Dynamically configurable parameters that control how dataflows are rendered.
NOTE(guswynn): we should consider moving these into storage_configuration
.
tracing_handle: Arc<TracingHandle>
A process-global handle to tracing configuration.
Implementations§
source§impl StorageState
impl StorageState
sourcepub fn handle_storage_command(&mut self, cmd: StorageCommand)
pub fn handle_storage_command(&mut self, cmd: StorageCommand)
Entry point for applying a storage command.
NOTE: This does not have access to the timely worker and therefore
cannot render dataflows. For dataflow rendering, this needs to either
send asynchronous command to the async_worker
or internal
commands to the internal_cmd_tx
.
sourcefn drop_collection(&mut self, id: GlobalId)
fn drop_collection(&mut self, id: GlobalId)
Drop the identified storage collection from the storage state.
Auto Trait Implementations§
impl !Freeze for StorageState
impl !RefUnwindSafe for StorageState
impl !Send for StorageState
impl !Sync for StorageState
impl Unpin for StorageState
impl !UnwindSafe for StorageState
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> FmtForward for T
impl<T> FmtForward for T
source§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.source§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.source§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.source§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.source§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.source§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.source§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.source§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.source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§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
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§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 moresource§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 moresource§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
source§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
source§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.source§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.source§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.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.source§impl<T> Tap for T
impl<T> Tap for T
source§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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.source§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.source§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.source§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.source§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.source§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.source§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.