This is an automated email from the ASF dual-hosted git repository.

lushiji pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 907c273431 BP-64: Improve the description of 47 commands for 
bin/bookkeeper (#4102)
907c273431 is described below

commit 907c273431a7d4bae7a7ee22bc03f366328a5dd5
Author: StevenLuMT <[email protected]>
AuthorDate: Tue Oct 17 09:01:42 2023 +0800

    BP-64: Improve the description of 47 commands for bin/bookkeeper (#4102)
    
    BP-64: Improve the description of 47 commands for bin/bookkeeper (#4102)
---
 .../org/apache/bookkeeper/bookie/BookieShell.java  | 382 ++++++++++++++++++---
 .../cli/commands/cookie/CreateCookieCommand.java   |   6 +
 .../cli/commands/cookie/DeleteCookieCommand.java   |   7 +
 .../cli/commands/cookie/GenerateCookieCommand.java |  17 +
 .../cli/commands/cookie/GetCookieCommand.java      |   7 +
 .../cli/commands/cookie/UpdateCookieCommand.java   |   9 +
 .../tools/cli/helpers/BookieShellCommand.java      |   4 +-
 .../bookkeeper/tools/framework/CliCommand.java     |   4 +
 .../commands/cookie/CreateCookieCommandTest.java   |   2 +-
 .../commands/cookie/UpdateCookieCommandTest.java   |   2 +-
 10 files changed, 389 insertions(+), 51 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
index c24be83282..6f66766d40 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/BookieShell.java
@@ -295,7 +295,14 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "metaformat   [-nonInteractive] [-force]";
+            return "metaformat      Format bookkeeper metadata in zookeeper\n"
+                    + "             Usage: metaformat [options]\n"
+                    + "             Options:\n"
+                    + "               -f, --force\n"
+                    + "              If [nonInteractive] is specified, "
+                                        + "then whether to force delete the 
old data without prompt\n"
+                    + "               -n, --nonInteractive\n"
+                    + "              Whether to confirm if old data exists ";
         }
 
         @Override
@@ -340,7 +347,10 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "initnewcluster";
+            return "initnewcluster      Initializes a new bookkeeper cluster. 
If initnewcluster fails then try nuking "
+                    + "existing cluster by running nukeexistingcluster before 
running initnewcluster again, "
+                    + "initbookie requires no options,use the default conf or 
re-specify BOOKIE_CONF \n"
+                    + "             Usage: initnewcluster";
         }
 
         @Override
@@ -378,7 +388,16 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "nukeexistingcluster -zkledgersrootpath <zkledgersrootpath> 
[-instanceid <instanceid> | -force]";
+            return "nukeexistingcluster      Nuke bookkeeper cluster by 
deleting metadata\n"
+                    + "             Usage: nukeexistingcluster [options]\n"
+                    + "             Options:\n"
+                    + "               -f, --force\n"
+                    + "              If instanceid is not specified, "
+                                        + "then whether to force nuke the 
metadata without validating instanceid\n"
+                    + "             * -i, --instanceid\n"
+                    + "              the bookie cluster's instanceid (param 
format: `instanceId`)\n"
+                    + "             * -p,--zkledgersrootpath\n"
+                    + "              zookeeper ledgers rootpath (param format: 
`zkLedgersRootPath`)";
         }
 
         @Override
@@ -423,7 +442,16 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "bookieformat [-nonInteractive] [-force] [-deleteCookie]";
+            return "bookieformat      Format the current server contents\n"
+                    + "             Usage: bookieformat [options]\n"
+                    + "             Options:\n"
+                    + "               -f, --force\n"
+                    + "              If [nonInteractive] is specified, then 
whether "
+                                        + "to force delete the old data 
without prompt..? \n"
+                    + "             * -n, --nonInteractive\n"
+                    + "              Whether to confirm if old data exists..? 
\n"
+                    + "             * -d, --deleteCookie\n"
+                    + "              Delete its cookie on metadata store ";
         }
 
         @Override
@@ -464,7 +492,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_INITBOOKIE;
+            return "initbookie      Initialize new Bookie, initbookie requires 
no options,"
+                    + "use the default conf or re-specify BOOKIE_CONF \n"
+                    + "             Usage: initbookie";
         }
 
         @Override
