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=

Reply via email to