yagagagaga commented on code in PR #41070:
URL: https://github.com/apache/doris/pull/41070#discussion_r1768676013
##########
tools/fdb/fdb_ctl.sh:
##########
@@ -135,37 +135,94 @@ get_fdb_mode() {
# Function to calculate number of processes
calculate_process_numbers() {
- # local memory_gb=$1
- local cpu_cores=$2
+ local memory_limit_gb=$1
+ local cpu_cores_limit=$2
- local min_processes=1
local data_dir_count
# Convert comma-separated DATA_DIRS into an array
IFS=',' read -r -a DATA_DIR_ARRAY <<<"${DATA_DIRS}"
data_dir_count=${#DATA_DIR_ARRAY[@]}
- # Stateless processes (at least 1, up to 1/4 of CPU cores)
- local stateless_processes=$((cpu_cores / 4))
- [[ ${stateless_processes} -lt ${min_processes} ]] &&
stateless_processes=${min_processes}
+ # Parse the ratio input
+ IFS=':' read -r num_storage num_stateless num_log
<<<"${STORAGE_STATELESS_LOG_RATIO}"
- # Storage processes (must be a multiple of the number of data directories)
- local storage_processes=$((cpu_cores / 4))
- [[ ${storage_processes} -lt ${data_dir_count} ]] &&
storage_processes=${data_dir_count}
- storage_processes=$(((storage_processes / data_dir_count) *
data_dir_count))
+ # Initialize process counts
+ local storage_processes=0 # Storage processes
+ local stateless_processes=0 # Stateless processes
+ local log_processes=0 # Log processes
- # Transaction processes (must be a multiple of the number of data
directories)
- local transaction_processes=$((cpu_cores / 8))
- [[ ${transaction_processes} -lt ${min_processes} ]] &&
transaction_processes=${min_processes}
- [[ ${transaction_processes} -lt ${data_dir_count} ]] &&
transaction_processes=${data_dir_count}
- transaction_processes=$(((transaction_processes / data_dir_count) *
data_dir_count))
+ local storage_process_num_limit=$((STORAGE_PROCESSES_NUM_PER_SSD *
data_dir_count))
+ local log_process_num_limit=$((LOG_PROCESSES_NUM_PER_SSD * data_dir_count))
+
+ if [[ "#${MEDIUM_TYPE}" = "#HDD" ]]; then
+ storage_process_num_limit=$((STORAGE_PROCESSES_NUM_PER_HDD *
data_dir_count))
+ log_process_num_limit=$((LOG_PROCESSES_NUM_PER_HDD * data_dir_count))
+ fi
+
+ # Find maximum number of processes while maintaining the specified ratio
+ while true; do
+ # Calculate process counts based on the ratio
+ storage_processes=$((storage_processes + num_storage))
+ stateless_processes=$((storage_processes * num_stateless /
num_storage))
+ log_processes=$((storage_processes * num_log / num_storage))
+
+ # Calculate total CPUs used
+ local total_cpu_used=$((storage_processes + stateless_processes +
log_processes))
+
+ # Check memory constraint
+ local total_memory_used=$(((MEMORY_STORAGE_GB * storage_processes) +
(MEMORY_STATELESS_GB * stateless_processes) + (MEMORY_LOG_GB * log_processes)))
+
+ # Check datadir limits
+ if ((storage_processes > storage_process_num_limit || log_processes >
log_process_num_limit)); then
+ break
+ fi
+
+ # Check overall constraints
+ if ((total_memory_used <= memory_limit_gb && total_cpu_used <=
cpu_cores_limit)); then
+ continue
+ else
+ # If constraints are violated, revert back
+ storage_processes=$((storage_processes - num_storage))
+ stateless_processes=$((storage_processes * num_stateless /
num_storage))
+ log_processes=$((storage_processes * num_log / num_storage))
+ break
+ fi
+ done
# Return the values
- echo "${stateless_processes} ${storage_processes} ${transaction_processes}"
+ echo "${stateless_processes} ${storage_processes} ${log_processes}"
+}
+
+function check_vars() {
+ IFS=',' read -r -a IPS <<<"${FDB_CLUSTER_IPS}"
+
+ command -v ping || echo "ping is not available to check machines are
available, please install ping."
Review Comment:
`wget` and `lsof` may not have been installed, so they also need to be
checked
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]