You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ve...@apache.org on 2016/09/13 14:39:27 UTC

[1/2] incubator-ranger git commit: RANGER-1173: Improve Ranger database schema import logic and make it more robust

Repository: incubator-ranger
Updated Branches:
  refs/heads/master 1115ca8e9 -> 68541c92a


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/68541c92/security-admin/scripts/db_setup.py
----------------------------------------------------------------------
diff --git a/security-admin/scripts/db_setup.py b/security-admin/scripts/db_setup.py
index a2b26f5..c1efd4a 100644
--- a/security-admin/scripts/db_setup.py
+++ b/security-admin/scripts/db_setup.py
@@ -27,6 +27,7 @@ from datetime import date
 import time
 import datetime
 from time import gmtime, strftime
+import socket
 globalDict = {}
 
 os_name = platform.system()
@@ -41,6 +42,11 @@ if os_name == "LINUX":
 elif os_name == "WINDOWS":
 	RANGER_ADMIN_HOME = os.getenv("RANGER_ADMIN_HOME")
 
+if socket.getfqdn().find('.')>=0:
+	client_host=socket.getfqdn()
+else:
+	client_host=socket.gethostbyaddr(socket.gethostname())[0]
+
 def check_output(query):
 	if os_name == "LINUX":
 		p = subprocess.Popen(shlex.split(query), stdout=subprocess.PIPE)
@@ -105,11 +111,10 @@ class BaseDB(object):
 		log("[I] ---------- Verifying table ----------", "info")
 
 	def import_db_file(self, db_name, db_user, db_password, file_name):
-		log("[I] ---------- Importing db schema ----------", "info")
+		log("[I] Importing DB file :"+file_name, "info")
 
-	def upgrade_db(self, db_name, db_user, db_password, DBVERSION_CATALOG_CREATION):
-		self.import_db_file(db_name, db_user, db_password, DBVERSION_CATALOG_CREATION)
-		log("[I] Baseline DB upgraded successfully", "info")
+	def create_version_history_table(self, db_name, db_user, db_password, DBVERSION_CATALOG_CREATION,TABLE_NAME):
+		log("[I] Creating version and patch history info table", "info")
 
 	def apply_patches(self, db_name, db_user, db_password, PATCHES_PATH):
 		#first get all patches and then apply each patch
@@ -153,6 +158,9 @@ class BaseDB(object):
 	def change_admin_default_password(xa_db_host, db_user, db_password, db_name,userName,oldPassword,newPassword):
 		log("[I] ----------------- Changing Ranger admin default password  ------------", "info")
 
+	def import_core_db_schema(self, db_name, db_user, db_password, file_name,first_table,last_table):
+		log("[I] ---------- Importing Core DB Schema ----------", "info")
+
 class MysqlConf(BaseDB):
 	# Constructor
 	def __init__(self, host,SQL_CONNECTOR_JAR,JAVA_BIN):
@@ -207,6 +215,7 @@ class MysqlConf(BaseDB):
 				sys.exit(1)
 
 	def import_db_file(self, db_name, db_user, db_password, file_name):
+		isImported=False
 		name = basename(file_name)
 		if os.path.isfile(file_name):
 			log("[I] Importing db schema to database " + db_name + " from file: " + name,"info")
@@ -220,13 +229,14 @@ class MysqlConf(BaseDB):
 				jisql_log(query, db_password)
 				ret = subprocess.call(query)
 			if ret == 0:
-				log("[I] "+name + " DB schema imported successfully","info")
+				log("[I] "+name + " file imported successfully","info")
+				isImported=True
 			else:
-				log("[E] "+name + " DB schema import failed!","error")
-				sys.exit(1)
+				log("[E] "+name + " file import failed!","error")
 		else:
 			log("[E] DB schema file " + name+ " not found","error")
 			sys.exit(1)
+		return isImported
 
 	def import_db_patches(self, db_name, db_user, db_password, file_name):
 		name = basename(file_name)
@@ -257,11 +267,11 @@ class MysqlConf(BaseDB):
 						output = check_output(query)
 				else:
 					if os_name == "LINUX":
-						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), user(), now(), user(),'N') ;\"" %(version)
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\"" %(version,client_host,client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(shlex.split(query))
 					elif os_name == "WINDOWS":
-						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), user(), now(), user(),'N') ;\" -c ;" %(version)
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(query)
 					if ret == 0:
@@ -280,25 +290,33 @@ class MysqlConf(BaseDB):
 					if ret == 0:
 						log("[I] "+name + " patch applied","info")
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
 							log("[I] Patch version updated", "info")
 						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
 							log("[E] Updating patch version failed", "error")
 							sys.exit(1)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						log("[E] "+name + " import failed!","error")
@@ -336,11 +354,11 @@ class MysqlConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), user(), now(), user(),'N') ;\"" %(version)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\"" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), user(), now(), user(),'N') ;\" -c ;" %(version)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -360,25 +378,33 @@ class MysqlConf(BaseDB):
 						if ret == 0:
 							log("[I] "+name + " patch applied","info")
 							if os_name == "LINUX":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log("[I] Patch version updated", "info")
 							else:
+								if os_name == "LINUX":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(shlex.split(query))
+								elif os_name == "WINDOWS":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(query)
 								log("[E] Updating patch version failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] "+name + " import failed!","error")
@@ -466,11 +492,11 @@ class MysqlConf(BaseDB):
 								output = check_output(query)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', now(), user(), now(), user(),'N') ;\"" %(version)
+								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', now(), '%s', now(), '%s','N') ;\"" %(version,client_host,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', now(), user(), now(), user(),'N') ;\" -c ;" %(version)
+								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
@@ -489,33 +515,33 @@ class MysqlConf(BaseDB):
 								ret = subprocess.call(get_java_cmd)
 							if ret == 0:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\"" %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								if ret == 0:
 									log ("[I] java patch "+ className +" is applied..","info")
 								else:
 									if os_name == "LINUX":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\"" %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(shlex.split(query))
 									elif os_name == "WINDOWS":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(query)
 									log("[E] java patch "+ className +" failed", "error")
 									sys.exit(1)
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\"" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] applying java patch "+ className +" failed", "error")
@@ -555,11 +581,11 @@ class MysqlConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), user(), now(), user(),'N') ;\"" %(version)
+							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\"" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), user(), now(), user(),'N') ;\" -c ;" %(version)
+							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -578,38 +604,154 @@ class MysqlConf(BaseDB):
 							ret = subprocess.call(get_java_cmd)
 						if ret == 0:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log ("[I] Ranger admin default password change request processed successfully..","info")
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] Ranger admin default password change request failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] Ranger admin default password change request failed", "error")
 							sys.exit(1)
 
+	def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name):
+		name = basename(file_name)
+		if os.path.isfile(file_name):
+			isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+			if isTableExist==False:
+				log("[I] Importing "+table_name+" table schema to database " + db_name + " from file: " + name,"info")
+			while(isTableExist==False):
+				get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+				if os_name == "LINUX":
+					query = get_cmd + " -input %s" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(shlex.split(query))
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -input %s -c ;" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(query)
+				if ret == 0:
+					log("[I] "+name + " file imported successfully","info")
+				else:
+					log("[E] "+name + " file import failed!","error")
+					time.sleep(30)
+				isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+		else:
+			log("[E] Table schema file " + name+ " not found","error")
+			sys.exit(1)
+
+	def import_core_db_schema(self, db_name, db_user, db_password, file_name,first_table,last_table):
+		version = 'CORE_DB_SCHEMA'
+		if os.path.isfile(file_name):
+			get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+			if os_name == "LINUX":
+				query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version)
+			elif os_name == "WINDOWS":
+				query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version)
+			jisql_log(query, db_password)
+			output = check_output(query)
+			if output.strip(version + " |"):
+				log("[I] "+version+" is already imported" ,"info")
+			else:
+				if os_name == "LINUX":
+					query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version)
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version)
+				jisql_log(query, db_password)
+				output = check_output(query)
+				if output.strip(version + " |"):
+					while(output.strip(version + " |")):
+						log("[I] "+ version  +" is being imported by some other process" ,"info")
+						time.sleep(300)
+						jisql_log(query, db_password)
+						output = check_output(query)
+				else:
+					if os_name == "LINUX":
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\"" %(version,client_host,client_host)
+						jisql_log(query, db_password)
+						ret = subprocess.call(shlex.split(query))
+					elif os_name == "WINDOWS":
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
+						jisql_log(query, db_password)
+						ret = subprocess.call(query)
+					if ret != 0:
+						log("[E] "+ version +" import failed", "error")
+						sys.exit(1)
+					isFirstTableExist = self.check_table(db_name, db_user, db_password, first_table)
+					isLastTableExist = self.check_table(db_name, db_user, db_password, last_table)
+					isSchemaCreated=False
+					if isFirstTableExist == True and isLastTableExist == True :
+						isSchemaCreated=True
+					elif isFirstTableExist == True and isLastTableExist == False :
+						while(isLastTableExist==False):
+							log("[I] "+ version  +" is being imported by some other process" ,"info")
+							time.sleep(300)
+							isLastTableExist=self.check_table(db_name, db_user, db_password, last_table)
+							if(isLastTableExist==True):
+								isSchemaCreated=True
+					elif isFirstTableExist == False and isLastTableExist == False :
+						isImported=self.import_db_file(db_name, db_user, db_password, file_name)
+						if(isImported==False):
+							log("[I] "+ version  +" might being imported by some other process" ,"info")
+							time.sleep(300)
+						isLastTableExist=self.check_table(db_name, db_user, db_password, last_table)
+						if(isLastTableExist==True):
+							isSchemaCreated=True
+					if isSchemaCreated == True:
+						if os_name == "LINUX":
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(shlex.split(query))
+						elif os_name == "WINDOWS":
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(query)
+						if ret == 0:
+							log("[I] "+version +" import status has been updated", "info")
+						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
+							log("[E] Updating "+version +" import status failed", "error")
+							sys.exit(1)
+					else:
+						if os_name == "LINUX":
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(shlex.split(query))
+						elif os_name == "WINDOWS":
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(query)
+						log("[E] "+version + " import failed!","error")
+						sys.exit(1)
 
 class OracleConf(BaseDB):
 	# Constructor
@@ -679,6 +821,7 @@ class OracleConf(BaseDB):
 			sys.exit(1)
 
 	def import_db_file(self, db_name, db_user, db_password, file_name):
+		isImported=False
 		name = basename(file_name)
 		if os.path.isfile(file_name):
 			log("[I] Importing script " + db_name + " from file: " + name,"info")
@@ -693,9 +836,13 @@ class OracleConf(BaseDB):
 				ret = subprocess.call(query)
 			if ret == 0:
 				log("[I] "+name + " imported successfully","info")
+				isImported=True
 			else:
 				log("[E] "+name + " import failed!","error")
-				sys.exit(1)
+		else:
+			log("[E] DB schema file " + name+ " not found","error")
+			sys.exit(1)
+		return isImported
 
 	def create_synonym(self,db_name, db_user, db_password,audit_db_user):
 		log("[I] ----------------- Creating Synonym ------------", "info")
@@ -750,11 +897,11 @@ class OracleConf(BaseDB):
 						output = check_output(query)
 				else:
 					if os_name == "LINUX":
-						query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, db_user, db_user)
+						query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, client_host, client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(shlex.split(query))
 					elif os_name == "WINDOWS":
-						query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, db_user, db_user)
+						query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, client_host, client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(query)
 					if ret == 0:
@@ -772,25 +919,33 @@ class OracleConf(BaseDB):
 					if ret == 0:
 						log("[I] "+name + " patch applied","info")
 						if os_name == "LINUX":
-							query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+							query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
 							log("[I] Patch version updated", "info")
 						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
 							log("[E] Updating patch version failed", "error")
 							sys.exit(1)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+							query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						log("[E] "+name + " Import failed!","error")
@@ -828,11 +983,11 @@ class OracleConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd1 + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, db_user, db_user)
+							query = get_cmd1 + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, client_host, client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, db_user, db_user)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, client_host, client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -851,25 +1006,33 @@ class OracleConf(BaseDB):
 						if ret == 0:
 							log("[I] "+name + " patch applied","info")
 							if os_name == "LINUX":
-								query = get_cmd1 + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+								query = get_cmd1 + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version, client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version, client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log("[I] Patch version updated", "info")
 							else:
+								if os_name == "LINUX":
+									query = get_cmd1 + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version, client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(shlex.split(query))
+								elif os_name == "WINDOWS":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version, client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(query)
 								log("[E] Updating patch version failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd1 + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+								query = get_cmd1 + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version, client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version, client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] "+name + " Import failed!","error")
@@ -976,11 +1139,11 @@ class OracleConf(BaseDB):
 								output = check_output(query)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by) values ( X_DB_VERSION_H_SEQ.nextval,'J%s', sysdate, '%s', sysdate, '%s');\"" %(version, db_user, db_user)
+								query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'J%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, client_host, client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by) values ( X_DB_VERSION_H_SEQ.nextval,'J%s', sysdate, '%s', sysdate, '%s');\" -c ;" %(version, db_user, db_user)
+								query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'J%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, client_host, client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
@@ -999,33 +1162,33 @@ class OracleConf(BaseDB):
 								ret = subprocess.call(get_cmd)
 							if ret == 0:
 								if os_name == "LINUX":
