blob: 417ffda2b2a7eb31fb06c0bbc17dfcb3d88ce4de [file]
@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 EnableExtensions DisableDelayedExpansion
if not "%~2"=="" goto usage
if "%~1"=="-f" goto confirmed
if not "%~1"=="" goto usage
set "CLEAN_SERVICE="
set /p "CLEAN_SERVICE=Do you want to clean all the data of IoTDB Edge? y/n (default n): "
if /i "%CLEAN_SERVICE%"=="y" goto confirmed
echo Exiting...
exit /b 0
:confirmed
if not defined IOTDB_HOME set "IOTDB_HOME=%~dp0..\..\.."
for %%i in ("%IOTDB_HOME%") do set "IOTDB_HOME=%%~fi"
if not defined IOTDB_CONF set "IOTDB_CONF=%IOTDB_HOME%\conf"
if not exist "%IOTDB_HOME%\sbin\windows\stop-edge.bat" (
echo Cannot find the Edge stop script. No data has been removed.
exit /b 1
)
@REM Wait for the merged process and propagate stop errors before removing data.
call "%IOTDB_HOME%\sbin\windows\stop-edge.bat" -f
if errorlevel 1 exit /b 1
@REM PowerShell is already required by stop-edge.bat. Literal paths preserve spaces,
@REM Unicode, drive/UNC paths and wildcard characters in configured directories.
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ErrorActionPreference = 'Stop';" ^
"$iotdbHome = [IO.Path]::GetFullPath($env:IOTDB_HOME).TrimEnd('\', '/');" ^
"$cn = [ordered]@{cn_system_dir='data/confignode/system'; cn_consensus_dir='data/confignode/consensus'};" ^
"$dn = [ordered]@{dn_system_dir='data/datanode/system'; dn_data_dirs='data/datanode/data'; dn_consensus_dir='data/datanode/consensus'; dn_wal_dirs='data/datanode/wal'; dn_tracing_dir='datanode/tracing'; dn_sync_dir='data/datanode/sync'; pipe_receiver_file_dirs='data/datanode/system/pipe/receiver'; iot_consensus_v2_receiver_file_dirs='data/datanode/system/pipe/consensus/receiver'; sort_tmp_dir='data/datanode/tmp'};" ^
"function Read-Directories($file, $directories) {" ^
" $defaults = @{}; foreach ($key in $directories.Keys) { $defaults[$key] = $directories[$key]; }" ^
" if (Test-Path -LiteralPath $file) {" ^
" foreach ($line in Get-Content -LiteralPath $file -Encoding UTF8) {" ^
" if ($line -match '^\s*([^#!\s][^=]*?)\s*=\s*(.*?)\s*$') {" ^
" $key = $Matches[1].Trim(); $value = $Matches[2].Trim();" ^
" if ($directories.Contains($key)) { $directories[$key] = if ($value) { $value } else { $defaults[$key] }; }" ^
" }" ^
" }" ^
" }" ^
"}" ^
"$systemConfig = Join-Path $env:IOTDB_CONF 'iotdb-system.properties';" ^
"if (Test-Path -LiteralPath $systemConfig) {" ^
" Read-Directories $systemConfig $cn; Read-Directories $systemConfig $dn;" ^
"} else {" ^
" Read-Directories (Join-Path $env:IOTDB_CONF 'iotdb-confignode.properties') $cn;" ^
" Read-Directories (Join-Path $env:IOTDB_CONF 'iotdb-datanode.properties') $dn;" ^
"}" ^
"$targets = @();" ^
"foreach ($directories in (@('data') + @($cn.Values) + @($dn.Values))) {" ^
" foreach ($directory in ($directories -split '[,;]')) {" ^
" $directory = $directory.Trim();" ^
" if (-not $directory -or $directory -match '://' -or $directory -eq 'OBJECT_STORAGE') { continue; }" ^
" if (-not [IO.Path]::IsPathRooted($directory)) { $directory = Join-Path $iotdbHome $directory; }" ^
" $directory = [IO.Path]::GetFullPath($directory).TrimEnd('\', '/');" ^
" $root = [IO.Path]::GetPathRoot($directory).TrimEnd('\', '/');" ^
" if ($directory -eq $root) { throw ('Refusing to remove a filesystem root: ' + $directory); }" ^
" foreach ($protected in @($iotdbHome, $env:USERPROFILE)) {" ^
" if (-not $protected) { continue; }" ^
" $protected = [IO.Path]::GetFullPath($protected).TrimEnd('\', '/');" ^
" if ($protected.Equals($directory, [StringComparison]::OrdinalIgnoreCase) -or $protected.StartsWith($directory + '\', [StringComparison]::OrdinalIgnoreCase)) {" ^
" throw ('Refusing to remove a home directory or its parent: ' + $directory);" ^
" }" ^
" }" ^
" $targets += $directory;" ^
" }" ^
"}" ^
"foreach ($directory in ($targets | Select-Object -Unique)) {" ^
" if (Test-Path -LiteralPath $directory) { Remove-Item -LiteralPath $directory -Recurse -Force; }" ^
"}" ^
"Write-Host 'IoTDB Edge clean done ...';"
exit /b %errorlevel%
:usage
echo Usage: %~nx0 [-f]
exit /b 1