@@ -505,7 +535,25 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "recover [-deleteCookie] <bookieSrc[,bookieSrc,...]>";
+            return "recover      Recover the ledger data for failed bookie\n"
+                    + "             Usage: recover [options]\n"
+                    + "             Options:\n"
+                    + "               -q, --query\n"
+                    + "              Query the ledgers that contain given 
bookies\n"
+                    + "               -dr, --dryrun\n"
+                    + "              Printing the recovery plan w/o doing 
actual recovery\n"
+                    + "               -f, --force\n"
+                    + "              Force recovery without confirmation\n"
+                    + "               -l, --ledger\n"
+                    + "              Recover a specific ledger (param format: 
`ledgerId`)\n"
+                    + "               -sk, --skipOpenLedgers\n"
+                    + "              Skip recovering open ledgers\n"
+                    + "               -d, --deleteCookie\n"
+                    + "              Delete cookie node for the bookie\n"
+                    + "               -sku, --skipUnrecoverableLedgers\n"
+                    + "              Skip unrecoverable ledgers\n"
+                    + "               -rate, --replicationRate\n"
+                    + "              Replication rate by bytes";
         }
 
         @Override
@@ -574,7 +622,13 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "ledger       [-m] <ledger_id>";
+            return "ledger      Dump ledger index entries into readable 
format\n"
+                    + "             Usage: ledger [options]\n"
+                    + "             Options:\n"
+                    + "               -m, --meta\n"
+                    + "              Print meta information\n"
+                    + "             * <ledger_id>\n"
+                    + "              Ledger ID(param format: `ledgerId`) ";
         }
 
         @Override
@@ -611,9 +665,21 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "readledger  [-bookie <address:port>]  [-msg] -ledgerid 
<ledgerid> "
-                    + "[-firstentryid <firstentryid> [-lastentryid 
<lastentryid>]] "
-                    + "[-force-recovery]";
+            return "readledger      Read a range of entries from a ledger\n"
+                    + "             Usage: readledger [options]\n"
+                    + "             Options:\n"
+                    + "               -m, --msg\n"
+                    + "              Print message body\n"
+                    + "             * -l, --ledgerid\n"
+                    + "              Ledger ID (param format: `ledgerId`)\n"
+                    + "             * -fe, --firstentryid\n"
+                    + "              First EntryID (param format: 
`firstEntryId`)\n"
+                    + "             * -le, --lastentryid\n"
+                    + "              Last EntryID (param format: 
`lastEntryId`)\n"
+                    + "               -r, --force-recovery\n"
+                    + "              Ensure the ledger is properly closed 
before reading\n"
+                    + "             * -b, --bookie\n"
+                    + "              Only read from a specific bookie (param 
format: `address:port`)";
         }
 
         @Override
@@ -677,8 +743,20 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "listunderreplicated [[-missingreplica <bookieaddress>]"
-                    + " [-excludingmissingreplica <bookieaddress>]] 
[-printmissingreplica] [-printreplicationworkerid]";
+            return "listunderreplicated      List ledgers marked as 
underreplicated, with optional options to "
+                    + "specify missingreplica (BookieId) and to exclude 
missingreplica\n"
+                    + "             Usage: listunderreplicated [options]\n"
+                    + "             Options:\n"
+                    + "               -c,--onlydisplayledgercount\n"
+                    + "              Only display underreplicated ledger count 
\n"
+                    + "             * -emr,--excludingmissingreplica\n"
+                    + "              Bookie Id of missing replica to ignore 
(param format: `address:port`)\n"
+                    + "             * -mr,--missingreplica\n"
+                    + "              Bookie Id of missing replica (param 
format: `address:port`)\n"
+                    + "               -pmr,--printmissingreplica\n"
+                    + "              Whether to print missingreplicas list \n"
+                    + "               -prw,--printreplicationworkerid\n"
+                    + "              Whether to print replicationworkerid ";
         }
 
         @Override
@@ -735,7 +813,13 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "listledgers  [-meta] [-bookieid <bookieaddress>]";
+            return "listledgers      List all ledgers on the cluster (this may 
take a long time)\n"
+                    + "             Usage: listledgers [options]\n"
+                    + "             Options:\n"
+                    + "               -m, --meta\n"
+                    + "              Print metadata\n"
+                    + "             * -bookieid\n"
+                    + "              List ledgers residing in this 
bookie(param format: `address:port`) ";
         }
 
         @Override
@@ -781,7 +865,13 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "activeledgers  [-logId <entry log id>] [-timeout 
<timeout>] [-formatter <ledger id formatter>]";
+            return "activeledgers      List all active ledgers on the entry 
log file\n"
+                    + "             Usage: activeledgers [options]\n"
+                    + "             Options:\n"
+                    + "             * -l, --logId\n"
+                    + "              Entry log file id 
(`ledgers/logFileName.log`,param format: `logFileName`)\n"
+                    + "             * -t, --timeout\n"
+                    + "              Read timeout(ms, param format: 
`runTimeoutMs`) ";
         }
 
         @Override