-									query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\"" %(version)
+									query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\"" %(version, client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version, client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								if ret == 0:
 									log ("[I] java patch "+ className +" is applied..","info")
 								else:
 									if os_name == "LINUX":
-										query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='J%s' and active='N';\"" %(version)
+										query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\"" %(version, client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(shlex.split(query))
 									elif os_name == "WINDOWS":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version, client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(query)
 									log("[E] java patch "+ className +" failed", "error")
 									sys.exit(1)
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='J%s' and active='N';\"" %(version)
+									query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] applying java patch "+ className +" failed", "error")
@@ -1065,11 +1228,11 @@ class OracleConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s');\"" %(version, db_user, db_user)
+							query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, client_host, client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s');\" -c ;" %(version, db_user, db_user)
+							query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, client_host, client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -1088,38 +1251,155 @@ class OracleConf(BaseDB):
 							ret = subprocess.call(get_java_cmd)
 						if ret == 0:
 							if os_name == "LINUX":
-								query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+								query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log ("[I] Ranger admin default password change request processed successfully..","info")
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+									query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] Ranger admin default password change request failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+								query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] Ranger admin default password change request failed", "error")
 							sys.exit(1)
 
+	def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name):
+		name = basename(file_name)
+		if os.path.isfile(file_name):
+			isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+			if isTableExist==False:
+				log("[I] Importing "+table_name+" table schema from file: " + name,"info")
+			while(isTableExist==False):
+				get_cmd = self.get_jisql_cmd(db_user, db_password)
+				if os_name == "LINUX":
+					query = get_cmd + " -input %s -c \;" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(shlex.split(query))
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -input %s -c ;" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(query)
+				if ret == 0:
+					log("[I] "+name + " file imported successfully","info")
+				else:
+					log("[E] "+name + " file import failed!","error")
+					time.sleep(30)
+				isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+		else:
+			log("[E] Table schema file " + name+ " not found","error")
+			sys.exit(1)
+
+	def import_core_db_schema(self, db_name, db_user, db_password, file_name,first_table,last_table):
+		version = 'CORE_DB_SCHEMA'
+		if os.path.isfile(file_name):
+			get_cmd = self.get_jisql_cmd(db_user, db_password)
+			if os_name == "LINUX":
+				query = get_cmd + " -c \; -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version)
+			elif os_name == "WINDOWS":
+				query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version)
+			jisql_log(query, db_password)
+			output = check_output(query)
+			if output.strip(version + " |"):
+				log("[I] "+version+" is already imported" ,"info")
+			else:
+				if os_name == "LINUX":
+					query = get_cmd + " -c \; -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version)
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version)
+				jisql_log(query, db_password)
+				output = check_output(query)
+				if output.strip(version + " |"):
+					while(output.strip(version + " |")):
+						log("[I] "+ version  +" is being imported by some other process" ,"info")
+						time.sleep(300)
+						jisql_log(query, db_password)
+						output = check_output(query)
+				else:
+					if os_name == "LINUX":
+						query = get_cmd + " -c \; -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\"" %(version, client_host, client_host)
+						jisql_log(query, db_password)
+						ret = subprocess.call(shlex.split(query))
+					elif os_name == "WINDOWS":
+						query = get_cmd + " -query \"insert into x_db_version_h (id,version, inst_at, inst_by, updated_at, updated_by,active) values ( X_DB_VERSION_H_SEQ.nextval,'%s', sysdate, '%s', sysdate, '%s','N');\" -c ;" %(version, client_host, client_host)
+						jisql_log(query, db_password)
+						ret = subprocess.call(query)
+					if ret != 0:
+						log("[E] "+ version +" import failed", "error")
+						sys.exit(1)
+					isFirstTableExist = self.check_table(db_name, db_user, db_password, first_table)
+					isLastTableExist = self.check_table(db_name, db_user, db_password, last_table)
+					isSchemaCreated=False
+					if isFirstTableExist == True and isLastTableExist == True :
+						isSchemaCreated=True
+					elif isFirstTableExist == True and isLastTableExist == False :
+						while(isLastTableExist==False):
+							log("[I] "+ version  +" is being imported by some other process" ,"info")
+							time.sleep(300)
+							isLastTableExist=self.check_table(db_name, db_user, db_password, last_table)
+							if(isLastTableExist==True):
+								isSchemaCreated=True
+					elif isFirstTableExist == False and isLastTableExist == False :
+						isImported=self.import_db_file(db_name, db_user, db_password, file_name)
+						if(isImported==False):
+							log("[I] "+ version  +" might being imported by some other process" ,"info")
+							time.sleep(300)
+						isLastTableExist=self.check_table(db_name, db_user, db_password, last_table)
+						if(isLastTableExist==True):
+							isSchemaCreated=True
+					if isSchemaCreated == True:
+						if os_name == "LINUX":
+							query = get_cmd + " -c \; -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(shlex.split(query))
+						elif os_name == "WINDOWS":
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(query)
+						if ret == 0:
+							log("[I] "+version +" import status has been updated", "info")
+						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
+							log("[E] Updating "+version +" import status failed", "error")
+							sys.exit(1)
+					else:
+						if os_name == "LINUX":
+							query = get_cmd + " -c \; -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(shlex.split(query))
+						elif os_name == "WINDOWS":
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(query)
+						log("[E] "+version + " import failed!","error")
+						sys.exit(1)
+
 class PostgresConf(BaseDB):
 	# Constructor
 	def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
