blob: f3df96a54b19c2f16cd9b0fb92feb0740e2e74d7 [file] [log] [blame]
@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
setlocal enabledelayedexpansion
:: Initialize the variable to hold the final ips string
set "ips="
set "ip="
set "unreachable="
set "allips="
set "operate="
set "newoperating="
set "operating="
:: Loop through all arguments passed to the script
for %%a in (%*) do (
:: Check if the current argument is -ips, if so, skip it
if "%%a"=="-ips" (
set "processing=1"
) else if defined processing (
:: Check if the argument contains only digits (port)
if "%%a"=="-o" (
set "operating=1"
) else if defined operating (
set "operate=%%a"
set "operating="
) else (
set "isPort=1"
for /F "delims=0123456789" %%i in ("%%a") do (
if not "%%i"=="" (
set "isPort=0"
set "ip=%%a"
)
)
:: Append IP and port to the ips string
if !isPort! equ 1 (
set "ips=!ips!,!ip!:%%a"
)
)
)
if "%%a"=="-o" (
set "newoperating=1"
) else if defined newoperating (
set "operate=%%a"
set "newoperating="
if "%%a"=="-ips" (
set "newprocessing=1"
) else if defined newprocessing (
set "isPort=1"
for /F "delims=0123456789" %%i in ("%%a") do (
if not "%%i"=="" (
set "isPort=0"
set "ip=%%a"
)
)
:: Append IP and port to the ips string
if !isPort! equ 1 (
set "ips=!ips!,!ip!:%%a"
)
)
)
if "%%a"=="--help" (
echo Usage: health_check.bat [-ips ^<ip1^> ^<port1^> ^<port2^>,^<ip2^> ^<port3^> ^<port4^>] [-o ^<all/local/remote^>]
exit /b 1
)
)
set endpoints=!ips!
set "preip="
set "iplist="
set "allpreip="
PATH %PATH%;%JAVA_HOME%\bin\
set "FULL_VERSION="
set "MAJOR_VERSION="
set "MINOR_VERSION="
for /f tokens^=2-5^ delims^=.-_+^" %%j in ('java -fullversion 2^>^&1') do (
set "FULL_VERSION=%%j-%%k-%%l-%%m"
IF "%%j" == "1" (
set "MAJOR_VERSION=%%k"
set "MINOR_VERSION=%%l"
) else (
set "MAJOR_VERSION=%%j"
set "MINOR_VERSION=%%k"
)
)
set JAVA_VERSION=%MAJOR_VERSION%
if "%OS%" == "Windows_NT" setlocal
pushd %~dp0..
if NOT DEFINED IOTDB_HOME set IOTDB_HOME=%cd%
popd
pushd %~dp0..
if NOT DEFINED CONFIGNODE_HOME set CONFIGNODE_HOME=%cd%
popd
pushd %~dp0..
if NOT DEFINED DATANODE_HOME set DATANODE_HOME=%cd%
popd
if defined operate (
if !operate! == all (
if not defined ips (
echo ips is requred
exit /b 1
)
call :local_jdk_check
call :local_mem_check
call :local_dirs_check
call :local_ports_check
call :remote_ports_check
call :system_settings_check
) else if !operate! == local (
call :local_jdk_check
call :local_mem_check
call :local_dirs_check
call :local_ports_check
call :system_settings_check
) else if !operate! == remote (
if not defined ips (
echo ips is requred
exit /b 1
)
call :remote_ports_check
)
) else (
if not defined ips (
echo ips is requred
exit /b 1
)
call :local_jdk_check
call :local_mem_check
call :local_dirs_check
call :local_ports_check
call :remote_ports_check
call :system_settings_check
)
exit /b
:local_jdk_check
echo Check: Installation Environment(JDK)
echo Requirement: JDK Version ^>=1.8
echo Result: JDK Version %JAVA_VERSION%
exit /b
:local_mem_check
@setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
SET IOTDB_CONF=%IOTDB_HOME%\conf
IF EXIST "%IOTDB_CONF%\datanode-env.bat" (
CALL "%IOTDB_CONF%\datanode-env.bat" > nul 2>&1
) ELSE (
echo Can't find datanode-env.bat
)
set datanode_mem= %memory_size_in_mb%
IF EXIST "%IOTDB_CONF%\confignode-env.bat" (
CALL "%IOTDB_CONF%\confignode-env.bat" > nul 2>&1
) ELSE (
echo Can't find datanode-env.bat
)
set confignode_mem= %memory_size_in_mb%
set datanode_mem=%datanode_mem%
set confignode_mem=%confignode_mem%
set datanode_mem=%datanode_mem%
set confignode_mem=%confignode_mem%
for /f %%i in ('powershell.exe -Command "[math]::Round(%datanode_mem% / 1024, 2)"') do set datanode_mem=%%i
for /f %%i in ('powershell.exe -Command "[math]::Round(%confignode_mem% / 1024, 2)"') do set confignode_mem=%%i
echo datanode_mem=%datanode_mem%
echo confignode_mem=%confignode_mem%
echo Check: Installation Environment(Memory)
echo Requirement: Allocate sufficient memory for IoTDB
set "totalMemory="
for /F "skip=1" %%i in ('wmic os get TotalVisibleMemorySize') do (
if not defined totalMemory (
set "totalMemory=%%i"
)
)
set /A totalMemory=!totalMemory!
set /A totalMemory=totalMemory / 1024 / 1024
if "%confignode_mem%" == "" (
if "%datanode_mem%" == "" (
echo Result: Total Memory %totalMemory% GB
) else (
echo Result: Total Memory %totalMemory% GB, %datanode_mem%GB allocated to IoTDB DataNode
)
) else (
if "%datanode_mem%" == "" (
echo Result: Total Memory %totalMemory% GB, %confignode_mem%GB allocated to IoTDB ConfigNode
) else (
echo Result: Total Memory %totalMemory% GB, %confignode_mem%GB allocated to IoTDB ConfigNode, %datanode_mem% GB allocated to IoTDB DataNode
)
)
endlocal
exit /b
:local_dirs_check
setlocal enabledelayedexpansion
set "properties_file=%IOTDB_HOME%\conf\iotdb-datanode.properties"
for /f "usebackq tokens=1,* delims==" %%a in ("%properties_file%") do (
if "%%a"=="dn_data_dirs" (
set "dn_data_dirs=%%b"
) else if "%%a"=="dn_consensus_dir" (
set "dn_consensus_dir=%%b"
) else if "%%a"=="dn_system_dir" (
set "dn_system_dir=%%b"
) else if "%%a"=="dn_wal_dirs" (
set "dn_wal_dirs=%%b"
) else if "%%a"=="cn_system_dir" (
set "cn_system_dir=%%b"
) else if "%%a"=="cn_consensus_dir" (
set "cn_consensus_dir=%%b"
) else if "%%a"=="pipe_lib_dir" (
set "pipe_lib_dir=%%b"
) else if "%%a"=="udf_lib_dir" (
set "udf_lib_dir=%%b"
) else if "%%a"=="trigger_lib_dir" (
set "trigger_lib_dir=%%b"
)
)
IF "%dn_data_dirs%"=="" (
set "dn_data_dirs=%IOTDB_HOME%\data\datanode\data"
)
IF "%dn_consensus_dir%"=="" (
set "dn_consensus_dir=%IOTDB_HOME%\data\datanode\consensus"
)
IF "%dn_system_dir%"=="" (
set "dn_system_dir=%IOTDB_HOME%\data\datanode\system"
)
IF "%dn_wal_dirs%"=="" (
set "dn_wal_dirs=%IOTDB_HOME%\data\datanode\wal"
)
IF "%cn_system_dir%"=="" (
set "cn_system_dir=%IOTDB_HOME%\data\confignode\system"
)
IF "%cn_consensus_dir%"=="" (
set "cn_consensus_dir=%IOTDB_HOME%\data\confignode\consensus"
)
IF "%pipe_lib_dir%"=="" (
set "pipe_lib_dir=%IOTDB_HOME%\ext\pipe"
)
IF "%udf_lib_dir%"=="" (
set "udf_lib_dir=%IOTDB_HOME%\ext\udf"
)
IF "%trigger_lib_dir%"=="" (
set "trigger_lib_dir=%IOTDB_HOME%\ext\trigger"
)
set "dirs=%dn_data_dirs%,%dn_consensus_dir%,%dn_system_dir%,%dn_wal_dirs%,%cn_system_dir%,%cn_consensus_dir%,%pipe_lib_dir%,%udf_lib_dir%,%trigger_lib_dir%"
set "spacedirs=%dn_data_dirs% %dn_consensus_dir% %dn_system_dir% %dn_wal_dirs% %cn_system_dir% %cn_consensus_dir% %pipe_lib_dir% %udf_lib_dir% %trigger_lib_dir%"
for %%a in (%spacedirs%) do (
set "string=%%a"
for %%b in ("!string:;=" "!") do (
set "subString=%%~b"
for %%c in ("!subString:,=" "!") do (
if not exist "%%c\" (
mkdir "%%c" > nul 2>&1
if errorlevel 1 (
if defined operation_dirs (
set operation_dirs=!operation_dirs!,%%c lacks write permission
) else (
set operation_dirs=%%c lacks write permission
)
) else (
if defined operation_dirs (
set operation_dirs=!operation_dirs!,%%c has write permission
) else (
set operation_dirs=%%c has write permission
)
)
) else (
echo test > "%%c\tempfile.txt"
if EXIST "%%c\tempfile.txt" (
if defined operation_dirs (
set operation_dirs=!operation_dirs!,%%c has write permission
) else (
set operation_dirs=%%c has write permission
)
del "%%c\tempfile.txt" >nul 2>&1
) else (
if defined operation_dirs (
set operation_dirs=!operation_dirs!,%%c lacks write permission
) else (
set operation_dirs=%%c lacks write permission
)
)
)
)
)
)
echo Check: Installation Environment(Directory Access)
echo Requirement: IoTDB needs %dirs% write permission
if defined operation_dirs (
echo Result:
for %%s in ("%operation_dirs:,=" "%") do (
echo %%~s
)
) else (
echo Directory not found
)
exit /b
:local_ports_check
IF EXIST "%IOTDB_CONF%\iotdb-datanode.properties" (
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_rpc_port"
%IOTDB_CONF%\iotdb-datanode.properties') do (
set dn_rpc_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_internal_port"
%IOTDB_CONF%\iotdb-datanode.properties') do (
set dn_internal_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_mpp_data_exchange_port"
%IOTDB_CONF%\iotdb-datanode.properties') do (
set dn_mpp_data_exchange_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_schema_region_consensus_port"
%IOTDB_CONF%\iotdb-datanode.properties') do (
set dn_schema_region_consensus_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_data_region_consensus_port"
%IOTDB_CONF%\iotdb-datanode.properties') do (
set dn_data_region_consensus_port=%%i
)
) ELSE IF EXIST "%IOTDB_HOME%\conf\iotdb-datanode.properties" (
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_rpc_port"
%IOTDB_HOME%\conf\iotdb-datanode.properties') do (
set dn_rpc_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_internal_port"
%IOTDB_HOME%\conf\iotdb-datanode.properties') do (
set dn_internal_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_mpp_data_exchange_port"
%IOTDB_HOME%\conf\iotdb-datanode.properties') do (
set dn_mpp_data_exchange_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_schema_region_consensus_port"
%IOTDB_HOME%\conf\iotdb-datanode.properties') do (
set dn_schema_region_consensus_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^dn_data_region_consensus_port"
%IOTDB_HOME%\conf\iotdb-datanode.properties') do (
set dn_data_region_consensus_port=%%i
)
) ELSE (
set dn_rpc_port=6667
set dn_internal_port=10730
set dn_mpp_data_exchange_port=10740
set dn_schema_region_consensus_port=10750
set dn_data_region_consensus_port=10760
)
IF EXIST "%IOTDB_CONF%\iotdb-confignode.properties" (
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^cn_internal_port"
%IOTDB_CONF%\iotdb-confignode.properties') do (
set cn_internal_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^cn_consensus_port"
%IOTDB_CONF%\iotdb-confignode.properties') do (
set cn_consensus_port=%%i
)
) ELSE IF EXIST "%IOTDB_HOME%\conf\iotdb-confignode.properties" (
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^cn_internal_port"
%IOTDB_HOME%\conf\iotdb-confignode.properties') do (
set cn_internal_port=%%i
)
for /f "eol=# tokens=2 delims==" %%i in ('findstr /i "^cn_consensus_port"
%IOTDB_HOME%\conf\iotdb-confignode.properties') do (
set cn_consensus_port=%%i
)
) ELSE (
set cn_internal_port=10710
set cn_consensus_port=10720
)
set "local_ports="
set "local_other_occupied_ports="
set "local_iotdb_occupied_ports="
set "local_free_ports="
set "operation_dirs="
set dn_rpc_port_occupied=0
set dn_internal_port_occupied=0
set dn_mpp_data_exchange_port_occupied=0
set dn_schema_region_consensus_port_occupied=0
set dn_data_region_consensus_port_occupied=0
set cn_internal_port_occupied=0
set cn_consensus_port_occupied=0
set local_ports=%dn_rpc_port% %dn_internal_port% %dn_mpp_data_exchange_port% %dn_schema_region_consensus_port% %dn_data_region_consensus_port% %cn_consensus_port% %cn_internal_port%
for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do (
if %%i==TCP (
if %%j==%dn_rpc_port% (
if !dn_rpc_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%dn_rpc_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%dn_rpc_port% !local_other_occupied_ports!
)
set dn_rpc_port_occupied=1
)
) else if %%j==%dn_internal_port% (
if !dn_internal_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%dn_internal_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%dn_internal_port% !local_other_occupied_ports!
)
set dn_internal_port_occupied=1
)
) else if %%j==%dn_mpp_data_exchange_port% (
if !dn_mpp_data_exchange_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%dn_mpp_data_exchange_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%dn_mpp_data_exchange_port% !local_other_occupied_ports!
)
set dn_mpp_data_exchange_port_occupied=1
)
) else if %%j==%dn_schema_region_consensus_port% (
if !dn_schema_region_consensus_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%dn_schema_region_consensus_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%dn_schema_region_consensus_port% !local_other_occupied_ports!
)
set dn_schema_region_consensus_port_occupied=1
)
) else if %%j==%dn_data_region_consensus_port% (
if !dn_data_region_consensus_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%dn_data_region_consensus_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%dn_data_region_consensus_port% !local_other_occupied_ports!
)
set dn_data_region_consensus_port_occupied=1
)
) else if %%j==%cn_internal_port% (
if !cn_internal_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%cn_internal_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%cn_internal_port% !local_other_occupied_ports!
)
set cn_internal_port_occupied=1
)
) else if %%j==%cn_consensus_port% (
if !cn_consensus_port_occupied!==0 (
set spid=%%k
call :checkIfIOTDBProcess !spid! is_iotdb
if !is_iotdb!==1 (
set local_iotdb_occupied_ports=%cn_consensus_port% !local_iotdb_occupied_ports!
) else (
set local_other_occupied_ports=%cn_consensus_port% !local_other_occupied_ports!
)
set cn_consensus_port_occupied=1
)
)
)
)
if !dn_rpc_port_occupied!==0 (
set local_free_ports=%dn_rpc_port% !local_free_ports!
)
if !dn_internal_port_occupied!==0 (
set local_free_ports=%dn_internal_port% !local_free_ports!
)
if !dn_mpp_data_exchange_port_occupied!==0 (
set local_free_ports=%dn_mpp_data_exchange_port% !local_free_ports!
)
if !dn_schema_region_consensus_port_occupied!==0 (
set local_free_ports=%dn_schema_region_consensus_port% !local_free_ports!
)
if !dn_data_region_consensus_port_occupied!==0 (
set local_free_ports=%dn_data_region_consensus_port% !local_free_ports!
)
if !cn_internal_port_occupied!==0 (
set local_free_ports=%cn_internal_port% !local_free_ports!
)
if !cn_consensus_port_occupied!==0 (
set local_free_ports=%cn_consensus_port% !local_free_ports!
)
echo Check: Network(Local Port)
echo Requirement: Port !local_ports! is not occupied
echo Result:
if defined local_other_occupied_ports (
echo Port !local_other_occupied_ports! occupied by other programs
)
if defined local_iotdb_occupied_ports (
echo Port !local_iotdb_occupied_ports! is occupied by IoTDB
)
if defined local_free_ports (
echo Port !local_free_ports! is free
)
exit /b
:remote_ports_check
for %%e in ("%endpoints:,=" "%") do (
set counter=0
for /f "tokens=1,2 delims=:" %%i in ("%%~e") do (
set "ip=%%i"
set "port=%%j"
if "!allpreip!" == "!ip!" (
set "iplist=!iplist! !port!"
) else (
set allpreip=!ip!
if !counter! EQU 0 (
set /a counter+=1
if defined iplist (
set "iplist=!iplist!,!ip!:!port!"
) else (
set "iplist=!ip!:!port!"
)
) else (
set "iplist=!iplist!,!ip!:!port!"
)
)
for /f %%r in ('powershell -command "Test-NetConnection -ComputerName !ip! -Port !port! -InformationLevel Quiet"') do (
set "result=%%r"
)
if /i "!result!" EQU "TRUE" (
@REM echo Info: The !port! port on !ip! is reachable.
) else (
@REM echo Error: The !port! port on !ip! is unreachable.
if "!preip!" == "!ip!" (
set "unreachable=!unreachable!-!port!"
) else (
set preip=!ip!
if "!unreachable!" == "" (
set "unreachable=IP:!ip!,Ports:!port!"
) else (
set "unreachable=!unreachable!##IP:!ip!,Ports:!port!"
)
)
)
)
)
setlocal enabledelayedexpansion
echo Check: Network(Remote Port Connectivity)
echo Requirement: !iplist! need to be accessible
echo Result:
if defined unreachable (
echo The following server ports are not sure, please double check:
for %%a in ("%unreachable:##=" "%") do (
set "segment=%%~a"
set "segment=!segment:-= !"
echo !segment!
)
) else (
echo All ports are accessible
)
endlocal
exit /b
:system_settings_check
echo Check: System Settings(Swap)
echo Requirement: disabled
for /f "skip=1" %%s in ('wmic pagefile list /format:list') do (
for /f "tokens=1,2 delims==" %%a in ("%%s") do (
if /i "%%a"=="AllocatedBaseSize" (
if "%%b"=="0" (
echo Result: disabled
) else (
echo Result: enabled
)
)
)
)
exit /b
:checkIfIOTDBProcess
setlocal
set "pid_to_check=%~1"
set "is_iotdb=0"
for /f "usebackq tokens=*" %%i in (`wmic process where "ProcessId=%pid_to_check%" get CommandLine /format:list ^| findstr /c:"CommandLine="`) do (
set command_line=%%i
)
echo %command_line% | findstr /i /c:"iotdb" >nul && set is_iotdb=1
endlocal & set "is_iotdb=%is_iotdb%"
exit /b