+1 Matthias/Andy. IMHO, interface is about the contract, it should not have/expose any implementation. I am fine with either way as it is more of taste or preference.
Agree with Ismael/Colin/Ryanne on not deprecating for good reasons. On Mon, Jun 24, 2019 at 8:33 PM Andy Coates <a...@confluent.io> wrote: > > I agree Matthias. > > (In Scala, such factory methods are on a companion object. As Java doesn't > have the concept of a companion object, an equivalent would be a utility > class with a similar name...) > > However, I'll update the KIP to include the factory method on the interface. > > On Fri, 21 Jun 2019 at 23:40, Matthias J. Sax <matth...@confluent.io> wrote: > > > I still think, that an interface does not need to know anything about > > its implementation. But I am also fine if we add a factory method to the > > new interface if that is preferred by most people. > > > > > > -Matthias > > > > On 6/21/19 7:10 AM, Ismael Juma wrote: > > > This is even more reason not to deprecate immediately, there is very > > little > > > maintenance cost for us. We should be mindful that many of our users (eg > > > Spark, Flink, etc.) typically allow users to specify the kafka clients > > > version and hence avoid using new classes/interfaces for some time. They > > > would get a bunch of warnings they cannot do anything about apart from > > > suppressing. > > > > > > Ismael > > > > > > On Fri, Jun 21, 2019 at 4:00 AM Andy Coates <a...@confluent.io> wrote: > > > > > >> Hi Ismael, > > >> > > >> I’m happy enough to not deprecate the existing `AdminClient` class as > > part > > >> of this change. > > >> > > >> However, note that, the class will likely be empty, i.e. all methods and > > >> implementations will be inherited from the interface: > > >> > > >> public abstract class AdminClient implements Admin { > > >> } > > >> > > >> Not marking it as deprecated has the benefit that users won’t see any > > >> deprecation warnings on the next release. Conversely, deprecating it > > will > > >> mean we can choose to remove this, now pointless class, in the future > > if we > > >> choose. > > >> > > >> That’s my thinking for deprecation, but as I’ve said I’m happy either > > way. > > >> > > >> Andy > > >> > > >>> On 18 Jun 2019, at 16:09, Ismael Juma <ism...@juma.me.uk> wrote: > > >>> > > >>> I agree with Ryanne, I think we should avoid deprecating AdminClient > > and > > >>> causing so much churn for users who don't actually care about this > > niche > > >>> use case. > > >>> > > >>> Ismael > > >>> > > >>> On Tue, Jun 18, 2019 at 6:43 AM Andy Coates <a...@confluent.io> wrote: > > >>> > > >>>> Hi Ryanne, > > >>>> > > >>>> If we don't change the client code, then everywhere will still expect > > >>>> subclasses of `AdminClient`, so the interface will be of no use, i.e. > > I > > >>>> can't write a class that implements the new interface and pass it to > > the > > >>>> client code. > > >>>> > > >>>> Thanks, > > >>>> > > >>>> Andy > > >>>> > > >>>> On Mon, 17 Jun 2019 at 19:01, Ryanne Dolan <ryannedo...@gmail.com> > > >> wrote: > > >>>> > > >>>>> Andy, while I agree that the new interface is useful, I'm not > > convinced > > >>>>> adding an interface requires deprecating AdminClient and changing so > > >> much > > >>>>> client code. Why not just add the Admin interface, have AdminClient > > >>>>> implement it, and have done? > > >>>>> > > >>>>> Ryanne > > >>>>> > > >>>>> On Mon, Jun 17, 2019 at 12:09 PM Andy Coates <a...@confluent.io> > > >> wrote: > > >>>>> > > >>>>>> Hi all, > > >>>>>> > > >>>>>> I think I've addressed all concerns. Let me know if I've not. Can I > > >>>> call > > >>>>>> another round of votes please? > > >>>>>> > > >>>>>> Thanks, > > >>>>>> > > >>>>>> Andy > > >>>>>> > > >>>>>> On Fri, 14 Jun 2019 at 04:55, Satish Duggana < > > >> satish.dugg...@gmail.com > > >>>>> > > >>>>>> wrote: > > >>>>>> > > >>>>>>> Hi Andy, > > >>>>>>> Thanks for the KIP. This is a good change and it gives the user a > > >>>>> better > > >>>>>>> handle on Admin client usage. I agree with the proposal except the > > >>>> new > > >>>>>>> `Admin` interface having all the methods from `AdminClient` > > abstract > > >>>>>> class. > > >>>>>>> It should be kept clean having only the admin operations as methods > > >>>>> from > > >>>>>>> KafkaClient abstract class but not the factory methods as mentioned > > >>>> in > > >>>>>> the > > >>>>>>> earlier mail. > > >>>>>>> > > >>>>>>> I know about dynamic proxies(which were widely used in RMI/EJB > > >>>> world). > > >>>>> I > > >>>>>> am > > >>>>>>> curious about the usecase using dynamic proxies with Admin client > > >>>>>>> interface. Dynamic proxy can have performance penalty if it is used > > >>>> in > > >>>>>>> critical path. Is that the primary motivation for creating the KIP? > > >>>>>>> > > >>>>>>> Thanks, > > >>>>>>> Satish. > > >>>>>>> > > >>>>>>> On Wed, Jun 12, 2019 at 8:43 PM Andy Coates <a...@confluent.io> > > >>>> wrote: > > >>>>>>> > > >>>>>>>> I'm not married to that part. That was only done to keep it more > > >>>> or > > >>>>>> less > > >>>>>>>> inline with what's already there, (an abstract class that has a > > >>>>> factory > > >>>>>>>> method that returns a subclass.... sounds like the same > > >>>> anti-pattern > > >>>>>> ;)) > > >>>>>>>> > > >>>>>>>> An alternative would to have an `AdminClients` utility class to > > >>>>> create > > >>>>>>> the > > >>>>>>>> admin client. > > >>>>>>>> > > >>>>>>>> On Mon, 10 Jun 2019 at 19:31, Matthias J. Sax < > > >>>> matth...@confluent.io > > >>>>>> > > >>>>>>>> wrote: > > >>>>>>>> > > >>>>>>>>> Hmmm... > > >>>>>>>>> > > >>>>>>>>> So the new interface, returns an instance of a class that > > >>>>> implements > > >>>>>>> the > > >>>>>>>>> interface. This sounds a little bit like an anti-pattern? > > >>>> Shouldn't > > >>>>>>>>> interfaces actually not know anything about classes that > > >>>> implement > > >>>>>> the > > >>>>>>>>> interface? > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> -Matthias > > >>>>>>>>> > > >>>>>>>>> On 6/10/19 11:22 AM, Andy Coates wrote: > > >>>>>>>>>> `AdminClient` would be deprecated purely because it would no > > >>>>> longer > > >>>>>>>> serve > > >>>>>>>>>> any purpose and would be virtually empty, getting all of its > > >>>>>>>>> implementation > > >>>>>>>>>> from the new interfar. It would be nice to remove this from the > > >>>>> API > > >>>>>>> at > > >>>>>>>>> the > > >>>>>>>>>> next major version bump, hence the need to deprecate. > > >>>>>>>>>> > > >>>>>>>>>> `AdminClient.create()` would return what it does today, (so > > >>>> not a > > >>>>>>>>> breaking > > >>>>>>>>>> change). > > >>>>>>>>>> > > >>>>>>>>>> On Tue, 4 Jun 2019 at 22:24, Ryanne Dolan < > > >>>> ryannedo...@gmail.com > > >>>>>> > > >>>>>>>> wrote: > > >>>>>>>>>> > > >>>>>>>>>>>> The existing `AdminClient` will be marked as deprecated. > > >>>>>>>>>>> > > >>>>>>>>>>> What's the reasoning behind this? I'm fine with the other > > >>>>> changes, > > >>>>>>> but > > >>>>>>>>>>> would prefer to keep the existing public API intact if it's > > >>>> not > > >>>>>>>> hurting > > >>>>>>>>>>> anything. > > >>>>>>>>>>> > > >>>>>>>>>>> Also, what will AdminClient.create() return? Would it be a > > >>>>>> breaking > > >>>>>>>>> change? > > >>>>>>>>>>> > > >>>>>>>>>>> Ryanne > > >>>>>>>>>>> > > >>>>>>>>>>> On Tue, Jun 4, 2019, 11:17 AM Andy Coates <a...@confluent.io> > > >>>>>>> wrote: > > >>>>>>>>>>> > > >>>>>>>>>>>> Hi folks > > >>>>>>>>>>>> > > >>>>>>>>>>>> As there's been no chatter on this KIP I'm assuming it's > > >>>>>>>>> non-contentious, > > >>>>>>>>>>>> (or just boring), hence I'd like to call a vote for KIP-476: > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >> > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-476%3A+Add+Java+AdminClient+Interface > > >>>>>>>>>>>> > > >>>>>>>>>>>> Thanks, > > >>>>>>>>>>>> > > >>>>>>>>>>>> Andy > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> > > >>>> > > >> > > >> > > > > > > >