@@ -1154,6 +1434,7 @@ class PostgresConf(BaseDB):
 			sys.exit(1)
 
 	def import_db_file(self, db_name, db_user, db_password, file_name):
+		isImported=False
 		name = basename(file_name)
 		if os.path.isfile(file_name):
 			log("[I] Importing db schema to database " + db_name + " from file: " + name,"info")
@@ -1168,9 +1449,13 @@ class PostgresConf(BaseDB):
 				ret = subprocess.call(query)
 			if ret == 0:
 				log("[I] "+name + " DB schema imported successfully","info")
+				isImported=True
 			else:
 				log("[E] "+name + " DB schema import failed!","error")
-				sys.exit(1)
+		else:
+			log("[E] DB schema file " + name+ " not found","error")
+			sys.exit(1)
+		return isImported
 
 	def grant_audit_db_user(self, audit_db_name , db_user, audit_db_user, db_password, audit_db_password):
 		log("[I] Granting permission to " + audit_db_user, "info")
@@ -1254,11 +1539,11 @@ class PostgresConf(BaseDB):
 						output = check_output(query)
 				else:
 					if os_name == "LINUX":
-						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,db_user,db_user)
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,client_host,client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(shlex.split(query))
 					elif os_name == "WINDOWS":
-						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,db_user,db_user)
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,client_host,client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(query)
 					if ret == 0:
@@ -1276,25 +1561,33 @@ class PostgresConf(BaseDB):
 					if ret == 0:
 						log("[I] "+name + " patch applied","info")
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
 							log("[I] Patch version updated", "info")
 						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
 							log("[E] Updating patch version failed", "error")
 							sys.exit(1)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						log("[E] "+name + " import failed!","error")
@@ -1333,11 +1626,11 @@ class PostgresConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,db_user,db_user)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,db_user,db_user)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -1356,25 +1649,33 @@ class PostgresConf(BaseDB):
 						if ret == 0:
 							log("[I] "+name + " patch applied","info")
 							if os_name == "LINUX":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log("[I] Patch version updated", "info")
 							else:
+								if os_name == "LINUX":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(shlex.split(query))
+								elif os_name == "WINDOWS":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(query)
 								log("[E] Updating patch version failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] "+name + " import failed!","error")
@@ -1465,11 +1766,11 @@ class PostgresConf(BaseDB):
 								output = check_output(query)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,db_user,db_user)
+								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,client_host,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,db_user,db_user)
+								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,client_host,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
@@ -1488,33 +1789,33 @@ class PostgresConf(BaseDB):
 								ret = subprocess.call(get_java_cmd)
 							if ret == 0:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\"" %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								if ret == 0:
 									log ("[I] java patch "+ className +" is applied..","info")
 								else:
 									if os_name == "LINUX":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\"" %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(shlex.split(query))
 									elif os_name == "WINDOWS":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(query)
 									log("[E] java patch "+ className +" failed", "error")
 									sys.exit(1)
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\"" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] applying java patch "+ className +" failed", "error")
@@ -1554,11 +1855,11 @@ class PostgresConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,db_user,db_user)
+							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,db_user,db_user)
+							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\" -c ;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -1577,38 +1878,155 @@ class PostgresConf(BaseDB):
 							ret = subprocess.call(get_java_cmd)
 						if ret == 0:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\"" %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log ("[I] Ranger admin default password change request processed successfully..","info")
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] Ranger admin default password change request failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\"" %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] Ranger admin default password change request failed", "error")
 							sys.exit(1)
 
