Skip to content

fix: async geo index race in the create-objects test, agents 1.8.0, and the Java 1.39 compat cell - #515

Merged
g-despot merged 3 commits into
v1-39/mainfrom
v1-39/uv-lock
Aug 14, 2026
Merged

fix: async geo index race in the create-objects test, agents 1.8.0, and the Java 1.39 compat cell#515
g-despot merged 3 commits into
v1-39/mainfrom
v1-39/uv-lock

Conversation

@g-despot

Copy link
Copy Markdown
Contributor

Three fixes for the failures in run 31718384134.

weaviate-agents 1.8.0

search_mode.py passes effort= to QueryAgent.search(), which 1.7.0 does not accept. 1.8.0 adds it, and the pin already allowed it. The lockfile had simply been resolved before 1.8.0 existed.

Worth knowing for #483: that snippet was never wrong, and the parameter was never missing from the client. It was a stale lockfile.

The geo assertion was a write-visibility race, not a 1.39 regression

manage-data.create.py failed on assert len(response.objects) == 1 after a within_geo_range filter. The object inserts correctly and the true distance is about 404 m against a 1000 m radius, so the geometry was never in doubt.

A geo property has its own index with an async queue, so under ASYNC_INDEXING the filter does not see the write immediately. Measured across server versions with the same client:

server ASYNC_INDEXING=true false
1.38.0 - 1.38.4 immediate n/a
1.38.5 - 1.39.0 0, then hit at 0.5-1.3 s immediate

The lag arrives at 1.38.5, not 1.39. CI only surfaced it now because main pins the test server at 1.38.0 while this branch pins 1.39.0.

Fixed in the test scaffolding, not the snippet: a bounded readiness wait before the assertion, which the repo already does for the same reason in search.filters.py. The assertion stays exact. The rendered example is outside the failing markers and is unchanged. A scaffolding-only collection delete was added because a failed run otherwise leaves an object behind and the rerun sees two.

Java 6.3.1

The 1.39.x compatibility row's Java cell was a placeholder. Set to 6.3.1, matching the 1.38 cell's form.

Caveat: 6.3.1's release notes list AND_CROSS, hybrid diversity selection and multi2vec-twelvelabs, which are 1.39 features. But its own CI matrix tops out at Weaviate 1.38.2 with no 1.39 entry, so the claim rests on feature evidence rather than the client's integration tests.

Follow-ups, not addressed here

That geo filters are eventually consistent under ASYNC_INDEXING is reader-relevant and undocumented. The async-indexing docs describe background index building in vector terms only.

Also unresolved: no geo or queue file changed between v1.38.4 and v1.38.5, so it is unclear what activated the queue. If the pre-1.38.5 synchronous behaviour was an unintended fallback, someone owning that code should say which side was the bug.

g-despot and others added 3 commits August 13, 2026 18:30
The search_mode.py snippet passes effort= to QueryAgent.search(), which
1.7.0 does not accept. 1.8.0 adds it. The pin already allowed the newer
release; the lockfile was simply resolved before it existed.
The Python lane failed on a bare AssertionError at the geo-range check in
_includes/code/howto/manage-data.create.py (CI run 31718384134). The
rendered example is correct; the test scaffolding after the
WithGeoCoordinates markers was racing the index.

A geo property is backed by its own index, and the test instances run with
ASYNC_INDEXING enabled, so that index is filled in the background. Measured
against local servers with ASYNC_INDEXING=true, the just-inserted object
becomes visible to a within_geo_range filter after roughly 0.5 to 1.3
seconds: immediate on 1.38.0, 1.38.3 and 1.38.4, delayed from 1.38.5
onward, including 1.38.7 and 1.39.0. With ASYNC_INDEXING=false it is
immediate on every version tested. main pins the test server at 1.38.0 and
this branch pins 1.39.0, which is why the race only surfaces here.

Add a bounded readiness wait before the assertion, mirroring the pattern
already used in _includes/code/howto/search.filters.py, and clear the
Publication collection first so the exact count cannot pick up an object
left behind by an earlier failed run. The assertion stays exact and the
rendered block is unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
java-client 6.3.1 (tag 6.3.1, no v prefix, published 2026-08-13) adds the
AND_CROSS BM25 operator, hybrid diversity selection and multi2vec-twelvelabs
support. multi2vec-twelvelabs is served by Weaviate 1.39.0 and is absent
from 1.38.7, and AND_CROSS needs 1.37.15, 1.38.8 or 1.39.0, so 6.3.1 is the
1.39 client. Link built like the neighbouring 1.38.x cell.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@orca-security-eu orca-security-eu Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Orca Security Scan Summary

Status Check Issues by priority
Passed Passed Secrets high 0   medium 0   low 0   info 0 View in Orca

@g-despot
g-despot merged commit 8629c2d into v1-39/main Aug 14, 2026
8 checks passed
@g-despot
g-despot deleted the v1-39/uv-lock branch August 14, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant