You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hcatalog-commits@incubator.apache.org by kh...@apache.org on 2012/06/26 21:51:48 UTC
svn commit: r1354252 - in /incubator/hcatalog/trunk: CHANGES.txt
scripts/hcat_check
Author: khorgath
Date: Tue Jun 26 21:51:48 2012
New Revision: 1354252
URL: http://svn.apache.org/viewvc?rev=1354252&view=rev
Log:
HCATALOG-389 hcat_ping (script to check if HCatalog server is running/reachable) (mithun via khorgath)
Added:
incubator/hcatalog/trunk/scripts/hcat_check (with props)
Modified:
incubator/hcatalog/trunk/CHANGES.txt
Modified: incubator/hcatalog/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/hcatalog/trunk/CHANGES.txt?rev=1354252&r1=1354251&r2=1354252&view=diff
==============================================================================
--- incubator/hcatalog/trunk/CHANGES.txt (original)
+++ incubator/hcatalog/trunk/CHANGES.txt Tue Jun 26 21:51:48 2012
@@ -26,6 +26,8 @@ Trunk (unreleased changes)
HCAT-328 HCatLoader should report its input size so pig can estimate the number of reducers (traviscrawford via gates)
IMPROVEMENTS
+ HCAT-389 hcat_ping (script to check if HCatalog server is running/reachable) (mithun via khorgath)
+
HCAT-432 Add findbugs to build (rohini via avandana)
HCAT-424 Code cleanup of tabs (khorgath)
Added: incubator/hcatalog/trunk/scripts/hcat_check
URL: http://svn.apache.org/viewvc/incubator/hcatalog/trunk/scripts/hcat_check?rev=1354252&view=auto
==============================================================================
--- incubator/hcatalog/trunk/scripts/hcat_check (added)
+++ incubator/hcatalog/trunk/scripts/hcat_check Tue Jun 26 21:51:48 2012
@@ -0,0 +1,153 @@
+#!/usr/bin/env python
+
+# Script to check if hcat_server is reachable.
+# Checks if databases can be enumerated, and databases can be created/dropped.
+
+import sys, os, random, string, logging, logging.handlers
+from optparse import OptionParser
+from decimal import *
+
+def generate_random_id( length=8, charset=(string.ascii_lowercase + string.digits) ):
+ return ''.join(random.choice(charset) for i in range(length))
+
+# PING-DB related "constants".
+HCAT_CHECK_DATABASE_NAME = 'hcat_ping_' + generate_random_id()
+HCAT_CHECK_DATABASE_LOCATION = '/tmp/hcat_ping/' + HCAT_CHECK_DATABASE_NAME
+
+ATTEMPT_CLEANUP=False
+logger = logging.getLogger()
+logLevels = [ logging.ERROR, logging.INFO, logging.DEBUG ]
+THE_CHECK_COMMAND = ""
+
+def check_unique_database_name():
+ global HCAT_CHECK_DATABASE_NAME
+ global HCAT_CHECK_DATABASE_LOCATION
+ # If directory already exists, pick a new database-name/location.
+ while run_command_quietly("hadoop dfs -ls " + HCAT_CHECK_DATABASE_LOCATION) == 0:
+ HCAT_CHECK_DATABASENAME = 'hcat_ping_' + generate_random_id()
+ HCAT_CHECK_DATABASE_LOCATION = '/tmp/hcat_ping/' + HCAT_CHECK_DATABASE_NAME
+
+def run_command_quietly(command):
+ global logger
+ os.putenv("HADOOP_HOME_WARN_SUPPRESS", "true")
+ return_code = os.system(command + " >/dev/null 2>&1")
+ logger.debug("Running command: " + command + " ... returned " + str(return_code))
+ return return_code
+
+def run_hcat_command(command):
+ return run_command_quietly(THE_CHECK_COMMAND + " -e \"" + command + "\" ")
+
+def init_ping_command():
+ global THE_CHECK_COMMAND
+
+ if is_command_in_path("hcat"):
+ THE_CHECK_COMMAND = "hcat"
+ elif is_command_in_path("hive"):
+ THE_CHECK_COMMAND = "hive"
+ else:
+ logger.error("Could not find hcat or hive in $PATH. Can't connect to \
+ HCatalog Server.")
+ sys.exit(2)
+
+def is_command_in_path(command):
+ return run_command_quietly("which " + command) == 0
+
+def list_databases():
+ global logger
+ return_code = run_hcat_command("SHOW DATABASES")
+ if return_code != 0:
+ logger.debug("Could not list-databases.")
+ return False
+
+ return True
+
+def create_database():
+ check_unique_database_name()
+ global ATTEMPT_CLEANUP
+ global logger
+ ATTEMPT_CLEANUP = True # State is changing. Must attempt cleanup.
+
+ create_db = "CREATE DATABASE " + HCAT_CHECK_DATABASE_NAME + " LOCATION '"+ HCAT_CHECK_DATABASE_LOCATION + "'"
+ list_db_dir = "hadoop dfs -ls " + HCAT_CHECK_DATABASE_LOCATION
+
+ if run_hcat_command(create_db) !=0 or run_command_quietly(list_db_dir) != 0:
+ logger.debug("Creating database failed.")
+ return False
+
+ return True
+
+def drop_database(suppressError):
+ global logger
+ drop_db = "DROP DATABASE " + HCAT_CHECK_DATABASE_NAME
+ list_db_dir = "hadoop dfs -ls " + HCAT_CHECK_DATABASE_LOCATION
+
+ if run_hcat_command(drop_db) != 0 or run_command_quietly(list_db_dir) == 0:
+ if not suppressError:
+ logger.debug("Dropping database failed.")
+ return False
+
+ return True
+
+def cleanup():
+ drop_database(True)
+ run_command_quietly( "hadoop dfs -rmr -skipTrash " + HCAT_CHECK_DATABASE_LOCATION )
+
+def parse_options():
+ global logger
+ global logLevels
+
+ streamHandler = logging.StreamHandler()
+ logger.addHandler(streamHandler)
+
+ parser = OptionParser()
+ parser.add_option("-v", "--verbose", dest="verbosity_level",
+ help="Controls verbosity of output to LEVEL (0-2)", metavar="LEVEL", default="1")
+ parser.add_option("-f", "--file", dest="filename",
+ help="Write output to FILE", metavar="FILE")
+ (options, args) = parser.parse_args()
+
+ level = int(Decimal(options.verbosity_level))
+ if not level in range(0,3):
+ print "Invalid verbosity level. Should be in range [0, 2]."
+ sys.exit(3)
+
+ if options.filename:
+ logger.removeHandler(streamHandler)
+ handler = logging.handlers.RotatingFileHandler(options.filename,
+ maxBytes=1024*1024,
+ backupCount=3)
+ logger.addHandler(handler)
+ else:
+ handler = streamHandler
+
+ formatter = logging.Formatter("%(asctime)s %(filename)s:%(lineno)d %(levelname)s - %(message)s")
+ handler.setFormatter( formatter )
+ logger.setLevel( logLevels[level] )
+
+def main(*args):
+ global logger
+ try:
+ try:
+ parse_options()
+ init_ping_command()
+
+ # Not making assumptions on availability of ternary.
+ if list_databases() and create_database() and drop_database(False):
+ logger.info("HCatalog Server is running fine.")
+ return 0 # OK!
+ else:
+ logger.critical("HCatalog Server could not be contacted.")
+ return 2 # Critical!
+ except SystemExit, sysExit:
+ return sysExit
+ except Exception, e:
+ logger.exception("Could not determine if HCatalog Server is running.")
+ return 3 # Unknown Error.
+
+ finally: # Nested try. Pre-2.5 Python won't allow try-except-finally.
+ if ATTEMPT_CLEANUP:
+ cleanup()
+
+if __name__ == '__main__':
+ sys.exit( main(*sys.argv) )
+
Propchange: incubator/hcatalog/trunk/scripts/hcat_check
------------------------------------------------------------------------------
svn:executable = *