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

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

  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
>
> 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.



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

Reply via email to