@@ -844,7 +934,17 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "ledgermetadata -ledgerid <ledgerid> [--dumptofile 
FILENAME|--restorefromfile FILENAME]";
+            return "ledgermetadata      Print the metadata for a ledger, or 
optionally dump to a file\n"
+                    + "             Usage: ledgermetadata [options]\n"
+                    + "             Options:\n"
+                    + "               -dumptofile \n"
+                    + "              Dump metadata for ledger, to a file 
(param format: `dumpFilePath`)\n"
+                    + "               -restorefromfile \n"
+                    + "              Restore metadata for ledger, from a file 
(param format: `storeFilePath`)\n"
+                    + "               -update \n"
+                    + "              Update metadata if ledger already exist 
\n"
+                    + "             * -l, --ledgerid\n"
+                    + "              Ledger ID(param format: `ledgerId`) ";
         }
 
         @Override
@@ -876,7 +976,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "localconsistencycheck";
+            return "localconsistencycheck      Validate Ledger Storage 
internal metadata, "
+                    + "localconsistencycheck requires no options,use the 
default conf or re-specify BOOKIE_CONF \n"
+                    + "             Usage: localconsistencycheck";
         }
 
         @Override
@@ -924,7 +1026,17 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "simpletest   [-ensemble N] [-writeQuorum N] [-ackQuorum N] 
[-numEntries N]";
+            return "simpletest      Simple test to create a ledger and write 
entries to it\n"
+                    + "             Usage: simpletest [options]\n"
+                    + "             Options:\n"
+                    + "               -e, --ensemble\n"
+                    + "              Ensemble size (default 3, param format: 
`ensembleSize`)\n"
+                    + "               -w, --writeQuorum\n"
+                    + "              Write quorum size (default 2, param 
format: `writeQuorumSize`)\n"
+                    + "               -a, --ackQuorum\n"
+                    + "              Ack quorum size (default 2, param format: 
`ackQuorumSize`)\n"
+                    + "               -n, --numEntries\n"
+                    + "              Entries to write (default 1000, param 
format: `entriesToWrite`)";
         }
 
         @Override
@@ -956,7 +1068,14 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "bookiesanity [-entries N] [-timeout N]";
+            return "bookiesanity      Sanity test for local bookie. "
+                                        + "Create ledger and write/reads 
entries on local bookie\n"
+                    + "             Usage: bookiesanity [options]\n"
+                    + "             Options:\n"
+                    + "               -e, --entries\n"
+                    + "              Total entries to be added for the test 
(default 10, param format: `entryNum`)\n"
+                    + "               -t, --timeout\n"
+                    + "              Timeout for write/read in seconds 
(default 1s, param format: `readTimeoutMs`) ";
         }
 
         @Override
@@ -1025,8 +1144,19 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "readlog      [-msg] <entry_log_id | entry_log_file_name> 
[-ledgerid <ledgerid> "
-                    + "[-entryid <entryid>]] [-startpos <startEntryLogBytePos> 
[-endpos <endEntryLogBytePos>]]";
+            return "readlog      Scan an entry file and format the entries 
into readable format\n"
+                    + "             Usage: readlog [options]\n"
+                    + "             Options:\n"
+                    + "               -m, --msg\n"
+                    + "              Print message body\n"
+                    + "             * -l, --ledgerid\n"
+                    + "              Ledger ID (param format: `ledgerId`)\n"
+                    + "             * -e, --entryid\n"
+                    + "              Entry ID (param format: `entryId`)\n"
+                    + "             * -sp, --startpos\n"
+                    + "              Start Position (param format: 
`startPosition`)\n"
+                    + "             * -ep, --endpos\n"
+                    + "              End Position (param format: 
`endPosition`)";
         }
 
         @Override
@@ -1074,7 +1204,12 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "readlogmetadata <entry_log_id | entry_log_file_name>";
+            return "readlogmetadata      Prints entrylog's metadata\n"
+                    + "             Usage: readlogmetadata [options]\n"
+                    + "             Options:\n"
+                    + "             * <entry_log_id | entry_log_file_name>\n"
+                    + "              entry log id or entry log file name 
(param format: `entryLogId` "
+                                        + "or `entryLogFileName`)";
         }
 
         @Override
@@ -1131,7 +1266,14 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "readjournal [-dir] [-msg] <journal_id | 
journal_file_name>";
+            return "readjournal      Scan a journal file and format the 
entries into readable format\n"
+                    + "             Usage: readjournal [options]\n"
+                    + "             Options:\n"
+                    + "             * -dir\n"
+                    + "              Journal directory needed if more than one 
journal configured"
+                                        + " (param format: `journalDir`)\n"
+                    + "               -m, --msg\n"
+                    + "              Print message body";
         }
 
         @Override
