Hi Gaurav,

Thanks for the KIP!

I've noticed the lack of Throwable-based constructors in the past, so I'm
glad you're bringing this up for discussion. I think it makes sense to be
able to add more information relevant for debugging configuration issues
directly as a cause.

1. Could you discuss #addSuppressed as a rejected alternative?
2. Since ConfigException has not had any causes until now, there may be
implementations that don't inspect the cause or evaluate the stack
trace [1]. Do you plan on changing any of these to aid debugging?

> Of the 12 usages of ConfigException

3. I am skeptical of characterizing the usages of ConfigException in this
way. Because it is a public API, there are likely hundreds to thousands of
usages in downstream projects that a search of the main Kafka repository
will not uncover.
4. The ConfigDef.Validator interface accepts (String, Object) [2], so it
could be natural for implementations to use the (String, Object)
constructor. A constructor removal would force rework of these
implementations to either add a meaningful message, or churn to add an
explicit `null` message. I'm unsure if that is a net positive for the
ecosystem, especially when the (String, Object, String) constructor is
already present.

> The last one [3] uses the name argument as a message which seems wrong
too.

That one is definitely a typo, as it's using logger syntax in an exception
argument. It's also a default branch in an enum switch, so it's probably
never been exercised since being written. I wouldn't use it to draw broader
conclusions here.

Thanks,
Greg

[1]
https://github.com/apache/kafka/blob/dc396f47e8f7b82eef8b33c7a6153f5ed3a1127f/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java#L634
[2]
https://github.com/apache/kafka/blob/dc396f47e8f7b82eef8b33c7a6153f5ed3a1127f/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java#L948

On Mon, Jan 27, 2025 at 5:45 PM Gaurav Narula <ka...@gnarula.com> wrote:

> Thanks for your feedback Chia! Please find my answers inline
>
> > On 27 Jan 2025, at 13:32, Chia-Ping Tsai <chia7...@apache.org> wrote:
> >
> > hi Gaurav
> >
> > Thanks for this KIP as I totally agree that `cause` can offer more
> useful information. Please take a look at following small questions.
> >
> > chia_0: do we need to deprecate existent constructor? It seems to me
> that is not conflict to the new one.
>
> While I don't think there's a requirement to deprecate the constructor, I
> propose it because it's quite an unexpected signature and felt it's better
> to be explicit with ConfigException(String name, Object value, String
> message).
>
> Of the 12 usages of ConfigException(String name, Object value), 3 of them
> use an Object as the value, 2 of which are null [1][2]. The last one [3]
> uses the name argument as a message which seems wrong too.
>
> >
> > chia_1: Have you consider adding `ConfigException(String name, Object
> value, String message, Throwable cause)`? it is used widely too.
>
> Thanks for pointing that out. I do see quite a few usages where we catch
> an exception and throw ConfigException(String name, Object value, String
> message) only to discard the cause. I agree passing the cause would be of
> use. I've updated the KIP to reflect this.
>
> Best,
> Gaurav
>
> [1]
> https://github.com/apache/kafka/blob/dc396f47e8f7b82eef8b33c7a6153f5ed3a1127f/raft/src/main/java/org/apache/kafka/raft/QuorumConfig.java#L272
> [2]
> https://github.com/apache/kafka/blob/dc396f47e8f7b82eef8b33c7a6153f5ed3a1127f/raft/src/main/java/org/apache/kafka/raft/QuorumConfig.java#L292
> [3]
> https://github.com/apache/kafka/blob/dc396f47e8f7b82eef8b33c7a6153f5ed3a1127f/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/errors/RetryWithToleranceOperator.java#L282
>
> >
> > thanks,
> > Chia-Ping
> >
> > On 2025/01/26 11:08:59 Gaurav Narula wrote:
> >> Hi Everyone,
> >>
> >> I'd like to initiate a discussion on KIP-1129: Update ConfigException
> constructors at https://cwiki.apache.org/confluence/x/n4pEF.
> >>
> >> This KIP adds a constructor to ConfigException to accept a Throwable as
> a second argument following the Java convention for Throwables and
> deprecates the existing constructor that accepts an Object as the second
> argument.
> >>
> >> Looking forward to hearing the community's feedback on this!
> >>
> >> Regards,
> >> Gaurav
>
>

Reply via email to