[ 
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)

Reply via email to