refactor: fold the maintained-index API down to one entry point

Three cleanups to the LsmWriteSpec surface, all removing something:

`with_no_maintained_indexes` is gone. `with_maintained_indexes` now takes
`impl Into<Option<Vec<String>>>`, so `None` asks for every supported index,
a list pins an exact set, and an empty list maintains none — one method
covering what two did, and the argument reads the same as the field it sets.

`IndexConfig::is_memwal_maintainable` is gone. What a memtable can build is
lance's to say, and lance already says it via `is_maintainable_index_type`;
mirroring that onto a lancedb type only added a place for the two to drift.

`resolve_maintained_indexes` is now public and takes `&[IndexConfig]` rather
than a table. It was already the whole of the resolution rules — infer from
the committed set, or validate a named one — and a server installing specs
on a caller's behalf needs exactly those rules. Sharing it means sophon no
longer keeps a second copy that could disagree about what an absent list
means, and the error now names the table's indexes so a rejected call says
what was actually available.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Daniel Rammer
2026-07-31 11:17:44 -05:00
co-authored by Claude Opus 5
parent dd197ad0ff
commit 4bb0effcb2
9 changed files with 103 additions and 101 deletions
+4 -6
View File
@@ -805,13 +805,11 @@ impl TryFrom<LsmWriteSpec> for lancedb::table::LsmWriteSpec {
)));
}
};
// An omitted `maintainedIndexes` keeps the spec's default of "every
// An omitted `maintainedIndexes` is the spec's default of "every
// index the MemWAL can maintain".
let spec = match value.maintained_indexes {
Some(names) => spec.with_maintained_indexes(names),
None => spec,
};
Ok(spec.with_writer_config_defaults(writer_config_defaults))
Ok(spec
.with_maintained_indexes(value.maintained_indexes)
.with_writer_config_defaults(writer_config_defaults))
}
}