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

yiguolei pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new a162139f1a2 [fix](libjdk) Revert support loading libjvm at runtime 
(#35712)
a162139f1a2 is described below

commit a162139f1a28fceeca4d6ff2da14572b1ba7b977
Author: walter <w41te...@gmail.com>
AuthorDate: Fri May 31 15:28:51 2024 +0800

    [fix](libjdk) Revert support loading libjvm at runtime (#35712)
    
    Cherry-pick #35557
    
    Co-authored-by: Xinyi Zou <zouxiny...@gmail.com>
---
 be/CMakeLists.txt          |  22 +++++++--
 be/src/util/CMakeLists.txt |   2 +
 be/src/util/jni-util.cpp   |   4 +-
 bin/start_be.sh            | 115 ++++++++++++++++++++++++++++++---------------
 run-be-ut.sh               |  29 ++++++++++++
 tools/find_libjvm.sh       |  61 ++++++++++++++++++++++++
 6 files changed, 190 insertions(+), 43 deletions(-)

diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index 9dd71d40245..fafaff15fe1 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -443,11 +443,25 @@ if ("${DORIS_JAVA_HOME}" STREQUAL "")
     set(DORIS_JAVA_HOME "$ENV{JAVA_HOME}")
 endif()
 
-include_directories(${DORIS_JAVA_HOME}/include)
-if (NOT OS_MACOSX)
-    include_directories(${DORIS_JAVA_HOME}/include/linux)
+execute_process(COMMAND chmod 755 ${BASE_DIR}/../tools/find_libjvm.sh)
+execute_process(COMMAND ${BASE_DIR}/../tools/find_libjvm.sh OUTPUT_VARIABLE 
LIBJVM_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
+FILE(GLOB_RECURSE LIB_JVM ${LIBJVM_PATH})
+if("${LIB_JVM}" STREQUAL "")
+    message(STATUS "there is no libjvm found!")
 else()
-    include_directories(${DORIS_JAVA_HOME}/include/darwin)
+    set(DORIS_DEPENDENCIES
+        ${DORIS_DEPENDENCIES}
+        jvm
+    )
+    add_library(jvm SHARED IMPORTED)
+    set_target_properties(jvm PROPERTIES IMPORTED_LOCATION ${LIB_JVM})
+    include_directories(${DORIS_JAVA_HOME}/include)
+    if (NOT OS_MACOSX)
+        include_directories(${DORIS_JAVA_HOME}/include/linux)
+    else()
+        include_directories(${DORIS_JAVA_HOME}/include/darwin)
+    endif()
+    add_definitions("-DLIBJVM")
 endif()
 
 if (NOT OS_MACOSX)
diff --git a/be/src/util/CMakeLists.txt b/be/src/util/CMakeLists.txt
index 8b99fcf015e..de4d27eeebb 100644
--- a/be/src/util/CMakeLists.txt
+++ b/be/src/util/CMakeLists.txt
@@ -29,6 +29,8 @@ else ()
     list(REMOVE_ITEM UTIL_FILES 
${CMAKE_CURRENT_SOURCE_DIR}/perf_counters_mac.cpp 
${CMAKE_CURRENT_SOURCE_DIR}/disk_info_mac.cpp)
 endif()
 
+list(REMOVE_ITEM UTIL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/libjvm_loader.cpp)
+
 add_library(Util STATIC
     ${UTIL_FILES}
 )
diff --git a/be/src/util/jni-util.cpp b/be/src/util/jni-util.cpp
index 428c587f667..25f4f913d8a 100644
--- a/be/src/util/jni-util.cpp
+++ b/be/src/util/jni-util.cpp
@@ -37,7 +37,7 @@
 #include "gutil/strings/substitute.h"
 #include "util/doris_metrics.h"
 #include "util/jni_native_method.h"
-#include "util/libjvm_loader.h"
+// #include "util/libjvm_loader.h"
 
 using std::string;
 
@@ -456,7 +456,7 @@ Status JniUtil::get_jni_scanner_class(JNIEnv* env, const 
char* classname,
 }
 
 Status JniUtil::Init() {
-    RETURN_IF_ERROR(LibJVMLoader::instance().load());
+    // RETURN_IF_ERROR(LibJVMLoader::instance().load());
 
     // Get the JNIEnv* corresponding to current thread.
     JNIEnv* env = nullptr;
diff --git a/bin/start_be.sh b/bin/start_be.sh
index 361f37552e8..7d3b5c5679e 100755
--- a/bin/start_be.sh
+++ b/bin/start_be.sh
@@ -31,12 +31,14 @@ OPTS="$(getopt \
     -o '' \
     -l 'daemon' \
     -l 'console' \
+    -l 'version' \
     -- "$@")"
 
 eval set -- "${OPTS}"
 
 RUN_DAEMON=0
 RUN_CONSOLE=0
+RUN_VERSION=0
 while true; do
     case "$1" in
     --daemon)
@@ -47,6 +49,10 @@ while true; do
         RUN_CONSOLE=1
         shift
         ;;
+    --version)
+        RUN_VERSION=1
+        shift
+        ;;
     --)
         shift
         break
@@ -64,6 +70,78 @@ DORIS_HOME="$(
 )"
 export DORIS_HOME
 
