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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new c323bc44ff [feature](docker)add be init script option (#16909)
c323bc44ff is described below

commit c323bc44ff24402152b5c19c69502651ea10ed55
Author: FreeOnePlus <[email protected]>
AuthorDate: Tue Apr 18 20:03:18 2023 +0800

    [feature](docker)add be init script option (#16909)
---
 docker/runtime/be/resource/entry_point.sh | 171 ++++++++++++++++++++++++------
 docker/runtime/be/resource/init_be.sh     | 142 ++++++++-----------------
 2 files changed, 184 insertions(+), 129 deletions(-)

diff --git a/docker/runtime/be/resource/entry_point.sh 
b/docker/runtime/be/resource/entry_point.sh
index ab2ec6a3d3..2627111d50 100644
--- a/docker/runtime/be/resource/entry_point.sh
+++ b/docker/runtime/be/resource/entry_point.sh
@@ -59,22 +59,111 @@ docker_setup_env() {
     fi
 }
 
+# Check the variables required for startup
+docker_required_variables_env() {
+  declare -g RUN_TYPE
+  if [ -n "$BUILD_TYPE" ]; then
+      RUN_TYPE="K8S"
+      if [[ $BUILD_TYPE =~ ^([kK]8[sS])$ ]]; then
+          doris_warn "BUILD_TYPE" $BUILD_TYPE
+      else
+          doris_error "BUILD_TYPE rule error!example: [k8s], Default Value: 
docker"
+      fi
+      export RUN_TYPE=${RUN_TYPE}
+      return
+  fi
+
+  if [[ -n "$FE_SERVERS" && -n "$BE_ADDR" ]]; then
+      RUN_TYPE="ELECTION"
+      if [[ $FE_SERVERS =~ 
^.+:[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}:[1-6]{0,1}[0-9]{1,4}(,.+:[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}:[1-6]{0,1}[0-9]{1,4})*$
 || $FE_SERVERS =~ 
^.+:([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}((:[0-9a-fA-F]{1,4}){1,2}|:)|([0-9a-fA-F]{1,4}:){1,4}((:[0-9a-fA-F]{1,4}){1,3}|:)|([0-9a-fA-F]{1,4}:){1,3}((:[0-9a-fA-F]{1,4}){1,4}|:)|([0-9a-fA-F]
 [...]
+          doris_warn "FE_SERVERS" $FE_SERVERS
+      else
+          doris_error "FE_SERVERS rule error!example: 
\$FE_NAME:\$FE_HOST_IP:\$FE_EDIT_LOG_PORT[,\$FE_NAME:\$FE_HOST_IP:\$FE_EDIT_LOG_PORT]..."
+      fi
+      if [[ $BE_ADDR =~ 
^[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}:[1-6]{0,1}[0-9]{1,4}$
 || $BE_ADDR =~ 
^([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}((:[0-9a-fA-F]{1,4}){1,2}|:)|([0-9a-fA-F]{1,4}:){1,4}((:[0-9a-fA-F]{1,4}){1,3}|:)|([0-9a-fA-F]{1,4}:){1,3}((:[0-9a-fA-F]{1,4}){1,4}|:)|([0-9a-fA-F]{1,4}:){1,2}((:[0-9a-fA-F]{1,4}){1,5}|:)|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}|:)|:((:[0-9a-fA-F]{
 [...]
+        doris_warn "BE_ADDR" $BE_ADDR
+      else
+        doris_error "BE_ADDR rule error!example: 
\$BE_IP:\$HEARTBEAT_SERVICE_PORT"
+      fi
+      export RUN_TYPE=${RUN_TYPE}
+      return
+  fi
+
+  if [[ -n "$FE_MASTER_IP"  && -n "$BE_IP" && -n "$BE_PORT" ]]; then
+      RUN_TYPE="ASSIGN"
+      if [[ $FE_MASTER_IP =~ 
^[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}$ || 
$FE_MASTER_IP =~ 
^([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}((:[0-9a-fA-F]{1,4}){1,2}|:)|([0-9a-fA-F]{1,4}:){1,4}((:[0-9a-fA-F]{1,4}){1,3}|:)|([0-9a-fA-F]{1,4}:){1,3}((:[0-9a-fA-F]{1,4}){1,4}|:)|([0-9a-fA-F]{1,4}:){1,2}((:[0-9a-fA-F]{1,4}){1,5}|:)|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}|:)|:((:[0-9a-fA-F]{1,4}){1,7}|
 [...]
+          doris_warn "FE_MASTER_IP" $FE_MASTER_IP
+      else
+          doris_error "FE_MASTER_IP rule error!example: \$FE_MASTER_IP"
+      fi
+      if [[ $BE_IP =~ 
^[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}$ || $BE_IP =~ 
^([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}((:[0-9a-fA-F]{1,4}){1,2}|:)|([0-9a-fA-F]{1,4}:){1,4}((:[0-9a-fA-F]{1,4}){1,3}|:)|([0-9a-fA-F]{1,4}:){1,3}((:[0-9a-fA-F]{1,4}){1,4}|:)|([0-9a-fA-F]{1,4}:){1,2}((:[0-9a-fA-F]{1,4}){1,5}|:)|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}|:)|:((:[0-9a-fA-F]{1,4}){1,7}|:)$
 ]]; then
+          doris_warn "BE_IP" $BE_IP
+      else
+          doris_error "BE_IP rule error!example: \$BE_IP"
+      fi
+      if [[ $BE_PORT =~ ^[1-6]{0,1}[0-9]{1,4}$ ]]; then
+          doris_warn "BE_PORT" $BE_PORT
+      else
+          doris_error "BE_PORT rule error!example: \$BE_PORT."
+      fi
+      export RUN_TYPE=${RUN_TYPE}
+      return
+  fi
+
+
+  doris_error EOF "
+               Note that you did not configure the required parameters!
+               plan 1:
+               BUILD_TYPE
+               plan 2:
+               FE_SERVERS & BE_ADDR
+               plan 3:
+               FE_MASTER_IP & FE_MASTER_PORT & BE_IP & BE_PORT"
+              EOF
+}
+
 get_doris_args() {
-    local feServerArray=($(echo "${FE_SERVERS}" | awk '{gsub (/,/," "); print 
$0}'))
-    for i in "${feServerArray[@]}"; do
+  declare -g MASTER_FE_IP CURRENT_BE_IP CURRENT_BE_PORT PRIORITY_NETWORKS
+  if [ $RUN_TYPE == "ELECTION" ]; then
+      local feServerArray=($(echo "${FE_SERVERS}" | awk '{gsub (/,/," "); 
print $0}'))
+      for i in "${feServerArray[@]}"; do
         val=${i}
         val=${val// /}
-        tmpFeId=$(echo "${val}" | awk -F ':' '{ sub(/fe/, ""); sub(/ /, ""); 
print$1}')
+        tmpFeName=$(echo "${val}" | awk -F ':' '{ sub(/fe/, ""); sub(/ /, ""); 
print$1}')
         tmpFeIp=$(echo "${val}" | awk -F ':' '{ sub(/ /, ""); print$2}')
-        feIpArray[$tmpFeId]=${tmpFeIp}
-    done
+        tmpFeEditLogPort=$(echo "${val}" | awk -F ':' '{ sub(/ /, ""); 
print$3}')
+        check_arg "TMP_FE_NAME" $tmpFeName
+        feIpArray[$tmpFeName]=${tmpFeIp}
+      done
+
+      FE_MASTER_IP=${feIpArray[1]}
+      check_arg "FE_MASTER_IP" $FE_MASTER_IP
+      BE_IP=$(echo "${BE_ADDR}" | awk -F ':' '{ sub(/ /, ""); print$1}')
+      check_arg "BE_IP" $BE_IP
+      BE_PORT=$(echo "${BE_ADDR}" | awk -F ':' '{ sub(/ /, ""); print$2}')
+      check_arg "BE_PORT" $BE_PORT
+
+  elif [ $RUN_TYPE == "ASSIGN" ]; then
+      check_arg "FE_MASTER_IP" $FE_MASTER_IP
+      check_arg "BE_IP" $BE_IP
+      check_arg "BE_PORT" $BE_PORT
+  fi
+
+  PRIORITY_NETWORKS=$(echo "${BE_IP}" | awk -F '.' 
'{print$1"."$2"."$3".0/24"}')
+  check_arg "PRIORITY_NETWORKS" $PRIORITY_NETWORKS
+
+  # export be args
+  export MASTER_FE_IP=${FE_MASTER_IP}
+  export CURRENT_BE_IP=${BE_IP}
+  export CURRENT_BE_PORT=${BE_PORT}
+  export PRIORITY_NETWORKS=${PRIORITY_NETWORKS}
 
-    declare -g MASTER_FE_IP BE_HOST_IP BE_HEARTBEAT_PORT
-    MASTER_FE_IP=${feIpArray[1]}
-    doris_note "masterFe = ${MASTER_FE_IP}"
-    BE_HOST_IP=$(echo "${BE_ADDR}" | awk -F ':' '{ sub(/ /, ""); print$1}')
-    BE_HEARTBEAT_PORT=$(echo "${BE_ADDR}" | awk -F ':' '{ sub(/ /, ""); 
print$2}')
-    doris_note "be_addr = ${BE_HOST_IP}:${BE_HEARTBEAT_PORT}"
+  doris_note "MASTER_FE_IP ${MASTER_FE_IP}"
+  doris_note "CURRENT_BE_IP ${CURRENT_BE_IP}"
+  doris_note "CURRENT_BE_PORT ${CURRENT_BE_PORT}"
+  doris_note "PRIORITY_NETWORKS ${PRIORITY_NETWORKS}"
+
+  check_be_status true
 }
 
 # Execute sql script, passed via stdin
@@ -83,32 +172,36 @@ get_doris_args() {
 #    ie: docker_process_sql --database=mydb <my-file.sql
 docker_process_sql() {
     set +e
-    mysql -uroot -P9030 -h${MASTER_FE_IP} --comments "$@" 2>/dev/null
+    mysql -uroot -P9030 -h${MASTER_FE_IP} --comments "$@" 2>&1
 }
 
 check_be_status() {
-    set +e
-    local is_fe_start=false
-    for i in {1..300}; do
-        if [[ $(($i % 20)) == 1 ]]; then
-            doris_warn "start check be status~"
-        fi
-        docker_process_sql <<<"show backends;" | grep 
"[[:space:]]${BE_HOST_IP}[[:space:]]" | grep 
"[[:space:]]${BE_HEARTBEAT_PORT}[[:space:]]" | grep "[[:space:]]true[[:space:]]"
-        be_join_status=$?
-        if [[ "${be_join_status}" == 0 ]]; then
-            doris_note "Verify that BE is registered to FE successfully"
-            is_fe_start=true
-            break
-        else
-            if [[ $(($i % 20)) == 1 ]]; then
-                doris_note "register is failed, wait next~"
-            fi
-        fi
-        sleep 1
-    done
-    if ! [[ $is_fe_start ]]; then
-        doris_error "Failed to register BE to FE!Tried 30 times!Maybe FE Start 
Failed!"
+  set +e
+  for i in {1..300}; do
+    if [[ $1 == true ]]; then
+      docker_process_sql <<<"show frontends" | grep 
"[[:space:]]${MASTER_FE_IP}[[:space:]]"
+    else
+      docker_process_sql <<<"show backends" | grep 
"[[:space:]]${CURRENT_BE_IP}[[:space:]]" | grep 
"[[:space:]]${CURRENT_BE_PORT}[[:space:]]" | grep "[[:space:]]true[[:space:]]"
+    fi
+    be_join_status=$?
+    if [[ "${be_join_status}" == 0 ]]; then
+      if [[ $1 == true ]]; then
+        doris_note "MASTER FE is started!"
+      else
+        doris_note "EntryPoint Check - Verify that BE is registered to FE 
successfully"
+        BE_ALREADY_EXISTS=true
+      fi
+      break
     fi
+    if [[ $(( $i % 20 )) == 1 ]]; then
+      if [[ $1 == true ]]; then
+        doris_note "MASTER FE is not started. retry."
+      else
+        doris_note "BE is not register. retry."
+      fi
+    fi
+    sleep 1
+  done
 }
 
 # usage: docker_process_init_files [file [file [...]]]
@@ -158,10 +251,19 @@ docker_process_init_files() {
     done
 }
 
+# Check whether the passed parameters are empty to avoid subsequent task 
execution failures. At the same time,
+# enumeration checks can be added, such as checking whether a certain 
parameter appears repeatedly, etc.
+check_arg() {
+  if [ -z $2 ]; then
+    doris_error "$1 is null!"
+  fi
+}
+
 _main() {
-    docker_setup_env
+    docker_required_variables_env
     # get init args
     get_doris_args
+    docker_setup_env
     # Start Doris BE
     {
         set +e
@@ -171,6 +273,7 @@ _main() {
     check_be_status
     if [ -z ${DATABASE_ALREADY_EXISTS} ]; then
         # run script
+        sleep 15
         docker_process_init_files /docker-entrypoint-initdb.d/*
     fi
 
diff --git a/docker/runtime/be/resource/init_be.sh 
b/docker/runtime/be/resource/init_be.sh
index ee1d8f9538..fee50b2fe9 100644
--- a/docker/runtime/be/resource/init_be.sh
+++ b/docker/runtime/be/resource/init_be.sh
@@ -55,65 +55,27 @@ _is_sourced() {
 }
 
 docker_setup_env() {
+  sysctl -w vm.max_map_count=2000000
   declare -g DATABASE_ALREADY_EXISTS
   if [ -d "${DORIS_HOME}/be/storage/data" ]; then
     DATABASE_ALREADY_EXISTS='true'
   fi
 }
 
-# Check the variables required for startup
-docker_required_variables_env() {
-  if [[ $FE_SERVERS =~ 
^.+:[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}:[1-6]{0,1}[0-9]{1,4}(,.+:[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}:[1-6]{0,1}[0-9]{1,4})*$
 ]]; then
-    doris_warn "FE_SERVERS" $FE_SERVERS
-  else
-    doris_error "FE_SERVERS rule error!example: 
\$FE_NAME:\$FE_HOST_IP:\$FE_EDIT_LOG_PORT[,\$FE_NAME:\$FE_HOST_IP:\$FE_EDIT_LOG_PORT]..."
-  fi
-  if [[ $BE_ADDR =~ 
^[1-2]{0,1}[0-9]{0,1}[0-9]{1}(\.[1-2]{0,1}[0-9]{0,1}[0-9]{1}){3}:[1-6]{0,1}[0-9]{1,4}$
 ]]; then
-    doris_warn "BE_ADDR" $BE_ADDR
-  else
-    doris_error "BE_ADDR rule error!example: 
\$BE_HOST_IP:\$HEARTBEAT_SERVICE_PORT"
-  fi
-}
-
-get_doris_be_args() {
-  local feServerArray=($(echo "${FE_SERVERS}" | awk '{gsub (/,/," "); print 
$0}'))
-  for i in "${feServerArray[@]}"; do
-    val=${i}
-    val=${val// /}
-    tmpFeId=$(echo "${val}" | awk -F ':' '{ sub(/fe/, ""); sub(/ /, ""); 
print$1}')
-    tmpFeIp=$(echo "${val}" | awk -F ':' '{ sub(/ /, ""); print$2}')
-    tmpFeEditLogPort=$(echo "${val}" | awk -F ':' '{ sub(/ /, ""); print$3}')
-    check_arg "tmpFeIp" $tmpFeIp
-    feIpArray[$tmpFeId]=${tmpFeIp}
-    check_arg "tmpFeEditLogPort" $tmpFeEditLogPort
-    feEditLogPortArray[$tmpFeId]=${tmpFeEditLogPort}
-  done
-
-  declare -g MASTER_FE_IP BE_HOST_IP BE_HEARTBEAT_PORT PRIORITY_NETWORKS
-  MASTER_FE_IP=${feIpArray[1]}
-  check_arg "MASTER_FE_IP" $MASTER_FE_IP
-  BE_HOST_IP=$(echo "${BE_ADDR}" | awk -F ':' '{ sub(/ /, ""); print$1}')
-  check_arg "BE_HOST_IP" $BE_HOST_IP
-  BE_HEARTBEAT_PORT=$(echo "${BE_ADDR}" | awk -F ':' '{ sub(/ /, ""); 
print$2}')
-  check_arg "BE_HEARTBEAT_PORT" $BE_HEARTBEAT_PORT
-
-  PRIORITY_NETWORKS=$(echo "${BE_HOST_IP}" | awk -F '.' 
'{print$1"."$2"."$3".0/24"}')
-  check_arg "priority_networks" $PRIORITY_NETWORKS
-
-  doris_note "feIpArray = ${feIpArray[*]}"
-  doris_note "feEditLogPortArray = ${feEditLogPortArray[*]}"
-  doris_note "masterFe = ${feIpArray[1]}:${feEditLogPortArray[1]}"
-  doris_note "be_addr = ${BE_HOST_IP}:${BE_HEARTBEAT_PORT}"
-  doris_note "priority_networks = ${PRIORITY_NETWORKS}"
-  # wait fe start
-  check_be_status true
-}
-
 add_priority_networks() {
   doris_note "add priority_networks ${1} to ${DORIS_HOME}/be/conf/be.conf"
   echo "priority_networks = ${1}" >>${DORIS_HOME}/be/conf/be.conf
 }
 
+show_be_args(){
+  doris_note "============= init args ================"
+  doris_note "MASTER_FE_IP " ${MASTER_FE_IP}
+  doris_note "CURRENT_BE_IP " ${CURRENT_BE_IP}
+  doris_note "CURRENT_BE_PORT " ${CURRENT_BE_PORT}
+  doris_note "RUN_TYPE " ${RUN_TYPE}
+  doris_note "PRIORITY_NETWORKS " ${PRIORITY_NETWORKS}
+}
+
 # Execute sql script, passed via stdin
 # usage: docker_process_sql sql_script
 docker_process_sql() {
@@ -135,7 +97,7 @@ register_be_to_fe() {
   # check fe status
   local is_fe_start=false
   for i in {1..300}; do
-    docker_process_sql <<<"alter system add backend 
'${BE_HOST_IP}:${BE_HEARTBEAT_PORT}'"
+    docker_process_sql <<<"alter system add backend 
'${CURRENT_BE_IP}:${CURRENT_BE_PORT}'"
     register_be_status=$?
     if [[ $register_be_status == 0 ]]; then
       doris_note "BE successfully registered to FE!"
@@ -162,58 +124,48 @@ register_be_to_fe() {
   fi
 }
 
-# Check whether the passed parameters are empty to avoid subsequent task 
execution failures. At the same time,
-# enumeration checks can be added, such as checking whether a certain 
parameter appears repeatedly, etc.
-check_arg() {
-  if [ -z $2 ]; then
-    doris_error "$1 is null!"
-  fi
-}
-
 check_be_status() {
-  set +e
-  for i in {1..300}; do
-    if [[ $1 == true ]]; then
-      docker_process_sql <<<"show frontends" | grep 
"[[:space:]]${MASTER_FE_IP}[[:space:]]"
-    else
-      docker_process_sql <<<"show backends" | grep 
"[[:space:]]${BE_HOST_IP}[[:space:]]" | grep 
"[[:space:]]${BE_HEARTBEAT_PORT}[[:space:]]"
-    fi
-    be_join_status=$?
-    if [[ "${be_join_status}" == 0 ]]; then
-      if [[ $1 == true ]]; then
-        doris_note "MASTER FE is started!"
-      else
-        doris_note "Init Check - Verify that BE is registered to FE 
successfully"
-        BE_ALREADY_EXISTS=true
-      fi
-      break
-    fi
-    if [[ $(( $i % 20 )) == 1 ]]; then
-      if [[ $1 == true ]]; then
-        doris_note "MASTER FE is not started. retry."
-      else
-        doris_note "BE is not register. retry."
-      fi
+    set +e
+    local is_fe_start=false
+    for i in {1..300}; do
+        if [[ $(($i % 20)) == 1 ]]; then
+            doris_warn "start check be register status~"
+        fi
+        docker_process_sql <<<"show backends;" | grep 
"[[:space:]]${CURRENT_BE_IP}[[:space:]]" | grep 
"[[:space:]]${CURRENT_BE_PORT}[[:space:]]"
+        be_join_status=$?
+        if [[ "${be_join_status}" == 0 ]]; then
+            doris_note "Verify that BE is registered to FE successfully"
+            is_fe_start=true
+            return
+        else
+            if [[ $(($i % 20)) == 1 ]]; then
+                doris_note "register is failed, wait next~"
+            fi
+        fi
+        sleep 1
+    done
+    if [[ ! $is_fe_start ]]; then
+        doris_error "Failed to register BE to FE!Tried 30 times!Maybe FE Start 
Failed!"
     fi
-    sleep 1
-  done
 }
 
-_main() {
-  docker_setup_env
-  docker_required_variables_env
-  get_doris_be_args
 
-  if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
-    add_priority_networks $PRIORITY_NETWORKS
-    node_role_conf
+_main() {
+  if [[ $RUN_TYPE == "K8S" ]]; then
+      start_be.sh
+  else
+      docker_setup_env
+      if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
+        add_priority_networks $PRIORITY_NETWORKS
+        node_role_conf
+      fi
+      show_be_args
+      register_be_to_fe
+      check_be_status
+      doris_note "Ready to start BE!"
+      start_be.sh
+      exec "$@"
   fi
-
-  register_be_to_fe
-  check_be_status
-  doris_note "Ready to start BE!"
-  start_be.sh
-  exec "$@"
 }
 
 if ! _is_sourced; then


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to