Aleksandr Nikolaev created IGNITE-29172:
-------------------------------------------
Summary: 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
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)