@@ -1162,7 +1304,8 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "lastmark";
+            return "lastmark      Print last log marker \n"
+                    + "             Usage: lastmark";
         }
 
         @Override
@@ -1226,7 +1369,17 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "listbookies  [-readwrite|-readonly|-all] [-hostnames]";
+            return "listbookies      List the bookies, which are running as 
either readwrite or readonly mode\n"
+                    + "             Usage: listbookies [options]\n"
+                    + "             Options:\n"
+                    + "               -a, --all\n"
+                    + "              Print all bookies\n"
+                    + "               -h, --hostnames\n"
+                    + "              Also print hostname of the bookie\n"
+                    + "               -ro, --readonly\n"
+                    + "              Print readonly bookies\n"
+                    + "               -rw, --readwrite\n"
+                    + "              Print readwrite bookies ";
         }
 
         @Override
@@ -1265,7 +1418,15 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "listfilesondisc  [-journal|-entrylog|-index]";
+            return "listfilesondisc      List the files in 
JournalDirectory/LedgerDirectories/IndexDirectories \n"
+                    + "             Usage: listfilesondisc [options]\n"
+                    + "             Options:\n"
+                    + "               -txn, --journal\n"
+                    + "              Print list of Journal Files\n"
+                    + "               -log, --entrylog\n"
+                    + "              Print list of EntryLog Files\n"
+                    + "               -idx, --index\n"
+                    + "              Print list of Index files ";
         }
 
         @Override
@@ -1341,7 +1502,13 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "autorecovery [-enable|-disable]";
+            return "autorecovery      Enable or disable autorecovery in the 
cluster\n"
+                    + "             Usage: autorecovery [options]\n"
+                    + "             Options:\n"
+                    + "             * -e, --enable\n"
+                    + "              Enable auto recovery of underreplicated 
ledgers\n"
+                    + "             * -d, --disable\n"
+                    + "              Disable auto recovery of underreplicated 
ledgers";
         }
 
         @Override
@@ -1380,7 +1547,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "queryautorecoverystatus";
+            return "queryautorecoverystatus      Query the autorecovery 
status, "
+                    + "queryautorecoverystatus requires no options,use the 
default conf or re-specify BOOKIE_CONF \n"
+                    + "             Usage: queryautorecoverystatus";
         }
 
         @Override
@@ -1417,7 +1586,15 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "lostbookierecoverydelay [-get|-set <value>]";
+            return "lostbookierecoverydelay      Setter and Getter for 
LostBookieRecoveryDelay value"
+                    + " (in seconds) in metadata store\n"
+                    + "             Usage: lostbookierecoverydelay [options]\n"
+                    + "             Options:\n"
+                    + "               -g, --get\n"
+                    + "              Get LostBookieRecoveryDelay value (in 
seconds)\n"
+                    + "               -s, --set\n"
+                    + "              Set LostBookieRecoveryDelay value (in 
seconds, "
+                                        + "param format: 
`lostBookieRecoveryDelayInSecs`) ";
         }
 
         @Override
@@ -1458,7 +1635,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "whoisauditor";
+            return "whoisauditor      Print the node which holds the auditor 
lock, "
+                    + "whoisauditor requires no options,use the default conf 
or re-specify BOOKIE_CONF \n"
+                    + "             Usage: whoisauditor";
         }
 
         @Override
@@ -1491,7 +1670,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "whatisinstanceid";
+            return "whatisinstanceid      Print the instanceid of the cluster, 
"
+                    + "whatisinstanceid requires no options,use the default 
conf or re-specify BOOKIE_CONF \n"
+                    + "             Usage: whatisinstanceid";
         }
 
         @Override
@@ -1542,7 +1723,17 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "updatecookie [-bookieId <hostname|ip>] [-expandstorage] 
[-list] [-delete <force>]";
+            return "updatecookie      Command to update cookie\n"
+                    + "             Usage: updatecookie [options]\n"
+                    + "             Options:\n"
+                    + "             * -b, --bookieId\n"
+                    + "              Bookie Id (param format: 
`address:port`)\n"
+                    + "               -e, --expandstorage\n"
+                    + "              Expand Storage\n"
+                    + "               -l, --list\n"
+                    + "              List paths of all the cookies present 
locally and on zookkeeper\n"
+                    + "               -d, --delete\n"
+                    + "              Delete cookie both locally and in 
ZooKeeper (param format: force)";
         }
 
         @Override
