This is an automated email from the ASF dual-hosted git repository.
apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 437a40e8ba0 IGNITE-24814 Allow overriding variables in start script
(#7777)
437a40e8ba0 is described below
commit 437a40e8ba06e5275768e734d3825e5ccdb19ce4
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Fri Apr 3 20:13:31 2026 +0300
IGNITE-24814 Allow overriding variables in start script (#7777)
---
packaging/common/linux/bootstrap-functions.sh | 5 +
packaging/common/windows/bootstrap-functions.bat | 6 +-
packaging/db/linux/service/vars.env | 2 +-
packaging/db/zip/linux/ignite3db | 114 +++++++++++++++++++++++
packaging/db/zip/linux/vars.env | 2 +-
packaging/db/zip/windows/ignite3db.bat | 109 ++++++++++++++++++++++
packaging/db/zip/windows/vars.bat | 2 +-
7 files changed, 236 insertions(+), 4 deletions(-)
diff --git a/packaging/common/linux/bootstrap-functions.sh
b/packaging/common/linux/bootstrap-functions.sh
index bf3408e1585..710366c83cf 100644
--- a/packaging/common/linux/bootstrap-functions.sh
+++ b/packaging/common/linux/bootstrap-functions.sh
@@ -50,6 +50,11 @@ if [ -z "${CLASSPATH+x}" ]; then
exit 1
fi
+# Append extra classpath entries (e.g., lib/ext/* for log4j or other libs)
+if [ "${IGNITE3_EXTRA_CLASSPATH+set}" = "set" ] && [ -n
"${IGNITE3_EXTRA_CLASSPATH}" ]; then
+ CLASSPATH="${CLASSPATH}:${IGNITE3_EXTRA_CLASSPATH}"
+fi
+
MAIN_CLASS="@MAIN_CLASS@"
export JAVA_CMD_WITH_ARGS="${JAVACMD} \
diff --git a/packaging/common/windows/bootstrap-functions.bat
b/packaging/common/windows/bootstrap-functions.bat
index f810897a981..03268f8286b 100644
--- a/packaging/common/windows/bootstrap-functions.bat
+++ b/packaging/common/windows/bootstrap-functions.bat
@@ -25,7 +25,11 @@ set
LOGGING_JAVA_OPTS=-Djava.util.logging.config.file="%CONF_DIR%\ignite.java.ut
-XX:HeapDumpPath="%LOG_DIR%" ^
-Xlog:gc=info:file="%LOG_DIR%\%JVM_GC_LOG_NAME%"::filecount=%JVM_GC_NUM_LOGS%,filesize=%JVM_GC_LOG_SIZE%
-set CLASSPATH=-classpath "%LIBS_DIR%\*" @MAIN_CLASS@
+if defined IGNITE3_EXTRA_CLASSPATH (
+ set CLASSPATH=-classpath "%LIBS_DIR%\*;%IGNITE3_EXTRA_CLASSPATH%"
@MAIN_CLASS@
+) else (
+ set CLASSPATH=-classpath "%LIBS_DIR%\*" @MAIN_CLASS@
+)
set JAVA_MEMORY_OPTIONS=-Xmx%JVM_MAX_MEM% -Xms%JVM_MIN_MEM%
diff --git a/packaging/db/linux/service/vars.env
b/packaging/db/linux/service/vars.env
index ca79e16679c..0d7804a7216 100644
--- a/packaging/db/linux/service/vars.env
+++ b/packaging/db/linux/service/vars.env
@@ -32,4 +32,4 @@ JVM_GC_LOG_NAME="gc.log.$(date -u +%Y%m%d_%H%M%S)"
JVM_GC_LOG_SIZE="100m"
JVM_GC_NUM_LOGS="10"
##For any additional users settings
-IGNITE3_EXTRA_JVM_ARGS=
+IGNITE3_EXTRA_JVM_ARGS=${IGNITE3_EXTRA_JVM_ARGS:-}
diff --git a/packaging/db/zip/linux/ignite3db b/packaging/db/zip/linux/ignite3db
index 9b54f8c38e8..45657e83947 100644
--- a/packaging/db/zip/linux/ignite3db
+++ b/packaging/db/zip/linux/ignite3db
@@ -28,6 +28,120 @@ cd .. # now SCRIPT_DIR points at parent dir for bin
if [ -z ${IGNITE_HOME+x} ]; then IGNITE_HOME=$(pwd); fi
. @CONF_DIR@/@VARS_FILE_NAME@
+
+# Save base values before any overrides
+BASE_NODE_NAME="${NODE_NAME}"
+BASE_WORK_DIR="${WORK_DIR}"
+BASE_LOG_DIR="${LOG_DIR}"
+BASE_CONFIG_FILE="${CONFIG_FILE}"
+
+# Parses command line arguments into CLI_* variables.
+parse_args() {
+ CLI_NODE_NAME=""
+ CLI_WORK_DIR=""
+ CLI_LOG_DIR=""
+ CLI_CONFIG_FILE=""
+ CLI_EXTRA_CLASSPATH=""
+
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ --help|-h)
+ echo "Usage: ignite3db [OPTIONS]"
+ echo ""
+ echo "Options:"
+ echo " --node-name <name> Set the node name"
+ echo " --work-dir <path> Set the work directory"
+ echo " --log-dir <path> Set the log directory"
+ echo " --config <path> Set the configuration file"
+ echo " --extra-classpath <path> Add extra entries to the
classpath"
+ echo " --help, -h Show this help message"
+ exit 0
+ ;;
+ --node-name)
+ shift
+ if [ $# -eq 0 ]; then echo "Error: --node-name requires a
value" >&2; exit 1; fi
+ CLI_NODE_NAME="$1"
+ ;;
+ --work-dir)
+ shift
+ if [ $# -eq 0 ]; then echo "Error: --work-dir requires a
value" >&2; exit 1; fi
+ CLI_WORK_DIR="$1"
+ ;;
+ --log-dir)
+ shift
+ if [ $# -eq 0 ]; then echo "Error: --log-dir requires a value"
>&2; exit 1; fi
+ CLI_LOG_DIR="$1"
+ ;;
+ --config)
+ shift
+ if [ $# -eq 0 ]; then echo "Error: --config requires a value"
>&2; exit 1; fi
+ CLI_CONFIG_FILE="$1"
+ ;;
+ --extra-classpath)
+ shift
+ if [ $# -eq 0 ]; then echo "Error: --extra-classpath requires
a value" >&2; exit 1; fi
+ CLI_EXTRA_CLASSPATH="$1"
+ ;;
+ --*)
+ echo "Error: unknown option '$1'" >&2
+ echo "Use --help to see available options." >&2
+ exit 1
+ ;;
+ esac
+ shift
+ done
+}
+
+# Applies overrides in priority order: CLI args > IGNITE3_* env vars >
defaults.
+# When node name is overridden, work/log dirs become subdirectories and config
file
+# gets a node name suffix. Explicit path overrides take precedence over
derived values.
+apply_overrides() {
+ # Resolve node name: CLI > env var > default
+ if [ -n "${CLI_NODE_NAME}" ]; then
+ NODE_NAME="${CLI_NODE_NAME}"
+ elif [ "${IGNITE3_NODE_NAME+set}" = "set" ]; then
+ NODE_NAME="${IGNITE3_NODE_NAME}"
+ fi
+
+ # If node name differs from default, derive subdirectory paths
+ if [ "${NODE_NAME}" != "${BASE_NODE_NAME}" ]; then
+ WORK_DIR="${BASE_WORK_DIR}/${NODE_NAME}"
+ LOG_DIR="${BASE_LOG_DIR}/${NODE_NAME}"
+ CONFIG_FILE="${BASE_CONFIG_FILE%.conf}-${NODE_NAME}.conf"
+ fi
+
+ # Explicit path overrides take precedence over node-name derived values
+ if [ -n "${CLI_WORK_DIR}" ]; then
+ WORK_DIR="${CLI_WORK_DIR}"
+ elif [ "${IGNITE3_WORK_DIR+set}" = "set" ]; then
+ WORK_DIR="${IGNITE3_WORK_DIR}"
+ fi
+
+ if [ -n "${CLI_LOG_DIR}" ]; then
+ LOG_DIR="${CLI_LOG_DIR}"
+ elif [ "${IGNITE3_LOG_DIR+set}" = "set" ]; then
+ LOG_DIR="${IGNITE3_LOG_DIR}"
+ fi
+
+ if [ -n "${CLI_CONFIG_FILE}" ]; then
+ CONFIG_FILE="${CLI_CONFIG_FILE}"
+ elif [ "${IGNITE3_CONFIG_FILE+set}" = "set" ]; then
+ CONFIG_FILE="${IGNITE3_CONFIG_FILE}"
+ fi
+
+ # Extra classpath: CLI > env var
+ if [ -n "${CLI_EXTRA_CLASSPATH}" ]; then
+ IGNITE3_EXTRA_CLASSPATH="${CLI_EXTRA_CLASSPATH}"
+ fi
+}
+
+parse_args "$@"
+apply_overrides
+
+# Create work and log directories if they do not exist
+mkdir -p "${WORK_DIR}"
+mkdir -p "${LOG_DIR}"
+
. ${LIBS_DIR}/@BOOTSTRAP_FILE_NAME@
cd ${IGNITE_HOME} || exit
diff --git a/packaging/db/zip/linux/vars.env b/packaging/db/zip/linux/vars.env
index 3092c27a7bd..ce441698946 100644
--- a/packaging/db/zip/linux/vars.env
+++ b/packaging/db/zip/linux/vars.env
@@ -32,4 +32,4 @@ JVM_GC_LOG_NAME="gc.log"
JVM_GC_LOG_SIZE="100m"
JVM_GC_NUM_LOGS="10"
##For any additional users settings
-IGNITE3_EXTRA_JVM_ARGS=
+IGNITE3_EXTRA_JVM_ARGS=${IGNITE3_EXTRA_JVM_ARGS:-}
diff --git a/packaging/db/zip/windows/ignite3db.bat
b/packaging/db/zip/windows/ignite3db.bat
index 87df19ac969..008439e2503 100644
--- a/packaging/db/zip/windows/ignite3db.bat
+++ b/packaging/db/zip/windows/ignite3db.bat
@@ -71,6 +71,115 @@ if "%IGNITE_HOME%"=="" set IGNITE_HOME=%APP_HOME%
cd "%IGNITE_HOME%"
call "@CONF_DIR@\@VARS_FILE_NAME@"
+
+@rem Save base values before any overrides
+set BASE_NODE_NAME=%NODE_NAME%
+set BASE_WORK_DIR=%WORK_DIR%
+set BASE_LOG_DIR=%LOG_DIR%
+set BASE_CONFIG_FILE=%CONFIG_FILE%
+
+@rem Initialize CLI override variables
+set CLI_NODE_NAME=
+set CLI_WORK_DIR=
+set CLI_LOG_DIR=
+set CLI_CONFIG_FILE=
+set CLI_EXTRA_CLASSPATH=
+
+@rem Parse command line arguments into CLI_* variables
+:parseArgs
+if "%~1"=="" goto applyOverrides
+if "%~1"=="--help" goto argHelp
+if "%~1"=="-h" goto argHelp
+if "%~1"=="--node-name" goto argNodeName
+if "%~1"=="--work-dir" goto argWorkDir
+if "%~1"=="--log-dir" goto argLogDir
+if "%~1"=="--config" goto argConfig
+if "%~1"=="--extra-classpath" goto argExtraClasspath
+@rem Fail on unrecognized --* options
+echo Error: unknown option '%~1' 1>&2
+echo Use --help to see available options. 1>&2
+goto fail
+
+:argHelp
+echo Usage: ignite3db [OPTIONS]
+echo.
+echo Options:
+echo --node-name ^<name^> Set the node name
+echo --work-dir ^<path^> Set the work directory
+echo --log-dir ^<path^> Set the log directory
+echo --config ^<path^> Set the configuration file
+echo --extra-classpath ^<path^> Add extra entries to the classpath
+echo --help, -h Show this help message
+goto mainEnd
+
+:argNodeName
+if "%~2"=="" (echo Error: --node-name requires a value 1>&2 & goto fail)
+set CLI_NODE_NAME=%~2
+shift
+shift
+goto parseArgs
+
+:argWorkDir
+if "%~2"=="" (echo Error: --work-dir requires a value 1>&2 & goto fail)
+set CLI_WORK_DIR=%~2
+shift
+shift
+goto parseArgs
+
+:argLogDir
+if "%~2"=="" (echo Error: --log-dir requires a value 1>&2 & goto fail)
+set CLI_LOG_DIR=%~2
+shift
+shift
+goto parseArgs
+
+:argConfig
+if "%~2"=="" (echo Error: --config requires a value 1>&2 & goto fail)
+set CLI_CONFIG_FILE=%~2
+shift
+shift
+goto parseArgs
+
+:argExtraClasspath
+if "%~2"=="" (echo Error: --extra-classpath requires a value 1>&2 & goto fail)
+set CLI_EXTRA_CLASSPATH=%~2
+shift
+shift
+goto parseArgs
+
+@rem Apply overrides in priority order: CLI args > IGNITE3_* env vars >
defaults.
+@rem When node name is overridden, work/log dirs become subdirectories and
config file
+@rem gets a node name suffix. Explicit path overrides take precedence over
derived values.
+:applyOverrides
+
+@rem Resolve node name: CLI > env var > default
+if defined CLI_NODE_NAME set NODE_NAME=%CLI_NODE_NAME%
+if not defined CLI_NODE_NAME if defined IGNITE3_NODE_NAME set
NODE_NAME=%IGNITE3_NODE_NAME%
+
+@rem If node name differs from default, derive subdirectory paths
+if not "%NODE_NAME%"=="%BASE_NODE_NAME%" (
+ set "WORK_DIR=%BASE_WORK_DIR%\%NODE_NAME%"
+ set "LOG_DIR=%BASE_LOG_DIR%\%NODE_NAME%"
+ call set "CONFIG_FILE=%%BASE_CONFIG_FILE:.conf=-%NODE_NAME%.conf%%"
+)
+
+@rem Explicit path overrides take precedence over node-name derived values
+if defined CLI_WORK_DIR set WORK_DIR=%CLI_WORK_DIR%
+if not defined CLI_WORK_DIR if defined IGNITE3_WORK_DIR set
WORK_DIR=%IGNITE3_WORK_DIR%
+
+if defined CLI_LOG_DIR set LOG_DIR=%CLI_LOG_DIR%
+if not defined CLI_LOG_DIR if defined IGNITE3_LOG_DIR set
LOG_DIR=%IGNITE3_LOG_DIR%
+
+if defined CLI_CONFIG_FILE set CONFIG_FILE=%CLI_CONFIG_FILE%
+if not defined CLI_CONFIG_FILE if defined IGNITE3_CONFIG_FILE set
CONFIG_FILE=%IGNITE3_CONFIG_FILE%
+
+@rem Extra classpath: CLI > env var
+if defined CLI_EXTRA_CLASSPATH set
IGNITE3_EXTRA_CLASSPATH=%CLI_EXTRA_CLASSPATH%
+
+@rem Create work and log directories if they do not exist
+if not exist "%WORK_DIR%" mkdir "%WORK_DIR%"
+if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
+
call "%LIBS_DIR%\@BOOTSTRAP_FILE_NAME@"
@rem Execute ignite3
diff --git a/packaging/db/zip/windows/vars.bat
b/packaging/db/zip/windows/vars.bat
index 3ff6baded2d..3ddb0bcb0df 100644
--- a/packaging/db/zip/windows/vars.bat
+++ b/packaging/db/zip/windows/vars.bat
@@ -33,4 +33,4 @@ set JVM_GC_LOG_SIZE=100m
set JVM_GC_NUM_LOGS=10
@rem For any additional users settings
-set IGNITE3_EXTRA_JVM_ARGS=
+if not defined IGNITE3_EXTRA_JVM_ARGS set IGNITE3_EXTRA_JVM_ARGS=