Thanks Xuannan and Xintong for the quick feedback!

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

Sure, we can add some comments to guide users to use ConfigOption.

If so, I will remove the @Deprecated annotation for
`getString(String key, String defaultValue)` method`, and add
some comments  for it.

Also, it's indeed a small change related to Public class(or Api),
is voting necessary?

Best,
Rui

On Wed, 20 Dec 2023 at 16:55, Xintong Song <tonysong...@gmail.com> wrote:

> Sounds good to me.
>
> Best,
>
> Xintong
>
>
>
> On Wed, Dec 20, 2023 at 9:40 AM Xuannan Su <suxuanna...@gmail.com> wrote:
>
> > 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