@@ -1616,8 +1807,24 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "updateledgers -bookieId <hostname|ip> [-updatespersec N] 
[-maxOutstandingReads N] [-limit N] "
-                    + "[-verbose true/false] [-printprogress N]";
+            return "updateledgers      Update bookie id in ledgers\n"
+                    + "             Usage: updateledgers [options]\n"
+                    + "             Options:\n"
+                    + "             * -b, --bookieId\n"
+                    + "              Bookie Id (param format: 
`address:port`)\n"
+                    + "               -s, --updatespersec\n"
+                    + "              Number of ledgers updating per second 
(default: 5, "
+                                        + "param format: `updatespersec`)\n"
+                    + "               -r, --maxOutstandingReads\n"
+                    + "              Max outstanding reads (default: 5 * 
updatespersec, "
+                                        + "param format: 
`maxOutstandingReads`)\n"
+                    + "               -l, --limit\n"
+                    + "              Maximum number of ledgers to update 
(default: no limit, param format: `limit`)\n"
+                    + "               -v, --verbose\n"
+                    + "              Print status of the ledger updation 
(default: false, param format: `verbose`)\n"
+                    + "               -p, --printprogress\n"
+                    + "              Print messages on every configured 
seconds if verbose turned on "
+                                        + "(default: 10 secs, param format: 
`printprogress`)";
         }
 
         @Override
@@ -1693,8 +1900,28 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "updateBookieInLedger -srcBookie <source bookie> 
-destBookie <destination bookie> "
-                    + "[-updatespersec N] [-maxOutstandingReads N] [-limit N] 
[-verbose true/false] [-printprogress N]";
+            return "updateBookieInLedger      Replace bookie in ledger 
metadata. (useful when re-ip of host) "
+                                                 + "replace srcBookie with 
destBookie. (this may take a long time)\n"
+                    + "             Usage: updateBookieInLedger [options]\n"
+                    + "             Options:\n"
+                    + "             * -sb, --srcBookie\n"
+                    + "              Source bookie which needs to be replaced 
by destination bookie "
+                                        + "(param format: `address:port`)\n"
+                    + "             * -db, --destBookie\n"
+                    + "              Destination bookie which replaces source 
bookie (param format: `address:port`)\n"
+                    + "               -s, --updatespersec\n"
+                    + "              Number of ledgers updating per second 
(default: 5, "
+                                        + "param format: `updatesPerSec`)\n"
+                    + "               -r, --maxOutstandingReads\n"
+                    + "              Max outstanding reads (default: 5 * 
updatespersec, "
+                                        + "param format: 
`maxOutstandingReads`)\n"
+                    + "               -l, --limit\n"
+                    + "              Maximum number of ledgers to update 
(default: no limit, param format: `limit`)\n"
+                    + "               -v, --verbose\n"
+                    + "              Print status of the ledger updation 
(default: false, param format: `verbose`)\n"
+                    + "               -p, --printprogress\n"
+                    + "              Print messages on every configured 
seconds if verbose turned on (default: 10, "
+                                        + "param format: `printprogress`)";
         }
 
         @Override
@@ -1772,7 +1999,13 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "deleteledger -ledgerid <ledgerid> [-force]";
+            return "deleteledger      Delete a ledger\n"
+                    + "             Usage: deleteledger [options]\n"
+                    + "             Options:\n"
+                    + "             * -l, --ledgerid\n"
+                    + "              Ledger ID (param format: `ledgerId`)\n"
+                    + "             * -f, --force\n"
+                    + "              Whether to force delete the Ledger 
without prompt";
         }
 
         @Override
@@ -1798,7 +2031,10 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "bookieinfo";
+            return "bookieinfo      Retrieve bookie info such as free and 
total disk space,"
+                    + "bookieinfo requires no options,"
+                    + "use the default conf or re-specify BOOKIE_CONF \n"
+                    + "             Usage: bookieinfo";
         }
 
         @Override
@@ -1830,7 +2066,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_TRIGGERAUDIT;
+            return "triggeraudit      Force trigger the Audit by resetting the 
lostBookieRecoveryDelay, "
+                    + "triggeraudit requires no options,use the default conf 
or re-specify BOOKIE_CONF \n"
+                    + "             Usage: triggeraudit";
         }
 
         @Override
@@ -1872,7 +2110,17 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "forceauditchecks [-checkallledgerscheck 
[-placementpolicycheck] [-replicascheck]";
+            return "forceauditchecks      Reset the last run time of auditor 
checks "
+                    + "(checkallledgerscheck, placementpolicycheck, 
replicascheck) "
+                    + "The current auditor must be REBOOTED after this command 
is run"
+                    + "             Usage: forceauditchecks [options]\n"
+                    + "             Options:\n"
+                    + "             * -calc, --checkallledgerscheck\n"
+                    + "              Force checkAllLedgers audit upon next 
Auditor startup\n"
+                    + "             * -ppc, --placementpolicycheck\n"
+                    + "              Force placementPolicyCheck audit upon 
next Auditor startup\n"
+                    + "             * -rc, --replicascheck\n"
+                    + "              Force replicasCheck audit upon next 
Auditor startup";
         }
 
         @Override
