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

Congxian Qiu(klion26) commented on FLINK-15424:
-----------------------------------------------

[~aljoscha] thanks for the reply.

{{AppendingState}} can be {{ListState}} or {{ValueState}}. I did some search 
for whether should collection allow null element, and found that
 * java.uitl.List allows null if the implementation allows null. {{ArrayList 
and }}{{LinkedList}} allow adding null element
 * {{ListState#add}} do not allow add null element, will throw an exception, 
{{ListState}} can be created through {{RuntimeContext}} by user.
 * Guava collection recommend avoiding to use null in collections[1] 

Summary of all the things, I'd like to propose, change the java doc to "do not 
allow null value", and make all the implementation of {{AppendingStat}}e 
respect this doc(throw Exception if add a null element), what do you think? 

[1][https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained]

> Make all AppendingState#add respect the java doc
> ------------------------------------------------
>
>                 Key: FLINK-15424
>                 URL: https://issues.apache.org/jira/browse/FLINK-15424
>             Project: Flink
>          Issue Type: Bug
>          Components: Runtime / State Backends
>    Affects Versions: 1.8.3, 1.9.1
>            Reporter: Congxian Qiu(klion26)
>            Priority: Major
>
> Currently, We have a java doc in 
> {{[AppendingState#add|https://github.com/apache/flink/blob/52fdee1d0c7af24d25c51caa073e29f11b07210b/flink-core/src/main/java/org/apache/flink/api/common/state/AppendingState.java#L63]}}
> {code:java}
> <p> If null is passed in, the state value will remain unchanged.{code}
> but currently, the implementation did not respect this, take 
> {{HeapReducingState}} as an example, we'll clear the state if the passed 
> parameter is null
> {code:java}
> @Override     
> public void add(V value) throws IOException {
>     if (value == null) {                      
>         clear();                      
>         return;               
>     }
>     try {                     
>         stateTable.transform(currentNamespace, value, reduceTransformation);  
>                     } catch (Exception e) {                     
>         throw new IOException("Exception while applying ReduceFunction in 
> reducing state", e);                
>     } 
> }
> {code}
> But in {{RocksDBReducingState}}  we would not clear the state, and put the 
> null value into state if serializer can serialize null.
> {code:java}
> @Override
> public void add(V value) throws Exception {
>    byte[] key = getKeyBytes();
>    V oldValue = getInternal(key);
>    V newValue = oldValue == null ? value : reduceFunction.reduce(oldValue, 
> value);
>    updateInternal(key, newValue);
> }
> {code}
> this issue wants to make all {{Appending}}State respect the javadoc of 
> {{AppendingState}}, and return directly if the passed in parameter is null.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to