You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/06/29 00:27:08 UTC
git commit: allowing app catalog db to start when app catalog thrift
server starts - AIRAVATA-1303
Repository: airavata
Updated Branches:
refs/heads/master 3868d50cd -> 77970e0c4
allowing app catalog db to start when app catalog thrift server starts - AIRAVATA-1303
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/77970e0c
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/77970e0c
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/77970e0c
Branch: refs/heads/master
Commit: 77970e0c429ccfccfa5a3fb1467e4a82dbb54c00
Parents: 3868d50
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Sat Jun 28 18:27:02 2014 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
Committed: Sat Jun 28 18:27:02 2014 -0400
----------------------------------------------------------------------
.../api/server/ApplicationCatalogServer.java | 2 +
.../api/server/util/AppCatalogInitUtil.java | 166 +++++++++++++++++++
.../api/server/util/DatabaseCreator.java | 6 +-
.../api/server/util/RegistryInitUtil.java | 2 +-
.../src/main/resources/appcatalog-derby.sql | 2 +-
.../src/main/resources/appcatalog-mysql.sql | 2 +-
.../server/src/main/assembly/bin-assembly.xml | 9 +
7 files changed, 183 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/ApplicationCatalogServer.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/ApplicationCatalogServer.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/ApplicationCatalogServer.java
index 905fb3a..9267bdc 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/ApplicationCatalogServer.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/ApplicationCatalogServer.java
@@ -25,6 +25,7 @@ import java.net.InetSocketAddress;
import org.apache.airavata.api.appcatalog.ApplicationCatalogAPI;
import org.apache.airavata.api.server.handler.ApplicationCatalogHandler;
+import org.apache.airavata.api.server.util.AppCatalogInitUtil;
import org.apache.airavata.api.server.util.Constants;
import org.apache.airavata.common.utils.AiravataUtils;
import org.apache.airavata.common.utils.IServer;
@@ -56,6 +57,7 @@ public class ApplicationCatalogServer implements IServer{
public void StartAiravataServer(ApplicationCatalogAPI.Processor<ApplicationCatalogAPI.Iface> appCatalogServerHandler) throws AiravataSystemException {
try {
AiravataUtils.setExecutionAsServer();
+ AppCatalogInitUtil.initializeDB();
final int serverPort = Integer.parseInt(ServerSettings.getSetting(Constants.APP_CATALOG_SERVER_PORT,"8931"));
final String serverHost = ServerSettings.getSetting(Constants.APP_CATALOG_SERVER_HOST, null);
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/AppCatalogInitUtil.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/AppCatalogInitUtil.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/AppCatalogInitUtil.java
new file mode 100644
index 0000000..870898b
--- /dev/null
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/AppCatalogInitUtil.java
@@ -0,0 +1,166 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+
+package org.apache.airavata.api.server.util;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.persistance.registry.jpa.ResourceType;
+import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
+import org.apache.airavata.persistance.registry.jpa.resources.GatewayResource;
+import org.apache.airavata.persistance.registry.jpa.resources.ProjectResource;
+import org.apache.airavata.persistance.registry.jpa.resources.UserResource;
+import org.apache.airavata.persistance.registry.jpa.resources.WorkerResource;
+import org.apache.derby.drda.NetworkServerControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.URI;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class AppCatalogInitUtil {
+ public static final String COMPUTE_RESOURCE = "GATEWAY_PROFILE";
+ private static final Logger logger = LoggerFactory.getLogger(AppCatalogInitUtil.class);
+ public static final String APPCATALOG_JDBC_DRIVER = "appcatalog.jdbc.driver";
+ public static final String APPCATALOG_JDBC_URL = "appcatalog.jdbc.url";
+ public static final String APPCATALOG_JDBC_USER = "appcatalog.jdbc.user";
+ public static final String APPCATALOG_JDBC_PASSWORD = "appcatalog.jdbc.password";
+ public static final String START_DERBY_ENABLE = "start.derby.server.mode";
+ public static final String DERBY_SERVER_MODE_SYS_PROPERTY = "derby.drda.startNetworkServer";
+ private static NetworkServerControl server;
+ private static JdbcStorage db;
+ private static String jdbcURl;
+ private static String jdbcDriver;
+ private static String jdbcUser;
+ private static String jdbcPassword;
+
+
+ public static void initializeDB() {
+// System.setProperty("appcatalog.initialize.state", "0");
+ try{
+ jdbcDriver = ServerSettings.getSetting(APPCATALOG_JDBC_DRIVER);
+ jdbcURl = ServerSettings.getSetting(APPCATALOG_JDBC_URL);
+ jdbcUser = ServerSettings.getSetting(APPCATALOG_JDBC_USER);
+ jdbcPassword = ServerSettings.getSetting(APPCATALOG_JDBC_PASSWORD);
+ jdbcURl = jdbcURl + "?" + "user=" + jdbcUser + "&" + "password=" + jdbcPassword;
+ } catch (ApplicationSettingsException e) {
+ logger.error("Unable to read airavata server properties", e.getMessage());
+ }
+
+ if (getDBType(jdbcURl).equals("derby") && isDerbyStartEnabled()) {
+ startDerbyInServerMode();
+ }
+ db = new JdbcStorage(10, 50, jdbcURl, jdbcDriver, true);
+
+ Connection conn = null;
+ try {
+ conn = db.connect();
+ if (!DatabaseCreator.isDatabaseStructureCreated(COMPUTE_RESOURCE, conn)) {
+ DatabaseCreator.createRegistryDatabase("database_scripts/appcatalog", conn);
+ logger.info("New Database created for App Catalog");
+ } else {
+ logger.info("Database already created for App Catalog!");
+ }
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ throw new RuntimeException("Database failure", e);
+ } finally {
+ db.closeConnection(conn);
+ try {
+ if(conn != null){
+ if (!conn.getAutoCommit()) {
+ conn.commit();
+ }
+ conn.close();
+ }
+ } catch (SQLException e) {
+ logger.error("Error while closing database connection...", e.getMessage(), e);
+ }
+ }
+// System.setProperty("appcatalog.initialize.state", "1");
+ }
+
+ public static String getDBType(String jdbcUrl){
+ try{
+ String cleanURI = jdbcUrl.substring(5);
+ URI uri = URI.create(cleanURI);
+ return uri.getScheme();
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ return null;
+ }
+ }
+
+ public static boolean isDerbyStartEnabled(){
+ try {
+ String s = ServerSettings.getSetting(START_DERBY_ENABLE);
+ if("true".equals(s)){
+ return true;
+ }
+ } catch (ApplicationSettingsException e) {
+ logger.error("Unable to read airavata server properties", e.getMessage(), e);
+ return false;
+ }
+ return false;
+ }
+
+ public static void startDerbyInServerMode() {
+ try {
+ System.setProperty(DERBY_SERVER_MODE_SYS_PROPERTY, "true");
+ server = new NetworkServerControl(InetAddress.getByName("0.0.0.0"),
+ getPort(jdbcURl),
+ jdbcUser, jdbcPassword);
+ java.io.PrintWriter consoleWriter = new java.io.PrintWriter(System.out, true);
+ server.start(consoleWriter);
+ } catch (IOException e) {
+ logger.error("Unable to start Apache derby in the server mode! Check whether " +
+ "specified port is available");
+ } catch (Exception e) {
+ logger.error("Unable to start Apache derby in the server mode! Check whether " +
+ "specified port is available");
+ }
+ }
+
+ public static void stopDerbyInServerMode() {
+ System.setProperty(DERBY_SERVER_MODE_SYS_PROPERTY, "false");
+ if (server!=null){
+ try {
+ server.shutdown();
+ } catch (Exception e) {
+ logger.error("Error when stopping the derby server : "+e.getLocalizedMessage());
+ }
+ }
+ }
+
+ public static int getPort(String jdbcURL){
+ try{
+ String cleanURI = jdbcURL.substring(5);
+ URI uri = URI.create(cleanURI);
+ return uri.getPort();
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ return -1;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/DatabaseCreator.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/DatabaseCreator.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/DatabaseCreator.java
index b227246..4833f2c 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/DatabaseCreator.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/DatabaseCreator.java
@@ -58,8 +58,8 @@ public class DatabaseCreator {
*
* @throws Exception
*/
- public static void createRegistryDatabase(Connection conn) throws Exception {
- createDatabase("database_scripts/registry", conn);
+ public static void createRegistryDatabase(String prefix, Connection conn) throws Exception {
+ createDatabase(prefix, conn);
}
@@ -175,7 +175,7 @@ public class DatabaseCreator {
return checkType(databaseProductName);
}
} catch (SQLException e) {
- String msg = "Failed to create Airavatadatabase." + e.getMessage();
+ String msg = "Failed to create Airavata database." + e.getMessage();
log.error(msg, e);
throw new Exception(msg, e);
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
index 70000ab..91e43c8 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/util/RegistryInitUtil.java
@@ -78,7 +78,7 @@ public class RegistryInitUtil {
try {
conn = db.connect();
if (!DatabaseCreator.isDatabaseStructureCreated(CONFIGURATION_TABLE, conn)) {
- DatabaseCreator.createRegistryDatabase(conn);
+ DatabaseCreator.createRegistryDatabase("database_scripts/registry", conn);
logger.info("New Database created for Registry");
} else {
logger.info("Database already created for Registry!");
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-derby.sql
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-derby.sql b/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-derby.sql
index 2ad6f14..cbf2bcc 100644
--- a/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-derby.sql
+++ b/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-derby.sql
@@ -158,7 +158,7 @@ CREATE TABLE APPLICATION_DEPLOYMENT
APPLICATION_DESC VARCHAR(255),
ENV_MODULE_LOAD_CMD VARCHAR(255),
PRIMARY KEY(DEPLOYMENT_ID),
- FOREIGN KEY (COMPUTE_HOSTID) REFERENCES COMPUTE_RESOURCE(RESOURCE_ID) ON DELETE CASCADE
+ FOREIGN KEY (COMPUTE_HOSTID) REFERENCES COMPUTE_RESOURCE(RESOURCE_ID) ON DELETE CASCADE,
FOREIGN KEY (APP_MODULE_ID) REFERENCES APPLICATION_MODULE(MODULE_ID) ON DELETE CASCADE
);
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-mysql.sql
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-mysql.sql b/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-mysql.sql
index 49d9f2a..74fdf50 100644
--- a/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-mysql.sql
+++ b/modules/app-catalog/app-catalog-data/src/main/resources/appcatalog-mysql.sql
@@ -159,7 +159,7 @@ CREATE TABLE APPLICATION_DEPLOYMENT
ENV_MODULE_LOAD_CMD VARCHAR(255),
MODULE_LOAD_STRING VARCHAR(255),
PRIMARY KEY(DEPLOYMENT_ID),
- FOREIGN KEY (COMPUTE_HOSTID) REFERENCES COMPUTE_RESOURCE(RESOURCE_ID) ON DELETE CASCADE
+ FOREIGN KEY (COMPUTE_HOSTID) REFERENCES COMPUTE_RESOURCE(RESOURCE_ID) ON DELETE CASCADE,
FOREIGN KEY (APP_MODULE_ID) REFERENCES APPLICATION_MODULE(MODULE_ID) ON DELETE CASCADE
);
http://git-wip-us.apache.org/repos/asf/airavata/blob/77970e0c/modules/distribution/server/src/main/assembly/bin-assembly.xml
----------------------------------------------------------------------
diff --git a/modules/distribution/server/src/main/assembly/bin-assembly.xml b/modules/distribution/server/src/main/assembly/bin-assembly.xml
index b6c5aa7..8a51725 100644
--- a/modules/distribution/server/src/main/assembly/bin-assembly.xml
+++ b/modules/distribution/server/src/main/assembly/bin-assembly.xml
@@ -82,6 +82,15 @@
</includes>
</fileSet>
<fileSet>
+ <directory>../../app-catalog/app-catalog-data/src/main/resources
+ </directory>
+ <outputDirectory>bin/database_scripts
+ </outputDirectory>
+ <includes>
+ <include>*sql*</include>
+ </includes>
+ </fileSet>
+ <fileSet>
<directory>src/main/resources/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>777</fileMode>