Struct mz_storage::render::debezium::TrackRange
source · [−]Expand description
When to start and end full-range tracking
All values are milliseconds since the unix epoch and are meant to be compared to the
upstream_time_millis
argument to DebeziumDeduplicationState::should_use_record
.
We throw away all tracking data after we see the first record past end
.
Fields
pad_start: i64
Start pre-filling the seen data before we start trusting it
At some point we need to start trusting the TrackFull::seen_positions
map more
than we trust the Debezium high water mark. In order to do that, the
seen_offsets
map must have some data, otherwise all records would show up as
new immediately at the phase transition.
For example, consider the following series of records, presented vertically in the order that they were received:
ts val
-------
1 a
2 b
1 a
If we start tracking at ts 2 and immediately start trusting the hashmap more than the Debezium high water mark then ts 1 will be falsely double-inserted. So we need to start building a buffer before we can start trusting it.
pad_start
is the upstream_time_millis at we we start building the buffer, and
TrackRange::start
is the point at which we start trusting the buffer.
Currently pad_start
defaults to 1 hour (wall clock time) before start
,
as a value that seems overwhelmingly likely to cause the buffer to always have
enough data that it doesn’t give incorrect answers.
start: i64
end: i64
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for TrackRange
impl Send for TrackRange
impl Sync for TrackRange
impl Unpin for TrackRange
impl UnwindSafe for TrackRange
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> FutureExt for T
impl<T> FutureExt for T
sourcefn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
sourcefn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
sourcefn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message T
in a tonic::Request
sourceimpl<P, R> ProtoType<R> for P where
R: RustType<P>,
impl<P, R> ProtoType<R> for P where
R: RustType<P>,
sourcefn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
See RustType::from_proto
.
sourcefn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
See RustType::into_proto
.
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
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
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more