This is an automated email from the ASF dual-hosted git repository.

mchades pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 73f1d70d34 [#10556] improvement(docker): Move container entrypoint to 
docker/ and run JVM in foreground (#11272)
73f1d70d34 is described below

commit 73f1d70d340ca7a1e45c3e94069ac0c68582c231
Author: Jerry Shao <[email protected]>
AuthorDate: Mon Jun 1 12:18:08 2026 +0800

    [#10556] improvement(docker): Move container entrypoint to docker/ and run 
JVM in foreground (#11272)
    
    ### What changes were proposed in this pull request?
    
    - Extract the Docker container entrypoint into
    `dev/docker/gravitino/docker-entrypoint.sh`,
      separated from user-facing scripts in `bin/`.
    - Replace the `tail -f /dev/null` keep-alive hack (appended to
    `gravitino.sh` at build time)
      with a proper foreground server launch via `gravitino.sh run`.
    - `bin/start-gravitino.sh` is kept as a deprecated one-release
    backward-compatibility stub
      that delegates to the new entrypoint.
    - `rewrite_gravitino_server_config.py` is moved from `bin/` to `docker/`
    alongside the entrypoint.
    
    ### Why are the changes needed?
    
    The previous `tail -f /dev/null` approach was fragile: it was appended
    directly to `gravitino.sh`
    at image build time, affecting all invocations of that script. Running
    the JVM in the foreground
    is the standard Docker pattern and more robust for signal handling on
    container stop.
    
    Fix: #10556
    
    ### Does this PR introduce _any_ user-facing change?
    
    - `bin/start-gravitino.sh` now prints a deprecation warning and
    delegates to `docker/docker-entrypoint.sh`.
    Users overriding the container entrypoint or calling this script
    directly should update to
      reference `docker/docker-entrypoint.sh`.
    
    ### How was this patch tested?
    
    Built a local Docker image and verified:
    - Server starts in the foreground via `gravitino.sh run`
    - `SKIP_CONFIG_REWRITE=true` correctly skips config rewrite
    - `bin/start-gravitino.sh` prints the deprecation warning and delegates
    correctly
    - `docker stop` sends SIGTERM and the container exits cleanly
    
    ---------
    
    Co-authored-by: Claude Sonnet 4.6 <[email protected]>
---
 bin/gravitino.sh.template                          |  2 +-
 dev/docker/gravitino/Dockerfile                    |  4 +--
 .../{start-gravitino.sh => docker-entrypoint.sh}   | 27 ++++++++++----
 dev/docker/gravitino/gravitino-dependency.sh       | 15 ++++----
 dev/docker/gravitino/start-gravitino.sh            | 42 +++++-----------------
 5 files changed, 39 insertions(+), 51 deletions(-)

diff --git a/bin/gravitino.sh.template b/bin/gravitino.sh.template
index d6ca1a8957..1ba2692cb6 100755
--- a/bin/gravitino.sh.template
+++ b/bin/gravitino.sh.template
@@ -126,7 +126,7 @@ function start() {
 }
 
 function run() {
-  ${JAVA_RUNNER} ${JAVA_OPTS} ${GRAVITINO_DEBUG_OPTS} -cp 
${GRAVITINO_CLASSPATH} ${GRAVITINO_SERVER_NAME}
+  exec ${JAVA_RUNNER} ${JAVA_OPTS} ${GRAVITINO_DEBUG_OPTS} -cp 
${GRAVITINO_CLASSPATH} ${GRAVITINO_SERVER_NAME}
 }
 
 function stop() {
diff --git a/dev/docker/gravitino/Dockerfile b/dev/docker/gravitino/Dockerfile
index b03e15114d..81c167ae4f 100644
--- a/dev/docker/gravitino/Dockerfile
+++ b/dev/docker/gravitino/Dockerfile
@@ -27,7 +27,7 @@ WORKDIR /opt/gravitino
 COPY packages/gravitino /opt/gravitino
 
 RUN chmod -R g+rwX /opt/gravitino \
-    && chmod +x /opt/gravitino/bin/start-gravitino.sh \
+    && chmod +x /opt/gravitino/docker/docker-entrypoint.sh \
     && useradd -u 1000 -g 0 -M -s /sbin/nologin gravitino
 
 EXPOSE 8090
@@ -35,4 +35,4 @@ EXPOSE 9001
 
 USER 1000
 
-ENTRYPOINT ["/bin/bash", "/opt/gravitino/bin/start-gravitino.sh"]
+ENTRYPOINT ["/bin/bash", "/opt/gravitino/docker/docker-entrypoint.sh"]
diff --git a/dev/docker/gravitino/start-gravitino.sh 
b/dev/docker/gravitino/docker-entrypoint.sh
old mode 100755
new mode 100644
similarity index 57%
copy from dev/docker/gravitino/start-gravitino.sh
copy to dev/docker/gravitino/docker-entrypoint.sh
index 5d43d54576..dac15a44f9
--- a/dev/docker/gravitino/start-gravitino.sh
+++ b/dev/docker/gravitino/docker-entrypoint.sh
@@ -17,16 +17,27 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+# Docker container entrypoint for the Gravitino server image.
+# This script performs container-specific initialization before starting the 
server:
+#   1. Rewrites gravitino.conf from environment variables (skipped if 
SKIP_CONFIG_REWRITE=true).
+#   2. Creates symlinks for optional JDBC drivers placed in 
/opt/gravitino/jdbc-drivers/.
+#   3. Creates symlinks for optional Iceberg bundle jars placed in 
/opt/gravitino/iceberg-bundles/.
+#   4. Starts the Gravitino server in the foreground (replacing this shell 
process).
+#
+# This script is NOT intended to be called directly. It is set as the Docker 
ENTRYPOINT and
+# is invoked automatically when the container starts.
+# For non-Docker deployments, use bin/gravitino.sh {start|stop|restart|status} 
instead.
 
 set -ex
 bin_dir="$(dirname "${BASH_SOURCE-$0}")"
-gravitino_dir="$(cd "${bin_dir}/../">/dev/null; pwd)"
+gravitino_dir="$(cd "${bin_dir}/../" > /dev/null; pwd)"
 
-cd ${gravitino_dir}
+cd "${gravitino_dir}"
 
-# Skip config rewrite if SKIP_CONFIG_REWRITE is set (e.g., in Kubernetes)
+# Skip config rewrite if SKIP_CONFIG_REWRITE is set (e.g., in Kubernetes where 
config
+# is mounted via ConfigMap and should not be overwritten by environment 
variables).
 if [ "${SKIP_CONFIG_REWRITE}" != "true" ]; then
-  python bin/rewrite_gravitino_server_config.py
+  python docker/rewrite_gravitino_server_config.py
 fi
 
 # Create soft links for JDBC drivers
@@ -46,10 +57,14 @@ 
iceberg_rest_lib_dir="${gravitino_dir}/iceberg-rest-server/libs"
 if [ -d "${iceberg_bundle_dir}" ]; then
   mkdir -p "${lakehouse_iceberg_lib_dir}"
   mkdir -p "${iceberg_rest_lib_dir}"
-  find "${iceberg_bundle_dir}" -name '*.jar' -exec ln -sfv {} 
"${lakehouse_iceberg_lib_dir}" \; -exec ln -sfv {} "${iceberg_rest_lib_dir}" \;
+  find "${iceberg_bundle_dir}" -name '*.jar' \
+    -exec ln -sfv {} "${lakehouse_iceberg_lib_dir}" \; \
+    -exec ln -sfv {} "${iceberg_rest_lib_dir}" \;
 fi
 
 JAVA_OPTS+=" -XX:-UseContainerSupport"
 export JAVA_OPTS
 
-./bin/gravitino.sh start 
+# Run the server in the foreground so this process (PID 1) is the JVM.
+# This ensures SIGTERM is forwarded correctly for graceful shutdown.
+exec ./bin/gravitino.sh run
diff --git a/dev/docker/gravitino/gravitino-dependency.sh 
b/dev/docker/gravitino/gravitino-dependency.sh
index 2994eb3283..c31056862d 100755
--- a/dev/docker/gravitino/gravitino-dependency.sh
+++ b/dev/docker/gravitino/gravitino-dependency.sh
@@ -73,8 +73,14 @@ wget "https://jdbc.postgresql.org/download/${pg_driver}"; -O 
"${jdbc_driver_dir}/
 
 echo "Finish downloading"
 
+# Copy the Docker entrypoint and its helper script into the docker/ 
subdirectory so they
+# are clearly separated from user-facing scripts in bin/.
+mkdir -p "${gravitino_dir}/packages/gravitino/docker"
+cp "${gravitino_dir}/docker-entrypoint.sh" 
"${gravitino_dir}/packages/gravitino/docker/"
+cp "${gravitino_dir}/rewrite_gravitino_server_config.py" 
"${gravitino_dir}/packages/gravitino/docker/"
+
+# Copy the deprecated stub into bin/ for one-release backward compatibility.
 mkdir -p "${gravitino_dir}/packages/gravitino/bin"
-cp "${gravitino_dir}/rewrite_gravitino_server_config.py" 
"${gravitino_dir}/packages/gravitino/bin/"
 cp "${gravitino_dir}/start-gravitino.sh" 
"${gravitino_dir}/packages/gravitino/bin/"
 
 fileset_lib_dir="${gravitino_dir}/packages/gravitino/catalogs/fileset/libs"
@@ -96,10 +102,3 @@ find 
${gravitino_home}/bundles/iceberg-aliyun-bundle/build/libs/ -name 'gravitin
 
 
 download_gcs_connector
-
-# Keeping the container running at all times
-cat <<EOF >> "${gravitino_dir}/packages/gravitino/bin/gravitino.sh"
-
-# Keeping a process running in the background
-tail -f /dev/null
-EOF
diff --git a/dev/docker/gravitino/start-gravitino.sh 
b/dev/docker/gravitino/start-gravitino.sh
index 5d43d54576..458499f782 100755
--- a/dev/docker/gravitino/start-gravitino.sh
+++ b/dev/docker/gravitino/start-gravitino.sh
@@ -17,39 +17,13 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+# Deprecated: bin/start-gravitino.sh is kept for backward compatibility only 
and will be
+# removed in a future release. The Docker ENTRYPOINT has moved to 
docker/docker-entrypoint.sh.
+# If you are overriding the container entrypoint or calling this script 
directly, please
+# update your configuration to reference docker/docker-entrypoint.sh instead.
 
-set -ex
-bin_dir="$(dirname "${BASH_SOURCE-$0}")"
-gravitino_dir="$(cd "${bin_dir}/../">/dev/null; pwd)"
-
-cd ${gravitino_dir}
-
-# Skip config rewrite if SKIP_CONFIG_REWRITE is set (e.g., in Kubernetes)
-if [ "${SKIP_CONFIG_REWRITE}" != "true" ]; then
-  python bin/rewrite_gravitino_server_config.py
-fi
-
-# Create soft links for JDBC drivers
-jdbc_driver_dir="${gravitino_dir}/jdbc-drivers"
-
-if [ -d "${jdbc_driver_dir}" ]; then
-  mkdir -p "${gravitino_dir}/libs"
-  find "${jdbc_driver_dir}" -name "mysql-connector-java-*.jar" -exec ln -sfv 
{} "${gravitino_dir}/libs/" \;
-  find "${jdbc_driver_dir}" -name "postgresql-*.jar" -exec ln -sfv {} 
"${gravitino_dir}/libs/" \;
-fi
+echo "WARNING: bin/start-gravitino.sh is deprecated and will be removed in a 
future release." \
+  "Please use docker/docker-entrypoint.sh instead." >&2
 
-# Create soft links for Iceberg bundle jars
-iceberg_bundle_dir="${gravitino_dir}/iceberg-bundles"
-lakehouse_iceberg_lib_dir="${gravitino_dir}/catalogs/lakehouse-iceberg/libs"
-iceberg_rest_lib_dir="${gravitino_dir}/iceberg-rest-server/libs"
-
-if [ -d "${iceberg_bundle_dir}" ]; then
-  mkdir -p "${lakehouse_iceberg_lib_dir}"
-  mkdir -p "${iceberg_rest_lib_dir}"
-  find "${iceberg_bundle_dir}" -name '*.jar' -exec ln -sfv {} 
"${lakehouse_iceberg_lib_dir}" \; -exec ln -sfv {} "${iceberg_rest_lib_dir}" \;
-fi
-
-JAVA_OPTS+=" -XX:-UseContainerSupport"
-export JAVA_OPTS
-
-./bin/gravitino.sh start 
+bin_dir="$(dirname "${BASH_SOURCE-$0}")"
+exec "${bin_dir}/../docker/docker-entrypoint.sh" "$@"

Reply via email to