Sure and i will let you all know when it's done

On Tue, 21 Jul 2026, 10:13 Chia-Ping Tsai, <[email protected]> wrote:

> Yes, Sean’s approach LGTM
>
> Would you mind updating the KIP?
>
> Thanks!
>
> > Siddhartha Devineni <[email protected]> 於 2026年7月21日 下午3:21
> 寫道:
> >
> > Hi Chia-Ping,
> >
> > You are right that @SuppressWarnings is just a temporary workaround.
> > The fundamental issue remains: in version 5.0, when constructors become
> > package-private, internal Kafka code in other packages (KafkaProducer,
> > KafkaAdminClient, etc.) will lose access.
> >
> > Given these constraints, Sean's minimal public Time interface seems to be
> > the cleanest solution.
> >
> > Thanks.
> >
> >> On Tue, Jul 21, 2026 at 8:25 AM Chia-Ping Tsai <[email protected]>
> wrote:
> >>
> >> hi Siddhartha
> >>
> >> I might be misunderstanding the approach of this PR. The
> >> @SuppressWarnings("deprecation") annotation is just a temporary
> workaround
> >> for now, right? We will eventually face the same issue in version 5.0:
> how
> >> to create a Metrics instance with a specific Time object from another
> >> package.
> >>
> >> Best,
> >> Chia-Ping
> >>
> >>> On 2026/07/20 21:34:15 Siddhartha Devineni wrote:
> >>> Hi Chia-Ping and Sean,
> >>>
> >>> To clarify the earlier discussion, after further investigation,
> "Metrics"
> >>> doesn't call any "Time" methods directly, rather it just stores and
> >> passes
> >>> it to internal components (this.time = time on line 174).
> >>>
> >>> This means no officially public Javadoc class actually needs to call
> any
> >>> "Time" methods.
> >>>
> >>> So, we could simply:
> >>> 1. Deprecate Time-accepting constructors in "Metrics" and
> "KafkaStreams"
> >>> 2. Keep "Time" as internal API
> >>> 3. No new public interface needed
> >>>
> >>> I have already created a PR implementing this approach after
> >>> withdrawing the KIP
> >>>
> >>> https://github.com/apache/kafka/pull/22689
> >>>
> >>> WDYT?
> >>>
> >>> Thanks and Best regards,
> >>> Siddhartha
> >>>
> >>> On Mon, Jul 20, 2026 at 8:02 PM Chia-Ping Tsai <[email protected]>
> >> wrote:
> >>>
> >>>> hi Alieh
> >>>>
> >>>> We could keep discussing on this mail thread.
> >>>>
> >>>> The solution provided by Sean is pretty good. Except for KafkaStreams,
> >> the
> >>>> others only use the  `milliseconds` so we could have a new simple
> >> interface
> >>>> Time, which could be located at org.apache.kafka.common, to replace
> >> origin
> >>>> Time-accepting constructor
> >>>>
> >>>> Best,
> >>>> Chia-Ping
> >>>>
> >>>> On 2026/07/20 14:27:00 Alieh Saeedi via dev wrote:
> >>>>> Hi
> >>>>>
> >>>>> Why is the KIP marked as withdrawn if the discussion is still
> >> ongoing in
> >>>>> the same thread?
> >>>>>
> >>>>> -Alieh
> >>>>>
> >>>>> On Mon, Jul 20, 2026 at 3:31 PM Sean Quah via dev <
> >> [email protected]>
> >>>>> wrote:
> >>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> I was hoping we could avoid making Time public. Failing that, is it
> >>>>>> possible to reduce the public API surface further? I looked at
> >> Metrics
> >>>>>> before and it only wanted the wall clock (milliseconds()). Perhaps
> >>>>>> the other constructors are the same?
> >>>>>> We could perhaps have a very simple public Time interface only
> >> exposing
> >>>>>> milliseconds (effectively a wall clock interface) and an internal
> >> Time
> >>>>>> interface which extends it with other methods.
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Sean
> >>>>>>
> >>>>>> On Mon, Jul 20, 2026 at 8:51 AM Chia-Ping Tsai <
> >> [email protected]>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> hi all,
> >>>>>>>
> >>>>>>> I re-read the constructors, and I think deprecating the
> >>>> time-accepting
> >>>>>>> constructors will introduce huge changes to the codebase.
> >>>>>>>
> >>>>>>> Maybe we could just make Time public with a few methods, such as
> >>>>>>> milliseconds, nanoseconds, and sleep. Since Timer is not public,
> >> we
> >>>> could
> >>>>>>> add a helper method to Timer, like Timer.create(Time, ...), to
> >>>> replace
> >>>>>>> Time#timer().
> >>>>>>>
> >>>>>>> WDYT?
> >>>>>>>
> >>>>>>> On 2026/04/23 20:57:19 Siddhartha Devineni wrote:
> >>>>>>>> Hi Chia-Ping, Kirk and Matthias,
> >>>>>>>>
> >>>>>>>> @Chia-Ping: You were right - after investigating, Time doesn't
> >>>> need to
> >>>>>> be
> >>>>>>>> public.
> >>>>>>>>
> >>>>>>>> @Kirk: You are right - the OAuth examples are instantiated via
> >>>>>>> reflection,
> >>>>>>>> not direct user code.
> >>>>>>>>
> >>>>>>>> @Matthias: Good points. I investigated whether Metrics can be
> >>>> changed
> >>>>>> to
> >>>>>>>> not expose Time.
> >>>>>>>>
> >>>>>>>> Findings:
> >>>>>>>>
> >>>>>>>> - new Metrics() - users call this (internally uses Time.SYSTEM)
> >>>>>>>> - new Metrics(Time time) and other variants - only called by
> >>>> internal
> >>>>>>> Kafka
> >>>>>>>> code (KafkaProducer, KafkaAdminClient, etc) and tests
> >>>>>>>>
> >>>>>>>> Proposed approach:
> >>>>>>>>
> >>>>>>>> - Withdraw KIP-1311 (Make Time public)
> >>>>>>>> - Create JIRA: "Deprecate Time-accepting constructors"
> >>>>>>>> - Deprecate Time constructors in both KafkaStreams and Metrics:
> >>>>>>>>     - KafkaStreams(Topology, Properties, Time)
> >>>>>>>>     - KafkaStreams(Topology, StreamsConfig, Time)
> >>>>>>>>     - KafkaStreams(Topology, Properties, KafkaClientSupplier,
> >>>> Time)
> >>>>>>>>     - Metrics(Time)
> >>>>>>>>     - Metrics(MetricConfig, Time)
> >>>>>>>>     - Metrics(MetricConfig, List<MetricsReporter>, Time)
> >>>>>>>>     - (and other Metrics variants accepting Time)
> >>>>>>>> - In version 5.0, make these constructors package-private
> >>>>>>>> - Internal Kafka code continues using them
> >>>>>>>>
> >>>>>>>> Result: Time remains internal.
> >>>>>>>>
> >>>>>>>> Does this approach work? If so, I'll withdraw KIP-1311 and
> >> create
> >>>> the
> >>>>>>> JIRA.
> >>>>>>>>
> >>>>>>>> Thank you,
> >>>>>>>> Siddhartha
> >>>>>>>>
> >>>>>>>> On Tue, Apr 21, 2026 at 5:22 AM Matthias J. Sax <
> >> [email protected]>
> >>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Thanks for the KIP. I am not sure if I understand why
> >>>>>>> `KafkaStreamsMock`
> >>>>>>>>> would be anything public?
> >>>>>>>>>
> >>>>>>>>> Also, why would we put it into some new `...test...`
> >> package? If
> >>>> we
> >>>>>>>>> change the package, we need to have `protected` access,
> >> which is
> >>>>>>> already
> >>>>>>>>> "semi-public"...
> >>>>>>>>>
> >>>>>>>>> If we want to keep `Time` internal, we would eventually make
> >> the
> >>>>>>>>> constructors that are marked deprecated, package-private,
> >> what
> >>>> allows
> >>>>>>> us
> >>>>>>>>> to add `org.apache.kafka.streams.KafkaStreamsMock` (same
> >> package
> >>>>>> name,
> >>>>>>>>> but int `test/` module) to still use these constructors, and
> >> the
> >>>>>>>>> corresponding unit test would use the new mock-factory
> >> instead of
> >>>>>>>>> calling `new`?
> >>>>>>>>>
> >>>>>>>>> For this case, the KIP does not need to mention anything
> >> about
> >>>>>>>>> `KafkaStreamsMock` as it's an helper in our `test/` module
> >> only,
> >>>> but
> >>>>>>> not
> >>>>>>>>> public API. -- If we want, we can still mention this plan on
> >> the
> >>>> KIP,
> >>>>>>>>> but atm the KIP is written in a way as if `KafkaStreamsMock`
> >>>> would
> >>>>>>>>> become public API, but to my understanding it should be an
> >>>>>> impl/testing
> >>>>>>>>> details only?
> >>>>>>>>>
> >>>>>>>>> Or did I misunderstand something?
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Also wondering, if we could also change `Metrics` in a way,
> >> that
> >>>> we
> >>>>>>>>> would not need to make `Time` public to begin with?
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> -Matthias
> >>>>>>>>>
> >>>>>>>>> On 4/20/26 4:53 PM, Kirk True wrote:
> >>>>>>>>>> Hi Siddhartha,
> >>>>>>>>>>
> >>>>>>>>>> The OAuth examples use Time in their constructors for unit
> >>>> tests.
> >>>>>>>>> They're not intended to be instantiated by any user code
> >> since
> >>>>>> they're
> >>>>>>> in
> >>>>>>>>> an internals package.
> >>>>>>>>>>
> >>>>>>>>>> Thanks,
> >>>>>>>>>> Kirk
> >>>>>>>>>>
> >>>>>>>>>> On Wed, Apr 15, 2026, at 8:52 AM, Siddhartha Devineni
> >> wrote:
> >>>>>>>>>>> Hi Chia-Ping,
> >>>>>>>>>>>
> >>>>>>>>>>> Sorry that i didn't mention the following examples in the
> >> KIP
> >>>>>>> earlier.
> >>>>>>>>>>> Now, I have updated the KIP with the following public
> >> packages
> >>>>>>> examples,
> >>>>>>>>>>> where "Time" is exposed in the public constructors:
> >>>>>>>>>>>
> >>>>>>>>>>> // couple of examples from multiple
> >>>>>>>>>>> "org.apache.kafka.common.metrics.Metrics.java"
> >> constructors
> >>>>>>>>>>> public Metrics(Time time) {}
> >>>>>>>>>>> public Metrics(MetricConfig defaultConfig, Time time) {}
> >>>>>>>>>>>
> >>>>>>>>>>> // in the public package
> >>>>>>> "org.apache.kafka.common.security.oauthbearer"
> >>>>>>>>>>> public JwtBearerJwtRetriever(Time time) {}
> >>>>>>>>>>> public ClientCredentialsJwtRetriever(Time time) {}
> >>>>>>>>>>>
> >>>>>>>>>>> Now, it should be clear.
> >>>>>>>>>>> Thanks for your time.
> >>>>>>>>>>>
> >>>>>>>>>>> Best regards,
> >>>>>>>>>>> Siddhartha
> >>>>>>>>>>>
> >>>>>>>>>>> On Tue, Apr 14, 2026 at 11:14 AM Chia-Ping Tsai <
> >>>>>> [email protected]
> >>>>>>>>
> >>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> hi Siddhartha
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks for this KIP.
> >>>>>>>>>>>>
> >>>>>>>>>>>> What is the exact benefit of exposing Time as a public
> >> API?
> >>>> Since
> >>>>>>> this
> >>>>>>>>> KIP
> >>>>>>>>>>>> proposes deprecating KafkaStreams(Topology, Properties,
> >>>> Time), it
> >>>>>>> seems
> >>>>>>>>>>>> there are no public interfaces relying on it anymore.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thus, it should be fine to just keep Time as an internal
> >> API,
> >>>>>>> right?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best,
> >>>>>>>>>>>> Chia-Ping
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Siddhartha Devineni <[email protected]> 於
> >>>>>> 2026年4月7日週二
> >>>>>>>>>>>> 下午2:19寫道:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Apologies, as I forgot to add the link to the KIP:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>
> >>
> https://urldefense.com/v3/__https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=406623925__;!!Ayb5sqE7!o-ar2zzpALvIzp5wF7s2E77bUw9C8CxXLU1JxqxsiiliVfUFzl_M8gIOcFoy3T1nFx5L78W0vA8d7XV_enMH$
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On Tue, Apr 7, 2026 at 9:13 AM Siddhartha Devineni <
> >>>>>>>>>>>>> [email protected]> wrote:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Hello everyone,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I would like to start a discussion on [DISCUSS]
> >> KIP-1311:
> >>>> Make
> >>>>>>>>>>>> Time/Timer
> >>>>>>>>>>>>>> public API.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Following KIP-1247 (Make Bytes part of public API), the
> >>>> Time
> >>>>>>>>> interface
> >>>>>>>>>>>>> and
> >>>>>>>>>>>>>> Timer class are the next candidates from
> >>>>>>>>>>>> "org.apache.kafka.common.utils"
> >>>>>>>>>>>>> to
> >>>>>>>>>>>>>> be made officially public. Time is currently exposed
> >>>> through
> >>>>>>> public
> >>>>>>>>>>>> APIs
> >>>>>>>>>>>>>> (e.g., in clients, KafkaStreams constructors, etc) but
> >> not
> >>>>>>> officially
> >>>>>>>>>>>>>> designated as a public API.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> An earlier version of this KIP explored splitting Time
> >> into
> >>>>>>> focused
> >>>>>>>>>>>>>> interfaces (Clock, MonotonicClock, etc.), but this
> >> would
> >>>>>> require
> >>>>>>>>>>>>> rewriting
> >>>>>>>>>>>>>> thousands of method signatures across the Kafka
> >> codebase.
> >>>> The
> >>>>>>> simpler
> >>>>>>>>>>>>>> approach of making Time public as-is seems more
> >>>> appropriate to
> >>>>>>> avoid
> >>>>>>>>>>>>>> breaking changes.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Looking forward to your feedback.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> Thank you,
> >>>>>>>>>>>>>> Siddhartha
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
>

Reply via email to