httpapi: vector-store: expose index creation options via API endpoints - #545
Merged
Merged
Conversation
QuerthDP
force-pushed
the
add-index-options-to-status
branch
6 times, most recently
from
August 5, 2026 14:41
0ea44d0 to
179a764
Compare
QuerthDP
marked this pull request as ready for review
August 5, 2026 14:42
There was a problem hiding this comment.
Pull request overview
Exposes in-memory index creation options through index listing and lookup APIs.
Changes:
- Adds
GET /indexes/{keyspace}/{index}/info. - Extends index metadata responses with vector/full-text options.
- Adds integration tests and shared test utilities.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
api/openapi.json |
Updates generated API specification. |
crates/httpapi/src/lib.rs |
Defines index option response models. |
crates/httpclient/src/lib.rs |
Adds the index-info client method. |
crates/vector-store/src/engine.rs |
Simplifies index metadata access. |
crates/vector-store/src/httproutes.rs |
Implements listing and info responses. |
crates/vector-store/src/indexes.rs |
Retains full-text index options. |
crates/vector-store/src/lib.rs |
Adds full-text option accessors. |
tests/integration/common.rs |
Centralizes index test helpers. |
tests/integration/index_info.rs |
Tests option responses. |
tests/integration/index_status.rs |
Uses shared helpers. |
tests/integration/main.rs |
Registers new test modules. |
tests/integration/opensearch.rs |
Updates vector test configuration. |
tests/integration/quantization.rs |
Validates quantization in options. |
tests/integration/routing.rs |
Moves helpers to the common module. |
tests/integration/vs_index.rs |
Updates vector index test configuration. |
ewienik
requested changes
Aug 6, 2026
The keyspace/index parameter descriptions on
`GET /api/v1/indexes/{keyspace}/{index}/status` still said
"vector index", even though the handler has served both
vector and fulltext indexes for a while.
The 200 response example was also missing the `build_progress`
field that the response actually returns.
`GET /indexes` already read fulltext indexes straight from the shared `Arc<RwLock<Indexes>>`, but for vector indexes it round-tripped through the Engine actor via `Engine::GetVsIndexKeys` to fetch the same data the lock already holds. Refactor to read both kinds directly instead, and drop the `Engine::GetVsIndexKeys` message and its plumbing.
Today the only way to see the options an index was created with is to query ScyllaDB directly via CQL (`system_schema.indexes`). Surface the options Vector Store already holds in memory through `GET /indexes` instead, so operators and clients can inspect them without a separate CQL round-trip. Report the type as a `type` tag on `IndexOptions` itself rather than as a separate, flattened `IndexType`, so each index's type and options live together under a single `options` object instead of being split across the response. Fulltext indexes now store an `IndexOptionsFts` on their entry (currently empty; the tantivy backend hardcodes analyzer and token positions) so `get_indexes` can read options for both kinds. Bump the API version to 3.0.0. Restructuring the response is a breaking change for existing clients. Adjust tests to match the new `IndexInfo` fields comparison.
`setup`, `add_table`, `make_index`, and the scan/uuid helpers were defined in `routing.rs` even though `index_status.rs` already needed them too and had to reach for them. Move them into a new common module, shared by all integration test modules, with no behavior change.
The integration tests only had a way to build a default-options vector index (`make_index`). Rename it to `make_vs_index` and factor it through a shared `make_index_with_kind` that takes the `IndexKind` directly, so tests can construct an index with explicit options without duplicating the `IndexMetadata` boilerplate.
Add a test covering the options field added to `GET /indexes`. Create two vector indexes with distinct options and one fulltext index, then check each listed entry's options match what it was created with. Add `make_fts_index`, the fulltext-index builder the test needs.
The `/indexes` listing added in a previous commit reports each index's
type and creation options, but there was no way to look up that same
information for a single, known index without listing everything
and filtering client-side.
Add `GET /indexes/{keyspace}/{index}`, returning the same `IndexInfo`
shape scoped to one index (404 if it doesn't exist).
Cover `GET /indexes/{keyspace}/{index}` added in a previous commit.
One test for a vector index with non-default options,
one for a fulltext index, each checking the endpoint reports the exact
options (including type) the index was created with.
Add the `HttpClient::index_info` helper the tests need.
QuerthDP
force-pushed
the
add-index-options-to-status
branch
from
August 6, 2026 13:29
179a764 to
5a3f7a6
Compare
Member
Author
|
Changelog:
|
ewienik
approved these changes
Aug 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Today the only way to see the options an index was created with is to
query ScyllaDB directly via CQL (
system_schema.indexes). This PRsurfaces those options through the HTTP API, using only what Vector Store
already holds in memory - no extra ScyllaDB queries.
GET /indexesnow includes each index's creation options, alongside its existing keyspace/name/type fields.GET /indexes/{keyspace}/{index}/statusis unchanged - it staysfocused on operational status (state, count, build progress).
GET /indexes/{keyspace}/{index}is new - the sametype and options information as the
/indexeslisting, scoped to oneindex, so a caller who already knows which index they care about
doesn't have to fetch and filter the whole list.
Fixes: VECTOR-723