+	def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name):
+		name = basename(file_name)
+		if os.path.isfile(file_name):
+			isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+			if isTableExist==False:
+				log("[I] Importing "+table_name+" table schema to database " + db_name + " from file: " + name,"info")
+			while(isTableExist==False):
+				get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+				if os_name == "LINUX":
+					query = get_cmd + " -input %s" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(shlex.split(query))
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -input %s -c ;" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(query)
+				if ret == 0:
+					log("[I] "+name + " file imported successfully","info")
+				else:
+					log("[E] "+name + " file import failed!","error")
+					time.sleep(30)
+				isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+		else:
+			log("[E] Table schema file " + name+ " not found","error")
+			sys.exit(1)
+
+	def import_core_db_schema(self, db_name, db_user, db_password, file_name,first_table,last_table):
+		version = 'CORE_DB_SCHEMA'
+		if os.path.isfile(file_name):
+			get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+			if os_name == "LINUX":
+				query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version)
+			elif os_name == "WINDOWS":
+				query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version)
+			jisql_log(query, db_password)
+			output = check_output(query)
+			if output.strip(version + " |"):
+				log("[I] "+version+" is already imported" ,"info")
+			else:
+				if os_name == "LINUX":
+					query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version)
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version)
+				jisql_log(query, db_password)
+				output = check_output(query)
+				if output.strip(version + " |"):
+					while(output.strip(version + " |")):
+						log("[I] "+ version  +" is being imported by some other process" ,"info")
+						time.sleep(300)
+						jisql_log(query, db_password)
+						output = check_output(query)
+				else:
+					if os_name == "LINUX":
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', current_timestamp, '%s', current_timestamp, '%s','N') ;\"" %(version,client_host,client_host)
+						jisql_log(query, db_password)
+						ret = subprocess.call(shlex.split(query))
+					elif os_name == "WINDOWS":
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', now(), '%s', now(), '%s','N') ;\" -c ;" %(version)
+						jisql_log(query, db_password)
+						ret = subprocess.call(query)
+					if ret != 0:
+						log("[E] "+ version +" import failed", "error")
+						sys.exit(1)
+					isFirstTableExist = self.check_table(db_name, db_user, db_password, first_table)
+					isLastTableExist = self.check_table(db_name, db_user, db_password, last_table)
+					isSchemaCreated=False
+					if isFirstTableExist == True and isLastTableExist == True :
+						isSchemaCreated=True
+					elif isFirstTableExist == True and isLastTableExist == False :
+						while(isLastTableExist==False):
+							log("[I] "+ version  +" is being imported by some other process" ,"info")
+							time.sleep(300)
+							isLastTableExist=self.check_table(db_name, db_user, db_password, last_table)
+							if(isLastTableExist==True):
+								isSchemaCreated=True
+					elif isFirstTableExist == False and isLastTableExist == False :
+						isImported=self.import_db_file(db_name, db_user, db_password, file_name)
+						if(isImported==False):
+							log("[I] "+ version  +" might being imported by some other process" ,"info")
+							time.sleep(300)
+						isLastTableExist=self.check_table(db_name, db_user, db_password, last_table)
+						if(isLastTableExist==True):
+							isSchemaCreated=True
+					if isSchemaCreated == True:
+						if os_name == "LINUX":
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(shlex.split(query))
+						elif os_name == "WINDOWS":
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(query)
+						if ret == 0:
+							log("[I] "+version +" import status has been updated", "info")
+						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
+							log("[E] Updating "+version +" import status failed", "error")
+							sys.exit(1)
+					else:
+						if os_name == "LINUX":
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\"" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(shlex.split(query))
+						elif os_name == "WINDOWS":
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+							jisql_log(query, db_password)
+							ret = subprocess.call(query)
+						log("[E] "+version + " import failed!","error")
+						sys.exit(1)
+
 class SqlServerConf(BaseDB):
 	# Constructor
 	def __init__(self, host, SQL_CONNECTOR_JAR, JAVA_BIN):
@@ -1643,6 +2061,7 @@ class SqlServerConf(BaseDB):
 			sys.exit(1)
 
 	def import_db_file(self, db_name, db_user, db_password, file_name):
+		isImported=False
 		name = basename(file_name)
 		if os.path.isfile(file_name):
 			log("[I] Importing db schema to database " + db_name + " from file: " + name,"info")
@@ -1657,9 +2076,13 @@ class SqlServerConf(BaseDB):
 				ret = subprocess.call(query)
 			if ret == 0:
 				log("[I] "+name + " DB schema imported successfully","info")
+				isImported=True
 			else:
 				log("[E] "+name + " DB Schema import failed!","error")
-				sys.exit(1)
+		else:
+			log("[E] DB schema file " + name+ " not found","error")
+			sys.exit(1)
+		return isImported
 
 	def check_table(self, db_name, db_user, db_password, TABLE_NAME):
 		get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
@@ -1721,11 +2144,11 @@ class SqlServerConf(BaseDB):
 						output = check_output(query)
 				else:
 					if os_name == "LINUX":
-						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,db_user,db_user)
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,client_host,client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(shlex.split(query))
 					elif os_name == "WINDOWS":
-						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,db_user,db_user)
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 						jisql_log(query, db_password)
 						ret = subprocess.call(query)
 					if ret == 0:
