blob: c7ee157455cb7088c4fd3ff80ed231ddacda9da0 [file] [log] [blame]
#!/bin/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.
# Function to get the git branch and commit hash
function get_git_info() {
local git_info
git_info=$(git log -1 --pretty=format:"%h")
local git_branch
git_branch=$(git rev-parse --abbrev-ref HEAD)
echo "${git_branch}_${git_info}"
}
# OS detection
OS=$(uname -s)
# Function to check if process exists - OS specific implementations
function process_exists() {
local check_pid=$1
if [ "$OS" = "Darwin" ]; then
ps -p "${check_pid}" >/dev/null
else
[[ -e /proc/${check_pid} ]]
fi
}
# Function to send signal to process - OS specific implementations
function send_signal_to_pid() {
local target_pid=$1
local signal=$2
if [ "$OS" = "Darwin" ]; then
kill "-${signal}" "${target_pid}"
else
kill -s "${signal}" "${target_pid}"
fi
}
# Function to wait for a process with specific name to exit
function wait_for_process() {
local process_name=$1
local timeout=$2
local start_time
start_time=$(date +%s)
local end_time=$((start_time + timeout))
local continue_outer_loop=false
while [[ $(date +%s) -lt ${end_time} ]]; do
continue_outer_loop=false
local proc_pid
for proc_pid in $(pgrep -x "${process_name}"); do
if process_exists "${proc_pid}"; then
sleep 0.1
continue_outer_loop=true
break
fi
done
[[ $continue_outer_loop == true ]] && continue
return 0
done
echo "Timeout waiting for process ${process_name} to exit."
return 1
}
# Function to wait for a process with specific PID to exit
function wait_for_process_pid() {
local wait_pid=$1
local timeout=$2
local start_time
start_time=$(date +%s)
local end_time=$((start_time + timeout))
while [[ $(date +%s) -lt ${end_time} ]]; do
if ! process_exists "${wait_pid}"; then
return 0
fi
sleep 0.1
done
echo "Timeout waiting for process with PID ${wait_pid} to exit."
return 1
}
# Function to send a signal to a process
function send_signal() {
local process_name=$1
local pids
pids=$(pgrep -x "${process_name}") || true
local signal=$2
if [[ -n "${pids}" ]]; then
local proc_pid
for proc_pid in ${pids}; do
if process_exists "${proc_pid}"; then
send_signal_to_pid "${proc_pid}" "${signal}"
fi
done
fi
}
# Function to exit with error if a process with the given PID is running
exit_if_process_is_not_running() {
local check_pid="$1"
if kill -0 "$check_pid" 2>/dev/null; then
echo "Process with PID $check_pid is running."
return 0
else
echo "Error: Process with PID $check_pid is not running."
exit 1
fi
}
# Exit hook for profile.sh
function on_exit_profile() {
# Gracefully stop the server
send_signal "iggy-server" "KILL"
send_signal "iggy-bench" "KILL"
send_signal "flamegraph" "KILL"
send_signal "perf" "KILL"
}
# Exit hook for run-benches.sh
function on_exit_bench() {
send_signal "iggy-server" "KILL"
# Use exact match for iggy-bench to avoid killing iggy-bench-dashboard
pids=$(pgrep -x "iggy-bench") || true
if [[ -n "${pids}" ]]; then
local bench_pid
for bench_pid in ${pids}; do
if process_exists "${bench_pid}"; then
send_signal_to_pid "${bench_pid}" "KILL"
fi
done
fi
}