Hi, I've updated the KIP along the lines of my previous reply to Ismael. If no one has further comments I will likely start a vote thread next week.
Kind regards, Tom On Tue, Mar 23, 2021 at 10:01 AM Tom Bentley <tbent...@redhat.com> wrote: > Hi Ryanne, > > Thanks for the reply. If there was a consensus for either of the more > ambitious changes described in my 2nd email then I would agree with you, > since it's much easier for users to understand and deal with and avoids > having a situation of a class with half of its API deprecated, the need to > find synonyms etc. > > TBH though, that 2nd email was an attempt to get people thinking and > engaging in the discussion. My personal preference is much closer to the > incremental option described in the KIP, because overall I don't think > there are nearly enough API mistakes/tech debt in the admin client overall > to warrant such a big change. Sure, there are a few deprecated methods and > classes, and using CompletionStage or CompletableFuture rather than > KafkaFuture would require major changes where those could be cleaned up at > the same time, but it just doesn't seem worth it when the vast majority of > the API is fine. It would force everyone using the Admin client to > eventually switch, whereas adding an accessor to KafkaFuture achieves the > prime objective of enabling people who need to to interoperate with 3rd > party APIs requiring CompletionStage, while requiring nothing of all the > other users of the API. > > So unless there's a chorus of people who disagree and think that such a > big refactoring really is worthwhile, then I'm inclined to stick with > something closer to KIP-707. > > Many thanks, > > Tom > > On Fri, Mar 19, 2021 at 4:52 PM Ryanne Dolan <ryannedo...@gmail.com> > wrote: > >> My two cents: keep the same method and class names and just use a >> different >> package. Strongly dislike coming up with slightly different names for >> everything. >> >> Ryanne >> >> On Tue, Feb 2, 2021, 4:41 AM Tom Bentley <tbent...@redhat.com> wrote: >> >> > I've previously discounted the possibility of an "Admin2" client, but >> > seeing the recent discussions on the thread for KIP-706, I wonder >> whether >> > this current proposal in KIP-707 would benefit from a bit more >> > discussion... I think there are broadly two approaches to evolving the >> > Admin client API to use CompletionStage directly (rather than what's >> > currently proposed in KIP-707): >> > >> > The simpler option, from a development point of view, would be to >> introduce >> > an alternative/parallel set of classes for each of the existing result >> > classes. E.g. ListTopicsOutcome which was the same as ListTopicsResult, >> but >> > using CompletionStage rather than KafkaFuture. Adding methods to the >> > existing Admin interface would require coming up with synonym method >> names >> > for every API call, and probably half of the API being deprecated (if >> not >> > immediately then in the long run). It would be cleaner to have a whole >> new >> > interface, let's call it Manager, using the same method names. The >> existing >> > Admin client implementation would then wrap a Manager instance, and the >> > existing Result classes could have a constructor parameter of their >> > corresponding Outcome instance which wrapped the CompletionStages with >> > KafkaFutures. The Options classes would be unchanged. From a users >> point of >> > view migrating to the new Manager client would mostly be a matter of >> > changing class names and adding a `.toCompletionStage()` to those places >> > where they were calling KafkaFuture.get()/getNow() (and even this could >> be >> > avoided if we used CompletableFuture rather than CompletionStage in the >> > Outcome class APIs). In the long run Admin would be removed and we'd be >> > left with the minor annoyance of having a client called Manager in a >> > package called admin. >> > >> > The more involved version would do a similar refactoring, but within a >> > different package. If we stuck with the Admin and Result class names the >> > users experience of migrating their codebase would be limited to >> changing >> > import statements and the same additions of `.toCompletionStage()`. On >> the >> > implementation side it would force us to duplicate all the Options >> classes >> > and also have a way of converting old Options instances to their new >> > equivalents so that the old Admin implementation could delegate to the >> new >> > one. The main benefit of this approach seems to be the slightly easier >> > experience for people porting their code to the new client. >> > >> > In doing either of these much more significant refactorings there would >> > also be the opportunity to omit the current Admin API's deprecated >> methods >> > and classes from the new API. >> > >> > Do we think this is worth biting off in order to have more long term >> > consistency between the Admin, Producer and consumer APIs? >> > >> > Kind regards, >> > >> > Tom >> > >> > On Fri, Jan 22, 2021 at 3:02 PM Tom Bentley <tbent...@redhat.com> >> wrote: >> > >> > > Hi, >> > > >> > > Following a recent discussion on a PR[1], I've written KIP-707 to >> > > establish what should be done to improve the API of KafkaFuture. >> > > If you have the time, your comments would be most welcome, as some of >> the >> > > rejected alternatives are not unreasonable. >> > > >> > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-707%3A+The+future+of+KafkaFuture >> > > >> > > Many thanks, >> > > >> > > Tom >> > > >> > > [1]: https://github.com/apache/kafka/pull/9878 >> > > >> > >> >