[ https://issues.apache.org/jira/browse/FLINK-6363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tzu-Li (Gordon) Tai updated FLINK-6363: --------------------------------------- Description: Currently, there is no documentation / Javadoc mentioning the precedence rules of Kryo registrations via the register methods in {{StreamExecutionEnvironment}} / {{ExecutionEnvironment}}. It is important for the user to be notified of the precedence because the {{KryoSerializer}} applies the configurations in a specific order that is not visible from the public API. For example: {code} env.addDefaultKryoSerializer(SomeClass.class, SerializerA.class); env.addDefaultKryoSerializer(SomeClass.class, new SerializerB()); {code} from this API usage, it may seem as if {{SerializerA}} will be used as the default serializer for {{SomeClass}} (or the other way around, depends really on how the user perceives this). However, whatever the called order in this example, {{SerializerB}} will always be used because in the case of defining default serializers, due to the ordering that the internal {{KryoSerializer}} applies these configurations, defining default serializer by instance has a higher precedence than defining by class. These methods are also subject to the same issue: {code} env.registerType(SomeClass.class, SerializerA.class); env.registerTypeWithKryoSerializer(SomeClass.class, SerializerA.class); env.registerTypeWithKryoSerializer(SomeClass.class, new SerializerB()); {code} was: Currently, there is no documentation / Javadoc mentioning the precedence rules of Kryo registrations via the register methods in {{StreamExecutionEnvironment}} / {{ExecutionEnvironment}}. It is important for the user to be notified of the precedence because the {{KryoSerializer}} applies the configurations in a specific order that is not visible from the public API. For example: {code} env.addDefaultKryoSerializer(SomeClass.class, SerializerA.class); env.addDefaultKryoSerializer(SomeClass.class, new SerializerB()); {code} from this API usage, it may seem as if {{SerializerA}} will be used as the default serializer for {{SomeClass}} (or the other way around, depends really on how the user perceives this). However, whatever the called order in this example, {{SerializerB}} will always be used because in the case of defining default serializers, due to the ordering that the internal {{KryoSerializer}} applies these configurations, defining serializer instance has a higher precedence than defining with serializer class. These methods are also subject to the same issue: {code} env.registerType(SomeClass.class, SerializerA.class); env.registerTypeWithKryoSerializer(SomeClass.class, SerializerA.class); env.registerTypeWithKryoSerializer(SomeClass.class, new SerializerB()); {code} > Document precedence rules of Kryo serializer registrations > ---------------------------------------------------------- > > Key: FLINK-6363 > URL: https://issues.apache.org/jira/browse/FLINK-6363 > Project: Flink > Issue Type: Improvement > Components: Documentation, Type Serialization System > Reporter: Tzu-Li (Gordon) Tai > Assignee: Tzu-Li (Gordon) Tai > > Currently, there is no documentation / Javadoc mentioning the precedence > rules of Kryo registrations via the register methods in > {{StreamExecutionEnvironment}} / {{ExecutionEnvironment}}. > It is important for the user to be notified of the precedence because the > {{KryoSerializer}} applies the configurations in a specific order that is not > visible from the public API. > For example: > {code} > env.addDefaultKryoSerializer(SomeClass.class, SerializerA.class); > env.addDefaultKryoSerializer(SomeClass.class, new SerializerB()); > {code} > from this API usage, it may seem as if {{SerializerA}} will be used as the > default serializer for {{SomeClass}} (or the other way around, depends really > on how the user perceives this). > However, whatever the called order in this example, {{SerializerB}} will > always be used because in the case of defining default serializers, due to > the ordering that the internal {{KryoSerializer}} applies these > configurations, defining default serializer by instance has a higher > precedence than defining by class. > These methods are also subject to the same issue: > {code} > env.registerType(SomeClass.class, SerializerA.class); > env.registerTypeWithKryoSerializer(SomeClass.class, SerializerA.class); > env.registerTypeWithKryoSerializer(SomeClass.class, new SerializerB()); > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)