+1 Penghui
On Wed, Dec 22, 2021 at 3:31 PM Enrico Olivelli <eolive...@gmail.com> wrote: > very good > > Enrico > > Il giorno mer 22 dic 2021 alle ore 03:37 mattison chao < > mattisonc...@gmail.com> ha scritto: > > > +1 > > > > On Wed, 22 Dec 2021 at 07:59, 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> > > > > > >