155 lines
5.5 KiB
Python
Executable File
155 lines
5.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
#
|
|
# 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.
|
|
import os
|
|
import sys
|
|
sys.path.insert(0, '/usr/hdp/current/atlas-server/bin/')
|
|
|
|
import traceback
|
|
import subprocess
|
|
import atlas_config as mc
|
|
|
|
ATLAS_LOG_OPTS="-Datlas.log.dir=%s -Datlas.log.file=atlas-migration-exporter.log"
|
|
ATLAS_COMMAND_OPTS="-Datlas.home=%s"
|
|
ATLAS_CONFIG_OPTS="-Datlas.conf=%s"
|
|
DEFAULT_JVM_HEAP_OPTS="-Xmx4096m -XX:MaxPermSize=512m"
|
|
DEFAULT_JVM_OPTS="-Dlog4j.configuration=atlas-log4j.xml -Djava.net.preferIPv4Stack=true -server"
|
|
|
|
def main():
|
|
is_setup = (len(sys.argv)>1) and sys.argv[1] is not None and sys.argv[1] == '-setup'
|
|
atlas_home = mc.atlasDir()
|
|
confdir = mc.dirMustExist(mc.confDir(atlas_home))
|
|
mc.executeEnvSh(confdir)
|
|
logdir = mc.dirMustExist(mc.logDir(atlas_home))
|
|
mc.dirMustExist(mc.dataDir(atlas_home))
|
|
|
|
if mc.isCygwin():
|
|
# Pathnames that are passed to JVM must be converted to Windows format.
|
|
jvm_atlas_home = mc.convertCygwinPath(atlas_home)
|
|
jvm_confdir = mc.convertCygwinPath(confdir)
|
|
jvm_logdir = mc.convertCygwinPath(logdir)
|
|
else:
|
|
jvm_atlas_home = atlas_home
|
|
jvm_confdir = confdir
|
|
jvm_logdir = logdir
|
|
|
|
#create sys property for conf dirs
|
|
jvm_opts_list = (ATLAS_LOG_OPTS % (jvm_logdir)).split()
|
|
|
|
cmd_opts = (ATLAS_COMMAND_OPTS % jvm_atlas_home)
|
|
jvm_opts_list.extend(cmd_opts.split())
|
|
|
|
config_opts = (ATLAS_CONFIG_OPTS % jvm_confdir)
|
|
jvm_opts_list.extend(config_opts.split())
|
|
|
|
atlas_server_heap_opts = os.environ.get(mc.ATLAS_SERVER_HEAP, DEFAULT_JVM_HEAP_OPTS)
|
|
jvm_opts_list.extend(atlas_server_heap_opts.split())
|
|
|
|
atlas_server_jvm_opts = os.environ.get(mc.ATLAS_SERVER_OPTS)
|
|
if atlas_server_jvm_opts:
|
|
jvm_opts_list.extend(atlas_server_jvm_opts.split())
|
|
|
|
atlas_jvm_opts = os.environ.get(mc.ATLAS_OPTS, DEFAULT_JVM_OPTS)
|
|
jvm_opts_list.extend(atlas_jvm_opts.split())
|
|
|
|
#expand web app dir
|
|
web_app_dir = mc.webAppDir(atlas_home)
|
|
mc.expandWebApp(atlas_home)
|
|
|
|
p = os.pathsep
|
|
atlas_classpath = os.path.join(os.path.dirname(os.path.realpath(__file__)), ".", "*") + p \
|
|
+ confdir + p \
|
|
+ os.path.join(web_app_dir, "atlas", "WEB-INF", "classes" ) + p \
|
|
+ os.path.join(web_app_dir, "atlas", "WEB-INF", "lib", "*" ) + p \
|
|
+ os.path.join(atlas_home, "libext", "*")
|
|
|
|
is_hbase = mc.is_hbase(confdir)
|
|
|
|
if is_hbase:
|
|
#add hbase-site.xml to classpath
|
|
hbase_conf_dir = mc.hbaseConfDir(atlas_home)
|
|
|
|
if os.path.exists(hbase_conf_dir):
|
|
atlas_classpath = atlas_classpath + p \
|
|
+ hbase_conf_dir
|
|
else:
|
|
if mc.is_hbase(confdir):
|
|
raise Exception("Could not find hbase-site.xml in %s. Please set env var HBASE_CONF_DIR to the hbase client conf dir", hbase_conf_dir)
|
|
|
|
if mc.isCygwin():
|
|
atlas_classpath = mc.convertCygwinPath(atlas_classpath, True)
|
|
|
|
atlas_pid_file = mc.pidFile(atlas_home)
|
|
|
|
if os.path.isfile(atlas_pid_file):
|
|
#Check if process listed in atlas.pid file is still running
|
|
pf = file(atlas_pid_file, 'r')
|
|
pid = pf.read().strip()
|
|
pf.close()
|
|
|
|
if mc.exist_pid((int)(pid)):
|
|
mc.server_already_running(pid)
|
|
else:
|
|
mc.server_pid_not_running(pid)
|
|
|
|
if is_hbase and mc.is_hbase_local(confdir):
|
|
print "configured for local hbase."
|
|
mc.configure_hbase(atlas_home)
|
|
mc.run_hbase_action(mc.hbaseBinDir(atlas_home), "start", hbase_conf_dir, logdir)
|
|
print "hbase started."
|
|
|
|
web_app_path = os.path.join(web_app_dir, "atlas")
|
|
if (mc.isCygwin()):
|
|
web_app_path = mc.convertCygwinPath(web_app_path)
|
|
|
|
start_migration_export(atlas_classpath, atlas_pid_file, jvm_logdir, jvm_opts_list, web_app_path)
|
|
|
|
def start_migration_export(atlas_classpath, atlas_pid_file, jvm_logdir, jvm_opts_list, web_app_path):
|
|
args = []
|
|
args.extend(sys.argv[1:])
|
|
process = java("org.apache.atlas.migration.Exporter", args, atlas_classpath, jvm_opts_list)
|
|
|
|
def java(classname, args, classpath, jvm_opts_list):
|
|
java_home = os.environ.get("JAVA_HOME", None)
|
|
if java_home:
|
|
prg = os.path.join(java_home, "bin", "java")
|
|
else:
|
|
prg = mc.which("java")
|
|
|
|
if prg is None:
|
|
raise EnvironmentError('The java binary could not be found in your path or JAVA_HOME')
|
|
|
|
commandline = [prg]
|
|
commandline.extend(jvm_opts_list)
|
|
commandline.append("-classpath")
|
|
commandline.append(classpath)
|
|
commandline.append(classname)
|
|
commandline.extend(args)
|
|
|
|
p = subprocess.Popen(commandline)
|
|
p.communicate()
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
returncode = main()
|
|
except Exception as e:
|
|
print "Exception: %s " % str(e)
|
|
print traceback.format_exc()
|
|
returncode = -1
|
|
|
|
sys.exit(returncode)
|