Skip to main content

ChangePoller

Struct ChangePoller 

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

Cross-process change poller.

Tracks a cursor position in the WAL event log and returns new events on each poll() call. Each poller is independent — multiple readers can poll the same database at different rates.

§Example

use std::time::Duration;
use pulsedb::{Config, ChangePoller};
use pulsedb::storage::{StorageEngine, RedbStorage};

let storage = RedbStorage::open(dir.path().join("test.db"), &Config::default())?;
let mut poller = ChangePoller::new();

loop {
    let events = poller.poll(&storage)?;
    for event in events {
        println!("Change: {:?}", event.event_type);
    }
    std::thread::sleep(Duration::from_millis(100));
}

Implementations§

Source§

impl ChangePoller

Source

pub fn new() -> Self

Creates a new poller starting from sequence 0 (receives all events).

Source

pub fn from_sequence(seq: u64) -> Self

Creates a poller starting from a specific sequence number.

Events with sequence <= seq will not be returned. Use this to resume polling from a previously saved position.

Source

pub fn with_batch_limit(self, limit: usize) -> Self

Creates a poller with a custom batch limit.

Source

pub fn last_sequence(&self) -> u64

Returns the last sequence number this poller has consumed.

Save this value to resume polling after a restart.

Source

pub fn poll(&mut self, storage: &dyn StorageEngine) -> Result<Vec<WatchEvent>>

Polls for new experience changes since the last call.

Returns new WatchEvents in sequence order and advances the internal cursor. Returns an empty vec if no new changes exist.

Backward compatibility: Only returns Experience-type events. Non-experience WAL events (relations, insights, collectives) are skipped but the cursor still advances past them.

§Performance

Target: < 10ms per call. This performs a range scan on the watch_events redb table, which is O(k) where k = number of new events (not total events).

Source

pub fn poll_sync_events( &mut self, storage: &dyn StorageEngine, ) -> Result<Vec<(u64, WatchEventRecord)>>

Available on crate feature sync only.

Polls for ALL entity changes since the last call (sync protocol).

Unlike poll() which only returns Experience events, this method returns all entity types with their WAL sequence numbers. Used by the sync pusher (Phase 3) to construct SyncChange objects.

Returns (sequence, record) pairs in ascending sequence order.

Trait Implementations§

Source§

impl Default for ChangePoller

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more