Skip to main content

InstanceTracker

Struct InstanceTracker 

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

Thread-safer Tracker — wird sowohl im DataWriter als auch im DataReader instanziiert.

Implementations§

Source§

impl InstanceTracker

Source

pub fn new() -> Self

Neuer Tracker mit eigenem InstanceHandleAllocator.

Source

pub fn with_allocator(allocator: Arc<InstanceHandleAllocator>) -> Self

Tracker mit shared Allocator (z.B. wenn Writer und Reader im selben Participant ihre Handles aus demselben Pool ziehen).

Source

pub fn register( &self, keyhash: KeyHash, key_holder: Vec<u8>, timestamp: Option<Time>, ) -> InstanceHandle

Registriert die Instanz, wenn sie noch nicht bekannt ist; sonst reaktiviert sie nur (Spec §2.2.2.4.2.5).

Liefert immer den (stabilen) InstanceHandle zurueck.

Source

pub fn should_deliver_under_time_based_filter( &self, keyhash: &KeyHash, sample_ts: Time, min_separation_nanos: u128, ) -> bool

Spec §2.2.3.12 TIME_BASED_FILTER — entscheidet, ob ein Sample mit sample_ts ans User-API geliefert werden darf. false wenn t - last_delivered_ts < min_separation (drop); true sonst (deliver).

Bei unbekannter Instanz oder erstem Sample (kein last_delivered_ts) ist immer true.

Source

pub fn should_deliver_under_destination_order( &self, keyhash: &KeyHash, source_ts: Time, by_source_timestamp: bool, ) -> bool

Spec §2.2.3.18 DESTINATION_ORDER — entscheidet, ob ein Sample mit source_ts ans User-API geliefert werden darf. BY_RECEPTION_TIMESTAMP: immer true. BY_SOURCE_TIMESTAMP: nur wenn source_ts strikt groesser als last_delivered_ts dieser Instanz ist (Tie-Breaker bei gleichem Timestamp via Writer-GUID kommt im typisierten Pfad).

Source

pub fn record_delivery(&self, keyhash: &KeyHash, sample_ts: Time)

Markiert dass ein Sample mit sample_ts ans User-API geliefert wurde (Spec §2.2.3.12 — fuer naechste Filter-Entscheidung).

Source

pub fn lookup(&self, keyhash: &KeyHash) -> Option<InstanceHandle>

Lookup ohne Mutation (Spec §2.2.2.4.2.14 lookup_instance).

Source

pub fn get_by_handle(&self, handle: InstanceHandle) -> Option<InstanceState>

Liefert eine Kopie des State-Snapshots fuer einen Handle.

Source

pub fn get_by_keyhash(&self, keyhash: &KeyHash) -> Option<InstanceState>

Liefert eine Kopie des State-Snapshots fuer einen KeyHash.

Source

pub fn get_key_holder(&self, handle: InstanceHandle) -> Option<Vec<u8>>

Liefert den Key-Holder-Bytes-Stream fuer einen Handle (Spec §2.2.2.4.2.13 get_key_value).

Source

pub fn dispose(&self, handle: InstanceHandle, timestamp: Option<Time>) -> bool

Markiert die Instanz als NOT_ALIVE_DISPOSED (Spec §2.2.2.4.2.10 dispose).

Liefert false wenn die Instanz nicht bekannt ist.

Source

pub fn unregister( &self, handle: InstanceHandle, timestamp: Option<Time>, ) -> bool

Dekrementiert den Writer-Counter; faellt er auf 0, geht die Instanz nach NOT_ALIVE_NO_WRITERS (Spec §2.2.2.4.2.7).

Source

pub fn should_accept_sample_under_exclusive_ownership( &self, keyhash: &KeyHash, writer_guid: [u8; 16], writer_strength: i32, ) -> bool

Spec §2.2.3.10 OWNERSHIP=EXCLUSIVE Strength-Selection. Liefert true wenn ein Sample vom Writer mit (writer_guid, writer_strength) fuer die Instanz keyhash akzeptiert werden soll.

Algorithmus (Spec §2.2.3.10):

  • Kein aktueller Owner → akzeptiere + setze als Owner.
  • Strength > current → akzeptiere + ersetze Owner.
  • Strength == current und guid > current_guid → akzeptiere (Spec-Tie-Breaker via lexikographisch hoehere Guid).
  • Strength < current → reject.
  • Strength == current und guid < current → reject.
  • Strength == current und guid == current → akzeptiere (selber Writer).
Source

pub fn clear_owner_for_writer(&self, writer_guid: [u8; 16]) -> usize

Spec §2.2.3.23 — bei Liveliness-Loss eines Writers: clear-Owner fuer alle Instanzen, deren Owner dieser Writer war. Naechster Sample triggert Failover-Selection.

Source

pub fn clear_owner_for_writer_prefix(&self, prefix: [u8; 12]) -> usize

Wie Self::clear_owner_for_writer, aber Match nach den ersten 12 Bytes der GUID (GuidPrefix). Erlaubt Failover wenn nur die Participant-Identitaet (z.B. via SPDP-Lease-Expiry) bekannt ist.

Source

pub fn autopurge( &self, now: Time, autopurge_disposed_delay_nanos: u128, autopurge_nowriter_delay_nanos: u128, ) -> usize

Spec §2.2.3.22 READER_DATA_LIFECYCLE — purgt Instanzen, deren Disposed/NoWriter-Marker laenger als der jeweilige Delay her ist. now ist die Caller-side Wall-Clock; die Delays sind in Nanoseconds. Liefert die Anzahl entfernter Instanzen.

Lazy-Purge: wird vom Read-Pfad (oder einem Background-Tick) gerufen. Spec laesst die Strategie offen — wir loeschen die betroffene Instanz vollstaendig, sodass nachfolgende read/take sie nicht mehr sehen.

Source

pub fn observe_sample( &self, keyhash: KeyHash, key_holder: Vec<u8>, timestamp: Option<Time>, ) -> (InstanceHandle, bool)

Reader-seitiger Hook: Markiert, dass ein Sample fuer diese Instanz angekommen ist. Liefert (handle, war_neu), wo war_neu == true heisst dass diese Instanz vorher unbekannt war oder die Reader-View frisch zurueckgesetzt wurde (view_state = NEW).

Source

pub fn mark_view_seen(&self, handle: InstanceHandle)

Reader-seitig: nach erstem read/take einer Instanz wird ihr View-State auf NOT_NEW gesetzt.

Source

pub fn drain_samples(&self, handle: InstanceHandle, n: u32)

Reader-seitig: nach take reduziert sich samples_in_cache um n.

Source

pub fn ordered_handles(&self) -> Vec<InstanceHandle>

Listet alle Instanz-Handles in stabiler Reihenfolge (BTreeMap- Order ueber KeyHash). Spec §2.2.2.5.3.28 read_next_instance.

Source

pub fn next_handle_after( &self, previous: InstanceHandle, ) -> Option<InstanceHandle>

Liefert das erste Handle, dessen Sortier-Ordnung strikt hinter previous_handle liegt (oder das erste ueberhaupt, wenn previous == HANDLE_NIL). Spec §2.2.2.5.3.28.

Source

pub fn len(&self) -> usize

Anzahl getrackter Instanzen.

Source

pub fn is_empty(&self) -> bool

true wenn keine Instanzen getrackt sind.

Trait Implementations§

Source§

impl Clone for InstanceTracker

Source§

fn clone(&self) -> Self

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 InstanceTracker

Source§

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

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

impl Default for InstanceTracker

Source§

fn default() -> Self

Returns the “default value” for a type. 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> 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<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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, 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.