@@ -1743,25 +2166,33 @@ class SqlServerConf(BaseDB):
 					if ret == 0:
 						log("[I] "+name + " patch applied","info")
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c \;"  %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
 							log("[I] Patch version updated", "info")
 						else:
+							if os_name == "LINUX":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(shlex.split(query))
+							elif os_name == "WINDOWS":
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+								jisql_log(query, db_password)
+								ret = subprocess.call(query)
 							log("[E] Updating patch version failed", "error")
 							sys.exit(1)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c \;"  %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+							query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						log("[E] "+name + " import failed!","error")
@@ -1800,11 +2231,11 @@ class SqlServerConf(BaseDB):
 					else:
 						get_cmd2 = self.get_jisql_cmd(db_user, db_password, audit_db_name)
 						if os_name == "LINUX":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,db_user,db_user)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,db_user,db_user)
+							query = get_cmd1 + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -1822,25 +2253,33 @@ class SqlServerConf(BaseDB):
 						if ret == 0:
 							log("[I] "+name + " patch applied","info")
 							if os_name == "LINUX":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c \;"  %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log("[I] Patch version updated", "info")
 							else:
+								if os_name == "LINUX":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(shlex.split(query))
+								elif os_name == "WINDOWS":
+									query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
+									jisql_log(query, db_password)
+									ret = subprocess.call(query)
 								log("[E] Updating patch version failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c \;"  %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd1 + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] "+name + " import failed!","error")
@@ -1915,11 +2354,11 @@ class SqlServerConf(BaseDB):
 								output = check_output(query)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,db_user,db_user)
+								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,client_host,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,db_user,db_user)
+								query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('J%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
@@ -1938,33 +2377,33 @@ class SqlServerConf(BaseDB):
 								ret = subprocess.call(get_java_cmd)
 							if ret == 0:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\" -c \;"  %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								if ret == 0:
 									log ("[I] java patch "+ className +" is applied..","info")
 								else:
 									if os_name == "LINUX":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c \;"  %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(shlex.split(query))
 									elif os_name == "WINDOWS":
-										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+										query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 										jisql_log(query, db_password)
 										ret = subprocess.call(query)
 									log("[E] java patch "+ className +" failed", "error")
 									sys.exit(1)
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c \;"  %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='J%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] applying java patch "+ className +" failed", "error")
@@ -2004,11 +2443,11 @@ class SqlServerConf(BaseDB):
 							output = check_output(query)
 					else:
 						if os_name == "LINUX":
-							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,db_user,db_user)
+							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(shlex.split(query))
 						elif os_name == "WINDOWS":
-							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,db_user,db_user)
+							query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c ;" %(version,client_host,client_host)
 							jisql_log(query, db_password)
 							ret = subprocess.call(query)
 						if ret == 0:
@@ -2027,38 +2466,155 @@ class SqlServerConf(BaseDB):
 							ret = subprocess.call(get_java_cmd)
 						if ret == 0:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c \;"  %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"update x_db_version_h set active='Y' where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							if ret == 0:
 								log ("[I] Ranger admin default password change request processed successfully..","info")
 							else:
 								if os_name == "LINUX":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c \;"  %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(shlex.split(query))
 								elif os_name == "WINDOWS":
-									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+									query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 									jisql_log(query, db_password)
 									ret = subprocess.call(query)
 								log("[E] Ranger admin default password change request failed", "error")
 								sys.exit(1)
 						else:
 							if os_name == "LINUX":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c \;"  %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c \;"  %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(shlex.split(query))
 							elif os_name == "WINDOWS":
-								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N';\" -c ;" %(version)
+								query = get_cmd + " -query \"delete from x_db_version_h where version='%s' and active='N' and updated_by='%s';\" -c ;" %(version,client_host)
 								jisql_log(query, db_password)
 								ret = subprocess.call(query)
 							log("[E] Ranger admin default password change request failed", "error")
 							sys.exit(1)
 
