pub struct StreamFragmentGraph {
fragments: HashMap<GlobalId<{ IdCategory::Fragment }>, BuildingFragment>,
downstreams: HashMap<GlobalId<{ IdCategory::Fragment }>, HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>>,
upstreams: HashMap<GlobalId<{ IdCategory::Fragment }>, HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>>,
dependent_table_ids: HashSet<TableId>,
specified_parallelism: Option<NonZeroUsize>,
max_parallelism: usize,
}
Expand description
In-memory representation of a Fragment Graph, built from the StreamFragmentGraphProto
from the frontend.
This only includes nodes and edges of the current job itself. It will be converted to CompleteStreamFragmentGraph
later,
that contains the additional information of pre-existing
fragments, which are connected to the graph’s top-most or bottom-most fragments.
Fields§
§fragments: HashMap<GlobalId<{ IdCategory::Fragment }>, BuildingFragment>
stores all the fragments in the graph.
downstreams: HashMap<GlobalId<{ IdCategory::Fragment }>, HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>>
stores edges between fragments: upstream => downstream.
upstreams: HashMap<GlobalId<{ IdCategory::Fragment }>, HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>>
stores edges between fragments: downstream -> upstream.
dependent_table_ids: HashSet<TableId>
Dependent relations of this job.
specified_parallelism: Option<NonZeroUsize>
The default parallelism of the job, specified by the STREAMING_PARALLELISM
session
variable. If not specified, all active worker slots will be used.
max_parallelism: usize
Specified max parallelism, i.e., expected vnode count for the graph.
The scheduler on the meta service will use this as a hint to decide the vnode count for each fragment.
Note that the actual vnode count may be different from this value. For example, a no-shuffle exchange between current fragment graph and an existing upstream fragment graph requires two fragments to be in the same distribution, thus the same vnode count.
Implementations§
source§impl StreamFragmentGraph
impl StreamFragmentGraph
sourcepub fn new(
env: &MetaSrvEnv,
proto: StreamFragmentGraphProto,
job: &StreamingJob,
) -> MetaResult<Self>
pub fn new( env: &MetaSrvEnv, proto: StreamFragmentGraphProto, job: &StreamingJob, ) -> MetaResult<Self>
Create a new StreamFragmentGraph
from the given StreamFragmentGraphProto
, with all
global IDs correctly filled.
sourcepub fn incomplete_internal_tables(&self) -> BTreeMap<u32, Table>
pub fn incomplete_internal_tables(&self) -> BTreeMap<u32, Table>
Retrieve the incomplete internal tables map of the whole graph.
Note that some fields in the table catalogs are not filled during the current phase, e.g.,
fragment_id
, vnode_count
. They will be all filled after a TableFragments
is built.
Be careful when using the returned values.
sourcepub fn refill_internal_table_ids(&mut self, table_id_map: HashMap<u32, u32>)
pub fn refill_internal_table_ids(&mut self, table_id_map: HashMap<u32, u32>)
Refill the internal tables’ table_id
s according to the given map, typically obtained from
create_internal_table_catalog
.
sourcepub fn fit_internal_table_ids(
&mut self,
old_internal_tables: Vec<Table>,
) -> MetaResult<()>
pub fn fit_internal_table_ids( &mut self, old_internal_tables: Vec<Table>, ) -> MetaResult<()>
Set internal tables’ table_id
s according to a list of internal tables
sourcepub fn table_fragment_id(&self) -> FragmentId
pub fn table_fragment_id(&self) -> FragmentId
Returns the fragment id where the streaming job node located.
sourcepub fn dml_fragment_id(&self) -> Option<FragmentId>
pub fn dml_fragment_id(&self) -> Option<FragmentId>
Returns the fragment id where the table dml is received.
sourcepub fn dependent_table_ids(&self) -> &HashSet<TableId>
pub fn dependent_table_ids(&self) -> &HashSet<TableId>
Get the dependent streaming job ids of this job.
sourcepub fn specified_parallelism(&self) -> Option<NonZeroUsize>
pub fn specified_parallelism(&self) -> Option<NonZeroUsize>
Get the parallelism of the job, if specified by the user.
sourcepub fn max_parallelism(&self) -> usize
pub fn max_parallelism(&self) -> usize
Get the expected vnode count of the graph. See documentation of the field for more details.
sourcefn get_downstreams(
&self,
fragment_id: GlobalId<{ IdCategory::Fragment }>,
) -> &HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>
fn get_downstreams( &self, fragment_id: GlobalId<{ IdCategory::Fragment }>, ) -> &HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>
Get downstreams of a fragment.
sourcefn get_upstreams(
&self,
fragment_id: GlobalId<{ IdCategory::Fragment }>,
) -> &HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>
fn get_upstreams( &self, fragment_id: GlobalId<{ IdCategory::Fragment }>, ) -> &HashMap<GlobalId<{ IdCategory::Fragment }>, StreamFragmentEdge>
Get upstreams of a fragment.
pub fn collect_snapshot_backfill_info( &self, ) -> MetaResult<Option<SnapshotBackfillInfo>>
Trait Implementations§
source§impl Default for StreamFragmentGraph
impl Default for StreamFragmentGraph
source§fn default() -> StreamFragmentGraph
fn default() -> StreamFragmentGraph
Auto Trait Implementations§
impl Freeze for StreamFragmentGraph
impl RefUnwindSafe for StreamFragmentGraph
impl Send for StreamFragmentGraph
impl Sync for StreamFragmentGraph
impl Unpin for StreamFragmentGraph
impl UnwindSafe for StreamFragmentGraph
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<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
§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> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§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> 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> 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
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
§impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level
.source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
.source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n
with metric_level
set to
MetricLevel::Debug
and relabel_num
set to 1.§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> Pointable for T
impl<T> Pointable for T
§impl<Source> Sculptor<HNil, HNil> for Source
impl<Source> Sculptor<HNil, HNil> for Source
§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.