Il Lun 22 Ago 2022, 17:07 Yunze Xu <y...@streamnative.io.invalid> ha
scritto:

> I will take a look. But I think we should also add a trivial example
> (or a test) in the Apache repo, e.g. just print some messages for an
> extended command.


Sure. I will update the PIP

And the JavaDocs of these interfaces should be
> complete and more clear.
>


I will leave that to the implementation PR

Enrico


> Thanks,
> Yunze
>
>
>
>
> > 2022年8月22日 18:37,Enrico Olivelli <eolive...@gmail.com> 写道:
> >
> > Yunze,
> >
> > Il giorno lun 22 ago 2022 alle ore 08:06 Yunze Xu
> > <y...@streamnative.io.invalid> ha scritto:
> >>
> >> The motivation and goal LGTM, but the API changes look very simple and
> >> hard to use. Do we have to implement all these interfaces for an admin
> >> extension? If yes, could you show an example in the proposal as a
> >> guidance?
> >>
> >> For example, if I just want to implement a simple command:
> >>
> >> ```bash
> >> ./bin/pulsar-admin kafka create-topic <my-topic> --partitions
> <num-partitions>
> >> ```
> >>
> >> How should I implement these interfaces?
> >
> > This is a example for the implementation that I am going to do for JMS
> >
> https://github.com/datastax/pulsar-jms/pull/53/files#diff-9afaac9c7dc4b3d674e0623cd3d76348b01537c6095e9b5b8e804f59a481cceeR31
> >
> > it is only a mock command at the moment, but it is good to showcase the
> feature
> >
> > Enrico
> >
> >
> >>
> >> Thanks,
> >> Yunze
> >>
> >>
> >>
> >>
> >>> 2022年8月18日 16:23,Enrico Olivelli <eolive...@gmail.com> 写道:
> >>>
> >>> Hello,
> >>> I have drafted a PIP around this proposal.
> >>>
> >>> PIP link: https://github.com/apache/pulsar/issues/17155
> >>>
> >>> I am preparing an official PR, I already have a working prototype.
> >>>
> >>> Copy of the contents of the GH issue is attached for discussion here
> >>> on the Mailing list.
> >>>
> >>> Motivation
> >>>
> >>> There are many projects that are in the Pulsar ecosystem like Protocol
> >>> Handlers (Kafka, MQTT, RabbitMQ) and libraries (JMS…) that need
> >>> additional tools for operating Pulsar following specific conventions
> >>> adopted by each project and to handle custom domain objects (like JMS
> >>> queues, Kafka Consumer Groups...).
> >>>
> >>> Some examples:
> >>>
> >>> Kafka: tools for inspecting internal systems, SchemaRegistry,
> >>> Transaction Manager, Consumers Groups
> >>> JMS: tools to handling Subscriptions and Selectors
> >>> RabbitMQ: tools to handle Pulsar topics and subscription following the
> >>> convention
> >>>
> >>> This is very important as it is hard to follow the conventions of each
> >>> project using pulsar-admin and the administrator may inadvertently
> >>> break the system.
> >>>
> >>> This feature will enhance the UX of the Pulsar Admin CLI tools for the
> >>> benefit of the whole ecosystem and users.
> >>>
> >>> Goal
> >>>
> >>> As we do for many other components in Pulsar, we need a way to enhance
> >>> the CLI tools, pulsar-admin and pulsar-shell, with additional commands
> >>> that are specific to the additional features.
> >>>
> >>> The proposal here is to add an extension mechanism to the pulsar-admin
> >>> (and so pulsar-shell) tool.
> >>> Following the usual conventions for extensions the extension will be
> >>> bundled in a .nar file that may contain additional third party
> >>> libraries.
> >>>
> >>> The extension will be able to provide new top level commands
> >>>
> >>> pulsar-admin my-command-group my-command arguments…
> >>>
> >>> The extension will be able to access the PulsarAdmin API provided by
> >>> the environment.
> >>>
> >>> The extension must not depend directly on the JCommander library but
> >>> we will provide an API to declare the parameters and the other
> >>> metadata necessary to document and execute the command.
> >>> This is very important because during the lifecycle of Pulsar the
> >>> project may decide to upgrade JCommander to an incompatible version or
> >>> to drop the dependency at all.
> >>>
> >>> API Changes
> >>>
> >>> We will introduce a new Maven module pulsar-tools-api that contains
> >>> the public API that can be used by implementations of the custom
> >>> commands.
> >>>
> >>> The implementation will be bundled in a .nar file with a descriptor
> >>> with the following fields:
> >>>
> >>> factoryClass: xxxxx.CommandFactory
> >>> name: extension-name
> >>> description: Description...
> >>>
> >>> There are the new classes:
> >>>
> >>> /**
> >>> Access to the environment
> >>> */
> >>> public interface CommandExecutionContext {
> >>> PulsarAdmin getPulsarAdmin();
> >>> Properties getConfiguration();
> >>> }
> >>>
> >>>
> >>> /**
> >>> * Custom command implementation
> >>> */
> >>> public interface CustomCommand {
> >>> String name();
> >>> String description();
> >>> List<ParameterDescriptor> parameters();
> >>> boolean execute(Map<String, Object> parameters,
> >>> CommandExecutionContext context) throws Exception;
> >>> }
> >>>
> >>> /**
> >>> * A group of commands.
> >>> */
> >>> public interface CustomCommandGroup {
> >>> String name();
> >>> String description();
> >>> List<CustomCommand> commands(CommandExecutionContext context);
> >>> }
> >>>
> >>> /**
> >>> * Main entry point of the extension
> >>> */
> >>> public interface CustomCommandFactory {
> >>>
> >>> /**
> >>> * Generate the available command groups.
> >>> */
> >>> List<CustomCommandGroup> commandGroups(CommandExecutionContext
> context);
> >>> }
> >>>
> >>> @Builder
> >>> @Getter
> >>> public final class ParameterDescriptor {
> >>> @Builder.Default
> >>> private String name = "";
> >>> @Builder.Default
> >>> private String description = "";
> >>> private ParameterType type = ParameterType.STRING;
> >>> private boolean required = false;
> >>> }
>
>

Reply via email to