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