pub struct CompactionPlanner { /* private fields */ }Implementations§
Source§impl CompactionPlanner
impl CompactionPlanner
pub fn new(config: CompactionConfig) -> Self
Sourcepub fn plan(&self, files: &[DataFileEntry]) -> Vec<DataFileEntry>
pub fn plan(&self, files: &[DataFileEntry]) -> Vec<DataFileEntry>
Select files to compact.
Picks files smaller than target_file_size_bytes, sorts them smallest-first
(cheapest to read), and caps the selection at max_files_per_pass. This
tiered approach prevents a single pass from compacting the entire table into
memory when thousands of small files exist.
Foreign-write detection: every file written by the AI-Lake SDK always carries a
centroid_b64 (see make_data_file_entry/make_data_file_entry_indexing —
centroid is computed and stored even for IndexStatus::Indexing files, before
the HNSW build itself completes). A manifest entry with no centroid was never
produced by AI-Lake — almost certainly a generic Iceberg engine (Spark/Trino
OPTIMIZE / rewrite_data_files, DuckDB) rewrote the file with no knowledge of
AI-Lake. Every query against it silently degrades to an O(N) flat scan (see the
flat_scan_unexpected warning in scanner.rs::search). These files bypass both
the size filter and min_files_to_compact — a single such file is worth
repairing on its own; it shouldn’t wait for enough small files to accumulate.
Auto Trait Implementations§
impl Freeze for CompactionPlanner
impl RefUnwindSafe for CompactionPlanner
impl Send for CompactionPlanner
impl Sync for CompactionPlanner
impl Unpin for CompactionPlanner
impl UnsafeUnpin for CompactionPlanner
impl UnwindSafe for CompactionPlanner
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for 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