Hi Tom, Have you considered to directly subclass CompletableFuture? Can we do this? Maybe a good addition to the alternatives.
Thanks, Viktor On Wed, Feb 24, 2021 at 10:13 AM Tom Bentley <tbent...@redhat.com> wrote: > If the next release is going to be Kafka 3.0, as seems to be the case, it > would be a great time to decide whether and what we're doing with this API. > So I'd be grateful for any feedback people might have. > > Many thanks, > > Tom > > On Tue, Feb 2, 2021 at 10:40 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 > >> > > >