[
https://issues.apache.org/jira/browse/FLINK-26738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17511603#comment-17511603
]
Yun Tang commented on FLINK-26738:
----------------------------------
[~lam167], the reason why Flink community mark the default value in state
descriptor as deprecated is that user cannot judge whether the returned default
value is for the real answer or just null.
This is also true for TTL state with default value, if we get the default value
from TTL state, we cannot judge whether the key is expired, not existed or just
the value is default value itself, which make the semantics unclear.
>From my point of view, disabling default value for TTL state is reasonable and
>maybe we need to make the truth more clear in docs and javadocs. WDYT?
> Default value of StateDescriptor is valid when enable state ttl config
> ----------------------------------------------------------------------
>
> Key: FLINK-26738
> URL: https://issues.apache.org/jira/browse/FLINK-26738
> Project: Flink
> Issue Type: Bug
> Components: API / Core
> Affects Versions: 1.15.0
> Reporter: Jianhui Dong
> Priority: Critical
>
> Suppose we declare a ValueState like following:
> {code:java}
> ValueStateDescriptor<Tuple2<Long, Long>> descriptor =
> new ValueStateDescriptor<>(
> "average", // the state name
> TypeInformation.of(new TypeHint<Tuple2<Long, Long>>()
> {}),
> Tuple2.of(0L, 0L));
> {code}
> and then we add state ttl config to the state:
> {code:java}
> descriptor.enableTimeToLive(StateTtlConfigUtil.createTtlConfig(60000));
> {code}
> the default value Tuple2.of(0L, 0L) will be invalid and may cause NPE.
> I don't know if this is a bug cause I see @Deprecated in the comment of the
> ValueStateDescriptor constructor with argument defaultValue:
> {code:java}
> Use {@link #ValueStateDescriptor(String, TypeSerializer)} instead and manually
> * manage the default value by checking whether the contents of the
> state is {@code null}.
> {code}
> and if we decide not to use the defaultValue field in the class
> StateDescriptor, should we add @Deprecated annotation to the field
> defaultValue?
--
This message was sent by Atlassian Jira
(v8.20.1#820001)