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

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

Github user sihuazhou commented on a diff in the pull request:

    https://github.com/apache/flink/pull/6151#discussion_r196366033
  
    --- Diff: 
flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/typeutils/AvroSerializer.java
 ---
    @@ -105,41 +108,54 @@
        /** The currently accessing thread, set and checked on debug level 
only. */
        private transient volatile Thread currentThread;
     
    -   // 
------------------------------------------------------------------------
    +   // ----------------------- instantiation methods 
--------------------------
     
        /**
         * Creates a new AvroSerializer for the type indicated by the given 
class.
    -    * This constructor is intended to be used with {@link SpecificRecord} 
or reflection serializer.
    -    * For serializing {@link GenericData.Record} use {@link 
AvroSerializer#AvroSerializer(Class, Schema)}
    +    *
    +    * <p>This constructor is expected to be used only with {@link 
GenericRecord}.
    +    * For {@link SpecificRecord} or reflection serializer use {@link 
AvroSerializer#forNonGeneric(Class)}.
    +    *
    +    * @param schema the explicit schema to use for generic records.
         */
    -   public AvroSerializer(Class<T> type) {
    -           checkArgument(!isGenericRecord(type),
    -                   "For GenericData.Record use constructor with explicit 
schema.");
    -           this.type = checkNotNull(type);
    -           this.schemaString = null;
    +   public static AvroSerializer<GenericRecord> forGeneric(Schema schema) {
    +           return new AvroSerializer<>(GenericRecord.class, schema);
    --- End diff --
    
    Should we do checking for schema to make sure it not null here?


> Confusing construction of AvroSerializers for generic records
> -------------------------------------------------------------
>
>                 Key: FLINK-9569
>                 URL: https://issues.apache.org/jira/browse/FLINK-9569
>             Project: Flink
>          Issue Type: Improvement
>          Components: Type Serialization System
>            Reporter: Tzu-Li (Gordon) Tai
>            Assignee: Tzu-Li (Gordon) Tai
>            Priority: Major
>
> The {{AvroSerializer}} currently has a {{AvroSerializer(Class<T> type, Schema 
> schema)}} public constructor when used for generic records.
> This is a bit confusing, because when using the \{{AvroSerializer}}, the type 
> to be serialized should always be a {{GenericData.Record}} type.
> We should either:
> - have a separate subclass of {{AvroSerializer}}, say 
> {{GenericRecordAvroSerializer}} that is a {{AvroSerializer<GenericRecord>}}, 
> or
> - follow a similar approach to the instantiation methods in the 
> {{AvroDeserialiationSchema}}. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to