You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(rollout): flush sweeper only covers LRU-resident stores; evicted stores may never flush #185
The periodic flush sweeper snapshots the LRU of resident rollout stores. A store that is written to and then evicted from the LRU before the next flush tick has an unsealed active memtable that nobody is left to flush.
Evidence
crates/lance-context-server/src/state.rs:490-502 — the sweeper snapshots self.rollout_stores (the LRU) and iterates only over what is resident:
RolloutStore::close (crates/lance-context-core/src/rollout_store.rs:642-660) is the mechanism that drains the writer, and state.rs:565 calls it — but it needs confirming that every LRU eviction path reaches that call, including eviction triggered implicitly by LruCache::put when the cache is at capacity.
Note also that close() uses Arc::try_unwrap and silently gives up if another handle is live (rollout_store.rs:653-658):
Err(_shared) => {}
So even on a path that does call close(), a concurrent in-flight add holding a cloned Arc makes the drain a no-op.
Impact
Same failure mode as #184: rows are durable but potentially never become visible. Most likely to bite deployments with many rollout stores and a small rollout_store_cache_capacity, where eviction is routine rather than exceptional.
Activity
fix(rollout): seal the memtable in cleanup_own_shard before merging (#…
fix(rollout): stop swallowing failures in RolloutStore's detached close
fix(rollout): stop swallowing failures in RolloutStore's detached clo…