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

Sean Quah edited comment on KAFKA-21421 at 11/3/26, 1:48 PM:
-------------------------------------------------------------

I do not think spot patching every site to trim the input is an effective 
approach. It will not prevent future recurrence. We have two parser 
implementations: {{ConfigDef.parseType}} and the ad-hoc implementations using 
{{{}Int.parseInt/Long.parseLong/Boolean.parseBoolean{}}}, which opens the 
window for divergence.


was (Author: JIRAUSER304653):
I do not think spot patching every site in the bug report to trim the input is 
an effective approach. It will not prevent future recurrence. We have two 
parser implementations: {{ConfigDef.parseType}} and the ad-hoc implementations 
using {{{}Int.parseInt/Long.parseLong/Boolean.parseBoolean{}}}, which opens the 
window for divergence.

> ConfigDef.parse trims whitespace but raw config usage doesn't
> -------------------------------------------------------------
>
>                 Key: KAFKA-21421
>                 URL: https://issues.apache.org/jira/browse/KAFKA-21421
>             Project: Kafka
>          Issue Type: Bug
>          Components: config, connect, group-coordinator, streams
>            Reporter: Sean Quah
>            Priority: Major
>
> Discovered by [~xvrl]
> h2. Claude analysis:
> Rows 1 and 2 appear under both Topic and Broker because {{getTopicConfig}} 
> falls back to the cluster and broker-level configs, in 
> {{{}ConfigurationControlManager.java:660-664{}}}.
> h3. Topic configs
> ||#||Site||Config||Effect of a padded value||
> |1|{{ReplicationControlManager.java:2454}}|{{min.insync.replicas}}|{{NumberFormatException}}
>  makes the controller fail over, and the next controller hits the same value.|
> |2|{{ConfigurationControlManager.java:798}}|{{unclean.leader.election.enable}}|{{"
>  true"}} is read as {{{}false{}}}, so the controller silently skips unclean 
> election.|
> |3|{{LogConfig.java:556}}|existing {{remote.storage.enable}}|{{" true"}} is 
> read as {{{}false{}}}, so the checks for turning off remote storage are 
> skipped.|
> |7|{{InternalTopicManager.java:324, 363, 389}}|{{{}retention.ms{}}}, 
> {{min.compaction.lag.ms}} read back from the broker|Streams internal topic 
> validation throws.|
> |8|{{TopicCommand.java:315}}|{{min.insync.replicas}} read back from the 
> broker|{{\-\-under-min-isr-partitions}} and {{\-\-at-min-isr-partitions}} 
> throw.|
> h3. Broker configs (cluster default or per-broker)
> ||#||Site||Config||Effect of a padded value||
> |1|{{ReplicationControlManager.java:2454}}|{{min.insync.replicas}}|The effect 
> is the same as for the topic config.|
> |2|{{ConfigurationControlManager.java:798}}|{{unclean.leader.election.enable}}|The
>  effect is the same as for the topic config.|
> |5|{{GroupCoordinatorConfig.java:858}}|{{{}group.consumer.assignment.interval.ms{}}},
>  {{{}group.share.assignment.interval.ms{}}}, 
> {{group.streams.assignment.interval.ms}}|A parse failure blocks every dynamic 
> broker config update. A trailing space in server.properties also triggers it.|
> |6|{{ConfigHandler.scala:159, 
> 161}}|{{{}leader.replication.throttled.rate{}}}, 
> {{{}follower.replication.throttled.rate{}}}, 
> {{replica.alter.log.dirs.io.max.bytes.per.second}}|Replication quotas aren't 
> updated.|
> h3. Group configs
> ||#||Site||Config||Effect of a padded value||
> |4|{{GroupConfig.java:959, 960, 989, 1021, 1048}}|int group configs, such as 
> {{consumer.session.timeout.ms}}|Every broker throws, so the group's overrides 
> are never applied.|
> h3. Streams client configs
> ||#||Site||Config||Effect of a padded value||
> |7|{{InternalTopicManager.java:327, 366}}|{{{}topic.retention.ms{}}}, 
> {{topic.min.compaction.lag.ms}}|Streams internal topic validation throws.|
> |9|{{StreamsConfig.java:1978-1979}}|{{{}topic.segment.bytes{}}}, 
> {{producer.batch.size}}|{{StreamsConfig}} construction throws.|
> |10|{{TopologyConfig.java:312}}|{{transactional.state.stores}}|{{" true"}} is 
> read as {{{}false{}}}.|
> |11|{{TimeWindowedDeserializer.java:117}}|{{window.size.ms}}|The deserializer 
> throws.|
> h3. Connect configs
> ||#||Site||Config||Effect of a padded value||
> |12|{{ConnectorConfig.java:391}}|{{transforms.<alias>.negate}}|{{" true"}} is 
> read as {{{}false{}}}, so the predicate isn't negated.|
> |13|{{MirrorMakerConfig.java:111, 121}}|{{emit.heartbeats.enabled}}|{{" 
> true"}} is read as {{{}false{}}}.|
> |13|{{DefaultReplicationPolicy.java:58}}|{{replication.policy.internal.topic.separator.enabled}}|{{"
>  true"}} is read as {{{}false{}}}.|
> Trimming in {{ConfigurationControlManager}} would fix every Topic and Group 
> row, and rows 1, 2 and 6 under Broker. Row 5 and the Streams and Connect rows 
> read local or client config, so each of those sites needs its own fix.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to