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