[ 
https://issues.apache.org/jira/browse/FLINK-5397?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15782743#comment-15782743
 ] 

ASF GitHub Bot commented on FLINK-5397:
---------------------------------------

GitHub user StefanRRichter opened a pull request:

    https://github.com/apache/flink/pull/3050

    [FLINK-5397] Do not replace ObjectStreamClass on deserialization of m…

    This PR fixes [FLINK-5397] by not replacing the ObjectStreamClass in 
``readClassDescriptor()`` during deserialization of classes that should be 
replaced from the migration package. Instead, we replace the class directly in 
``resolveClass(...)``.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/StefanRRichter/flink 
migration-keep-objectstreamclass

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/flink/pull/3050.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #3050
    
----
commit 01834068b50a9cf4186ce83fa9c57d5b8f2bfc8c
Author: Stefan Richter <s.rich...@data-artisans.com>
Date:   2016-12-28T11:50:00Z

    [FLINK-5397] Do not replace ObjectStreamClass on deserialization of 
migration package classes, override resolveClass(...) instead

----


> Fail to deserialize savepoints in v1.1 when there exist missing fields in 
> class serialization descriptors
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-5397
>                 URL: https://issues.apache.org/jira/browse/FLINK-5397
>             Project: Flink
>          Issue Type: Bug
>          Components: State Backends, Checkpointing
>            Reporter: Xiaogang Shi
>            Assignee: Stefan Richter
>
> To restore from the savepoints in previous versions, Flink now keeps all 
> classes whose serialization is changed and put them in a separated package 
> ("migration"). 
> When deserializing the old savepoints, flink will look up correct descriptors 
> ({{ObjectStreamClass}}) for these classes, without using those ones written 
> in serialized data. The implementation however is problematic when there 
> exist missing field descriptors in the serialized data. 
> When serializing an object, Java will only write the descriptors of those 
> non-null fields. But when we look up class descriptors with given classes, 
> all fields will be put into the descriptors. As a result, we will deserialize 
> the savepoints with incorrect descriptors, leading to serialization 
> exceptions.
> A simple resolution is to update the name of read descriptors using 
> Reflections, without using different descriptors.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to