[ 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)