[
https://issues.apache.org/jira/browse/IGNITE-29172?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksandr Nikolaev updated IGNITE-29172:
----------------------------------------
Attachment: thin-client-binary-metadata-channel-failure.patch
> Thin client caches incomplete binary type metadata if a channel fails while a
> binary object is being built
> ----------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-29172
> URL: https://issues.apache.org/jira/browse/IGNITE-29172
> Project: Ignite
> Issue Type: Task
> Reporter: Aleksandr Nikolaev
> Priority: Minor
> Fix For: 2.19
>
> Attachments: thin-client-binary-metadata-channel-failure.patch
>
>
> If a thin client channel fails while BinaryObjectBuilder.build() is running,
> the client can cache binary type metadata that lacks the fields of the object
> schema. After that, BinaryObject.type().fieldNames() returns an incomplete or
> empty list, while BinaryObject.field(name) still returns correct values.
> Server-side metadata is correct. The client keeps the broken state until the
> next channel failure.
> Cause: on channel failure, TcpIgniteClient clears the metadata cache and the
> schema registry. BinaryObjectBuilderImpl.serializeTo() has already read the
> old cached metadata, so it treats all fields as known and registers the
> schema with no field metadata. ClientBinaryMetadataHandler.addMeta() then
> sends the type to the server, which merges it correctly, and caches this
> partial metadata locally. Later reads find the schema in the registry and
> never reload the metadata.
> Reproducer: BinaryMetadataChannelFailureTest (patch attached) drops thin
> client connections while the builder resolves field IDs.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)