@@ -1936,7 +2184,13 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_DECOMMISSIONBOOKIE + " [-bookieid <bookieaddress>]";
+            return "decommissionbookie      Force trigger the Audittask and 
make sure all the ledgers stored in the "
+                    + "decommissioning bookie " + "are replicated and cookie 
of the decommissioned bookie is deleted "
+                    + "from metadata server.\n"
+                    + "             Usage: decommissionbookie [options]\n"
+                    + "             Options:\n"
+                    + "             * -bookieid\n"
+                    + "              Decommission a remote bookie (param 
format: `address:port`)";
         }
 
         @Override
@@ -1972,7 +2226,11 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_ENDPOINTINFO + " [-bookieid <bookieaddress>]";
+            return "endpointinfo      Get info about a remote bookie with a 
specific bookie\n"
+                    + "             Usage: endpointinfo [options]\n"
+                    + "             Options:\n"
+                    + "             * -b, --bookieid\n"
+                    + "              Bookie Id (param format: `address:port`)";
         }
 
         @Override
@@ -2025,7 +2283,8 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_CONVERT_TO_DB_STORAGE;
+            return "convert-to-db-storage      Convert bookie indexes from 
InterleavedStorage to DbLedgerStorage\n"
+                    + "             Usage: convert-to-db-storage\n";
         }
 
         @Override
@@ -2059,7 +2318,9 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_CONVERT_TO_INTERLEAVED_STORAGE;
+            return "convert-to-interleaved-storage      "
+                                        + "Convert bookie indexes from 
DbLedgerStorage to InterleavedStorage\n"
+                    + "             Usage: convert-to-interleaved-storage";
         }
 
         @Override
@@ -2092,7 +2353,10 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_REBUILD_DB_LEDGER_LOCATIONS_INDEX;
+            return "rebuild-db-ledger-locations-index      Rebuild 
DbLedgerStorage locations index by scanning "
+                    + "the entry logs, rebuild-db-ledger-locations-index 
requires no options,use the default conf "
+                    + "or re-specify BOOKIE_CONF \n"
+                    + "             Usage: rebuild-db-ledger-locations-index";
         }
 
         @Override
@@ -2126,7 +2390,12 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_REBUILD_DB_LEDGERS_INDEX;
+            return "rebuild-db-ledgers-index      Rebuild DbLedgerStorage 
ledgers index by scanning the journal "
+                    + "and entry logs (sets all ledgers to fenced)\n"
+                    + "             Usage: rebuild-db-ledgers-index 
[options]\n"
+                    + "             Options:\n"
+                    + "               -v, --verbose\n"
+                    + "              Verbose logging, print the ledgers added 
to the new index";
         }
 
         @Override
@@ -2165,7 +2434,11 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_CHECK_DB_LEDGERS_INDEX;
+            return "check-db-ledgers-index      Check DbLedgerStorage ledgers 
index by performing a read scan\n"
+                    + "             Usage: check-db-ledgers-index [options]\n"
+                    + "             Options:\n"
+                    + "               -v, --verbose\n"
+                    + "              Verbose logging, print the ledger data in 
the index";
         }
 
         @Override
@@ -2218,7 +2491,19 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return CMD_REGENERATE_INTERLEAVED_STORAGE_INDEX_FILE;
+            return "regenerate-interleaved-storage-index-file      Regenerate 
an interleaved storage index file, "
+                                                                    + "from 
available entrylogger files\n"
+                    + "             Usage: 
regenerate-interleaved-storage-index-file [options]\n"
+                    + "             Options:\n"
+                    + "             * -l, --ledgerIds\n"
+                    + "              Ledger(s) whose index needs to be 
regenerated (param format: `l1,...,lN`)\n"
+                    + "               -dryRun\n"
+                    + "              Process the entryLogger, but don't write 
anything\n"
+                    + "               -password\n"
+                    + "              The bookie stores the password in the 
index file, so we need it to regenerate "
+                                        + "(param format: `ledgerPassword`)\n"
+                    + "               -b64password\n"
+                    + "              The password in base64 encoding (param 
format: `ledgerB64Password`)";
         }
 
         @Override
