Repository navigation
IGNITE-29199 Fix local IndexQuery returning binary objects for a cache not in keep-binary mode - #13744
Open
rezataroosheh wants to merge 1 commit into
Open
IGNITE-29199 Fix local IndexQuery returning binary objects for a cache not in keep-binary mode#13744rezataroosheh wants to merge 1 commit into
rezataroosheh wants to merge 1 commit into
Conversation
…e not in keep-binary mode
rezataroosheh
marked this pull request as ready for review
October 23, 2026 22:05
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.
What
A local
IndexQuery(setLocal(true)) on a cache that is not in keep-binary mode now returns deserialized keys and values, the same as the distributed query. Queries throughwithKeepBinary()still returnBinaryObjects.Why
IndexQueryProcessor#queryLocalalways returns rows in binary form. On the distributed path, the query future converts them using the query'skeepBinaryflag (GridCacheQueryFutureAdapter#unwrapIfNeeded). The local path (GridCacheQueryManager#indexQueryLocal) skipped that step, so a typed read of a local result failed withClassCastException. It was reported on the dev list.The fix applies the same
unwrapBinaryIfNeeded(..., qry.keepBinary(), ...)call inindexQueryLocal.IndexQueryProcessoris not changed, because it also serves the remote side of distributed queries.Compatibility: code that reads local results of a non-keep-binary cache as
BinaryObjectwill now get the cache's own classes. Such code can usewithKeepBinary(), which keeps the binary form.Note: this touches the same method as #13735 (IGNITE-29191), so whichever is merged second needs a small rebase.
Tests
New tests in
IndexQueryLocalTest:testLocalQueryReturnsDeserializedValues: a local query on a non-keep-binary cache returnsPersonvalues. It fails without the fix (the values areBinaryObjects).testLocalQueryKeepBinaryReturnsBinaryValues: a local query throughwithKeepBinary()still returnsBinaryObjects.The Contribution Checklist
The description explains WHAT and WHY was made instead of HOW.
The following pattern must be used:
IGNITE-XXXX Change summarywhereXXXX- number of JIRA issue.(see the Maintainers list)
the
green visaattached to the JIRA ticket (see tabPR Checkat TC.Bot - Instance 1 or TC.Bot - Instance 2)Notes
If you need any help, please email dev@ignite.apache.org or ask any advice on https://the-asf.slack.com #ignite channel.