Move aurora-scheduler properties to airavata-server.properties, AND detect leading aurora scheduler
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/01f80443 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/01f80443 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/01f80443 Branch: refs/heads/develop Commit: 01f804433e0745aca8c5e9f8fd48fb3efd33b25e Parents: c6e96ca Author: Gourav Shenoy <[email protected]> Authored: Wed Nov 2 17:50:48 2016 -0400 Committer: Gourav Shenoy <[email protected]> Committed: Wed Nov 2 17:50:48 2016 -0400 ---------------------------------------------------------------------- modules/cloud/aurora-client/pom.xml | 9 +-- .../client/AuroraSchedulerClientFactory.java | 45 +++++++++-- .../cloud/aurora/client/AuroraThriftClient.java | 28 +++---- .../aurora/client/bean/GetJobsResponseBean.java | 10 +++ .../cloud/aurora/sample/AuroraClientSample.java | 80 ++++++++------------ .../aurora/util/AuroraThriftClientUtil.java | 69 +++++++++++++---- .../airavata/cloud/aurora/util/Constants.java | 5 +- .../main/resources/aurora-scheduler.properties | 4 +- .../airavata/common/utils/ServerSettings.java | 26 +++++++ .../main/resources/airavata-server.properties | 9 +++ .../gfac/impl/task/AuroraJobSubmission.java | 14 ++-- .../gfac/monitor/cloud/AuroraJobMonitor.java | 2 +- 12 files changed, 203 insertions(+), 98 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/pom.xml ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/pom.xml b/modules/cloud/aurora-client/pom.xml index 20f8f7c..f8c41a4 100644 --- a/modules/cloud/aurora-client/pom.xml +++ b/modules/cloud/aurora-client/pom.xml @@ -32,7 +32,6 @@ <artifactId>aurora-client</artifactId> <packaging>jar</packaging> <name>Thrift client for Apache Aurora</name> - <version>0.17-SNAPSHOT</version> <url>http://airavata.apache.org/</url> <dependencies> @@ -47,10 +46,10 @@ <version>${json.version}</version> </dependency> <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>${commons.io.version}</version> - </dependency> + <groupId>org.apache.airavata</groupId> + <artifactId>airavata-commons</artifactId> + <version>${project.version}</version> + </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraSchedulerClientFactory.java ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraSchedulerClientFactory.java b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraSchedulerClientFactory.java index 643b8d7..1a5d3fa 100644 --- a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraSchedulerClientFactory.java +++ b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraSchedulerClientFactory.java @@ -36,31 +36,60 @@ public class AuroraSchedulerClientFactory { /** The Constant logger. */ private final static Logger logger = LoggerFactory.getLogger(AuroraSchedulerClientFactory.class); + /** * Creates a new AuroraSchedulerClient object. * * @param connectionUrl the connection url + * @param connectionTimeout the connection timeout * @return the client * @throws Exception the exception */ - public static ReadOnlyScheduler.Client createReadOnlySchedulerClient(String connectionUrl) throws Exception { + public static ReadOnlyScheduler.Client createReadOnlySchedulerClient(String connectionUrl, int connectionTimeout) throws Exception { try { - TTransport transport = new THttpClient(connectionUrl); - transport.open(); - TProtocol protocol = new TJSONProtocol(transport); - return new ReadOnlyScheduler.Client(protocol); + return new ReadOnlyScheduler.Client( + getTProtocol(connectionUrl, connectionTimeout)); + } catch(Exception ex) { + logger.error(ex.getMessage(), ex); + throw ex; + } + } + + /** + * Creates a new AuroraSchedulerClient object. + * + * @param connectionUrl the connection url + * @param connectionTimeout the connection timeout + * @return the client + * @throws Exception the exception + */ + public static AuroraSchedulerManager.Client createSchedulerManagerClient(String connectionUrl, int connectionTimeout) throws Exception { + try { + return new AuroraSchedulerManager.Client( + getTProtocol(connectionUrl, connectionTimeout)); } catch(Exception ex) { logger.error(ex.getMessage(), ex); throw ex; } } - public static AuroraSchedulerManager.Client createSchedulerManagerClient(String connectionUrl) throws Exception { + /** + * Gets the t protocol. + * + * @param connectionUrl the connection url + * @param connectionTimeout the connection timeout + * @return the t protocol + * @throws Exception the exception + */ + private static TProtocol getTProtocol(String connectionUrl, int connectionTimeout) throws Exception { try { - TTransport transport = new THttpClient(connectionUrl); + THttpClient client = new THttpClient(connectionUrl); + client.setConnectTimeout(connectionTimeout); + + TTransport transport = client; transport.open(); TProtocol protocol = new TJSONProtocol(transport); - return new AuroraSchedulerManager.Client(protocol); + return protocol; } catch(Exception ex) { logger.error(ex.getMessage(), ex); throw ex; http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraThriftClient.java ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraThriftClient.java b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraThriftClient.java index 0e0b36e..977479b 100644 --- a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraThriftClient.java +++ b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/AuroraThriftClient.java @@ -21,7 +21,6 @@ package org.apache.airavata.cloud.aurora.client; import java.text.MessageFormat; import java.util.HashSet; -import java.util.Properties; import java.util.Set; import org.apache.airavata.cloud.aurora.client.bean.GetJobsResponseBean; @@ -36,10 +35,10 @@ import org.apache.airavata.cloud.aurora.client.sdk.JobKey; import org.apache.airavata.cloud.aurora.client.sdk.ReadOnlyScheduler; import org.apache.airavata.cloud.aurora.client.sdk.Response; import org.apache.airavata.cloud.aurora.client.sdk.TaskQuery; -import org.apache.airavata.cloud.aurora.sample.AuroraClientSample; import org.apache.airavata.cloud.aurora.util.AuroraThriftClientUtil; import org.apache.airavata.cloud.aurora.util.Constants; import org.apache.airavata.cloud.aurora.util.ResponseResultType; +import org.apache.airavata.common.utils.ServerSettings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,9 +50,6 @@ public class AuroraThriftClient { /** The Constant logger. */ private final static Logger logger = LoggerFactory.getLogger(AuroraThriftClient.class); - /** The properties. */ - private static Properties properties = new Properties(); - /** The read only scheduler client. */ private ReadOnlyScheduler.Client readOnlySchedulerClient = null; @@ -71,23 +67,29 @@ public class AuroraThriftClient { /** * Gets the aurora thrift client. * - * @param auroraSchedulerPropFile the aurora scheduler prop file * @return the aurora thrift client * @throws Exception the exception */ - public static AuroraThriftClient getAuroraThriftClient(String auroraSchedulerPropFile) throws Exception { + public static AuroraThriftClient getAuroraThriftClient() throws Exception { try { if(thriftClient == null) { thriftClient = new AuroraThriftClient(); // construct connection url for scheduler - properties.load(AuroraClientSample.class.getClassLoader().getResourceAsStream(auroraSchedulerPropFile)); - String auroraHost = properties.getProperty(Constants.AURORA_SCHEDULER_HOST); - String auroraPort = properties.getProperty(Constants.AURORA_SCHEDULER_PORT); - String connectionUrl = MessageFormat.format(Constants.AURORA_SCHEDULER_CONNECTION_URL, auroraHost, auroraPort); + String auroraHosts = ServerSettings.getAuroraSchedulerHosts(); + Integer connectTimeout = ServerSettings.getAuroraSchedulerTimeout(); - thriftClient.readOnlySchedulerClient = AuroraSchedulerClientFactory.createReadOnlySchedulerClient(connectionUrl); - thriftClient.auroraSchedulerManagerClient = AuroraSchedulerClientFactory.createSchedulerManagerClient(connectionUrl); + // check reachable scheduler host + for(String auroraHost : auroraHosts.split(",")) { + String hostname = auroraHost.split(":")[0]; + String port = auroraHost.split(":")[1]; + String connectionUrl = MessageFormat.format(Constants.AURORA_SCHEDULER_CONNECTION_URL, hostname, port); + + if(AuroraThriftClientUtil.isSchedulerHostReachable(connectionUrl, connectTimeout)) { + thriftClient.readOnlySchedulerClient = AuroraSchedulerClientFactory.createReadOnlySchedulerClient(connectionUrl, connectTimeout); + thriftClient.auroraSchedulerManagerClient = AuroraSchedulerClientFactory.createSchedulerManagerClient(connectionUrl, connectTimeout); + } + } } } catch(Exception ex) { logger.error(ex.getMessage(), ex); http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/bean/GetJobsResponseBean.java ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/bean/GetJobsResponseBean.java b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/bean/GetJobsResponseBean.java index 6ab822b..71786a0 100644 --- a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/bean/GetJobsResponseBean.java +++ b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/client/bean/GetJobsResponseBean.java @@ -29,6 +29,16 @@ public class GetJobsResponseBean extends ResponseBean { /** The job configs. */ private Set<JobConfigBean> jobConfigs; + + /** + * Instantiates a new gets the jobs response bean. + * + * @param responseBean the response bean + */ + public GetJobsResponseBean(ResponseBean responseBean) { + this.setResponseCode(responseBean.getResponseCode()); + this.setServerInfo(responseBean.getServerInfo()); + } /** * Gets the job configs. http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/sample/AuroraClientSample.java ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/sample/AuroraClientSample.java b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/sample/AuroraClientSample.java index 3f29969..10cac08 100644 --- a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/sample/AuroraClientSample.java +++ b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/sample/AuroraClientSample.java @@ -19,15 +19,13 @@ */ package org.apache.airavata.cloud.aurora.sample; -import java.text.MessageFormat; import java.util.HashSet; import java.util.LinkedHashSet; -import java.util.Properties; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; -import org.apache.airavata.cloud.aurora.client.AuroraSchedulerClientFactory; import org.apache.airavata.cloud.aurora.client.AuroraThriftClient; +import org.apache.airavata.cloud.aurora.client.bean.GetJobsResponseBean; import org.apache.airavata.cloud.aurora.client.bean.IdentityBean; import org.apache.airavata.cloud.aurora.client.bean.JobConfigBean; import org.apache.airavata.cloud.aurora.client.bean.JobKeyBean; @@ -35,16 +33,7 @@ import org.apache.airavata.cloud.aurora.client.bean.ProcessBean; import org.apache.airavata.cloud.aurora.client.bean.ResourceBean; import org.apache.airavata.cloud.aurora.client.bean.ResponseBean; import org.apache.airavata.cloud.aurora.client.bean.TaskConfigBean; -import org.apache.airavata.cloud.aurora.client.sdk.ExecutorConfig; -import org.apache.airavata.cloud.aurora.client.sdk.GetJobsResult; -import org.apache.airavata.cloud.aurora.client.sdk.Identity; -import org.apache.airavata.cloud.aurora.client.sdk.JobConfiguration; -import org.apache.airavata.cloud.aurora.client.sdk.JobKey; -import org.apache.airavata.cloud.aurora.client.sdk.ReadOnlyScheduler; -import org.apache.airavata.cloud.aurora.client.sdk.Response; -import org.apache.airavata.cloud.aurora.client.sdk.TaskConfig; import org.apache.airavata.cloud.aurora.util.AuroraThriftClientUtil; -import org.apache.airavata.cloud.aurora.util.Constants; import org.apache.thrift.TException; /** @@ -52,35 +41,35 @@ import org.apache.thrift.TException; */ public class AuroraClientSample { - /** The aurora scheduler client. */ - private static ReadOnlyScheduler.Client auroraSchedulerClient; - - /** The properties. */ - private static Properties properties = new Properties(); - /** * Gets the job summary. * * @param client the client * @return the job summary + * @throws Exception */ - public static void getJobSummary(ReadOnlyScheduler.Client client) { + public static void getRunningJobsList(String ownerRole) throws Exception { try { - Response response = client.getJobs("centos"); + AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(); + ResponseBean response = client.getJobList(ownerRole); System.out.println("Response status: " + response.getResponseCode().name()); - if(response.getResult().isSetGetJobsResult()) { - GetJobsResult result = response.getResult().getGetJobsResult(); + if(response instanceof GetJobsResponseBean) { + GetJobsResponseBean result = (GetJobsResponseBean) response; System.out.println(result); - Set<JobConfiguration> jobConfigs = result.getConfigs(); - for(JobConfiguration jobConfig : jobConfigs) { + + Set<JobConfigBean> jobConfigs = result.getJobConfigs(); + for(JobConfigBean jobConfig : jobConfigs) { System.out.println(jobConfig); - JobKey jobKey = jobConfig.getKey(); - Identity owner = jobConfig.getOwner(); - TaskConfig taskConfig = jobConfig.getTaskConfig(); - ExecutorConfig exeConfig = taskConfig.getExecutorConfig(); + JobKeyBean jobKey = jobConfig.getJob(); + IdentityBean owner = jobConfig.getOwner(); + TaskConfigBean taskConfig = jobConfig.getTaskConfig(); + Set<ProcessBean> processes = taskConfig.getProcesses(); System.out.println("\n**** JOB CONFIG ****"); - System.out.println("\t # instanceCount: " + jobConfig.getInstanceCount()); + System.out.println("\t # cluster: " + jobConfig.getCluster()); + System.out.println("\t # instanceCount: " + jobConfig.getInstances()); + System.out.println("\t # isService: " + jobConfig.isService()); + System.out.println("\t\t # priority: " + jobConfig.getPriority()); System.out.println("\t >> Job Key <<"); System.out.println("\t\t # name: " + jobKey.getName()); @@ -91,15 +80,17 @@ public class AuroraClientSample { System.out.println("\t\t # owner: " + owner.getUser()); System.out.println("\t >> Task Config <<"); - System.out.println("\t\t # numCPUs: " + taskConfig.getNumCpus()); - System.out.println("\t\t # diskMb: " + taskConfig.getDiskMb()); - System.out.println("\t\t # ramMb: " + taskConfig.getRamMb()); - System.out.println("\t\t # priority: " + taskConfig.getPriority()); + System.out.println("\t\t >> Resources <<"); + System.out.println("\t\t\t # numCPUs: " + taskConfig.getResources().getNumCpus()); + System.out.println("\t\t\t # diskMb: " + taskConfig.getResources().getDiskMb()); + System.out.println("\t\t\t # ramMb: " + taskConfig.getResources().getRamMb()); - - System.out.println("\t >> Executor Config <<"); - System.out.println("\t\t # name: " + exeConfig.getName()); - System.out.println("\t\t # data: " + exeConfig.getData()); + System.out.println("\t\t >> Processes <<"); + for(ProcessBean process : processes) { + System.out.println("\t\t\t ***** PROCESS *****"); + System.out.println("\t\t\t # name: " + process.getName()); + System.out.println("\t\t\t # cmdline: " + process.getCmdLine()); + } } } @@ -126,7 +117,7 @@ public class AuroraClientSample { String executorConfigJson = AuroraThriftClientUtil.getExecutorConfigJson(jobConfig); System.out.println(executorConfigJson); - AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(Constants.AURORA_SCHEDULER_PROP_FILE); + AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(); ResponseBean response = client.createJob(jobConfig); System.out.println(response); } @@ -156,14 +147,14 @@ public class AuroraClientSample { String executorConfigJson = AuroraThriftClientUtil.getExecutorConfigJson(jobConfig); System.out.println(executorConfigJson); - AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(Constants.AURORA_SCHEDULER_PROP_FILE); + AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(); ResponseBean response = client.createJob(jobConfig); System.out.println(response); } public static void killTasks(String jobName) throws Exception { JobKeyBean jobKey = new JobKeyBean("devel", "centos", jobName); - AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(Constants.AURORA_SCHEDULER_PROP_FILE); + AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(); ResponseBean response = client.killTasks(jobKey, new HashSet<>()); System.out.println(response); } @@ -175,20 +166,15 @@ public class AuroraClientSample { */ public static void main(String[] args) { try { - properties.load(AuroraClientSample.class.getClassLoader().getResourceAsStream(Constants.AURORA_SCHEDULER_PROP_FILE)); - String auroraHost = properties.getProperty(Constants.AURORA_SCHEDULER_HOST); - String auroraPort = properties.getProperty(Constants.AURORA_SCHEDULER_PORT); - auroraSchedulerClient = AuroraSchedulerClientFactory.createReadOnlySchedulerClient(MessageFormat.format(Constants.AURORA_SCHEDULER_CONNECTION_URL, auroraHost, auroraPort)); - // create sample job // AuroraClientSample.createJob(); - AuroraClientSample.createAutoDockJob(); +// AuroraClientSample.createAutoDockJob(); // kill pending job // AuroraClientSample.killTasks("test_autodock"); // get jobs summary - AuroraClientSample.getJobSummary(auroraSchedulerClient); + AuroraClientSample.getRunningJobsList("centos"); // AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(Constants.AURORA_SCHEDULER_PROP_FILE); // ResponseBean response = client.getPendingReasonForJob(new JobKeyBean("devel", "centos", "hello_pending")); http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/AuroraThriftClientUtil.java ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/AuroraThriftClientUtil.java b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/AuroraThriftClientUtil.java index 7bf3fbb..f66c739 100644 --- a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/AuroraThriftClientUtil.java +++ b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/AuroraThriftClientUtil.java @@ -19,11 +19,11 @@ */ package org.apache.airavata.cloud.aurora.util; -import java.nio.charset.Charset; import java.util.HashSet; -import java.util.Properties; import java.util.Set; +import org.apache.airavata.cloud.aurora.client.AuroraSchedulerClientFactory; +import org.apache.airavata.cloud.aurora.client.bean.GetJobsResponseBean; import org.apache.airavata.cloud.aurora.client.bean.IdentityBean; import org.apache.airavata.cloud.aurora.client.bean.JobConfigBean; import org.apache.airavata.cloud.aurora.client.bean.JobDetailsResponseBean; @@ -37,11 +37,11 @@ import org.apache.airavata.cloud.aurora.client.sdk.ExecutorConfig; import org.apache.airavata.cloud.aurora.client.sdk.Identity; import org.apache.airavata.cloud.aurora.client.sdk.JobConfiguration; import org.apache.airavata.cloud.aurora.client.sdk.JobKey; +import org.apache.airavata.cloud.aurora.client.sdk.ReadOnlyScheduler; import org.apache.airavata.cloud.aurora.client.sdk.Resource; import org.apache.airavata.cloud.aurora.client.sdk.Response; import org.apache.airavata.cloud.aurora.client.sdk.TaskConfig; -import org.apache.airavata.cloud.aurora.sample.AuroraClientSample; -import org.apache.commons.io.IOUtils; +import org.apache.airavata.common.utils.ServerSettings; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,9 +54,6 @@ public class AuroraThriftClientUtil { /** The Constant logger. */ private final static Logger logger = LoggerFactory.getLogger(AuroraThriftClientUtil.class); - /** The properties. */ - private static Properties properties = new Properties(); - /** * Gets the executor config json. * @@ -67,9 +64,11 @@ public class AuroraThriftClientUtil { public static String getExecutorConfigJson(JobConfigBean jobConfig) throws Exception { String exeConfigJson = null; try { - String template = IOUtils.toString(AuroraThriftClientUtil.class.getClassLoader() - .getResourceAsStream("executor-config-template.json"), Charset.defaultCharset()); - + // read the executor config json template + java.net.URL url = AuroraThriftClientUtil.class.getClassLoader().getResource(ServerSettings.getAuroraExecutorConfigTemplateFileName()); + java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI()); + String template = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8"); + JSONObject exeConfig = new JSONObject(template); if(exeConfig != null) { exeConfig.put("environment", jobConfig.getJob().getEnvironment()); @@ -172,8 +171,7 @@ public class AuroraThriftClientUtil { ExecutorConfig exeConfig = null; try { - properties.load(AuroraClientSample.class.getClassLoader().getResourceAsStream(Constants.AURORA_SCHEDULER_PROP_FILE)); - String executorName = properties.getProperty(Constants.AURORA_EXECUTOR_NAME); + String executorName = ServerSettings.getAuroraExecutorName(); // create the executor config if(exeConfigJson != null) { @@ -294,6 +292,8 @@ public class AuroraThriftClientUtil { */ public static ResponseBean getResponseBean(Response response, ResponseResultType resultType) { switch (resultType) { + case GET_JOBS: + return getJobsResponseBean(response); case GET_JOB_DETAILS: return getJobDetailsResponseBean(response); case GET_PENDING_JOB_REASON: @@ -336,6 +336,22 @@ public class AuroraThriftClientUtil { } /** + * Gets the jobs response bean. + * + * @param response the response + * @return the jobs response bean + */ + private static GetJobsResponseBean getJobsResponseBean(Response response) { + GetJobsResponseBean responseBean = null; + if(response != null) { + responseBean = new GetJobsResponseBean(getJobResponse(response)); + //TODO: set jobconfig list in response + } + + return responseBean; + } + + /** * Gets the job response. * * @param response the response @@ -357,12 +373,35 @@ public class AuroraThriftClientUtil { } /** + * Checks if is scheduler host reachable. + * + * @param connectionUrl the connection url + * @param connectionTimeout the connection timeout + * @return true, if is scheduler host reachable + */ + public static boolean isSchedulerHostReachable(String connectionUrl, int connectionTimeout) { + boolean isReachable = false; + ReadOnlyScheduler.Client auroraSchedulerClient = null; + try { + // connect to scheduler & run dummy command + auroraSchedulerClient = AuroraSchedulerClientFactory.createReadOnlySchedulerClient(connectionUrl, connectionTimeout); + auroraSchedulerClient.getTierConfigs(); + + // host is reachable + isReachable = true; + } catch(Exception ex) { + logger.error("Timed-out connecting to URL: " + connectionUrl, ex); + } + return isReachable; + } + + /** * The main method. * * @param args the arguments * @throws Exception the exception */ -// public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { // JobKeyBean jobKey = new JobKeyBean("devel", "centos", "test_job"); // IdentityBean owner = new IdentityBean("centos"); // @@ -379,5 +418,7 @@ public class AuroraThriftClientUtil { // // String executorConfigJson = getExecutorConfigJson(jobConfig); // System.out.println(executorConfigJson); -// } + +// System.out.println(new Scanner(AuroraThriftClientUtil.class.getClassLoader().getResourceAsStream("executor-config-template.json"), "UTF-8").useDelimiter("\\A").next()); + } } http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/Constants.java ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/Constants.java b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/Constants.java index a3e862a..2796541 100644 --- a/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/Constants.java +++ b/modules/cloud/aurora-client/src/main/java/org/apache/airavata/cloud/aurora/util/Constants.java @@ -28,7 +28,7 @@ public class Constants { public static final String AURORA_SCHEDULER_PROP_FILE = "aurora-scheduler.properties"; /** The Constant AURORA_SCHEDULER_HOST. */ - public static final String AURORA_SCHEDULER_HOST = "aurora.scheduler.host"; + public static final String AURORA_SCHEDULER_HOSTS = "aurora.scheduler.hosts"; /** The Constant AURORA_SCHEDULER_PORT. */ public static final String AURORA_SCHEDULER_PORT = "aurora.scheduler.port"; @@ -41,4 +41,7 @@ public class Constants { /** The Constant AURORA_SCHEDULER_CONNECTION_URL. */ public static final String AURORA_SCHEDULER_CONNECTION_URL = "http://{0}:{1}/api"; + + /** The Constant AURORA_SCHEDULER_CONNECT_TIMEOUT_MS. */ + public static final String AURORA_SCHEDULER_CONNECT_TIMEOUT_MS = "aurora.scheduler.timeoutms"; } http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/cloud/aurora-client/src/main/resources/aurora-scheduler.properties ---------------------------------------------------------------------- diff --git a/modules/cloud/aurora-client/src/main/resources/aurora-scheduler.properties b/modules/cloud/aurora-client/src/main/resources/aurora-scheduler.properties index cf21b8f..8011de9 100644 --- a/modules/cloud/aurora-client/src/main/resources/aurora-scheduler.properties +++ b/modules/cloud/aurora-client/src/main/resources/aurora-scheduler.properties @@ -1,9 +1,11 @@ #Aurora scheduler properties -aurora.scheduler.host=52.15.103.85 +aurora.scheduler.hosts=sgg-mesos-master-1,sgg-mesos-master-2,sgg-mesos-master-3 aurora.scheduler.port=8081 +aurora.scheduler.timeoutms=1000 + aurora.executor.name=AuroraExecutor mesos.cluster.name=example \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java ---------------------------------------------------------------------- diff --git a/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java index 3ac2a6e..46b1ebb 100644 --- a/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java +++ b/modules/commons/src/main/java/org/apache/airavata/common/utils/ServerSettings.java @@ -64,6 +64,12 @@ public class ServerSettings extends ApplicationSettings { public static final String ZOOKEEPER_SERVER_CONNECTION = "zookeeper.server.connection"; public static final String ZOOKEEPER_TIMEOUT = "zookeeper.timeout"; + // Aurora Scheduler Constants + public static final String AURORA_SCHEDULER_HOSTS = "aurora.scheduler.hosts"; + public static final String AURORA_EXECUTOR_NAME = "aurora.executor.name"; + public static final String MESOS_CLUSTER_NAME = "mesos.cluster.name"; + public static final String AURORA_SCHEDULER_CONNECT_TIMEOUT_MS = "aurora.scheduler.timeoutms"; + public static final String AURORA_EXECUTOR_CONFIG_TEMPLATE_FILE = "aurora.executor.config.template.filename"; private static final String CREDENTIAL_STORE_DB_URL = "credential.store.jdbc.url"; private static final String CREDENTIAL_STORE_DB_USER = "credential.store.jdbc.user"; @@ -439,4 +445,24 @@ public class ServerSettings extends ApplicationSettings { public static String[] getServerRoles() { return listConfigurations.get(SERVER_ROLES); } + + public static String getAuroraSchedulerHosts() throws ApplicationSettingsException { + return getSetting(AURORA_SCHEDULER_HOSTS); + } + + public static String getMesosClusterName() throws ApplicationSettingsException { + return getSetting(MESOS_CLUSTER_NAME); + } + + public static String getAuroraExecutorName() throws ApplicationSettingsException { + return getSetting(AURORA_EXECUTOR_NAME); + } + + public static String getAuroraExecutorConfigTemplateFileName() throws ApplicationSettingsException { + return getSetting(AURORA_EXECUTOR_CONFIG_TEMPLATE_FILE); + } + + public static int getAuroraSchedulerTimeout() throws ApplicationSettingsException { + return Integer.valueOf(getSetting(AURORA_SCHEDULER_CONNECT_TIMEOUT_MS)); + } } http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/configuration/server/src/main/resources/airavata-server.properties ---------------------------------------------------------------------- diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties index c823d89..e5b6b33 100644 --- a/modules/configuration/server/src/main/resources/airavata-server.properties +++ b/modules/configuration/server/src/main/resources/airavata-server.properties @@ -282,6 +282,15 @@ embedded.zk=true zookeeper.server.connection=localhost:2181 zookeeper.timeout=30000 +########################################################################### +# Aurora Scheduler Configuration +########################################################################### +aurora.scheduler.hosts=sgg-mesos-master-1:8081,sgg-mesos-master-2:8081,sgg-mesos-master-3:8081 +aurora.scheduler.timeoutms=1000 +aurora.executor.name=AuroraExecutor +mesos.cluster.name=example +aurora.executor.config.template.filename=executor-config-template.json + ######################################################################## ## API Security Configuration ######################################################################## http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java index 6035cec..f51503d 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/task/AuroraJobSubmission.java @@ -20,6 +20,11 @@ */ package org.apache.airavata.gfac.impl.task; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + import org.apache.airavata.cloud.aurora.client.AuroraThriftClient; import org.apache.airavata.cloud.aurora.client.bean.IdentityBean; import org.apache.airavata.cloud.aurora.client.bean.JobConfigBean; @@ -29,7 +34,6 @@ import org.apache.airavata.cloud.aurora.client.bean.ResourceBean; import org.apache.airavata.cloud.aurora.client.bean.ResponseBean; import org.apache.airavata.cloud.aurora.client.bean.TaskConfigBean; import org.apache.airavata.cloud.aurora.util.AuroraThriftClientUtil; -import org.apache.airavata.cloud.aurora.util.Constants; import org.apache.airavata.common.utils.AiravataUtils; import org.apache.airavata.gfac.core.GFacException; import org.apache.airavata.gfac.core.GFacUtils; @@ -48,12 +52,6 @@ import org.apache.airavata.model.task.TaskTypes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; - public class AuroraJobSubmission implements JobSubmissionTask{ private static final Logger log = LoggerFactory.getLogger(AuroraJobSubmission.class); @@ -102,7 +100,7 @@ public class AuroraJobSubmission implements JobSubmissionTask{ String executorConfigJson = AuroraThriftClientUtil.getExecutorConfigJson(jobConfig); log.info("Executor Config for Job {} , {}", jobIdAndName, executorConfigJson); - AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(Constants.AURORA_SCHEDULER_PROP_FILE); + AuroraThriftClient client = AuroraThriftClient.getAuroraThriftClient(); ResponseBean response = client.createJob(jobConfig); log.info("Response for job {}, {}", jobIdAndName, response); jobModel.setJobDescription(resources.toString()); http://git-wip-us.apache.org/repos/asf/airavata/blob/01f80443/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/cloud/AuroraJobMonitor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/cloud/AuroraJobMonitor.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/cloud/AuroraJobMonitor.java index 9b94623..65eb221 100644 --- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/cloud/AuroraJobMonitor.java +++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/monitor/cloud/AuroraJobMonitor.java @@ -118,7 +118,7 @@ public class AuroraJobMonitor implements JobMonitor, Runnable { AuroraThriftClient client; public AuroraTimer() throws Exception { - client = AuroraThriftClient.getAuroraThriftClient(AuroraUtils.AURORA_SCHEDULER_PROP_FILE); + client = AuroraThriftClient.getAuroraThriftClient(); }
