fn build_upsert_operator<'scope, A, T, FromTime>(
input: VecCollection<'scope, T, (UpsertKey, Option<UpsertValue>, FromTime), Diff>,
resume_upper: Antichain<T>,
persist_arranged: Arranged<'scope, TraceAgent<A::Spine>>,
persist_token: Option<Vec<PressOnDropButton>>,
upsert_metrics: UpsertMetrics,
source_config: SourceExportCreationConfig,
) -> (VecCollection<'scope, T, Result<Row, DataflowError>, Diff>, StreamVec<'scope, T, (Option<GlobalId>, HealthStatusUpdate)>, StreamVec<'scope, T, Infallible>, PressOnDropButton)where
A: UpsertStashArm<T, FromTime::Order>,
T: Timestamp + TotalOrder + Sync + Refines<Timestamp> + Lattice + Columnation + Columnar + Default,
for<'a> Ref<'a, T>: Copy + Ord,
FromTime: Debug + ExchangeData + Clone + Ord + Sync + UpsertSourceTime,Expand description
The flavor-independent upsert-v2 operator loop, generic over an
UpsertStashArm.
Consumes the source input and the arranged persist feedback (constructed
per flavor by upsert_inner) and drives the ingest / seal / drain /
capability loop described in the module docs, calling through the arm at
the few points where the flavors diverge.