vrajat opened a new pull request, #14419:
URL: https://github.com/apache/pinot/pull/14419

   Currently `pinot-admin` command help either throws an NPE or executes the 
command. Example:
   
   ```
   pinot-admin.sh GenerateData --help
   
   2024/11/11 12:04:07.820 INFO [GenerateDataCommand] [main] Executing command: 
GenerateData -numRecords 0 -numFiles  0 -schemaFile null -outDir null 
-schemaAnnotationFile null
   java.lang.NullPointerException
           at java.base/java.io.File.<init>(File.java:278)
           at 
org.apache.pinot.tools.admin.command.GenerateDataCommand.execute(GenerateDataCommand.java:122)
           at org.apache.pinot.tools.Command.call(Command.java:33)
           at org.apache.pinot.tools.Command.call(Command.java:29)
           at picocli.CommandLine.executeUserObject(CommandLine.java:2045)
           at picocli.CommandLine.access$1500(CommandLine.java:148)
           at 
picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
           at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
           at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
           at 
picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
           at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
           at picocli.CommandLine.execute(CommandLine.java:2174)
           at 
org.apache.pinot.tools.admin.PinotAdministrator.execute(PinotAdministrator.java:173)
           at 
org.apache.pinot.tools.admin.PinotAdministrator.main(PinotAdministrator.java:204)
   
   pinot-admin.sh AddTable --help
   2024/11/11 11:58:58.253 WARN [AddTableCommand] [main] Dry Running Command: 
AddTable -tableConfigFile null -offlineTableConfigFile null 
-realtimeTableConfigFile null -schemaFile null -controllerProtocol http 
-controllerHost null -controllerPort 9000 -controllerProtocol http -database 
null -user null -password [hidden]
   2024/11/11 11:58:58.253 WARN [AddTableCommand] [main] Use the -exec option 
to actually execute the command.
   ```
   
   This is because the help code was not moved to use picocli in 
https://github.com/vrajat/pinot/commit/d7c0944ad76b02ca8a695caa3f0205b3c7a8b49a
   
   This commit removes the old code to display the help message and uses 
Picocli to generate it. With the change help message examples are:
   
   ```
   ❯ ./build/bin/pinot-admin.sh GenerateData --help
   Usage: <main class> GenerateData [-hV] [-overwrite] -numFiles=<_numFiles>
                                    -numRecords=<_numRecords> -outDir=<_outDir>
                                    [-schemaAnnotationFile=<_schemaAnnFile>]
                                    -schemaFile=<_schemaFile> 
[-format=<_format>]
     -h, --help              Show this help message and exit.
         -numFiles=<_numFiles>
                             Number of files to generate.
         -numRecords=<_numRecords>
                             Number of records to generate.
         -outDir=<_outDir>   Directory where data would be generated.
         -overwrite          Overwrite, if directory exists
         -schemaAnnotationFile=<_schemaAnnFile>
                             File containing dim/metrics for columns.
         -schemaFile=<_schemaFile>
                             File containing schema for data.
     -V, --version           Print version information and exit.
         -format=<_format>   Output format ('AVRO' or 'CSV' or 'JSON').
   
   ❯ ./build/bin/pinot-admin.sh AddTable --help
   Usage: <main class> AddTable [-hV] [-exec] [-skipControllerCertValidation]
                                [-update] [-authToken=<_authToken>]
                                [-authTokenUrl=<_authTokenUrl>]
                                [-controllerHost=<_controllerHost>]
                                [-controllerPort=<_controllerPort>]
                                [-controllerProtocol=<_controllerProtocol>]
                                [-database=<_database>]
                                [-filePath=<_tableConfigFile>]
                                [-offlineFilePath=<_offlineTableConfigFile>]
                                [-password=<_password>]
                                [-realtimeFilePath=<_realtimeTableConfigFile>]
                                [-schema=<_schemaFile>] [-user=<_user>]
         -authToken=<_authToken>
                         Http auth token.
         -authTokenUrl=<_authTokenUrl>
                         Http auth token url.
         -controllerHost=<_controllerHost>
                         Host name for controller.
         -controllerPort=<_controllerPort>
                         Port number for controller.
         -controllerProtocol=<_controllerProtocol>
                         Protocol for controller.
         -database=<_database>
                         Corresponding database.
         -exec           Execute the command.
         -filePath, -tableConf, -tableConfig, 
-tableConfigFile=<_tableConfigFile>
                         Path to table config file.
     -h, --help          Show this help message and exit.
         -offlineFilePath, -offlineTableConf, -offlineTableConfig,
           -offlineTableConfigFile=<_offlineTableConfigFile>
                         Path to offline table config file.
         -password=<_password>
                         Password for basic auth.
         -realtimeFilePath, -realtimeTableConf, -realtimeTableConfig,
           -realtimeTableConfigFile=<_realtimeTableConfigFile>
                         Path to realtime table config file.
         -schema, -schemaFile, -schemaFileName=<_schemaFile>
                         Path to table schema file.
         -skipControllerCertValidation
                         Whether to skip controller certification validation.
         -update         Update the existing table instead of creating new one
         -user=<_user>   Username for basic auth.
     -V, --version       Print version information and exit.
   ```
   
   Moreover, picocli color codes the message if the terminal supports it.
   
   ![Screenshot 2024-11-11 at 11 59 42 
AM](https://github.com/user-attachments/assets/ddbf1a83-f94d-4b09-8a6e-e0077f2d692f)
   
   While the diff is big, most of the diff adds a mixin as specified in 
https://picocli.info/#_printing_help_automatically AND it removes the old help 
message option. The picocli message is more helpful.
   
   A test has also been added to make sure the changes are correct.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to