@@ -2256,7 +2541,8 @@ public class BookieShell implements Tool {
 
         @Override
         String getUsage() {
-            return "clusterinfo";
+            return "clusterinfo      Exposes the current info about the 
cluster of bookies\n"
+                    + "             Usage: clusterinfo";
         }
 
         @Override
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommand.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommand.java
index 46c597d49b..c2e63594d1 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommand.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommand.java
@@ -42,6 +42,11 @@ public class CreateCookieCommand extends 
CookieCommand<Flags> {
 
     private static final String NAME = "create";
     private static final String DESC = "Create a cookie for a given bookie";
+    private static final String USAGE = "cookie_create      Create a cookie 
for a given bookie\n"
+            + "             Usage:  cookie_create [options]\n"
+            + "             Options:\n"
+            + "             * -cf, --cookie-file\n"
+            + "              The file to be uploaded as cookie (param format: 
`cookieFilePath`)";
 
     /**
      * Flags to create a cookie for a given bookie.
@@ -73,6 +78,7 @@ public class CreateCookieCommand extends CookieCommand<Flags> 
{
     private CreateCookieCommand(Flags flags, PrintStream console) {
         super(CliSpec.<Flags>newBuilder()
             .withName(NAME)
+            .withUsage(USAGE)
             .withDescription(DESC)
             .withFlags(flags)
             .withConsole(console)
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/DeleteCookieCommand.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/DeleteCookieCommand.java
index 73cb4e7f51..d7ce7584e2 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/DeleteCookieCommand.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/DeleteCookieCommand.java
@@ -41,6 +41,12 @@ public class DeleteCookieCommand extends 
CookieCommand<Flags> {
     private static final String NAME = "delete";
     private static final String DESC = "Delete a cookie for a given bookie";
 
+    private static final String USAGE = "cookie_delete      Delete a cookie 
for a given bookie\n"
+            + "             Usage:  cookie_delete [options]\n"
+            + "             Options:\n"
+            + "             * <bookie-id>\n"
+            + "              The bookie-id to be deleted (param format: 
`address:port`)";
+
     /**
      * Flags to delete a cookie for a given bookie.
      */
@@ -64,6 +70,7 @@ public class DeleteCookieCommand extends CookieCommand<Flags> 
{
     private DeleteCookieCommand(Flags flags, PrintStream console) {
         super(CliSpec.<Flags>newBuilder()
             .withName(NAME)
+            .withUsage(USAGE)
             .withDescription(DESC)
             .withFlags(flags)
             .withConsole(console)
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GenerateCookieCommand.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GenerateCookieCommand.java
index d5484f4b74..827078c019 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GenerateCookieCommand.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GenerateCookieCommand.java
@@ -43,6 +43,22 @@ public class GenerateCookieCommand extends 
CookieCommand<Flags> {
     private static final String NAME = "generate";
     private static final String DESC = "Generate a cookie for a given bookie";
 
+    private static final String USAGE = "cookie_generate      Generate a 
cookie for a given bookie\n"
+            + "             Usage:  cookie_generate [options]\n"
+            + "             Options:\n"
+            + "               -i, --instance-id\n"
+            + "              The instance id of the cluster that this bookie 
belongs to."
+            + " If omitted, it will used the instance id of the cluster that 
this cli connects to. \n"
+            + "             * -j, --journal-dirs\n"
+            + "              The journal directories used by this bookie "
+                                + "(param format: 
`journalDir1,...,journalDirM`)\n"
+            + "             * -l, --ledger-dirs\n"
+            + "              The ledger directories used by this bookie (param 
format: `ledgerDir1,...,ledgerDirN`)\n"
+            + "             * -o, --output-file\n"
+            + "              The output file to save the generated cookie 
(param format: `cookieLocalFilePath`)\n"
+            + "               -ix, --index-dirs\n"
+            + "              The index directories used by this bookie (param 
format: `indexDir1,...,indexDirN`)";
+
     /**
      * Flags to generate a cookie for a given bookie.
      */
@@ -96,6 +112,7 @@ public class GenerateCookieCommand extends 
CookieCommand<Flags> {
     private GenerateCookieCommand(Flags flags, PrintStream console) {
         super(CliSpec.<Flags>newBuilder()
             .withName(NAME)
+            .withUsage(USAGE)
             .withDescription(DESC)
             .withFlags(flags)
             .withConsole(console)
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GetCookieCommand.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GetCookieCommand.java
index 598127a75a..372dcf4a94 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GetCookieCommand.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/GetCookieCommand.java
@@ -42,6 +42,12 @@ public class GetCookieCommand extends CookieCommand<Flags> {
     private static final String NAME = "get";
     private static final String DESC = "Retrieve a cookie for a given bookie";
 
+    private static final String USAGE = "cookie_get      Retrieve a cookie for 
a given bookie\n"
+            + "             Usage:  cookie_get [options]\n"
+            + "             Options:\n"
+            + "             * <bookie-id>\n"
+            + "              The bookie-id to get (param format: 
`address:port`)";
+
     /**
      * Flags to delete a cookie for a given bookie.
      */
@@ -65,6 +71,7 @@ public class GetCookieCommand extends CookieCommand<Flags> {
     private GetCookieCommand(Flags flags, PrintStream console) {
         super(CliSpec.<Flags>newBuilder()
             .withName(NAME)
+            .withUsage(USAGE)
             .withDescription(DESC)
             .withFlags(flags)
             .withConsole(console)
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommand.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommand.java
index 4979b6ec0e..f1fe3db455 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommand.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommand.java
@@ -43,6 +43,14 @@ public class UpdateCookieCommand extends 
CookieCommand<Flags> {
     private static final String NAME = "update";
     private static final String DESC = "Update a cookie for a given bookie";
 
+    private static final String USAGE = "cookie_update      Update a cookie 
for a given bookie\n"
+            + "             Usage:  cookie_update [options]\n"
+            + "             Options:\n"
+            + "             * -cf, --cookie-file\n"
+            + "              The file to be uploaded as cookie (param format: 
`cookieFilePath`)\n"
+            + "             * <bookie-id>\n"
+            + "              Bookie ID (param format: `address:port`)";
+
     /**
      * Flags to create a cookie for a given bookie.
      */
@@ -73,6 +81,7 @@ public class UpdateCookieCommand extends CookieCommand<Flags> 
{
     private UpdateCookieCommand(Flags flags, PrintStream console) {
         super(CliSpec.<Flags>newBuilder()
             .withName(NAME)
+            .withUsage(USAGE)
             .withDescription(DESC)
             .withFlags(flags)
             .withConsole(console)
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/BookieShellCommand.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/BookieShellCommand.java
index 4010e607eb..8c2068b651 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/BookieShellCommand.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/helpers/BookieShellCommand.java
@@ -23,6 +23,7 @@ import org.apache.bookkeeper.bookie.BookieShell.Command;
 import org.apache.bookkeeper.tools.common.BKCommand;
 import org.apache.bookkeeper.tools.framework.CliFlags;
 import org.apache.commons.configuration.CompositeConfiguration;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * This is a util class that converts new cli command to old shell command.
@@ -52,7 +53,8 @@ public class BookieShellCommand<CliFlagsT extends CliFlags> 
implements Command {
 
     @Override
     public String description() {
-        return shellCmdName + " [options]";
+        // format as 
org.apache.bookkeeper.bookie.BookieShell.MyCommand.description
+        return StringUtils.isBlank(bkCmd.getUsage()) ? shellCmdName + " 
[options]" : bkCmd.getUsage();
     }
 
     @Override
diff --git 
a/tools/framework/src/main/java/org/apache/bookkeeper/tools/framework/CliCommand.java
 
b/tools/framework/src/main/java/org/apache/bookkeeper/tools/framework/CliCommand.java
index cf68acfedd..c459eec7a4 100644
--- 
a/tools/framework/src/main/java/org/apache/bookkeeper/tools/framework/CliCommand.java
+++ 
b/tools/framework/src/main/java/org/apache/bookkeeper/tools/framework/CliCommand.java
@@ -72,4 +72,8 @@ public class CliCommand<GlobalFlagsT extends CliFlags, 
CommandFlagsT extends Cli
         // run with "empty args", which will print the usage for this command 
group.
         Cli.printUsage(spec);
     }
+
+    public String getUsage() {
+        return spec.usage();
+    }
 }
diff --git 
a/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommandTest.java
 
b/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommandTest.java
index f85c2e518f..5a785e89dd 100644
--- 
a/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommandTest.java
+++ 
b/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/CreateCookieCommandTest.java
@@ -76,7 +76,7 @@ public class CreateCookieCommandTest extends 
CookieCommandTestBase {
     }
 
     private void assertPrintUsage(String consoleOutput) {
-        assertPrintUsage(consoleOutput, "create [flags] <bookie-id>");
+        assertPrintUsage(consoleOutput, "cookie_create [options]");
     }
 
     /**
diff --git 
a/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommandTest.java
 
b/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommandTest.java
index 13fa43d9f2..7ee8c84440 100644
--- 
a/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommandTest.java
+++ 
b/tools/ledger/src/test/java/org/apache/bookkeeper/tools/cli/commands/cookie/UpdateCookieCommandTest.java
@@ -76,7 +76,7 @@ public class UpdateCookieCommandTest extends 
CookieCommandTestBase {
     }
 
     private void assertPrintUsage(String consoleOutput) {
-        assertPrintUsage(consoleOutput, "update [flags] <bookie-id>");
+        assertPrintUsage(consoleOutput, "cookie_update [options]");
     }
 
     /**


Reply via email to