+# export env variables from be.conf
+#
+# LOG_DIR
+# PID_DIR
+export LOG_DIR="${DORIS_HOME}/log"
+PID_DIR="$(
+    cd "${curdir}"
+    pwd
+)"
+export PID_DIR
+
+jdk_version() {
+    local java_cmd="${1}"
+    local result
+    local IFS=$'\n'
+
+    if ! command -v "${java_cmd}" >/dev/null; then
+        echo "ERROR: invalid java_cmd ${java_cmd}" >>"${LOG_DIR}/be.out"
+        result=no_java
+        return 1
+    else
+        echo "INFO: java_cmd ${java_cmd}" >>"${LOG_DIR}/be.out"
+        local version
+        # remove \r for Cygwin
+        version="$("${java_cmd}" -Xms32M -Xmx32M -version 2>&1 | tr '\r' '\n' 
| grep version | awk '{print $3}')"
+        version="${version//\"/}"
+        if [[ "${version}" =~ ^1\. ]]; then
+            result="$(echo "${version}" | awk -F '.' '{print $2}')"
+        else
+            result="$(echo "${version}" | awk -F '.' '{print $1}')"
+        fi
+        echo "INFO: jdk_version ${result}" >>"${LOG_DIR}/be.out"
+    fi
+    echo "${result}"
+    return 0
+}
+
+setup_java_env() {
+    local java_version
+
+    if [[ -z "${JAVA_HOME}" ]]; then
+        return 1
+    fi
+
+    local jvm_arch='amd64'
+    if [[ "$(uname -m)" == 'aarch64' ]]; then
+        jvm_arch='aarch64'
+    fi
+    java_version="$(
+        set -e
+        jdk_version "${JAVA_HOME}/bin/java"
+    )"
+    if [[ "${java_version}" -gt 8 ]]; then
+        export 
LD_LIBRARY_PATH="${JAVA_HOME}/lib/server:${JAVA_HOME}/lib:${LD_LIBRARY_PATH}"
+        # JAVA_HOME is jdk
+    elif [[ -d "${JAVA_HOME}/jre" ]]; then
+        export 
LD_LIBRARY_PATH="${JAVA_HOME}/jre/lib/${jvm_arch}/server:${JAVA_HOME}/jre/lib/${jvm_arch}:${LD_LIBRARY_PATH}"
+        # JAVA_HOME is jre
+    else
+        export 
LD_LIBRARY_PATH="${JAVA_HOME}/lib/${jvm_arch}/server:${JAVA_HOME}/lib/${jvm_arch}:${LD_LIBRARY_PATH}"
+    fi
+}
+
+# prepare jvm if needed
+setup_java_env || true
+
+if [[ "${RUN_VERSION}" -eq 1 ]]; then
+    chmod 755 "${DORIS_HOME}/lib/doris_be"
+    "${DORIS_HOME}"/lib/doris_be --version
+    exit 1
+fi
+
 if [[ "$(uname -s)" != 'Darwin' ]]; then
     MAX_MAP_COUNT="$(cat /proc/sys/vm/max_map_count)"
     if [[ "${MAX_MAP_COUNT}" -lt 2000000 ]]; then
@@ -144,43 +222,6 @@ export 
DORIS_CLASSPATH="-Djava.class.path=${DORIS_CLASSPATH}"
 
 export 
LD_LIBRARY_PATH="${DORIS_HOME}/lib/hadoop_hdfs/native:${LD_LIBRARY_PATH}"
 
