openstack-armada-app/upstream/openstack/openstack-ras/openstack-ras/heat-engine-support-workers...

53 lines
2.0 KiB
Diff

---
ocf/heat-engine | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
--- a/ocf/heat-engine
+++ b/ocf/heat-engine
@@ -238,6 +238,24 @@ heat_engine_status() {
fi
}
+# Function to check a process for port usage, as well as children
+check_port() {
+ local port=$1
+ local pid=$2
+
+ local children=`ps -ef | awk -v ppid=$pid '$3 == ppid { print $2}'`
+
+ for p in $pid $children
+ do
+ netstat -punt | grep -s "$port" | grep -s "$p" | grep -qs "ESTABLISHED"
+ if [ $? -eq 0 ]
+ then
+ return 0
+ fi
+ done
+ return 1
+}
+
heat_engine_monitor() {
local rc
local pid
@@ -258,7 +276,7 @@ heat_engine_monitor() {
# We are sure to hit the heat-engine process and not other heat process with the same connection behavior (for example heat-api)
if ocf_is_true "$OCF_RESKEY_zeromq"; then
pid=`cat $OCF_RESKEY_pid`
- engine_db_check=`netstat -punt | grep -s "$OCF_RESKEY_database_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"`
+ engine_db_check=`check_port "$OCF_RESKEY_database_server_port" "$pid"`
rc_db=$?
if [ $rc_db -ne 0 ]; then
ocf_log err "heat-engine is not connected to the database server: $rc_db"
@@ -266,9 +284,9 @@ heat_engine_monitor() {
fi
else
pid=`cat $OCF_RESKEY_pid`
- engine_db_check=`netstat -punt | grep -s "$OCF_RESKEY_database_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"`
+ engine_db_check=`check_port "$OCF_RESKEY_database_server_port" "$pid"`
rc_db=$?
- engine_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"`
+ engine_amqp_check=`check_port "$OCF_RESKEY_amqp_server_port" "$pid"`
rc_amqp=$?
if [ $rc_amqp -ne 0 ] || [ $rc_db -ne 0 ]; then
ocf_log err "Heat Engine is not connected to the AMQP server and/or the database server: AMQP connection test returned $rc_amqp and database connection test returned $rc_db"