Skip to content

IGNITE-29172 Thin client caches incomplete binary type metadata if a channel fails while a binary object is being built - #13758

Open
zstan wants to merge 4 commits into
apache:masterfrom
zstan:ignite-29172
Open

zstan wants to merge 4 commits into
apache:masterfrom
zstan:ignite-29172

Conversation

@zstan

@zstan zstan commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

No description provided.

@zstan
zstan force-pushed the ignite-29172 branch 2 times, most recently from b515fbf to 93a43b2 Compare October 29, 2026 08:31
@zstan zstan changed the title Ignite 29172 IGNITE-29172 Thin client caches incomplete binary type metadata if a channel fails while a binary object is being built Oct 29, 2026
@zstan
zstan requested a lite review from Copilot October 29, 2026 09:33

Copilot AI 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.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Copilot review overview

7 open issues
What changed in this PR

Fixes an issue where thin client binary type metadata can be cached in an incomplete state if a channel fails during binary object construction.

Changes:

  • Add “partial fields” tracking to binary metadata updates to differentiate delta/partial metadata from full metadata.
  • Make thin client re-request and merge binary metadata when receiving partial metadata after a reconnect/cache clear.
  • Add/adjust tests to reproduce channel failure during metadata processing and verify binary context restoration after reconnect.
File Description
modules/​thin-client/​impl/​src/​main/​java/​org/​apache/​ignite/​internal/​client/​thin/​TcpIgniteClient.java Re-request previous metadata version when only partial fields are available and local cache was cleared.
modules/​binary/​impl/​src/​main/​java/​org/​apache/​ignite/​internal/​binary/​builder/​BinaryObjectBuilderImpl.java Track when metadata updates are partial and propagate this information into metadata updates.
modules/​binary/​api/​src/​main/​java/​org/​apache/​ignite/​internal/​binary/​BinaryContext.java Extend metadata update API to accept partialFields; restore predefined user types on reconnect.
modules/​binary/​api/​src/​main/​java/​org/​apache/​ignite/​internal/​binary/​BinaryMetadata.java Add partialFields flag and accessor to BinaryMetadata.
modules/​core/​src/​main/​java/​org/​apache/​ignite/​internal/​processors/​cache/​binary/​CacheObjectBinaryProcessorImpl.java Invoke binary context reconnect hook after reconnect.
modules/​core/​src/​test/​java/​org/​apache/​ignite/​internal/​client/​thin/​BinaryMetadataChannelFailureTest.java New regression test reproducing channel failure during binary object build/metadata update.
modules/​indexing/​src/​test/​java/​org/​apache/​ignite/​client/​ClientTestSuite.java Include the new thin client regression test in the suite.
modules/​core/​src/​test/​java/​org/​apache/​ignite/​testsuites/​IgniteClientReconnectTestSuite.java Fix reconnect suite imports and include new reconnect test coverage.
modules/​core/​src/​test/​java/​org/​apache/​ignite/​internal/​IgniteClientReconnectCustomBinaryContextTest.java New test ensuring custom binary configuration is restored after reconnect.
modules/​core/​src/​test/​java/​org/​apache/​ignite/​internal/​IgniteClientReconnectBinaryContexTest.java Rename public test class to IgniteClientReconnectBinaryContextTest (but file rename appears missing).
modules/​binary/​api/​src/​main/​java/​org/​apache/​ignite/​internal/​binary/​BinaryMetadataHandler.java Documentation typo fix (“meta data” → “metadata”).

Review effort: Lite

…channel fails while a binary object is being built
@nizhikov

Copy link
Copy Markdown
Contributor

/runall

@ignite-pr-checker

Copy link
Copy Markdown

@nizhikov Ignite PR Checker verdict · RunAll build 9494416 · tested 952f7d1 · 149 suites ran, 0 reused

⚠️ This run doesn't cover the PR fully:

  • 1 suite has no reliable result (non-zero exit code · Number of tests 65 is 87% less than 498 in build #⁠18956)

Everything below is what it did manage to say.

⚠️ Broken suites (no reliable result):

  • Thin Client: Java: non-zero exit code · Number of tests 65 is 87% less than 498 in build #⁠18956 — ran 65 of master's 497 tests

👀 2 tests started failing on this code — not proven blockers yet. There are too few runs of this code to tell a break from a flake. A re-run of the suite decides it.

  • Calcite SQL 3 · IndexRebuildIntegrationTest.testRebuildOnRemoteNodeSorted — 1 run · TC
  • JDBC Driver · JdbcThinJdbcToCacheDataTypesCoverageTest.testVarcharDataType[atomicityMode=ATOMIC, cacheMode=PARTITIONED, ttlFactory=null, backups=2, evictionFactory=null, onheapCacheEnabled=false, writeSyncMode=FULL_SYNC, persistenceEnabled=false, useBinaryArrays=false] — 1 run · TC

⚠️ No proven blockers yet — this does not mean the PR is clean: see the tests above. 21 failing tests are not blamed on this PR.

1 run: the test ran once on this code and failed; a re-run of its suite confirms or clears it.

What each label means and what to do: verdict glossary.

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.

4 participants