Bump mongo-java-driver from 3.12.4 to 3.12.10#4
Merged
lvca merged 1 commit intoSep 16, 2021
Conversation
Contributor
|
@dependabot rebase |
81de53e to
8786b96
Compare
Bumps [mongo-java-driver](https://github.com/mongodb/mongo-java-driver) from 3.12.4 to 3.12.10. - [Release notes](https://github.com/mongodb/mongo-java-driver/releases) - [Commits](mongodb/mongo-java-driver@r3.12.4...r3.12.10) --- updated-dependencies: - dependency-name: org.mongodb:mongo-java-driver dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
8786b96 to
44f17ac
Compare
This was referenced Jan 27, 2026
This was referenced Feb 18, 2026
Merged
Merged
This was referenced Apr 6, 2026
This was referenced May 6, 2026
lvca
added a commit
that referenced
this pull request
May 8, 2026
#4136) * HTTP: route int8 query vectors to byte[] via $bytes/$int8 markers (#4135) Closes the HTTP/JSON gap left by the INT8 ingest landing (#4132/#4133): clients can now send int8 query vectors that reach the engine as byte[] and trigger the encoding-aware dequantization on LSM_VECTOR indexes, rather than getting silently round-tripped through float32 and losing the 4x payload claim on the wire. Wire convention (Extended JSON-style): - {"$bytes": "<base64>"} -> byte[] decoded from base64 - {"$int8": [v0, v1, ...]} -> byte[] packed from int values in [-128, 127] The int8 form also accepts the float[] / double[] shapes that JSONObject.toMap(optimizeNumericArrays=true) produces for JSON integer arrays, with a fractional-value check that rejects non-integer floats so a caller mixing up float and int8 vectors fails loudly at the wire boundary. Implementation: - AbstractQueryHandler.decodeTypedJsonMarkers recursively walks the parsed param map and rewrites single-key {"$bytes" | "$int8": ...} objects into byte[]; multi-key maps and unrelated single-key maps pass through unchanged so existing user data with leading-$ keys is not silently transformed. - mapParams calls the decoder before its existing ordinal-vs-named routing so the byte[] flows verbatim to SQL parameter binding. Tests: - AbstractQueryHandlerTypedJsonMarkersTest: 11 unit cases pin the decoder contract (base64 decode, int list decode, float[] decode, out-of-range / non-integer / non-numeric / bad-base64 rejection, multi-key passthrough, list-of-markers recursion, scalar passthrough). - Int8VectorHttpIT: 2 end-to-end cases spin up the HTTP server, create an INT8 vector index, and submit `vector.neighbors` queries via HTTP using both marker forms; the seed-0 record comes back as the top hit confirming the byte[] path is exercised. Comparison matrix updated to drop the "HTTP/JSON wire routing tracked in #4135" caveat - INT8 ingest is now end-to-end. * #4134 LSMVectorIndex: consolidate constructor args into LSMVectorIndexConfig record Replaces the 17-positional-arg primary constructor with a single LSMVectorIndexConfig value object. The factory handler no longer needs to post-mutate metadata.encoding after construction, so the metadata is fully populated atomically before the instance escapes. * HTTP int8 markers: review fixes (null/key checks, int[], lazy alloc, tests) - {"$bytes": null} now throws IllegalArgumentException naming the marker and the null instead of falling through to the recursive-map branch - {"$bytes": <non-string>} same treatment - Map-key recursion validates instanceof String and throws a clear IllegalArgumentException instead of letting a hypothetical non-string key surface as an opaque ClassCastException - $int8 now also accepts int[] payloads alongside List/float[]/double[] for completeness - decodeTypedJsonMarkers short-circuits without allocating a fresh LinkedHashMap when the param map carries no nested Map/List, which is the normal case for non-vector queries - Trimmed multi-paragraph Javadocs and what-not-why inline comments per CLAUDE.md style Tests: - New cases for double[] payload, empty $int8 array, empty $bytes string, {"$bytes": null} rejection, int[] payload, and a two-level nested-map recursion (sibling to the existing list-recursion test). - Test-class headers trimmed to one-line Javadocs. * HTTP int8 markers: URL-safe base64, long[], zero-alloc passthrough, OpenAPI - $bytes now accepts URL-safe base64 (RFC 4648 section 5) by retrying with Base64.getUrlDecoder() on the standard decoder's failure. Common in ML tooling that base64-encodes embeddings using - and _ in place of + and /. - $int8 now accepts long[] payloads alongside List, float[], double[], int[]. - decodeTypedJsonMarkers and the Map/List recursion arms now return the original reference when no entry was rewritten. A parameter map of scalars + plain nested maps no longer pays for a fresh LinkedHashMap allocation per request - only marker-bearing requests build a new map. - Decoder split into two private helpers (decodeBytesMarker / decodeInt8Marker) so the dispatcher reads as a one-line switch on the marker key. - OpenAPI spec for /query and /command param fields now documents the $bytes / $int8 marker convention so users discover it from the API reference instead of source code. - Int8VectorHttpIT POSTs Content-Type: application/json explicitly. Tests: - New cases for long[] payload, explicit -128/127 boundary, URL-safe base64 round-trip, and a same-reference assertion that pins the zero-allocation passthrough on marker-free maps. * HTTP int8 markers: fix nested-map break, depth guard, IAE -> 400 on tx wrap - decodeTypedJsonMarker's nested-map prefix-copy loop now uses an index-based break instead of reference equality on the key. The previous loop assumed the same Map.Entry returns the same key reference across iterations, which holds for HashMap/LinkedHashMap but is not part of the Map contract. - Decoder recursion is bounded at 32 levels with an IllegalArgumentException on overflow; protects against StackOverflowError on hostile or accidentally deeply-nested JSON without depending on the upstream parser's depth limit. - Decode call moved from mapParams to PostCommandHandler.execute() so it runs before the database.transaction wrapper rather than under it. - AbstractServerHttpHandler's TransactionException catch arm now unwraps an IllegalArgumentException cause and returns HTTP 400, matching the un-wrapped catch arm. Without this, a malformed marker thrown from inside the transaction lambda was wrapped in a TransactionException and downgraded to HTTP 500 even though the underlying problem is bad client input. Tests: - New int8MarkerNullValueIsRejected gives the int8 path symmetric null-payload coverage (the bytes path already had it). - New deeplyNestedPayloadIsRejected pins the 32-level depth guard. - New Int8VectorHttpIT.int8MarkerOutOfRangeReturnsHttp400 confirms the IllegalArgumentException -> HTTP 400 chain end-to-end (was returning 500 prior to the AbstractServerHttpHandler unwrap fix). * HTTP int8 markers: simplify toInt8 guard, dedup IT helpers, ordinal test - toInt8 drops the redundant Double.isNaN / Double.isInfinite checks. NaN already trips the v != Math.floor(v) guard (NaN compared with anything is false, so != is true). Infinity passes that guard but is caught by the subsequent range check, so explicit handling here was dead code. Comment notes both flow paths so a future reader does not accidentally re-add the redundancy. - Int8VectorHttpIT now factors postQuery on top of postQueryRaw, sharing a single connection-setup helper and HttpResult type instead of two near-identical bodies. - @tag("slow") on the IT class so CI runs that filter out slow tests skip the full server boot. Spinning up the HTTP server + creating an index + 16 inserts puts the elapsed time over the multi-second threshold called out in CLAUDE.md. Tests: - New ordinalKeyMapWithMarkersIsDecoded covers the positional-array call shape (params keyed "0", "1", ...) that PostCommandHandler produces from a JSON array body. Without this, the typed-marker decoder is only exercised under named-key params at the unit level.
tae898
pushed a commit
to humemai/arcadedb-embedded-python
that referenced
this pull request
May 10, 2026
…cadeData#4… (ArcadeData#4136) * HTTP: route int8 query vectors to byte[] via $bytes/$int8 markers (ArcadeData#4135) Closes the HTTP/JSON gap left by the INT8 ingest landing (ArcadeData#4132/ArcadeData#4133): clients can now send int8 query vectors that reach the engine as byte[] and trigger the encoding-aware dequantization on LSM_VECTOR indexes, rather than getting silently round-tripped through float32 and losing the 4x payload claim on the wire. Wire convention (Extended JSON-style): - {"$bytes": "<base64>"} -> byte[] decoded from base64 - {"$int8": [v0, v1, ...]} -> byte[] packed from int values in [-128, 127] The int8 form also accepts the float[] / double[] shapes that JSONObject.toMap(optimizeNumericArrays=true) produces for JSON integer arrays, with a fractional-value check that rejects non-integer floats so a caller mixing up float and int8 vectors fails loudly at the wire boundary. Implementation: - AbstractQueryHandler.decodeTypedJsonMarkers recursively walks the parsed param map and rewrites single-key {"$bytes" | "$int8": ...} objects into byte[]; multi-key maps and unrelated single-key maps pass through unchanged so existing user data with leading-$ keys is not silently transformed. - mapParams calls the decoder before its existing ordinal-vs-named routing so the byte[] flows verbatim to SQL parameter binding. Tests: - AbstractQueryHandlerTypedJsonMarkersTest: 11 unit cases pin the decoder contract (base64 decode, int list decode, float[] decode, out-of-range / non-integer / non-numeric / bad-base64 rejection, multi-key passthrough, list-of-markers recursion, scalar passthrough). - Int8VectorHttpIT: 2 end-to-end cases spin up the HTTP server, create an INT8 vector index, and submit `vector.neighbors` queries via HTTP using both marker forms; the seed-0 record comes back as the top hit confirming the byte[] path is exercised. Comparison matrix updated to drop the "HTTP/JSON wire routing tracked in ArcadeData#4135" caveat - INT8 ingest is now end-to-end. * ArcadeData#4134 LSMVectorIndex: consolidate constructor args into LSMVectorIndexConfig record Replaces the 17-positional-arg primary constructor with a single LSMVectorIndexConfig value object. The factory handler no longer needs to post-mutate metadata.encoding after construction, so the metadata is fully populated atomically before the instance escapes. * HTTP int8 markers: review fixes (null/key checks, int[], lazy alloc, tests) - {"$bytes": null} now throws IllegalArgumentException naming the marker and the null instead of falling through to the recursive-map branch - {"$bytes": <non-string>} same treatment - Map-key recursion validates instanceof String and throws a clear IllegalArgumentException instead of letting a hypothetical non-string key surface as an opaque ClassCastException - $int8 now also accepts int[] payloads alongside List/float[]/double[] for completeness - decodeTypedJsonMarkers short-circuits without allocating a fresh LinkedHashMap when the param map carries no nested Map/List, which is the normal case for non-vector queries - Trimmed multi-paragraph Javadocs and what-not-why inline comments per CLAUDE.md style Tests: - New cases for double[] payload, empty $int8 array, empty $bytes string, {"$bytes": null} rejection, int[] payload, and a two-level nested-map recursion (sibling to the existing list-recursion test). - Test-class headers trimmed to one-line Javadocs. * HTTP int8 markers: URL-safe base64, long[], zero-alloc passthrough, OpenAPI - $bytes now accepts URL-safe base64 (RFC 4648 section 5) by retrying with Base64.getUrlDecoder() on the standard decoder's failure. Common in ML tooling that base64-encodes embeddings using - and _ in place of + and /. - $int8 now accepts long[] payloads alongside List, float[], double[], int[]. - decodeTypedJsonMarkers and the Map/List recursion arms now return the original reference when no entry was rewritten. A parameter map of scalars + plain nested maps no longer pays for a fresh LinkedHashMap allocation per request - only marker-bearing requests build a new map. - Decoder split into two private helpers (decodeBytesMarker / decodeInt8Marker) so the dispatcher reads as a one-line switch on the marker key. - OpenAPI spec for /query and /command param fields now documents the $bytes / $int8 marker convention so users discover it from the API reference instead of source code. - Int8VectorHttpIT POSTs Content-Type: application/json explicitly. Tests: - New cases for long[] payload, explicit -128/127 boundary, URL-safe base64 round-trip, and a same-reference assertion that pins the zero-allocation passthrough on marker-free maps. * HTTP int8 markers: fix nested-map break, depth guard, IAE -> 400 on tx wrap - decodeTypedJsonMarker's nested-map prefix-copy loop now uses an index-based break instead of reference equality on the key. The previous loop assumed the same Map.Entry returns the same key reference across iterations, which holds for HashMap/LinkedHashMap but is not part of the Map contract. - Decoder recursion is bounded at 32 levels with an IllegalArgumentException on overflow; protects against StackOverflowError on hostile or accidentally deeply-nested JSON without depending on the upstream parser's depth limit. - Decode call moved from mapParams to PostCommandHandler.execute() so it runs before the database.transaction wrapper rather than under it. - AbstractServerHttpHandler's TransactionException catch arm now unwraps an IllegalArgumentException cause and returns HTTP 400, matching the un-wrapped catch arm. Without this, a malformed marker thrown from inside the transaction lambda was wrapped in a TransactionException and downgraded to HTTP 500 even though the underlying problem is bad client input. Tests: - New int8MarkerNullValueIsRejected gives the int8 path symmetric null-payload coverage (the bytes path already had it). - New deeplyNestedPayloadIsRejected pins the 32-level depth guard. - New Int8VectorHttpIT.int8MarkerOutOfRangeReturnsHttp400 confirms the IllegalArgumentException -> HTTP 400 chain end-to-end (was returning 500 prior to the AbstractServerHttpHandler unwrap fix). * HTTP int8 markers: simplify toInt8 guard, dedup IT helpers, ordinal test - toInt8 drops the redundant Double.isNaN / Double.isInfinite checks. NaN already trips the v != Math.floor(v) guard (NaN compared with anything is false, so != is true). Infinity passes that guard but is caught by the subsequent range check, so explicit handling here was dead code. Comment notes both flow paths so a future reader does not accidentally re-add the redundancy. - Int8VectorHttpIT now factors postQuery on top of postQueryRaw, sharing a single connection-setup helper and HttpResult type instead of two near-identical bodies. - @tag("slow") on the IT class so CI runs that filter out slow tests skip the full server boot. Spinning up the HTTP server + creating an index + 16 inserts puts the elapsed time over the multi-second threshold called out in CLAUDE.md. Tests: - New ordinalKeyMapWithMarkersIsDecoded covers the positional-array call shape (params keyed "0", "1", ...) that PostCommandHandler produces from a JSON array body. Without this, the typed-marker decoder is only exercised under named-key params at the unit level.
3 tasks
robfrank
pushed a commit
that referenced
this pull request
May 12, 2026
#4136) * HTTP: route int8 query vectors to byte[] via $bytes/$int8 markers (#4135) Closes the HTTP/JSON gap left by the INT8 ingest landing (#4132/#4133): clients can now send int8 query vectors that reach the engine as byte[] and trigger the encoding-aware dequantization on LSM_VECTOR indexes, rather than getting silently round-tripped through float32 and losing the 4x payload claim on the wire. Wire convention (Extended JSON-style): - {"$bytes": "<base64>"} -> byte[] decoded from base64 - {"$int8": [v0, v1, ...]} -> byte[] packed from int values in [-128, 127] The int8 form also accepts the float[] / double[] shapes that JSONObject.toMap(optimizeNumericArrays=true) produces for JSON integer arrays, with a fractional-value check that rejects non-integer floats so a caller mixing up float and int8 vectors fails loudly at the wire boundary. Implementation: - AbstractQueryHandler.decodeTypedJsonMarkers recursively walks the parsed param map and rewrites single-key {"$bytes" | "$int8": ...} objects into byte[]; multi-key maps and unrelated single-key maps pass through unchanged so existing user data with leading-$ keys is not silently transformed. - mapParams calls the decoder before its existing ordinal-vs-named routing so the byte[] flows verbatim to SQL parameter binding. Tests: - AbstractQueryHandlerTypedJsonMarkersTest: 11 unit cases pin the decoder contract (base64 decode, int list decode, float[] decode, out-of-range / non-integer / non-numeric / bad-base64 rejection, multi-key passthrough, list-of-markers recursion, scalar passthrough). - Int8VectorHttpIT: 2 end-to-end cases spin up the HTTP server, create an INT8 vector index, and submit `vector.neighbors` queries via HTTP using both marker forms; the seed-0 record comes back as the top hit confirming the byte[] path is exercised. Comparison matrix updated to drop the "HTTP/JSON wire routing tracked in #4135" caveat - INT8 ingest is now end-to-end. * #4134 LSMVectorIndex: consolidate constructor args into LSMVectorIndexConfig record Replaces the 17-positional-arg primary constructor with a single LSMVectorIndexConfig value object. The factory handler no longer needs to post-mutate metadata.encoding after construction, so the metadata is fully populated atomically before the instance escapes. * HTTP int8 markers: review fixes (null/key checks, int[], lazy alloc, tests) - {"$bytes": null} now throws IllegalArgumentException naming the marker and the null instead of falling through to the recursive-map branch - {"$bytes": <non-string>} same treatment - Map-key recursion validates instanceof String and throws a clear IllegalArgumentException instead of letting a hypothetical non-string key surface as an opaque ClassCastException - $int8 now also accepts int[] payloads alongside List/float[]/double[] for completeness - decodeTypedJsonMarkers short-circuits without allocating a fresh LinkedHashMap when the param map carries no nested Map/List, which is the normal case for non-vector queries - Trimmed multi-paragraph Javadocs and what-not-why inline comments per CLAUDE.md style Tests: - New cases for double[] payload, empty $int8 array, empty $bytes string, {"$bytes": null} rejection, int[] payload, and a two-level nested-map recursion (sibling to the existing list-recursion test). - Test-class headers trimmed to one-line Javadocs. * HTTP int8 markers: URL-safe base64, long[], zero-alloc passthrough, OpenAPI - $bytes now accepts URL-safe base64 (RFC 4648 section 5) by retrying with Base64.getUrlDecoder() on the standard decoder's failure. Common in ML tooling that base64-encodes embeddings using - and _ in place of + and /. - $int8 now accepts long[] payloads alongside List, float[], double[], int[]. - decodeTypedJsonMarkers and the Map/List recursion arms now return the original reference when no entry was rewritten. A parameter map of scalars + plain nested maps no longer pays for a fresh LinkedHashMap allocation per request - only marker-bearing requests build a new map. - Decoder split into two private helpers (decodeBytesMarker / decodeInt8Marker) so the dispatcher reads as a one-line switch on the marker key. - OpenAPI spec for /query and /command param fields now documents the $bytes / $int8 marker convention so users discover it from the API reference instead of source code. - Int8VectorHttpIT POSTs Content-Type: application/json explicitly. Tests: - New cases for long[] payload, explicit -128/127 boundary, URL-safe base64 round-trip, and a same-reference assertion that pins the zero-allocation passthrough on marker-free maps. * HTTP int8 markers: fix nested-map break, depth guard, IAE -> 400 on tx wrap - decodeTypedJsonMarker's nested-map prefix-copy loop now uses an index-based break instead of reference equality on the key. The previous loop assumed the same Map.Entry returns the same key reference across iterations, which holds for HashMap/LinkedHashMap but is not part of the Map contract. - Decoder recursion is bounded at 32 levels with an IllegalArgumentException on overflow; protects against StackOverflowError on hostile or accidentally deeply-nested JSON without depending on the upstream parser's depth limit. - Decode call moved from mapParams to PostCommandHandler.execute() so it runs before the database.transaction wrapper rather than under it. - AbstractServerHttpHandler's TransactionException catch arm now unwraps an IllegalArgumentException cause and returns HTTP 400, matching the un-wrapped catch arm. Without this, a malformed marker thrown from inside the transaction lambda was wrapped in a TransactionException and downgraded to HTTP 500 even though the underlying problem is bad client input. Tests: - New int8MarkerNullValueIsRejected gives the int8 path symmetric null-payload coverage (the bytes path already had it). - New deeplyNestedPayloadIsRejected pins the 32-level depth guard. - New Int8VectorHttpIT.int8MarkerOutOfRangeReturnsHttp400 confirms the IllegalArgumentException -> HTTP 400 chain end-to-end (was returning 500 prior to the AbstractServerHttpHandler unwrap fix). * HTTP int8 markers: simplify toInt8 guard, dedup IT helpers, ordinal test - toInt8 drops the redundant Double.isNaN / Double.isInfinite checks. NaN already trips the v != Math.floor(v) guard (NaN compared with anything is false, so != is true). Infinity passes that guard but is caught by the subsequent range check, so explicit handling here was dead code. Comment notes both flow paths so a future reader does not accidentally re-add the redundancy. - Int8VectorHttpIT now factors postQuery on top of postQueryRaw, sharing a single connection-setup helper and HttpResult type instead of two near-identical bodies. - @tag("slow") on the IT class so CI runs that filter out slow tests skip the full server boot. Spinning up the HTTP server + creating an index + 16 inserts puts the elapsed time over the multi-second threshold called out in CLAUDE.md. Tests: - New ordinalKeyMapWithMarkersIsDecoded covers the positional-array call shape (params keyed "0", "1", ...) that PostCommandHandler produces from a JSON array body. Without this, the typed-marker decoder is only exercised under named-key params at the unit level. (cherry picked from commit d8fe7f4)
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.
Bumps mongo-java-driver from 3.12.4 to 3.12.10.
Release notes
Sourced from mongo-java-driver's releases.
Commits
d5e75f4Build: version 3.12.109c4c81aDocs: Updated for 3.12.10 release149a04cDisable test that no longer passes on 5.1 server2a32ac3Support aggregation with $merge as a string (#768)81cc1a7Add top-level error labels to write concern error (#766)c3c0a2cSet proper stream factory in AbstractUnifiedTest411d5dcRemove misleading note about mongocryptd in reference docsb062e59Disable tests of legacy wire protocol on 5.1+ serversba6aef8Build: version 3.12.10-SNAPSHOT39815b4Build: version 3.12.9Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)