+1

Thanks,
Haiting

On 2021/12/23 05:38:14 Michael Marshall wrote:
> +1
> 
> - Michael
> 
> On Wed, Dec 22, 2021 at 6:18 PM Sijie Guo <guosi...@gmail.com> wrote:
> >
> > +1
> >
> > On Tue, Dec 21, 2021 at 3:59 PM Matteo Merli <mme...@apache.org> wrote:
> >
> > > This is the voting thread for PIP-123. It will stay open for at least 48h.
> > >
> > > https://github.com/apache/pulsar/issues/13346
> > >
> > >
> > > ---------
> > > ## Motivation
> > >
> > > For a very long time, we have included a CLI command to start the 
> > > ZooKeeper
> > > shell utility: `pulsar zookeeper-shell`, which is essentially a 
> > > repackaging
> > > of the ZooKeeper tool `zkCli.sh`.
> > >
> > > This is useful in some cases to either verify the content of metadata or
> > > to perform cleanup and modification tasks for which there is not an
> > > available
> > > option through the Pulsar REST APIs.
> > >
> > > While it's very useful, there are some drawbacks with the 
> > > `zookeeper-shell`
> > > as it is today:
> > >
> > >  1. This is only a ZooKeeper tool (obviously). Since we are adding more
> > >     metadata backends, we should have a tool that works across all the
> > >     implementations and presents a single consistent interface.
> > >
> > >  2. ZooKeeper shell is designed to be an interactive shell and it's not
> > > very
> > >     good when trying to do non-interactive scriptable operations.
> > >
> > >  3. ZooKeeper is a bit clunky when using it and it requires the user to
> > > retype
> > >     paths many times. The commands are not very intuitive or documented.
> > >     It's not possible to update z-node with multi-lines content.
> > >
> > >  4. We cannot easily add functionality or improvements into ZooKeeper
> > > shell,
> > >     since it belongs to a different project and the tool has been
> > > stagnating
> > >     for many years.
> > >
> > >  5. In cases where the z-nodes content is binary (Protobuf) or compressed,
> > > there
> > >     is no easy way to inspect the content from the ZooKeeper shell.
> > >     Additionally, we can format and colorize JSON content to make it
> > > easier to
> > >     read.
> > >
> > >  6. The paths used for metadata resources are also often using encodings
> > > that
> > >     make it more difficult to construct on the shell tool.
> > >
> > > Part of what is described here is in the `pulsar-managed-ledger-admin` CLI
> > > tool,
> > > though that is a Python script that requires additional dependencies that
> > > are
> > > not typically installed, it only works with ZooKeeper, and it only targets
> > > accessing the managed ledger metadata.
> > >
> > > ## Goal
> > >
> > > Introduce a new Java CLI tool to access, inspect and modify metadata that
> > > solves
> > > all the issues described above.
> > >
> > > We would leave the `zookeeper-shell` command for now. In the future, once
> > > the
> > > new tool is proven, we can consider removing the `zookeeper-shell` 
> > > command.
> > >
> > >
> > > ## Proposed changes
> > >
> > > Add a new command:
> > > ```bash
> > > bin/pulsar metadata
> > > ```
> > >
> > > with several subcommands:
> > >
> > >
> > > #### Get
> > >
> > > Examples:
> > > ```bash
> > > # General path get
> > > $ pulsar metadata get /my-path
> > >
> > >
> > > # Topic metadata
> > > $ pulsar metadata get topic my-tenant/my-namespace/my-topic
> > > {
> > >   # Managed ledger metadata
> > > }
> > >
> > > # Namespace get
> > > $ pulsar metadata get namespace my-tenant/my-namespace
> > > {
> > >   # Namespace metadata
> > > }
> > >
> > > $ pulsar metadata get ledger 12345
> > > {
> > >   # BK ledger metadata
> > > }
> > > ```
> > >
> > > #### Delete
> > >
> > > Examples:
> > > ```bash
> > > # General path delete
> > > $ pulsar metadata delete /my-path
> > >
> > > # Topic metadata
> > > $ pulsar metadata delete topic my-tenant/my-namespace/my-topic
> > > ```
> > >
> > > #### Scan
> > >
> > > Examples:
> > > ```bash
> > > $ pulsar metadata scan /my-path
> > > /my-path
> > > /my-path/1
> > > /my-path/2
> > > /my-path/3
> > > /my-path/3/1
> > >
> > > $ pulsar metadata scan --values /my-path
> > > /my-path
> > > {value}
> > >
> > > /my-path/1
> > > {value}
> > >
> > > /my-path/2
> > > {value}
> > > ```
> > >
> > > #### Shell
> > >
> > > ```bash
> > > $ pulsar metadata shell
> > > > get topic my-tenant/my-namespace/my-topic
> > > {
> > >   # Managed ledger metadata
> > > }
> > >
> > > > delete topic my-tenant/my-namespace/my-topic
> > >
> > > > cd /my-path
> > > > ls
> > > 1
> > > 2
> > > 3
> > > > delete 1 # Delete keys with relative paths
> > >
> > > ```
> > >
> > >
> > > --
> > > Matteo Merli
> > > <mme...@apache.org>
> > >
> 

Reply via email to