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

Aleksandr Polovtsev updated IGNITE-28301:
-----------------------------------------
    Description: 
  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.

  was:
h3. 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.                     
                                                                                
                                                                                
                             
h3. 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                                                          
                                                                                
                             
                                                                                
                                                                                
                             
h3. 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.                                                             
                                                                                
                             
                                                                                
                                                                                
                           
h3. 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.


> UOS: do not sent 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)

Reply via email to