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)

Reply via email to