Skip to content

Newly-created VikingDB collections: path-field (uri) filtering returns 0 for a long window after Status=READY — path scalar index build lag, self-heals; READY is not a reliable readiness signal #2947

Description

@gaomind

Summary

The server-side fix for #1119 (PathScope / path-field hierarchical filtering on Volcengine VikingDB) appears to be not effective for newly-created collections. On a collection created on 2026-07-02 via CreateVikingdbCollection (Version=2025-06-09), any filter on the path-typed uri field matches zero rows — including exact full-path matches — while Eq filters on string fields in the same request work correctly (verified with a negative control).

The same fix WAS verified working by us in May 2026 against an older collection (created before the fix landed), directly on our production VikingDB instance — which is why we removed our downstream workaround at the time. The regression surfaced only after we recreated the collection (to pick up the new content/FullText schema for vikingdb-based grep).

Impact

Production-blocking for any OpenViking deployment on the volcengine backend with a recently created collection. Every /api/v1/search/find compiles the tenant isolation filter as And(Eq(account_id), Or(PathScope(uri, ...))); since the PathScope leg matches nothing, all semantic recall returns empty (agent memories are written and vectorized successfully, but can never be recalled). Writes / fs reads / fs grep are unaffected.

Environment

  • OpenViking v0.4.6, storage.vectordb.backend=volcengine (ak/sk console + data plane)
  • Region: cn-beijing
  • Collection: context, ResourceId vdb-d952f89776f14b5c8d3fe5f8c2af3f13, created 2026-07-02T06:36:00Z via Action=CreateVikingdbCollection Version=2025-06-09
  • Index: default, Status=READY, ReloadStatus=done; GetVikingdbIndex confirms uri IS present in ScalarIndex with FieldType=path
  • Stored rows confirmed present via unfiltered search; sample stored value: "uri": "/user/6d3406500f3e865c/peers/openclaw-remote_pm/memories/cases/final-probe.md"

Reproduction

Direct POST /api/vikingdb/data/search/vector with a real 4096-dim query embedding, same body shape OpenViking sends:

# filter rows request_id
1 (none) 5 (top hit is the expected doc, score 0.667) 02178297826179900000000000000000000ffff0a0057bba8b008
2 {"op":"must","field":"account_id","conds":["gaomingda"]} 5 02178297826198800000000000000000000ffff0a0055099f93bf
3 negative control {"op":"must","field":"account_id","conds":["nonexistent-acct"]} 0 ✓ (proves filtering is active) 02178297826210100000000000000000000ffff0a0049c6a263bc
4 {"op":"must","field":"uri","conds":["/user/6d3406500f3e865c"],"para":"-d=-1"} 0 02178297826220000000000000000000000ffff0a004621347d13
5 full OpenViking tenant filter (And of #2 + #4) 0 02178297826232300000000000000000000ffff0a0049c617ecb6
6 {"op":"must","field":"uri","conds":["/"],"para":"-d=-1"} 5 (matches everything) 02178297826252100000000000000000000ffff0a005509c6a0df

Additional matrix via search/random on the same collection: exact full path with -d=0 → 0; exact full path without para → 0; -d=1..7 from "/" → 0 at every depth; no-leading-slash / trailing-slash variants → 0; {"op":"prefix",...}400 InvalidParameter: unsupported 'op' value: prefix.

So the observed semantics on this collection are: only "/" + -d=-1 matches (trivially, everything); every non-root ancestor path — including exact full paths — matches nothing. Note the para parameter is not simply ignored (if it were, "/" would exact-match zero rows), which suggests the path index / ancestor computation is partially active but broken for non-root paths.

Timeline vs #1119

Expected vs Actual

Ask

  1. Does the fix(search): PathScope filter returns zero results on Volcengine VikingDB backend #1119 server-side fix cover collections/indexes created via the 2025-06-09 CreateVikingdbCollection pipeline? If not, can it be extended?
  2. If a collection-level setting/rebuild is required to enable hierarchical path filtering on new collections, please document it.
  3. Happy to provide more request_ids / run additional probes on our instance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions