You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by wl...@apache.org on 2017/03/08 06:17:36 UTC
incubator-hawq git commit: HAWQ-1362. Add RPS start/stop script in
HAWQ start/stop script
Repository: incubator-hawq
Updated Branches:
refs/heads/master 5c512afc4 -> 1ad7dcdf4
HAWQ-1362. Add RPS start/stop script in HAWQ start/stop script
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/1ad7dcdf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/1ad7dcdf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/1ad7dcdf
Branch: refs/heads/master
Commit: 1ad7dcdf442220e427a6dd6d5bd93391a0a03582
Parents: 5c512af
Author: stanlyxiang <st...@gmail.com>
Authored: Tue Mar 7 18:02:20 2017 +0800
Committer: Wen Lin <wl...@pivotal.io>
Committed: Wed Mar 8 14:09:15 2017 +0800
----------------------------------------------------------------------
ranger-plugin/Makefile | 2 +-
ranger-plugin/conf/rps.properties | 8 +++++-
ranger-plugin/scripts/rps.sh | 2 +-
tools/bin/hawq_ctl | 51 ++++++++++++++++++++++++++++++++++
tools/bin/hawqstate | 42 +++++++++++++++++++++++++++-
5 files changed, 101 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1ad7dcdf/ranger-plugin/Makefile
----------------------------------------------------------------------
diff --git a/ranger-plugin/Makefile b/ranger-plugin/Makefile
index 48ba32f..735a473 100644
--- a/ranger-plugin/Makefile
+++ b/ranger-plugin/Makefile
@@ -30,7 +30,7 @@ ifeq ($(enable_rps), yes)
all:
ifdef MAVEN
$(MAVEN) $(MVN_OPTS) clean
- $(MAVEN) $(MVN_OPTS) packag
+ $(MAVEN) $(MVN_OPTS) package
$(MAVEN) $(MVN_OPTS) install
else
@$(missing) mvn $< $(MVN_OPTS) clean
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1ad7dcdf/ranger-plugin/conf/rps.properties
----------------------------------------------------------------------
diff --git a/ranger-plugin/conf/rps.properties b/ranger-plugin/conf/rps.properties
index 60545c1..a08a9f2 100644
--- a/ranger-plugin/conf/rps.properties
+++ b/ranger-plugin/conf/rps.properties
@@ -29,4 +29,10 @@ RPS_SHUTDOWN_PORT=8405
RANGER_HAWQ_INSTANCE=hawq
# version of the software
-RPS_VERSION=${project.version}
\ No newline at end of file
+RPS_VERSION=${project.version}
+
+# catalina home path of Tomcat/6.0.x for Ranger Plugin Service
+SYS_CATALINA_HOME=
+
+# use SYS_CATALINA_HOME in default and use /usr/lib/bigtop-tomcat/ if SYS_CATALINA_HOME not set.
+CATALINA_HOME=${SYS_CATALINA_HOME:-/usr/lib/bigtop-tomcat}
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1ad7dcdf/ranger-plugin/scripts/rps.sh
----------------------------------------------------------------------
diff --git a/ranger-plugin/scripts/rps.sh b/ranger-plugin/scripts/rps.sh
index 476d0d6..cc63af0 100755
--- a/ranger-plugin/scripts/rps.sh
+++ b/ranger-plugin/scripts/rps.sh
@@ -32,7 +32,7 @@ BASEDIR=$( dirname ${CWDIR} )
# read properties from the file
source ${BASEDIR}/etc/rps.properties
-export CATALINA_HOME=/usr/lib/bigtop-tomcat
+export CATALINA_HOME
export CATALINA_BASE=${BASEDIR}/plugin-service
export CATALINA_PID=${CATALINA_BASE}/work/rps.pid
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1ad7dcdf/tools/bin/hawq_ctl
----------------------------------------------------------------------
diff --git a/tools/bin/hawq_ctl b/tools/bin/hawq_ctl
index 81296d7..5a9697c 100755
--- a/tools/bin/hawq_ctl
+++ b/tools/bin/hawq_ctl
@@ -513,6 +513,7 @@ class HawqStart:
self.ignore_bad_hosts = opts.ignore_bad_hosts
self._get_config()
+ self.hawq_acl_type = self.check_hawq_acl_type()
def _get_config(self):
logger.info("Gathering information and validating the environment...")
@@ -544,6 +545,11 @@ class HawqStart:
logger.info("No standby host configured")
self.standby_host_name = ''
+ def check_hawq_acl_type(self):
+ if 'hawq_acl_type' in self.hawq_dict and self.hawq_dict['hawq_acl_type'].lower() == 'ranger':
+ return "ranger"
+ return "standalone"
+
def _check_recovery_start(self):
cmd = "%s; %s/bin/pg_controldata %s |grep 'Database cluster state';" % (source_hawq_env, self.GPHOME, self.master_data_directory)
result, stdout, stderr = remote_ssh_output(cmd, self.master_host_name, '')
@@ -684,6 +690,8 @@ class HawqStart:
def _start_all_nodes(self):
logger.info("Start all the nodes in hawq cluster")
+ if self.hawq_acl_type == 'ranger':
+ self.start_rps()
if self.standby_host_name.lower() not in ('', 'none'):
logger.info("Starting standby master '%s'" % self.standby_host_name)
check_return_code(self.start_standby(), logger, "Standby master start failed, exit",
@@ -729,8 +737,20 @@ class HawqStart:
logger.info("Segments started successfully")
return node_init.return_flag
+ def _start_rps(self):
+ logger.info("Start ranger plugin service")
+ cmd_str = "%s/ranger/bin/rps.sh start" % (self.GPHOME)
+ result = remote_ssh(cmd_str, self.master_host_name, self.user)
+ return result
+
+ def start_rps(self):
+ check_return_code(self._start_rps(), logger, \
+ "Ranger plugin service start failed, exit", "Ranger plugin service started successfully")
+
def run(self):
if self.node_type == "master":
+ if self.hawq_acl_type == 'ranger':
+ self.start_rps()
check_return_code(self.start_master(), logger, \
"Master start failed, exit", "Master started successfully")
elif self.node_type == "standby":
@@ -774,6 +794,7 @@ class HawqStop:
self.conn = None
self._get_config()
self.ignore_bad_hosts = opts.ignore_bad_hosts
+ self.hawq_acl_type = self.check_hawq_acl_type()
def _get_config(self):
check_items = ('hawq_master_address_host', 'hawq_master_address_port',
@@ -803,6 +824,22 @@ class HawqStop:
logger.info("No standby host configured")
self.standby_host_name = ''
+ def check_hawq_acl_type(self):
+ try:
+ dburl = dbconn.DbURL(port=self.master_port, username=self.user, dbname='template1')
+ conn = dbconn.connect(dburl, True)
+ query = "select name, setting from pg_catalog.pg_settings where name='hawq_acl_type';"
+ rows = dbconn.execSQL(conn, query)
+ conn.close()
+ except DatabaseError, ex:
+ logger.error("Failed to connect to database, this script can only be run when the database is up")
+ sys.exit(1)
+
+ for row in rows:
+ if row[1].lower() == 'ranger':
+ return "ranger"
+ return "standalone"
+
def _stop_master_checks(self):
try:
total_connections = 0
@@ -924,6 +961,8 @@ class HawqStop:
logger.error("Standby master %s failed" % self.stop_action)
else:
logger.info("Standby master %s successfully" % self.stop_action_past)
+ if self.hawq_acl_type == 'ranger':
+ self.stop_rps()
# Execute segment stop command on each node.
segments_return_flag = self._stopAllSegments()
@@ -999,10 +1038,22 @@ class HawqStop:
logger.info("Segments %s successfully" % self.stop_action_past)
return total_return_flag
+ def _stop_rps(self):
+ cmd_str = "%s/ranger/bin/rps.sh stop" % (self.GPHOME)
+ result = remote_ssh(cmd_str, self.master_host_name, self.user)
+ return result
+
+ def stop_rps(self):
+ logger.info("Stop Ranger plugin service")
+ check_return_code(self._stop_rps(), logger, \
+ "Ranger plugin service stop failed, exit", "Ranger plugin service stopped successfully")
+
def run(self):
if self.node_type == "master":
check_return_code(self._stop_master(), logger, \
"Master %s failed, exit" % self.stop_action, "Master %s successfully" % self.stop_action_past)
+ if self.hawq_acl_type == 'ranger':
+ self.stop_rps()
elif self.node_type == "standby":
if self.standby_host_name.lower() not in ('', 'none'):
check_return_code(self._stop_standby(), logger, \
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1ad7dcdf/tools/bin/hawqstate
----------------------------------------------------------------------
diff --git a/tools/bin/hawqstate b/tools/bin/hawqstate
index d9e41d3..7dd1f4f 100755
--- a/tools/bin/hawqstate
+++ b/tools/bin/hawqstate
@@ -18,6 +18,8 @@
import os
import sys
+import re
+import commands
from optparse import Option, OptionParser
from hawqpylib.hawqlib import HawqXMLParser, parse_hosts_file, check_file_exist_list
from gppylib.db import dbconn
@@ -53,6 +55,38 @@ def check_status(status_value):
status_tag = 'Unknown'
return status_tag
+def get_guc_value(guc):
+ try:
+ master_host_name = hawq_site.hawq_dict['hawq_master_address_host']
+ master_port_num = hawq_site.hawq_dict['hawq_master_address_port']
+ dburl = dbconn.DbURL(hostname=master_host_name, port=master_port_num, dbname='template1')
+ conn = dbconn.connect(dburl, True)
+ query = "select name, setting from pg_catalog.pg_settings where name='%s';" % guc
+ rows = dbconn.execSQL(conn, query)
+ conn.close()
+ except DatabaseError, ex:
+ print "Failed to connect to database, this script can only be run when the database is up."
+ sys.exit(1)
+ for row in rows:
+ if row[0] == guc:
+ return row[1]
+
+def check_rps_status():
+ hawq_rps_address_host = get_guc_value("hawq_rps_address_host")
+ hawq_rps_address_port = get_guc_value("hawq_rps_address_port")
+ hawq_rps_address_suffix = get_guc_value("hawq_rps_address_suffix")
+ params = ["curl --connect-timeout 2 http://", hawq_rps_address_host.strip(), ":", hawq_rps_address_port.strip(), "/", hawq_rps_address_suffix.strip(), "/version"]
+ check_cmd = ''.join(params)
+ status, output = commands.getstatusoutput(check_cmd)
+ pattern1 = re.compile("\"version\":\"\d\.\d\.\d\.\d\"")
+ pattern2 = re.compile("Connection refused")
+ if pattern1.search(output):
+ status = 'Active'
+ elif pattern2.search(output):
+ status = 'Down'
+ else:
+ status = 'Unknown'
+ return status
def show_brief_status(hawq_site, segment_list, standby_host):
try:
@@ -92,7 +126,7 @@ def show_brief_status(hawq_site, segment_list, standby_host):
seg_pid_file_path = hawq_site.hawq_dict['hawq_segment_directory'] + "/postmaster.pid"
total_seg_pid_file_found = len(check_file_exist_list(seg_pid_file_path, segment_list, '' ))
total_seg_pid_file_miss = total_seg_num - total_seg_pid_file_found
- logger.info("-HAWQ instance status summary")
+ logger.info("- HAWQ instance status summary")
logger.info("-----------------------------------------------------")
logger.info("- Master instance = %s" % master_status)
if 'hawq_standby_address_host' in hawq_site.hawq_dict:
@@ -101,6 +135,12 @@ def show_brief_status(hawq_site, segment_list, standby_host):
else:
logger.info("- No Standby master defined ")
logger.info("- Total segment instance count from config file = %s"% total_seg_num)
+ if 'hawq_acl_type' in hawq_site.hawq_dict:
+ hawq_acl_type = hawq_site.hawq_dict['hawq_acl_type']
+ logger.info("- Current HAWQ acl type = %s" % hawq_acl_type)
+ if hawq_acl_type == "ranger":
+ hawq_rps_status = check_rps_status()
+ logger.info("- HAWQ Ranger plugin service state = %s" % hawq_rps_status)
logger.info("----------------------------------------------------- ")
logger.info("- Segment Status ")
logger.info("----------------------------------------------------- ")