| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							| 
									
										
										
										
											2021-12-01 12:46:28 +05:30
										 |  |  | #  Copyright 2021 Collate | 
					
						
							|  |  |  | #  Licensed 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. | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Home Dir | 
					
						
							|  |  |  | base_dir=$(dirname $0)/.. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-03 22:40:42 -07:00
										 |  |  | CATALOG_HOME=$base_dirbase_dir=$(dirname $0)/.. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | CATALOG_HOME=$base_dir | 
					
						
							|  |  |  | PID_DIR=$base_dir/logs | 
					
						
							|  |  |  | LOG_DIR=$base_dir/logs | 
					
						
							|  |  |  | mkdir -p $LOG_DIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ -z $MAX_WAIT_TIME ] && MAX_WAIT_TIME=120 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # OpenMetadata env script | 
					
						
							| 
									
										
										
										
											2021-08-05 10:15:52 +05:30
										 |  |  | . $CATALOG_HOME/conf/openmetadata-env.sh | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | function catalogStart { | 
					
						
							|  |  |  |    catalogStatus -q | 
					
						
							|  |  |  |    if [[ $? -eq 0 ]]; then | 
					
						
							|  |  |  |        rm -f ${PID_FILE} | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |        echo "Starting OpenMetadata" | 
					
						
							| 
									
										
										
										
											2022-09-17 11:35:45 -07:00
										 |  |  |        APP_CLASS="org.openmetadata.service.OpenMetadataApplication" | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |        cd ${CATALOG_HOME} | 
					
						
							|  |  |  |        nohup ${JAVA} ${CATALOG_HEAP_OPTS} ${CATALOG_JVM_PERF_OPTS} ${CATALOG_DEBUG_OPTS} ${CATALOG_GC_LOG_OPTS} ${CATALOG_JMX_OPTS} -cp ${CLASSPATH} "${APP_CLASS}" "server" "$@" 2>>"${ERR_FILE}" 1>>"${OUT_FILE}" & | 
					
						
							|  |  |  |        cd - &> /dev/null | 
					
						
							|  |  |  |        echo $! > ${PID_FILE} | 
					
						
							|  |  |  |        echo $(catalogStatus) | 
					
						
							|  |  |  |    else | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |        echo "OpenMetadata already running with PID: ${PID}" | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |    fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function catalogStop { | 
					
						
							|  |  |  |    catalogStatus -q | 
					
						
							|  |  |  |    if [[ $? -eq 1 ]]; then | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |        echo "Stopping OpenMetadata [${PID}] " | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |        kill -s KILL ${PID} 1>>"${OUT_FILE}" 2>>"${ERR_FILE}" | 
					
						
							|  |  |  |    else | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |        echo "OpenMetadata not running" | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |    fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function catalogStatus { | 
					
						
							|  |  |  |    local verbose=1 | 
					
						
							|  |  |  |    while true; do | 
					
						
							|  |  |  |         case ${1} in | 
					
						
							|  |  |  |             -q) verbose=0; shift;; | 
					
						
							|  |  |  |             *) break;; | 
					
						
							|  |  |  |         esac | 
					
						
							|  |  |  |    done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    getPID | 
					
						
							|  |  |  |    if [[ $? -eq 1 ]] || [[ ${PID} -eq 0 ]]; then | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |      [[ "${verbose}" -eq 1 ]] && echo "OpenMetadata not running." | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |      return 0 | 
					
						
							|  |  |  |    fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    ps -p ${PID} > /dev/null | 
					
						
							|  |  |  |    if [[ $? -eq 0 ]]; then | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |      [[ "${verbose}" -eq 1 ]] && echo "OpenMetadata running with PID=${PID}." | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |      return 1 | 
					
						
							|  |  |  |    else | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |      [[ "${verbose}" -eq 1 ]] && echo "OpenMetadata not running." | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |      return 0 | 
					
						
							|  |  |  |    fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  | # Removes the PID file if OpenMetadata is not running | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | function catalogClean { | 
					
						
							|  |  |  |    catalogStatus -q | 
					
						
							|  |  |  |    if [[ $? -eq 0 ]]; then | 
					
						
							|  |  |  |      rm -f ${PID_FILE} ${OUT_FILE} ${ERR_FILE} | 
					
						
							|  |  |  |      echo "Removed the ${PID_FILE}, ${OUT_FILE} and ${ERR_FILE} files." | 
					
						
							|  |  |  |    else | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  |      echo "Can't clean files. OpenMetadata running with PID=${PID}." | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |    fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-13 00:33:48 -07:00
										 |  |  | # Returns 0 if the OpenMetadata is running and sets the $PID variable. | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | function getPID { | 
					
						
							|  |  |  |    if [ ! -d $PID_DIR ]; then | 
					
						
							|  |  |  |       printf "Can't find pid dir.\n" | 
					
						
							|  |  |  |       exit 1 | 
					
						
							|  |  |  |    fi | 
					
						
							|  |  |  |    if [ ! -f $PID_FILE ]; then | 
					
						
							|  |  |  |      PID=0 | 
					
						
							|  |  |  |      return 1 | 
					
						
							|  |  |  |    fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    PID="$(<$PID_FILE)" | 
					
						
							|  |  |  |    return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Home Dir | 
					
						
							|  |  |  | base_dir=$(dirname $0)/.. | 
					
						
							|  |  |  | cd $base_dir && base_dir=`pwd` && cd - &> /dev/null | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # App name | 
					
						
							|  |  |  | APP_NAME=catalog | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if CATALOG_DIR is not set its a dev env. | 
					
						
							|  |  |  | if [ "x$CATALOG_DIR" != "x" ]; then | 
					
						
							|  |  |  |     CATALOG_HOME=$CATALOG_DIR/$APP_NAME | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |     CATALOG_HOME=$base_dir | 
					
						
							|  |  |  |     PID_DIR=$CATALOG_HOME/logs | 
					
						
							|  |  |  |     LOG_DIR=$CATALOG_HOME/logs | 
					
						
							|  |  |  |     mkdir -p $LOG_DIR | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # CATALOG env script | 
					
						
							| 
									
										
										
										
											2021-08-05 10:15:52 +05:30
										 |  |  | . ${CATALOG_HOME}/conf/openmetadata-env.sh | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | PID=0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ -z $PID_DIR ] && PID_DIR="/var/run/$APP_NAME" | 
					
						
							|  |  |  | [ -z $LOG_DIR ] && LOG_DIR="/var/log/$APP_NAME" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Name of PID, OUT and ERR files | 
					
						
							|  |  |  | PID_FILE="${PID_DIR}/${APP_NAME}.pid" | 
					
						
							|  |  |  | OUT_FILE="${LOG_DIR}/${APP_NAME}.log" | 
					
						
							|  |  |  | ERR_FILE="${LOG_DIR}/${APP_NAME}.err" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CLASSPATH=${CLASSPATH}:/etc/catalog/conf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # classpath addition for release | 
					
						
							|  |  |  | for file in ${CATALOG_HOME}/libs/*.jar; | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  |     CLASSPATH=${CLASSPATH}:${file} | 
					
						
							|  |  |  | done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Which java to use | 
					
						
							|  |  |  | if [[ -z "${JAVA_HOME}" ]]; then | 
					
						
							|  |  |  |   JAVA="java" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   JAVA="${JAVA_HOME}/bin/java" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [[ "x${CATALOG_HEAP_OPTS}" = "x" ]]; then | 
					
						
							|  |  |  |     export CATALOG_HEAP_OPTS="-Xmx2G -Xms2G" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # JVM performance options | 
					
						
							|  |  |  | if [[ -z "${CATALOG_JVM_PERF_OPTS}" ]]; then | 
					
						
							|  |  |  |   CATALOG_JVM_PERF_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # JMX settings | 
					
						
							|  |  |  | if [ -z "$CATALOG_JMX_OPTS" ]; then | 
					
						
							|  |  |  |   CATALOG_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false " | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # JMX port to use | 
					
						
							|  |  |  | if [  $JMX_PORT ]; then | 
					
						
							|  |  |  |   CATALOG_JMX_OPTS="$CATALOG_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT " | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # GC options | 
					
						
							|  |  |  | GC_LOG_FILE_NAME='CATALOG-gc.log' | 
					
						
							|  |  |  | if [ -z "$CATALOG_GC_LOG_OPTS" ]; then | 
					
						
							|  |  |  |   JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') | 
					
						
							|  |  |  |   if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then | 
					
						
							|  |  |  |     CATALOG_GC_LOG_OPTS="-Xlog:gc*:file=$LOG_DIR/$GC_LOG_FILE_NAME:time,tags:filecount=10,filesize=102400" | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     CATALOG_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | option="$1" | 
					
						
							|  |  |  | shift | 
					
						
							|  |  |  | case "${option}" in | 
					
						
							|  |  |  |   start) | 
					
						
							| 
									
										
										
										
											2021-08-05 10:15:52 +05:30
										 |  |  |      conf="$CATALOG_HOME/conf/openmetadata.yaml" | 
					
						
							| 
									
										
										
										
											2021-08-01 14:27:44 -07:00
										 |  |  |      if [[ $# -eq 1 ]]; then conf="${1}"; fi | 
					
						
							|  |  |  |      catalogStart "${conf}" | 
					
						
							|  |  |  |      ;; | 
					
						
							|  |  |  |   stop) | 
					
						
							|  |  |  |      catalogStop | 
					
						
							|  |  |  |      ;; | 
					
						
							|  |  |  |   status) | 
					
						
							|  |  |  |      catalogStatus | 
					
						
							|  |  |  |      ;; | 
					
						
							|  |  |  |   clean) | 
					
						
							|  |  |  |      catalogClean | 
					
						
							|  |  |  |      ;; | 
					
						
							|  |  |  |   *) | 
					
						
							|  |  |  |      echo "Usage: $0 {start|stop|status|clean}" | 
					
						
							|  |  |  |      ;; | 
					
						
							|  |  |  | esac |