-jdk_version() {
-    local java_cmd="${1}"
-    local result
-    local IFS=$'\n'
-
-    if ! command -v "${java_cmd}" >/dev/null; then
-        echo "ERROR: invalid java_cmd ${java_cmd}" >>"${LOG_DIR}/be.out"
-        result=no_java
-        return 1
-    else
-        echo "INFO: java_cmd ${java_cmd}" >>"${LOG_DIR}/be.out"
-        local version
-        # remove \r for Cygwin
-        version="$("${java_cmd}" -Xms32M -Xmx32M -version 2>&1 | tr '\r' '\n' 
| grep version | awk '{print $3}')"
-        version="${version//\"/}"
-        if [[ "${version}" =~ ^1\. ]]; then
-            result="$(echo "${version}" | awk -F '.' '{print $2}')"
-        else
-            result="$(echo "${version}" | awk -F '.' '{print $1}')"
-        fi
-        echo "INFO: jdk_version ${result}" >>"${LOG_DIR}/be.out"
-    fi
-    echo "${result}"
-    return 0
-}
-
-# export env variables from be.conf
-#
-# LOG_DIR
-# PID_DIR
-export LOG_DIR="${DORIS_HOME}/log"
-PID_DIR="$(
-    cd "${curdir}"
-    pwd
-)"
-export PID_DIR
-
 # set odbc conf path
 export ODBCSYSINI="${DORIS_HOME}/conf"
 
diff --git a/run-be-ut.sh b/run-be-ut.sh
index 453cd5d397a..74c950ef742 100755
--- a/run-be-ut.sh
+++ b/run-be-ut.sh
@@ -278,6 +278,35 @@ while read -r gcda_file; do
     rm "${gcda_file}"
 done < <(find "${CMAKE_BUILD_DIR}" -name "*gcda")
 
+setup_java_env() {
+    local java_version
+
+    if [[ -z "${JAVA_HOME}" ]]; then
+        return 1
+    fi
+
+    local jvm_arch='amd64'
+    if [[ "$(uname -m)" == 'aarch64' ]]; then
+        jvm_arch='aarch64'
+    fi
+    java_version="$(
+        set -e
+        jdk_version "${JAVA_HOME}/bin/java"
+    )"
+    if [[ "${java_version}" -gt 8 ]]; then
+        export 
LD_LIBRARY_PATH="${JAVA_HOME}/lib/server:${JAVA_HOME}/lib:${LD_LIBRARY_PATH}"
+        # JAVA_HOME is jdk
+    elif [[ -d "${JAVA_HOME}/jre" ]]; then
+        export 
LD_LIBRARY_PATH="${JAVA_HOME}/jre/lib/${jvm_arch}/server:${JAVA_HOME}/jre/lib/${jvm_arch}:${LD_LIBRARY_PATH}"
+        # JAVA_HOME is jre
+    else
+        export 
LD_LIBRARY_PATH="${JAVA_HOME}/lib/${jvm_arch}/server:${JAVA_HOME}/lib/${jvm_arch}:${LD_LIBRARY_PATH}"
+    fi
+}
+
+# prepare jvm if needed
+setup_java_env || true
+
 # prepare gtest output dir
 GTEST_OUTPUT_DIR="${CMAKE_BUILD_DIR}/gtest_output"
 rm -rf "${GTEST_OUTPUT_DIR}"
diff --git a/tools/find_libjvm.sh b/tools/find_libjvm.sh
new file mode 100755
index 00000000000..79235a2b440
--- /dev/null
+++ b/tools/find_libjvm.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+jdk_version() {
+    local java_cmd="${1}"
+    local result
+    local IFS=$'\n'
+
+    if [[ -z "${java_cmd}" ]]; then
+        result=no_java
+        return 1
+    else
+        local version
+        # remove \r for Cygwin
+        version="$("${java_cmd}" -Xms32M -Xmx32M -version 2>&1 | tr '\r' '\n' 
| grep version | awk '{print $3}')"
+        version="${version//\"/}"
+        if [[ "${version}" =~ ^1\. ]]; then
+            result="$(echo "${version}" | awk -F '.' '{print $2}')"
+        else
+            result="$(echo "${version}" | awk -F '.' '{print $1}')"
+        fi
+    fi
+    echo "${result}"
+    return 0
+}
+
+java_version=$(jdk_version "${JAVA_HOME:-}/bin/java")
+jvm_arch='amd64'
+if [[ "$(uname -m)" == 'aarch64' ]]; then
+    jvm_arch='aarch64'
+fi
+if [[ "${java_version}" -gt 8 ]]; then
+    export LIBJVM_PATH="${JAVA_HOME}/lib"
+# JAVA_HOME is jdk
+elif [[ -d "${JAVA_HOME}/jre" ]]; then
+    export LIBJVM_PATH="${JAVA_HOME}/jre/lib/${jvm_arch}"
+# JAVA_HOME is jre
+else
+    export LIBJVM_PATH="${JAVA_HOME}/lib/${jvm_arch}"
+fi
+
+if [[ "$(uname -s)" != 'Darwin' ]]; then
+    echo "${LIBJVM_PATH}"/*/libjvm.so
+else
+    echo "${LIBJVM_PATH}"/*/libjvm.dylib
+fi


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to