You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Yun Tang (Jira)" <ji...@apache.org> on 2022/03/21 03:45:00 UTC

[jira] [Commented] (FLINK-26738) Default value of StateDescriptor is valid when enable state ttl config

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

Yun Tang commented on FLINK-26738:
----------------------------------

[~lam167], what kind of NPE will you meet?

Once the state descriptor enables TTL, it will always create another internl state descriptor and make the default value as null (you can refer to [code|https://github.com/apache/flink/blob/1bf45b25791cc3fad8b7d0d863caa9b0eef9a87b/flink-runtime/src/main/java/org/apache/flink/runtime/state/ttl/TtlStateFactory.java#L140-L148]) . I'm not sure what kind of error will you meet.

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