You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ni...@apache.org on 2022/08/30 17:15:50 UTC
[pulsar] branch master updated: [improve][cli] Pulsar shell, Pulsar admin, Pulsar client and Pulsar perf: support for Windows (#17243)
This is an automated email from the ASF dual-hosted git repository.
nicoloboschi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 2e6c53ed0b5 [improve][cli] Pulsar shell, Pulsar admin, Pulsar client and Pulsar perf: support for Windows (#17243)
2e6c53ed0b5 is described below
commit 2e6c53ed0b518729fe6499928fa1724c4b902c7e
Author: Nicolò Boschi <bo...@gmail.com>
AuthorDate: Tue Aug 30 19:15:41 2022 +0200
[improve][cli] Pulsar shell, Pulsar admin, Pulsar client and Pulsar perf: support for Windows (#17243)
---
bin/pulsar-admin-common.cmd | 82 +++++++++++
bin/pulsar-admin.cmd | 30 ++++
bin/pulsar-client.cmd | 30 ++++
bin/pulsar-perf.cmd | 164 +++++++++++++++++++++
bin/pulsar-shell.cmd | 33 +++++
distribution/shell/src/assemble/shell.xml | 1 +
pulsar-client-tools/pom.xml | 5 +
.../java/org/apache/pulsar/shell/PulsarShell.java | 1 -
8 files changed, 345 insertions(+), 1 deletion(-)
diff --git a/bin/pulsar-admin-common.cmd b/bin/pulsar-admin-common.cmd
new file mode 100644
index 00000000000..b518734fa0b
--- /dev/null
+++ b/bin/pulsar-admin-common.cmd
@@ -0,0 +1,82 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM
+
+@echo off
+
+if "%JAVA_HOME%" == "" (
+ for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
+) else (
+ set "JAVACMD=%JAVA_HOME%\bin\java.exe"
+)
+
+if not exist "%JAVACMD%" (
+ echo The JAVA_HOME environment variable is not defined correctly, so Pulsar CLI cannot be started. >&2
+ echo JAVA_HOME is set to "%JAVA_HOME%", but "%JAVACMD%" does not exist. >&2
+ goto error
+)
+
+
+for %%i in ("%~dp0.") do SET "SCRIPT_PATH=%%~fi"
+set "PULSAR_HOME_DIR=%SCRIPT_PATH%\..\"
+for %%i in ("%PULSAR_HOME_DIR%.") do SET "PULSAR_HOME=%%~fi"
+set "PULSAR_CLASSPATH=%PULSAR_CLASSPATH%;%PULSAR_HOME%\lib\*"
+
+
+if "%PULSAR_CLIENT_CONF%" == "" set "PULSAR_CLIENT_CONF=%PULSAR_HOME%\conf\client.conf"
+if "%PULSAR_LOG_CONF%" == "" set "PULSAR_LOG_CONF=%PULSAR_HOME%\conf\log4j2.yaml"
+
+set "PULSAR_LOG_CONF_DIR1=%PULSAR_LOG_CONF%\..\"
+for %%i in ("%PULSAR_LOG_CONF_DIR1%.") do SET "PULSAR_LOG_CONF_DIR=%%~fi"
+for %%a in ("%PULSAR_LOG_CONF%") do SET "PULSAR_LOG_CONF_BASENAME=%%~nxa"
+
+set "PULSAR_CLASSPATH=%PULSAR_CLASSPATH%;%PULSAR_LOG_CONF_DIR%"
+
+set "OPTS=%OPTS% -Dlog4j.configurationFile="%PULSAR_LOG_CONF_BASENAME%""
+set "OPTS=%OPTS% -Djava.net.preferIPv4Stack=true"
+
+set "isjava8=false"
+FOR /F "tokens=*" %%g IN ('"java -version 2>&1"') do (
+ echo %%g|find "version" >nul
+ if errorlevel 0 (
+ echo %%g|find "1.8" >nul
+ if errorlevel 0 (
+ set "isjava8=true"
+ )
+ )
+)
+
+if "%isjava8%" == "false" set "OPTS=%OPTS% --add-opens java.base/sun.net=ALL-UNNAMED"
+
+set "OPTS=-cp "%PULSAR_CLASSPATH%" %OPTS%"
+set "OPTS=%OPTS% %PULSAR_EXTRA_OPTS%"
+
+if "%PULSAR_LOG_DIR%" == "" set "PULSAR_LOG_DIR=%PULSAR_HOME%\logs"
+if "%PULSAR_LOG_APPENDER%" == "" set "PULSAR_LOG_APPENDER=RoutingAppender"
+if "%PULSAR_LOG_LEVEL%" == "" set "PULSAR_LOG_LEVEL=info"
+if "%PULSAR_LOG_ROOT_LEVEL%" == "" set "PULSAR_LOG_ROOT_LEVEL=%PULSAR_LOG_LEVEL%"
+if "%PULSAR_ROUTING_APPENDER_DEFAULT%" == "" set "PULSAR_ROUTING_APPENDER_DEFAULT=Console"
+
+set "OPTS=%OPTS% -Dpulsar.log.appender=%PULSAR_LOG_APPENDER%"
+set "OPTS=%OPTS% -Dpulsar.log.dir=%PULSAR_LOG_DIR%"
+set "OPTS=%OPTS% -Dpulsar.log.level=%PULSAR_LOG_LEVEL%"
+set "OPTS=%OPTS% -Dpulsar.log.root.level=%PULSAR_LOG_ROOT_LEVEL%"
+set "OPTS=%OPTS% -Dpulsar.routing.appender.default=%PULSAR_ROUTING_APPENDER_DEFAULT%"
+
+:error
+exit /b 1
diff --git a/bin/pulsar-admin.cmd b/bin/pulsar-admin.cmd
new file mode 100644
index 00000000000..45bd8d4541f
--- /dev/null
+++ b/bin/pulsar-admin.cmd
@@ -0,0 +1,30 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM
+
+@echo off
+
+for %%i in ("%~dp0.") do SET "SCRIPT_PATH=%%~fi"
+set "PULSAR_HOME_DIR=%SCRIPT_PATH%\..\"
+for %%i in ("%PULSAR_HOME_DIR%.") do SET "PULSAR_HOME=%%~fi"
+call "%PULSAR_HOME%\bin\pulsar-admin-common.cmd"
+if ERRORLEVEL 1 (
+ exit /b 1
+)
+cd "%PULSAR_HOME%"
+"%JAVACMD%" %OPTS% org.apache.pulsar.admin.cli.PulsarAdminTool %PULSAR_CLIENT_CONF% %*
\ No newline at end of file
diff --git a/bin/pulsar-client.cmd b/bin/pulsar-client.cmd
new file mode 100644
index 00000000000..9e3cef45a25
--- /dev/null
+++ b/bin/pulsar-client.cmd
@@ -0,0 +1,30 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM
+
+@echo off
+
+for %%i in ("%~dp0.") do SET "SCRIPT_PATH=%%~fi"
+set "PULSAR_HOME_DIR=%SCRIPT_PATH%\..\"
+for %%i in ("%PULSAR_HOME_DIR%.") do SET "PULSAR_HOME=%%~fi"
+call "%PULSAR_HOME%\bin\pulsar-admin-common.cmd"
+if ERRORLEVEL 1 (
+ exit /b 1
+)
+cd "%PULSAR_HOME%"
+"%JAVACMD%" %OPTS% org.apache.pulsar.client.cli.PulsarClientTool %PULSAR_CLIENT_CONF% %*
\ No newline at end of file
diff --git a/bin/pulsar-perf.cmd b/bin/pulsar-perf.cmd
new file mode 100644
index 00000000000..1a6acfbf6de
--- /dev/null
+++ b/bin/pulsar-perf.cmd
@@ -0,0 +1,164 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM
+
+@echo off
+
+if "%JAVA_HOME%" == "" (
+ for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
+) else (
+ set "JAVACMD=%JAVA_HOME%\bin\java.exe"
+)
+
+if not exist "%JAVACMD%" (
+ echo The JAVA_HOME environment variable is not defined correctly, so Pulsar CLI cannot be started. >&2
+ echo JAVA_HOME is set to "%JAVA_HOME%", but "%JAVACMD%" does not exist. >&2
+ exit /B 1
+)
+
+for %%i in ("%~dp0.") do SET "SCRIPT_PATH=%%~fi"
+set "PULSAR_HOME_DIR=%SCRIPT_PATH%\..\"
+for %%i in ("%PULSAR_HOME_DIR%.") do SET "PULSAR_HOME=%%~fi"
+set "PULSAR_CLASSPATH=%PULSAR_CLASSPATH%;%PULSAR_HOME%\lib\*"
+
+
+if "%PULSAR_CLIENT_CONF%" == "" set "PULSAR_CLIENT_CONF=%PULSAR_HOME%\conf\client.conf"
+if "%PULSAR_LOG_CONF%" == "" set "PULSAR_LOG_CONF=%PULSAR_HOME%\conf\log4j2.yaml"
+
+set "PULSAR_LOG_CONF_DIR1=%PULSAR_LOG_CONF%\..\"
+for %%i in ("%PULSAR_LOG_CONF_DIR1%.") do SET "PULSAR_LOG_CONF_DIR=%%~fi"
+for %%a in ("%PULSAR_LOG_CONF%") do SET "PULSAR_LOG_CONF_BASENAME=%%~nxa"
+
+set "PULSAR_CLASSPATH=%PULSAR_CLASSPATH%;%PULSAR_LOG_CONF_DIR%"
+if not "%PULSAR_EXTRA_CLASSPATH%" == "" set "PULSAR_CLASSPATH=%PULSAR_CLASSPATH%;%PULSAR_EXTRA_CLASSPATH%"
+
+
+if "%PULSAR_PERFTEST_CONF%" == "" set "PULSAR_PERFTEST_CONF=%PULSAR_CLIENT_CONF%"
+
+
+set "OPTS=%OPTS% -Dlog4j.configurationFile="%PULSAR_LOG_CONF_BASENAME%""
+set "OPTS=%OPTS% -Djava.net.preferIPv4Stack=true"
+
+
+set "OPTS=-cp "%PULSAR_CLASSPATH%" %OPTS%"
+set "OPTS=%OPTS% %PULSAR_EXTRA_OPTS%"
+
+if "%PULSAR_LOG_DIR%" == "" set "PULSAR_LOG_DIR=%PULSAR_HOME%\logs"
+if "%PULSAR_LOG_FILE%" == "" set "PULSAR_LOG_FILE=pulsar-perftest.log"
+if "%PULSAR_LOG_APPENDER%" == "" set "PULSAR_LOG_APPENDER=Console"
+if "%PULSAR_LOG_LEVEL%" == "" set "PULSAR_LOG_LEVEL=info"
+if "%PULSAR_LOG_ROOT_LEVEL%" == "" set "PULSAR_LOG_ROOT_LEVEL=%PULSAR_LOG_LEVEL%"
+
+
+set "OPTS=%OPTS% -Dpulsar.log.appender=%PULSAR_LOG_APPENDER%"
+set "OPTS=%OPTS% -Dpulsar.log.dir=%PULSAR_LOG_DIR%"
+set "OPTS=%OPTS% -Dpulsar.log.level=%PULSAR_LOG_LEVEL%"
+set "OPTS=%OPTS% -Dpulsar.log.root.level=%PULSAR_LOG_ROOT_LEVEL%"
+
+set "COMMAND=%1"
+
+for /f "tokens=1,* delims= " %%a in ("%*") do set "_args=%%b"
+
+if "%COMMAND%" == "produce" (
+ call :execCmdWithConfigFile org.apache.pulsar.testclient.PerformanceProducer
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "consume" (
+ call :execCmdWithConfigFile org.apache.pulsar.testclient.PerformanceConsumer
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "transaction" (
+ call :execCmdWithConfigFile org.apache.pulsar.testclient.PerformanceTransaction
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "read" (
+ call :execCmdWithConfigFile org.apache.pulsar.testclient.PerformanceReader
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "monitor-brokers" (
+ call :execCmd org.apache.pulsar.testclient.BrokerMonitor
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "simulation-client" (
+ call :execCmd org.apache.pulsar.testclient.LoadSimulationClient
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "simulation-controller" (
+ call :execCmd org.apache.pulsar.testclient.LoadSimulationController
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "websocket-producer" (
+ call :execCmd org.apache.pulsar.proxy.socket.client.PerformanceClient
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "managed-ledger" (
+ call :execCmd org.apache.pulsar.testclient.ManagedLedgerWriter
+ exit /B %ERROR_CODE%
+)
+if "%COMMAND%" == "gen-doc" (
+ call :execCmd org.apache.pulsar.testclient.CmdGenerateDocumentation
+ exit /B %ERROR_CODE%
+)
+
+call :usage
+exit /B %ERROR_CODE%
+
+:execCmdWithConfigFile
+"%JAVACMD%" %OPTS% %1 --conf-file "%PULSAR_PERFTEST_CONF%" %_args%
+if ERRORLEVEL 1 (
+ call :error
+)
+goto :eof
+
+:execCmd
+"%JAVACMD%" %OPTS% %1 %_args%
+if ERRORLEVEL 1 (
+ call :error
+)
+goto :eof
+
+
+
+:error
+set ERROR_CODE=1
+goto :eof
+
+
+
+
+:usage
+echo Usage: pulsar-perf COMMAND
+echo where command is one of:
+echo produce Run a producer
+echo consume Run a consumer
+echo transaction Run a transaction repeatedly
+echo read Run a topic reader
+echo websocket-producer Run a websocket producer
+echo managed-ledger Write directly on managed-ledgers
+echo monitor-brokers Continuously receive broker data and/or load reports
+echo simulation-client Run a simulation server acting as a Pulsar client
+echo simulation-controller Run a simulation controller to give commands to servers
+echo gen-doc Generate documentation automatically.
+echo help This help message
+echo or command is the full name of a class with a defined main() method.
+echo Environment variables:
+echo PULSAR_LOG_CONF Log4j configuration file (default %PULSAR_HOME%\logs)
+echo PULSAR_CLIENT_CONF Configuration file for client (default: %PULSAR_HOME%\conf\client.conf)
+echo PULSAR_EXTRA_OPTS Extra options to be passed to the jvm
+echo PULSAR_EXTRA_CLASSPATH Add extra paths to the pulsar classpath
+goto error
diff --git a/bin/pulsar-shell.cmd b/bin/pulsar-shell.cmd
new file mode 100644
index 00000000000..e8d0a59e4d9
--- /dev/null
+++ b/bin/pulsar-shell.cmd
@@ -0,0 +1,33 @@
+@REM
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM
+
+@echo off
+
+for %%i in ("%~dp0.") do SET "SCRIPT_PATH=%%~fi"
+set "PULSAR_HOME_DIR=%SCRIPT_PATH%\..\"
+for %%i in ("%PULSAR_HOME_DIR%.") do SET "PULSAR_HOME=%%~fi"
+call "%PULSAR_HOME%\bin\pulsar-admin-common.cmd"
+if ERRORLEVEL 1 (
+ exit /b 1
+)
+
+set "OPTS=%OPTS% -Dorg.jline.terminal.jansi=false"
+set "DEFAULT_CONFIG=-Dpulsar.shell.config.default="%PULSAR_CLIENT_CONF%""
+
+"%JAVACMD%" %OPTS% %DEFAULT_CONFIG% org.apache.pulsar.shell.PulsarShell %*
\ No newline at end of file
diff --git a/distribution/shell/src/assemble/shell.xml b/distribution/shell/src/assemble/shell.xml
index 20265a6e822..af1f229c7f7 100644
--- a/distribution/shell/src/assemble/shell.xml
+++ b/distribution/shell/src/assemble/shell.xml
@@ -24,6 +24,7 @@
<id>shell</id>
<formats>
<format>tar.gz</format>
+ <format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<files>
diff --git a/pulsar-client-tools/pom.xml b/pulsar-client-tools/pom.xml
index 87dd76b48d4..4f16d8ebf84 100644
--- a/pulsar-client-tools/pom.xml
+++ b/pulsar-client-tools/pom.xml
@@ -118,6 +118,11 @@
<artifactId>jline</artifactId>
<version>${jline3.version}</version>
</dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ <scope>runtime</scope>
+ </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/shell/PulsarShell.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/shell/PulsarShell.java
index 4195edaf1f2..cbc043fe0c7 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/shell/PulsarShell.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/shell/PulsarShell.java
@@ -216,7 +216,6 @@ public class PulsarShell {
}
public void run() throws Exception {
- System.setProperty("org.jline.terminal.dumb", "true");
final Terminal terminal = TerminalBuilder.builder().build();
run((providersMap) -> {
List<Completer> completers = new ArrayList<>();