+	def create_version_history_table(self, db_name, db_user, db_password, file_name,table_name):
+		name = basename(file_name)
+		if os.path.isfile(file_name):
+			isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+			if isTableExist==False:
+				log("[I] Importing "+table_name+" table schema to database " + db_name + " from file: " + name,"info")
+			while(isTableExist==False):
+				get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+				if os_name == "LINUX":
+					query = get_cmd + " -input %s" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(shlex.split(query))
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -input %s" %file_name
+					jisql_log(query, db_password)
+					ret = subprocess.call(query)
+				if ret == 0:
+					log("[I] "+name + " file imported successfully","info")
+				else:
+					log("[E] "+name + " file import failed!","error")
+					time.sleep(30)
+				isTableExist=self.check_table(db_name, db_user, db_password, table_name)
+		else:
+			log("[E] Table schema file " + name+ " not found","error")
+			sys.exit(1)
+
+	def import_core_db_schema(self, db_name, db_user, db_password, file_name,first_table,last_table):
+		version = 'CORE_DB_SCHEMA'
+		if os.path.isfile(file_name):
+			get_cmd = self.get_jisql_cmd(db_user, db_password, db_name)
+			if os_name == "LINUX":
+				query = get_cmd + " -c \; -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\"" %(version)
+			elif os_name == "WINDOWS":
+				query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'Y';\" -c ;" %(version)
+			jisql_log(query, db_password)
+			output = check_output(query)
+			if output.strip(version + " |"):
+				log("[I] "+version+" is already imported" ,"info")
+			else:
+				if os_name == "LINUX":
+					query = get_cmd + " -c \; -query \"select version from x_db_version_h where version = '%s' and active = 'N';\"" %(version)
+				elif os_name == "WINDOWS":
+					query = get_cmd + " -query \"select version from x_db_version_h where version = '%s' and active = 'N';\" -c ;" %(version)
+				jisql_log(query, db_password)
+				output = check_output(query)
+				if output.strip(version + " |"):
+					while(output.strip(version + " |")):
+						log("[I] "+ version  +" is being imported by some other process" ,"info")
+						time.sleep(300)
+						jisql_log(query, db_password)
+						output = check_output(query)
+				else:
+					if os_name == "LINUX":
+						query = get_cmd + " -query \"insert into x_db_version_h (version, inst_at, inst_by, updated_at, updated_by,active) values ('%s', GETDATE(), '%s', GETDATE(), '%s','N') ;\" -c \;" %(version,client_host,client_host)
+						jisql_log(query, db_password)
+						ret = subprocess.call(shlex.split(query))
+					elif os_name == "WINDOWS":
+						query = get_cmd + " -query \"insert

<TRUNCATED>


[2/2] incubator-ranger git commit: RANGER-1173: Improve Ranger database schema import logic and make it more robust

Posted by ve...@apache.org.
RANGER-1173: Improve Ranger database schema import logic and make it more robust

Signed-off-by: Velmurugan Periasamy <ve...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/68541c92
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/68541c92
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/68541c92

Branch: refs/heads/master
Commit: 68541c92afe3b6500ef28b3a6ee01149a337ad20
Parents: 1115ca8
Author: pradeep agrawal <pr...@freestoneinfotech.com>
Authored: Tue Sep 13 14:39:51 2016 +0530
Committer: Velmurugan Periasamy <ve...@apache.org>
Committed: Tue Sep 13 10:38:22 2016 -0400

----------------------------------------------------------------------
 .../db/oracle/create_dbversion_catalog.sql      |    1 +
 security-admin/db/oracle/xa_core_db_oracle.sql  |    1 -
 security-admin/scripts/db_setup.py              | 1023 +++++++++++++++---
 3 files changed, 858 insertions(+), 167 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/68541c92/security-admin/db/oracle/create_dbversion_catalog.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/oracle/create_dbversion_catalog.sql b/security-admin/db/oracle/create_dbversion_catalog.sql
index 0017748..5820cc8 100644
--- a/security-admin/db/oracle/create_dbversion_catalog.sql
+++ b/security-admin/db/oracle/create_dbversion_catalog.sql
@@ -22,4 +22,5 @@ create table X_DB_VERSION_H  (
     updated_by VARCHAR(256) NOT NULL,
 	active VARCHAR(1) DEFAULT 'Y'
 );
+CREATE SEQUENCE X_DB_VERSION_H_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 commit;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/68541c92/security-admin/db/oracle/xa_core_db_oracle.sql
----------------------------------------------------------------------
diff --git a/security-admin/db/oracle/xa_core_db_oracle.sql b/security-admin/db/oracle/xa_core_db_oracle.sql
index 2ede810..d377482 100644
--- a/security-admin/db/oracle/xa_core_db_oracle.sql
+++ b/security-admin/db/oracle/xa_core_db_oracle.sql
@@ -31,7 +31,6 @@ CREATE SEQUENCE X_PORTAL_USER_ROLE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYC
 CREATE SEQUENCE X_RESOURCE_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 CREATE SEQUENCE X_TRX_LOG_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 CREATE SEQUENCE X_USER_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
-CREATE SEQUENCE X_DB_VERSION_H_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 CREATE SEQUENCE V_TRX_LOG_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 CREATE SEQUENCE XA_ACCESS_AUDIT_SEQ START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
 commit;