Hi Rui,

I am fine with keeping the `String getString(String key, String
defaultValue)` if more people favor it. However, we should let the
user know that we encourage using ConfigOptions over the string-based
configuration key, as Timo said, we should add the message to `String
getString(String key, String defaultValue)` method.

Best,
Xuannan

On Tue, Dec 19, 2023 at 7:55 PM Rui Fan <1996fan...@gmail.com> wrote:
>
> > > I noticed that Configuration is used in
> > > DistributedCache#writeFileInfoToConfig and readFileInfoFromConfig
> > > to store some cacheFile meta-information. Their keys are
> > > temporary(key name with number) and it is not convenient
> > > to predefine ConfigOption.
> >
> >
> > True, this one requires a bit more effort to migrate from string-key to
> > ConfigOption, but still should be doable. Looking at how the two mentioned
> > methods are implemented and used, it seems what is really needed is
> > serialization and deserialization of `DistributedCacheEntry`-s. And all the
> > entries are always written / read at once. So I think we can serialize the
> > whole set of entries into a JSON string (or something similar), and use one
> > ConfigOption with a deterministic key for it, rather than having one
> > ConfigOption for each field in each entry. WDYT?
>
> Hi Xintong, thanks for the good suggestion! Most of the entries can be
> serialized to a json string, and we can only write/read them at once.
> The CACHE_FILE_BLOB_KEY is special, its type is byte[], we need to
> store it by the setBytes/getBytes.
>
> Also, I have an offline discussion with @Xuannan Su : refactoring all code
> that uses String as key requires a separate FLIP. And we will provide
> detailed FLIP  later.
>
> --------------------------------------------------------------------------------------
>
> Hi all, thanks everyone for the lively discussion. It's really a trade-off to
> keep "String getString(String key, String defaultValue)" or not.
> (It's not a right or wrong thing.)
>
> Judging from the discussion, most discussants can accept that keeping
> `String getString(String key, String defaultValue)` and depreate the
> rest of `getXxx(String key, Xxx defaultValue)`.
>
> cc @Xintong Song @Xuannan Su , WDYT?
>
> Best,
> Rui
>
> On Fri, Dec 15, 2023 at 11:38 AM Zhu Zhu <reed...@gmail.com> wrote:
>>
>> I think it's not clear whether forcing using ConfigOption would hurt
>> the user experience.
>>
>> Maybe it does at the beginning, because using string keys to access
>> Flink configuration can be simpler for new components/jobs.
>> However, problems may happen later if the configuration usages become
>> more complex, like key renaming, using types other than strings, and
>> other problems that ConfigOption was invented to address.
>>
>> Personally I prefer to encourage the usage of ConfigOption.
>> Jobs should use GlobalJobParameter for custom config, which is different
>> from the Configuration interface. Therefore, Configuration is mostly
>> used in other components/plugins, in which case the long-term maintenance
>> can be important.
>>
>> However, since it is not a right or wrong choice, I'd also be fine
>> to keep the `getString()` method if more devs/users are in favor of it.
>>
>> Thanks,
>> Zhu
>>
>> Timo Walther <twal...@apache.org> 于2023年12月14日周四 17:41写道:
>>
>> > The configuration in Flink is complicated and I fear we won't have
>> > enough capacity to substantially fix it. The introduction of
>> > ReadableConfig, WritableConfig, and typed ConfigOptions was a right step
>> > into making the code more maintainable. From the Flink side, every read
>> > access should go through ConfigOption.
>> >
>> > However, I also understand Gyula pragmatism here because (practically
>> > speaking) users get access `getString()` via `toMap().get()`. So I'm
>> > fine with removing the deprecation for functionality that is available
>> > anyways. We should, however, add the message to `getString()` that this
>> > method is discouraged and `get(ConfigOption)` should be the preferred
>> > way of accessting Configuration.
>> >
>> > In any case we should remove the getInt and related methods.
>> >
>> > Cheers,
>> > Timo
>> >
>> >
>> > On 14.12.23 09:56, Gyula Fóra wrote:
>> > > I see a strong value for user facing configs to use ConfigOption and this
>> > > should definitely be an enforced convention.
>> > >
>> > > However with the Flink project growing and many other components and even
>> > > users using the Configuration object I really don’t think that we should
>> > > “force” this on the users/developers.
>> > >
>> > > If we make fromMap / toMap free with basically no overhead, that is fine
>> > > but otherwise I think it would hurt the user experience to remove the
>> > > simple getters / setters. Temporary configoptions to access strings from
>> > > what is practically string->string map is exactly the kind of unnecessary
>> > > boilerplate that every dev and user wants to avoid.
>> > >
>> > > Gyula
>> > >
>> > > There are many cases where the features of the configoption are really
>> > not
>> > > needed.
>> > >
>> > > On Thu, 14 Dec 2023 at 09:38, Xintong Song <tonysong...@gmail.com>
>> > wrote:
>> > >
>> > >> Hi Gyula,
>> > >>
>> > >> First of all, even if we remove the `getXXX(String key, XXX
>> > defaultValue)`
>> > >> methods, there are still several ways to access the configuration with
>> > >> string-keys.
>> > >>
>> > >>     - If one wants to access a specific option, as Rui mentioned,
>> > >>     `ConfigOptions.key("xxx").stringType().noDefaultValue()` can be
>> > used.
>> > >> TBH,
>> > >>     I can't think of a use case where a temporally created ConfigOption
>> > is
>> > >>     preferred over a predefined one. Do you have any examples for that?
>> > >>     - If one wants to access the whole configuration set, then `toMap`
>> > or
>> > >>     `iterator` might be helpful.
>> > >>
>> > >> It is true that these ways are less convenient than `getXXX(String key,
>> > XXX
>> > >> defaultValue)`, and that's exactly my purpose, to make the key-string
>> > less
>> > >> convenient so that developers choose ConfigOption over it whenever is
>> > >> possible.
>> > >>
>> > >> there will always be cases where a more flexible
>> > >>> dynamic handling is necessary without the added overhead of the toMap
>> > >> logic
>> > >>>
>> > >>
>> > >> I'm not sure about this. I agree there are cases where flexible and
>> > dynamic
>> > >> handling is needed, but maybe "without the added overhead of the toMap
>> > >> logic" is not that necessary?
>> > >>
>> > >> I'd think of this as "encouraging developers to use ConfigOption as
>> > much as
>> > >> possible" vs. "a bit less convenient in 5% of the cases". I guess
>> > there's
>> > >> no right and wrong, just different engineer opinions. While I'm
>> > personally
>> > >> stand with removing the string-key access methods, I'd also be fine with
>> > >> the other way if there are more people in favor of it.
>> > >>
>> > >> Best,
>> > >>
>> > >> Xintong
>> > >>
>> > >>
>> > >>
>> > >> On Thu, Dec 14, 2023 at 3:45 PM Gyula Fóra <gyula.f...@gmail.com>
>> > wrote:
>> > >>
>> > >>> Hi Xintong,
>> > >>>
>> > >>> I don’t really see the actual practical benefit from removing the
>> > >> getstring
>> > >>> and setstring low level methods.
>> > >>>
>> > >>> I understand that ConfigOptions are nicer for 95% of the cases but
>> > from a
>> > >>> technical point of view there will always be cases where a more
>> > flexible
>> > >>> dynamic handling is necessary without the added overhead of the toMap
>> > >>> logic.
>> > >>>
>> > >>> I think it’s the most natural thing for any config abstraction to
>> > expose
>> > >>> basic get set methods with a simple key.
>> > >>>
>> > >>> What do you think?
>> > >>>
>> > >>> Cheers
>> > >>> Gyula
>> > >>>
>> > >>> On Thu, 14 Dec 2023 at 08:00, Xintong Song <tonysong...@gmail.com>
>> > >> wrote:
>> > >>>
>> > >>>>>
>> > >>>>> IIUC, you both prefer using ConfigOption instead of string keys for
>> > >>>>> all use cases, even internal ones. We can even forcefully delete
>> > >>>>> these @Depreated methods in Flink-2.0 to guide users or
>> > >>>>> developers to use ConfigOption.
>> > >>>>>
>> > >>>>
>> > >>>> Yes, at least from my side.
>> > >>>>
>> > >>>>
>> > >>>> I noticed that Configuration is used in
>> > >>>>> DistributedCache#writeFileInfoToConfig and readFileInfoFromConfig
>> > >>>>> to store some cacheFile meta-information. Their keys are
>> > >>>>> temporary(key name with number) and it is not convenient
>> > >>>>> to predefine ConfigOption.
>> > >>>>>
>> > >>>>
>> > >>>> True, this one requires a bit more effort to migrate from string-key
>> > to
>> > >>>> ConfigOption, but still should be doable. Looking at how the two
>> > >>> mentioned
>> > >>>> methods are implemented and used, it seems what is really needed is
>> > >>>> serialization and deserialization of `DistributedCacheEntry`-s. And
>> > all
>> > >>> the
>> > >>>> entries are always written / read at once. So I think we can serialize
>> > >>> the
>> > >>>> whole set of entries into a JSON string (or something similar), and
>> > use
>> > >>> one
>> > >>>> ConfigOption with a deterministic key for it, rather than having one
>> > >>>> ConfigOption for each field in each entry. WDYT?
>> > >>>>
>> > >>>>
>> > >>>> If everyone agrees with this direction, we can start to refactor all
>> > >>>>> code that uses getXxx(String key, String defaultValue) into
>> > >>>>> getXxx(ConfigOption<Xxx> configOption), and completely
>> > >>>>> delete all getXxx(String key, String defaultValue) in 2.0.
>> > >>>>> And I'm willing to pick it up~
>> > >>>>>
>> > >>>>
>> > >>>> Exactly. Actually, Xuannan and a few other colleagues are working on
>> > >>>> reviewing all the existing configuration options. We identified some
>> > >>> common
>> > >>>> issues that can potentially be improved, and not using string-key is
>> > >> one
>> > >>> of
>> > >>>> them. We are still summarizing the findings, and will bring them to
>> > the
>> > >>>> community for discussion once ready. Helping hands is definitely
>> > >>> welcomed.
>> > >>>> :)
>> > >>>>
>> > >>>>
>> > >>>> Yeah, `toMap` can solve the problem, and I also mentioned it in the
>> > >>>>> initial mail.
>> > >>>>>
>> > >>>>
>> > >>>> True. Sorry I overlooked it.
>> > >>>>
>> > >>>>
>> > >>>> Best,
>> > >>>>
>> > >>>> Xintong
>> > >>>>
>> > >>>>
>> > >>>>
>> > >>>> On Thu, Dec 14, 2023 at 2:14 PM Rui Fan <1996fan...@gmail.com> wrote:
>> > >>>>
>> > >>>>> Thanks Xintong and Xuannan for the feedback!
>> > >>>>>
>> > >>>>> IIUC, you both prefer using ConfigOption instead of string keys for
>> > >>>>> all use cases, even internal ones. We can even forcefully delete
>> > >>>>> these @Depreated methods in Flink-2.0 to guide users or
>> > >>>>> developers to use ConfigOption.
>> > >>>>>
>> > >>>>> Using ConfigOption is feasible in all scenarios because ConfigOption
>> > >>>>> can be easily created via
>> > >>>>> `ConfigOptions.key("xxx").stringType().noDefaultValue()` even if
>> > >>>>> there is no predefined ConfigOption.
>> > >>>>>
>> > >>>>> I noticed that Configuration is used in
>> > >>>>> DistributedCache#writeFileInfoToConfig and readFileInfoFromConfig
>> > >>>>> to store some cacheFile meta-information. Their keys are
>> > >>>>> temporary(key name with number) and it is not convenient
>> > >>>>> to predefine ConfigOption.
>> > >>>>>
>> > >>>>> If everyone agrees with this direction, we can start to refactor all
>> > >>>>> code that uses getXxx(String key, String defaultValue) into
>> > >>>>> getXxx(ConfigOption<Xxx> configOption), and completely
>> > >>>>> delete all getXxx(String key, String defaultValue) in 2.0.
>> > >>>>> And I'm willing to pick it up~
>> > >>>>>
>> > >>>>> To Xintong:
>> > >>>>>
>> > >>>>>> I think a `toMap` as suggested by Zhu and Xuannan should solve the
>> > >>>>>> problem. Alternatively, we may also consider providing an iterator
>> > >>> for
>> > >>>>> the
>> > >>>>>> Configuration.
>> > >>>>>
>> > >>>>> Yeah, `toMap` can solve the problem, and I also mentioned it in the
>> > >>>>> initial mail.
>> > >>>>>
>> > >>>>> Also Providing an iterator is fine, but we don't have a strong
>> > >>>>> requirement for now. Simple is better, how about considering it
>> > >>>>> if we have other strong requirements in the future?
>> > >>>>>
>> > >>>>> Looking forwarding to your feedback, thanks~
>> > >>>>>
>> > >>>>> Best,
>> > >>>>> Rui
>> > >>>>>
>> > >>>>> On Thu, Dec 14, 2023 at 11:36 AM Xintong Song <tonysong...@gmail.com
>> > >>>
>> > >>>>> wrote:
>> > >>>>>
>> > >>>>>> I'm leaning towards not allowing string-key based configuration
>> > >> access
>> > >>>> in
>> > >>>>>> the long term.
>> > >>>>>>
>> > >>>>>> I see the Configuration being used in two different ways:
>> > >>>>>>
>> > >>>>>> 1. Writing / reading a specific option. In such cases, ConfigOption
>> > >>> has
>> > >>>>>> many advantages compared to string-key, such as explicit value type,
>> > >>>>>> descriptions, default values, deprecated / fallback keys. I think we
>> > >>>>>> should
>> > >>>>>> encourage, and maybe even enforce, choosing ConfigOption over
>> > >>>> string-keys
>> > >>>>>> in such specific option access scenarios. That also applies to
>> > >>> internal
>> > >>>>>> usages, for which the description may not be necessary because we
>> > >>> won't
>> > >>>>>> generate documentation from it but we can still benefit from other
>> > >>>>>> advantages.
>> > >>>>>>
>> > >>>>>> 2. Iterating over all the configured options. In such cases, it is
>> > >>>>>> currently impractical to find the proper ConfigOption for each
>> > >>>> configured
>> > >>>>>> option. I think a `toMap` as suggested by Zhu and Xuannan should
>> > >> solve
>> > >>>> the
>> > >>>>>> problem. Alternatively, we may also consider providing an iterator
>> > >> for
>> > >>>> the
>> > >>>>>> Configuration.
>> > >>>>>>
>> > >>>>>> I think if we want to encourage using ConfigOption in case-1, the
>> > >> most
>> > >>>>>> effective way is to not allow accessing a specific option with a
>> > >>>>>> string-key, so that developers not awaring of this discussion won't
>> > >>>>>> accidentally use it. On the other hand, case-2 is a much rarer use
>> > >>> case
>> > >>>>>> compared to case-1, and given the fact that there are alternative
>> > >>>>>> approaches, I think we should not compromise case-1 for it.
>> > >>>>>>
>> > >>>>>> WDYT?
>> > >>>>>>
>> > >>>>>> Best,
>> > >>>>>>
>> > >>>>>> Xintong
>> > >>>>>>
>> > >>>>>>
>> > >>>>>>
>> > >>>>>> On Thu, Dec 14, 2023 at 10:25 AM Xuannan Su <suxuanna...@gmail.com>
>> > >>>>>> wrote:
>> > >>>>>>
>> > >>>>>>> Hi Rui,
>> > >>>>>>>
>> > >>>>>>> We are currently revisiting all the configurations for Flink 2.0,
>> > >>> and
>> > >>>>>>> it turns out that many string-based configurations in
>> > >>>>>>> `ConfigConstants` are deprecated and have been replaced by
>> > >>>>>>> `ConfigOptions`. Since `ConfigOptions` offers many advantages over
>> > >>>>>>> string-based configurations for the end user, I believe we should
>> > >>>>>>> encourage users to set and get the Flink configuration exclusively
>> > >>>>>>> with `ConfigOption`. And we are going to eventually replace all
>> > >> the
>> > >>>>>>> string-based configurations with `ConfigOptions` for this use
>> > >> case.
>> > >>>>>>>
>> > >>>>>>> For the first use case you mentioned, I think they are all
>> > >> internal
>> > >>>>>> usage,
>> > >>>>>>> and we should aim to replace them with ConfigOptions gradually.
>> > >>>>>>> Meanwhile, we may consider making those getters/setters for
>> > >> internal
>> > >>>>>>> use only while the replacement is in progress.
>> > >>>>>>>
>> > >>>>>>> For the second use case, IIUC, you need to iterate over all the
>> > >>>>>>> configurations to replace some old configuration keys with new
>> > >>> ones. I
>> > >>>>>>> believe  `toMap` is suitable for this scenario.
>> > >>>>>>>
>> > >>>>>>> Best,
>> > >>>>>>> Xuannan
>> > >>>>>>>
>> > >>>>>>>
>> > >>>>>>>
>> > >>>>>>> On Wed, Dec 13, 2023 at 9:04 PM Rui Fan <1996fan...@gmail.com>
>> > >>> wrote:
>> > >>>>>>>>
>> > >>>>>>>> Thanks Zhu for the quick response!
>> > >>>>>>>>
>> > >>>>>>>>> It is not a blocker of the deprecation, epsecially given that
>> > >>> they
>> > >>>>>> are
>> > >>>>>>>> not standard
>> > >>>>>>>>> configuration and are just using Configuration class for
>> > >>>>>> convenience.
>> > >>>>>>>>
>> > >>>>>>>> Yes, it's not a blocker of deprecation.
>> > >>>>>>>>
>> > >>>>>>>>> These are internal usages and we can have an internal getter
>> > >>>> method
>> > >>>>>> for
>> > >>>>>>>> them.
>> > >>>>>>>>
>> > >>>>>>>> For case1, do you mean we reuse the old getString method as the
>> > >>>>>> internal
>> > >>>>>>>> getter method or add a new getter method?
>> > >>>>>>>>
>> > >>>>>>>> Anyway, it's fine for me if we have an internal getter method.
>> > >> As
>> > >>> I
>> > >>>>>>>> understand,
>> > >>>>>>>> the public method without any annotation will be the internal
>> > >>>> method,
>> > >>>>>>> right?
>> > >>>>>>>>
>> > >>>>>>>>> Not sure why it's required to convert all keys or values. If
>> > >> it
>> > >>> is
>> > >>>>>> used
>> > >>>>>>>>> to create strings for dynamic properties or config files to
>> > >>> deploy
>> > >>>>>>> jobs,
>> > >>>>>>>>> toMap()/toFileWritableMap() may be a better choice. They are
>> > >>>> already
>> > >>>>>>>>> used in this kind of scenarios.
>> > >>>>>>>>
>> > >>>>>>>> For case2, it's really a special scenario, and toMap() is fine
>> > >> for
>> > >>>>>> case2.
>> > >>>>>>>> Case2 uses the getString instead of toMap due to getString is
>> > >>>> easier.
>> > >>>>>>>> Also, kubernetes-operator is also a internal usage, if case1 is
>> > >>>>>> solved,
>> > >>>>>>>> case2 also can use the internal getter method.So we can focus on
>> > >>>>>> case1.
>> > >>>>>>>>
>> > >>>>>>>> Thank you
>> > >>>>>>>>
>> > >>>>>>>> Best,
>> > >>>>>>>> Rui
>> > >>>>>>>>
>> > >>>>>>>> On Wed, Dec 13, 2023 at 8:01 PM Zhu Zhu <reed...@gmail.com>
>> > >>> wrote:
>> > >>>>>>>>
>> > >>>>>>>>> Hi Rui,
>> > >>>>>>>>>
>> > >>>>>>>>> I'd like to understand why there is a strong requirement for
>> > >>> these
>> > >>>>>>>>> deprecated
>> > >>>>>>>>> methods. The ConfigOption param methods help to do the type
>> > >>>>>> conversion
>> > >>>>>>> so
>> > >>>>>>>>> that users do not need to do it by themselves.
>> > >>>>>>>>>
>> > >>>>>>>>> For the 2 reasons to keep these methods mentioned above:
>> > >>>>>>>>>
>> > >>>>>>>>>> 1. A lot of scenarios don't define the ConfigOption, they
>> > >>> using
>> > >>>>>>>>> String as the key and value directly, such as: StreamConfig,
>> > >>>>>>>>> TaskConfig, DistributedCache, etc.
>> > >>>>>>>>>
>> > >>>>>>>>> These are internal usages and we can have an internal getter
>> > >>>> method
>> > >>>>>> for
>> > >>>>>>>>> them.
>> > >>>>>>>>> It is not a blocker of the deprecation, epsecially given that
>> > >>> they
>> > >>>>>> are
>> > >>>>>>> not
>> > >>>>>>>>> standard
>> > >>>>>>>>> configuration and are just using Configuration class for
>> > >>>>>> convenience.
>> > >>>>>>>>>
>> > >>>>>>>>>> 2. Some code wanna convert all keys or values, this
>> > >> converting
>> > >>>>>>>>> is generic, so the getString(String key, String defaultValue)
>> > >> is
>> > >>>>>>> needed.
>> > >>>>>>>>> Such as: kubernetes-operator [3].
>> > >>>>>>>>>
>> > >>>>>>>>> Not sure why it's required to convert all keys or values. If
>> > >> it
>> > >>> is
>> > >>>>>> used
>> > >>>>>>>>> to create strings for dynamic properties or config files to
>> > >>> deploy
>> > >>>>>>> jobs,
>> > >>>>>>>>> toMap()/toFileWritableMap() may be a better choice. They are
>> > >>>> already
>> > >>>>>>>>> used in this kind of scenarios.
>> > >>>>>>>>> If it just needs to read some of the config, why not using the
>> > >>>>>> proposed
>> > >>>>>>>>> way to read and parse the config? Pre-defined ConfigOptions
>> > >> are
>> > >>>>>> better
>> > >>>>>>>>> for configuration maintenance, compared to arbitrary strings
>> > >>>>>>>>>
>> > >>>>>>>>> Thanks,
>> > >>>>>>>>> Zhu
>> > >>>>>>>>>
>> > >>>>>>>>> Rui Fan <1996fan...@gmail.com> 于2023年12月13日周三 19:27写道:
>> > >>>>>>>>>
>> > >>>>>>>>>> Thanks Martijn for the quick clarification!
>> > >>>>>>>>>>
>> > >>>>>>>>>> I see Zhu Zhu and Junrui Lee are working on configuration
>> > >>> related
>> > >>>>>>>>>> work of Flink-2.0. I would cc them, and hear some thoughts
>> > >> from
>> > >>>>>> them.
>> > >>>>>>>>>>
>> > >>>>>>>>>> Best,
>> > >>>>>>>>>> Rui
>> > >>>>>>>>>>
>> > >>>>>>>>>> On Wed, Dec 13, 2023 at 7:17 PM Martijn Visser <
>> > >>>>>>> martijnvis...@apache.org>
>> > >>>>>>>>>> wrote:
>> > >>>>>>>>>>
>> > >>>>>>>>>>> Hi Rui,
>> > >>>>>>>>>>>
>> > >>>>>>>>>>> I'm more wondering if part of the configuration layer
>> > >> changes
>> > >>>>>> would
>> > >>>>>>>>>>> mean that these APIs would be removed in 2.0. Because if so,
>> > >>>> then
>> > >>>>>> I
>> > >>>>>>>>>>> don't think we should remove the Deprecate annotation. But I
>> > >>>> have
>> > >>>>>>> very
>> > >>>>>>>>>>> little visibility on the plans for the configuration layer.
>> > >>>>>>>>>>>
>> > >>>>>>>>>>> Thanks,
>> > >>>>>>>>>>>
>> > >>>>>>>>>>> Martijn
>> > >>>>>>>>>>>
>> > >>>>>>>>>>> On Wed, Dec 13, 2023 at 12:15 PM Rui Fan <
>> > >>> 1996fan...@gmail.com>
>> > >>>>>>> wrote:
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> Hi Martijn,
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> Thanks for your reply!
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> I noticed the 2.0 is doing some work related to clean
>> > >>>>>>> configuration.
>> > >>>>>>>>>>>> But this discussion is different from other work. Most of
>> > >>>> other
>> > >>>>>>> work
>> > >>>>>>>>>>>> are deprecate some Apis in Flink-1.19 and remove them in
>> > >>>>>> Flink-2.0.
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> This discussion is a series of methods have been marked to
>> > >>>>>>> @Deprecate,
>> > >>>>>>>>>>>> but they are still used so far. I propose remove the
>> > >>>> @Deprecate
>> > >>>>>>>>>>> annotation
>> > >>>>>>>>>>>> and keep these methods.
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> In brief, I think some deprecated methods shouldn't be
>> > >>>>>> deprecated.
>> > >>>>>>>>>>>> WDYT?
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> Please correct me if I'm wrong, thanks~
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> Best,
>> > >>>>>>>>>>>> Rui
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>> On Wed, Dec 13, 2023 at 7:07 PM Martijn Visser <
>> > >>>>>>>>>>> martijnvis...@apache.org>
>> > >>>>>>>>>>>> wrote:
>> > >>>>>>>>>>>>
>> > >>>>>>>>>>>>> Hi Rui,
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>>> Are you thinking about this as part of Flink 2.0, since
>> > >>> that
>> > >>>>>> has
>> > >>>>>>> the
>> > >>>>>>>>>>>>> goal to introduce a completely clean configuration
>> > >> layer?
>> > >>>> [1]
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>>> Best regards,
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>>> Martijn
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>>> [1]
>> > >>>>>>> https://cwiki.apache.org/confluence/display/FLINK/2.0+Release
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>>> On Wed, Dec 13, 2023 at 11:28 AM Maximilian Michels <
>> > >>>>>>> m...@apache.org>
>> > >>>>>>>>>>>>> wrote:
>> > >>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>> Hi Rui,
>> > >>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>> +1 for removing the @Deprecated annotation from
>> > >>>>>>> `getString(String
>> > >>>>>>>>>>> key,
>> > >>>>>>>>>>>>>> String defaultValue)`. I would remove the other typed
>> > >>>>>> variants
>> > >>>>>>> with
>> > >>>>>>>>>>>>>> default values but I'm ok with keeping them if they
>> > >> are
>> > >>>>>> still
>> > >>>>>>> used.
>> > >>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>> -Max
>> > >>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>> On Wed, Dec 13, 2023 at 4:59 AM Rui Fan <
>> > >>>>>> 1996fan...@gmail.com>
>> > >>>>>>>>>>> wrote:
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> Hi devs,
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> I'd like to start a discussion to discuss whether
>> > >>>>>>> Configuration
>> > >>>>>>>>>>>>> supports
>> > >>>>>>>>>>>>>>> getting value based on the String key.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> In the FLIP-77[1] and FLINK-14493[2], a series of
>> > >>>> methods
>> > >>>>>> of
>> > >>>>>>>>>>>>> Configuration
>> > >>>>>>>>>>>>>>> are marked as @Deprecated, for example:
>> > >>>>>>>>>>>>>>> - public String getString(String key, String
>> > >>>> defaultValue)
>> > >>>>>>>>>>>>>>> - public long getLong(String key, long defaultValue)
>> > >>>>>>>>>>>>>>> - public boolean getBoolean(String key, boolean
>> > >>>>>> defaultValue)
>> > >>>>>>>>>>>>>>> - public int getInteger(String key, int
>> > >> defaultValue)
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> The java doc suggests using getString(ConfigOption,
>> > >>>>>> String)
>> > >>>>>>> or
>> > >>>>>>>>>>>>>>> getOptional(ConfigOption), it means using
>> > >> ConfigOption
>> > >>>> as
>> > >>>>>> key
>> > >>>>>>>>>>>>>>> instead of String.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> They are depreated since Flink-1.10, but these
>> > >> methods
>> > >>>>>> still
>> > >>>>>>>>>>>>>>> be used in a lot of code. I think getString(String
>> > >>> key,
>> > >>>>>>> String
>> > >>>>>>>>>>>>>>> defaultValue)
>> > >>>>>>>>>>>>>>> shouldn't be deprecated with 2 reasons:
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> 1. A lot of scenarios don't define the ConfigOption,
>> > >>>> they
>> > >>>>>>> using
>> > >>>>>>>>>>>>>>> String as the key and value directly, such as:
>> > >>>>>> StreamConfig,
>> > >>>>>>>>>>>>>>> TaskConfig, DistributedCache, etc.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> 2. Some code wanna convert all keys or values, this
>> > >>>>>>> converting
>> > >>>>>>>>>>>>>>> is generic, so the getString(String key, String
>> > >>>>>>> defaultValue) is
>> > >>>>>>>>>>>>> needed.
>> > >>>>>>>>>>>>>>> Such as: kubernetes-operator [3].
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> Based on it, I have 2 solutions:
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> 1. Removing the @Deprecated for these methods.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> 2. Only removing the @Deprecated for `public String
>> > >>>>>>>>>>> getString(String
>> > >>>>>>>>>>>>> key,
>> > >>>>>>>>>>>>>>> String defaultValue)`
>> > >>>>>>>>>>>>>>> and delete other getXxx(String key, Xxx
>> > >> defaultValue)
>> > >>>>>>> directly.
>> > >>>>>>>>>>>>>>> They have been depreated 8 minor versions ago. In
>> > >>>> general,
>> > >>>>>>> the
>> > >>>>>>>>>>>>>>> getString can replace getInteger, getBoolean, etc.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> I prefer solution1, because these getXxx methods are
>> > >>>> used
>> > >>>>>> for
>> > >>>>>>>>>>> now,
>> > >>>>>>>>>>>>>>> they are easy to use and don't bring large
>> > >> maintenance
>> > >>>>>> costs.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> Note: The alternative to public String
>> > >>> getString(String
>> > >>>>>> key,
>> > >>>>>>>>>>> String
>> > >>>>>>>>>>>>>>> defaultValue)
>> > >>>>>>>>>>>>>>> is Configuration.toMap. But the ease of use is not
>> > >>> very
>> > >>>>>>>>>>> convenient.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> Looking forward to hear more thoughts about it!
>> > >> Thank
>> > >>>> you~
>> > >>>>>>>>>>>>>>> Also, very much looking forward to feedback from
>> > >>> Dawid,
>> > >>>>>> the
>> > >>>>>>>>>>> author of
>> > >>>>>>>>>>>>>>> FLIP-77.
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> [1] https://cwiki.apache.org/confluence/x/_RPABw
>> > >>>>>>>>>>>>>>> [2]
>> > >> https://issues.apache.org/jira/browse/FLINK-14493
>> > >>>>>>>>>>>>>>> [3]
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>
>> > >>>>>>>
>> > >>>>>>
>> > >>>>
>> > >>>
>> > >>
>> > https://github.com/apache/flink-kubernetes-operator/pull/729/files#r1424811105
>> > >>>>>>>>>>>>>>>
>> > >>>>>>>>>>>>>>> Best,
>> > >>>>>>>>>>>>>>> Rui
>> > >>>>>>>>>>>>>
>> > >>>>>>>>>>>
>> > >>>>>>>>>>
>> > >>>>>>>
>> > >>>>>>
>> > >>>>>
>> > >>>>
>> > >>>
>> > >>
>> > >
>> >
>> >

Reply via email to