Hi yuxia,

Thanks for your thoughtful review, it does have many problems.

> I feel the `Tuple2<Set<String>, Set<String>>` is a little of obscure.
Now I add a class AllowedConfigs.

> The key is of string type, and the value is also of string type.
We have no other better type to carries all this option type.

> setString(String key, String value) to obtain newConfig
Will use merged the map,then transform with Configuration.fromMap whose
param is alse Map<String, String>.

> ServerReconfigurable need to handle this case itself and throw a
ConfigException
Yes, ServerReconfigurable#validate will simply verify the param format it
needs. For example, if we set datalake.format=unknown, exception will
thrown: com.alibaba.fluss.exception.ConfigException: Invalid configuration
for datalake format null: Could not parse value 'UNKNOW' for key
'datalake.format'.


> Why is config_source in PbDescribeConfigsResponseInfo optional?
Modified to required now.

> Moreover, I feel this field might be unnecessary since it's always
INITIAL_SERVER_CONFIG
When describing config, the initial options(from server.yaml) will return
as INITIAL_SERVER_CONFIG while dynamic options will return as
DYNAMIC_SERVER_CONFIG.

> For PbAlterConfigsRequestInfo, I think config_operation should also be
required?
done it.

> Could you please provide an example describing the data in zk?
Add it as
*{"version":1,"config":{"datalake.format":"value1","key2":null,"key3":"value3"}}*

Best,
Hongshun





On Thu, Aug 7, 2025 at 1:46 PM yuxia <[email protected]> wrote:

> Hi, Hongshun.
>
> Thanks for the FIP, few comments:
>
> 1: Regarding to method `Tuple2<Set<String>, Set<String>>
> allowedConfigs();`, Is it possible the returned type `Tuple2<Set<String>,
> Set<String>>` be a class to make it more self-ducumenting? Currently,
> I feel the `Tuple2<Set<String>, Set<String>>` is a little of obscure.
>
> 2: Regarding the parameter for users to modify configurations via
> alterConfigs(Collection<AlterConfigOp> configs):
> The key is of string type, and the value is also of string type. Do we
> directly use setString(String key, String value) to obtain newConfig? For
> enum types, if the value is not within the enum's range—for example, if a
> user sets datalake.format=unknown—then
> newConfig.getOptional(DATALAKE_FORMAT) will directly throw a
> java.lang.IllegalArgumentException. Does the implementation of
> ServerReconfigurable need to handle this case itself and throw a
> ConfigException? Other types of configuration items have similar issues.
>
> 3: Why is config_source in PbDescribeConfigsResponseInfo optional? Why
> isn't it also required? Moreover, I feel this field might be unnecessary
> since it's always INITIAL_SERVER_CONFIG? For PbAlterConfigsRequestInfo, I
> think config_operation should also be required?
>
> 4: Could you please provide an example describing the data in zk?
>
>
>
> Best regards,
> Yuxia
>
> ----- 原始邮件 -----
> 发件人: "loserwang1024" <[email protected]>
> 收件人: "dev" <[email protected]>
> 发送时间: 星期四, 2025年 8 月 07日 上午 11:51:05
> 主题: [SPAM][DISCUSS] FIP-12: Server Dynamic Config
>
> Hi devs,
>
> I'd like to start a discussion about FIP-12: Server Dynamic Config[1].
> Currently, any changes to the server.yaml configuration in a Fluss cluster
> require a full restart of the cluster, which negatively impacts stability
> and availability. To improve operational agility and reduce downtime, we
> propose introducing dynamic configuration capabilities, enabling runtime
> modification of key parameters—such as enabling/disabling lake-streaming
> integration features or managing user accounts—without requiring service
> interruption.
>
> The POC[2] code is provided to enable lake format. You can try and give
> some advice.
>
> Best
> Hongshun
>
>
> [1]
>
> https://cwiki.apache.org/confluence/display/FLUSS/FIP-12%3A+Server+Dynamic+Config
> [2] https://github.com/loserwang1024/fluss/tree/poc-dymanic-config.
>

Reply via email to