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
impl ChangePoller
Sourcepub fn from_sequence(seq: u64) -> Self
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.
Sourcepub fn with_batch_limit(self, limit: usize) -> Self
pub fn with_batch_limit(self, limit: usize) -> Self
Creates a poller with a custom batch limit.
Sourcepub fn last_sequence(&self) -> u64
pub fn last_sequence(&self) -> u64
Returns the last sequence number this poller has consumed.
Save this value to resume polling after a restart.
Sourcepub fn poll(&mut self, storage: &dyn StorageEngine) -> Result<Vec<WatchEvent>>
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).
Sourcepub fn poll_sync_events(
&mut self,
storage: &dyn StorageEngine,
) -> Result<Vec<(u64, WatchEventRecord)>>
Available on crate feature sync only.
pub fn poll_sync_events( &mut self, storage: &dyn StorageEngine, ) -> Result<Vec<(u64, WatchEventRecord)>>
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§
Auto Trait Implementations§
impl Freeze for ChangePoller
impl RefUnwindSafe for ChangePoller
impl Send for ChangePoller
impl Sync for ChangePoller
impl Unpin for ChangePoller
impl UnsafeUnpin for ChangePoller
impl UnwindSafe for ChangePoller
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
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 more