You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksandr Polovtsev (Jira)" <ji...@apache.org> on 2026/03/19 10:45:00 UTC

[jira] [Updated] (IGNITE-28301) UOS: do not send unneeded class descriptors for Externalizable classes

     [ https://issues.apache.org/jira/browse/IGNITE-28301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aleksandr Polovtsev updated IGNITE-28301:
-----------------------------------------
    Summary: UOS: do not send unneeded class descriptors for Externalizable classes  (was: UOS: do not sent unneeded class descriptors for Externalizable classes)

> UOS: do not send unneeded class descriptors for Externalizable classes
> ----------------------------------------------------------------------
>
>                 Key: IGNITE-28301
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28301
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Aleksandr Polovtsev
>            Priority: Major
>              Labels: ignite-3
>
>   h2. Summary                                                                                                                                                                                
>                                                                                                                                                                                            
>   UOS (User Object Serialization) incorrectly sends class descriptors for all declared field types of {{Externalizable}} classes, even though the {{Externalizable}} contract explicitly delegates serialization to {{writeExternal()}}/{{readExternal()}}. Field types are irrelevant to the wire format — only what the implementation explicitly writes matters.                 
>                                                                                                                                                                                              
>   h2. Problem                                                                                                                                                                              
>   When UOS encounters an {{Externalizable}} class, it collects and sends descriptors for all its field types, even if those fields are never written to the stream via {{writeExternal()}}. This is incorrect because:
>                                                                                                                                                                                              
>   * {{Externalizable}} classes are fully responsible for their own serialization format                                                                                                      
>   * Field type descriptors add unnecessary overhead to the wire protocol
>   * Sending descriptors for field types that are not part of the serialized form creates a hard dependency on those types being present on the receiving node, even if they are never actually transmitted                                                                                                                                                                       
>    
>   h2. Example                                                                                                                                                                                
>                                                                                                                                                                                            
>   {{io.scalecube.cluster.Member}} implements {{Externalizable}}. Its {{writeExternal()}} writes the address as a plain UTF string — not as a Java object. However, UOS sends a descriptor for the field's declared type ({{io.scalecube.net.Address}}) anyway. Any node that cannot resolve {{Address}} fails to register the {{Member}} descriptor, which causes an {{IllegalStateException}} during deserialization.                                                                                                                                          
>                                                                                                                                                                                            
>   h2. Expected Behavior
>   UOS should not send class descriptors for field types of {{Externalizable}} classes. Descriptor collection for such classes should be limited to types that are explicitly written as objects in {{writeExternal()}}, not inferred from field declarations.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)