Renamed enable.job.restriction.validation property name to enable.max.job.count removed jobcountvalidator class from validator list
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/3cfc7114 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/3cfc7114 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/3cfc7114 Branch: refs/heads/orchestratorJobThrottleFeature Commit: 3cfc7114bcd810c376496f150e32b7e2b51e4169 Parents: b8cacbc Author: shamrath <[email protected]> Authored: Wed Sep 24 10:44:02 2014 -0400 Committer: shamrath <[email protected]> Committed: Wed Sep 24 10:44:02 2014 -0400 ---------------------------------------------------------------------- .../airavata/common/utils/ServerSettings.java | 11 +- .../main/resources/airavata-server.properties | 4 +- .../main/resources/airavata-server.properties | 2 +- .../monitor/impl/pull/qstat/HPCPullMonitor.java | 4 +- .../core/validator/impl/JobCountValidator.java | 154 ------------------- .../cpi/impl/SimpleOrchestratorImpl.java | 3 +- 6 files changed, 9 insertions(+), 169 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/3cfc7114/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java ---------------------------------------------------------------------- diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java index 6c7bb3b..6be6ded 100644 --- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java +++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ServerSettings.java @@ -71,8 +71,7 @@ public class ServerSettings extends ApplicationSettings { private static final String MY_PROXY_LIFETIME = "myproxy.life"; private static final String ACTIVITY_LISTENERS = "activity.listeners"; - private static final String ENABLE_JOB_RESTRICTION_VALIDATION = "enable.job.restriction.validation"; - private static final String GLOBAL_MAX_JOB_COUNT = "global.max.job.count"; + private static final String ENABLE_MAX_JOB_COUNT_CHECK = "enable.max.job.count.check"; private static boolean stopAllThreads = false; @@ -104,12 +103,8 @@ public class ServerSettings extends ApplicationSettings { return getSetting(SERVER_CONTEXT_ROOT, "axis2"); } - public static String getGlobalMaxJobCount() throws ApplicationSettingsException { - return getSetting(GLOBAL_MAX_JOB_COUNT); - } - - public static String getEnableJobRestrictionValidation() { - return getSetting(ENABLE_JOB_RESTRICTION_VALIDATION, "false"); + public static String getEnableMaxJobCountCheck() { + return getSetting(ENABLE_MAX_JOB_COUNT_CHECK, "false"); } public static String getCredentialStoreDBUser() throws ApplicationSettingsException { http://git-wip-us.apache.org/repos/asf/airavata/blob/3cfc7114/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 ba938f2..d1af845 100644 --- a/modules/configuration/server/src/main/resources/airavata-server.properties +++ b/modules/configuration/server/src/main/resources/airavata-server.properties @@ -193,13 +193,13 @@ activity.listeners=org.apache.airavata.gfac.core.monitor.AiravataJobStatusUpdato ###---------------------------Orchestrator module Configurations---------------------------### #job.submitter=org.apache.airavata.orchestrator.core.impl.GFACEmbeddedJobSubmitter job.submitter=org.apache.airavata.orchestrator.core.impl.GFACServiceJobSubmitter -job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator,org.apache.airavata.orchestrator.core.validator.impl.JobCountValidator +job.validators=org.apache.airavata.orchestrator.core.validator.impl.SimpleAppDataValidator,org.apache.airavata.orchestrator.core.validator.impl.ExperimentStatusValidator submitter.interval=10000 threadpool.size=10 start.submitter=true embedded.mode=true enable.validation=true -enable.job.restriction.validation=true +enable.max.job.count.check=true orchestrator=org.apache.airavata.orchestrator.server.OrchestratorServer ###---------------------------API Server module Configurations---------------------------### http://git-wip-us.apache.org/repos/asf/airavata/blob/3cfc7114/modules/credential-store-service/credential-store-webapp/src/main/resources/airavata-server.properties ---------------------------------------------------------------------- diff --git a/modules/credential-store-service/credential-store-webapp/src/main/resources/airavata-server.properties b/modules/credential-store-service/credential-store-webapp/src/main/resources/airavata-server.properties index bfc0504..40e8870 100644 --- a/modules/credential-store-service/credential-store-webapp/src/main/resources/airavata-server.properties +++ b/modules/credential-store-service/credential-store-webapp/src/main/resources/airavata-server.properties @@ -287,7 +287,7 @@ threadpool.size=10 start.submitter=true embedded.mode=true enable.validation=true -enable.job.restriction.validation=true +enable.max.job.count.check=true orchestrator=org.apache.airavata.orchestrator.server.OrchestratorServer ###---------------------------API Server module Configurations---------------------------### http://git-wip-us.apache.org/repos/asf/airavata/blob/3cfc7114/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/pull/qstat/HPCPullMonitor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/pull/qstat/HPCPullMonitor.java b/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/pull/qstat/HPCPullMonitor.java index 022b0a6..5f83b43 100644 --- a/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/pull/qstat/HPCPullMonitor.java +++ b/modules/gfac/gfac-monitor/src/main/java/org/apache/airavata/gfac/monitor/impl/pull/qstat/HPCPullMonitor.java @@ -266,7 +266,7 @@ public class HPCPullMonitor extends PullMonitor { ZooKeeper zk = null; for (MonitorID completedJob : completedJobs) { CommonUtils.removeMonitorFromQueue(queue, completedJob); - if (ServerSettings.getEnableJobRestrictionValidation().equals("true")) { // is job restriction available? + if (ServerSettings.getEnableMaxJobCountCheck().equals("true")) { // is job restriction available? TaskDetails taskDetails = completedJob.getJobExecutionContext().getTaskData(); ComputeResourceDescription computeResourceDesc = CommonUtils.getComputeResourceDescription( taskDetails); @@ -286,7 +286,7 @@ public class HPCPullMonitor extends PullMonitor { } } } - if (ServerSettings.getEnableJobRestrictionValidation().equals("true") && completedJobs.size() > 0) { + if (ServerSettings.getEnableMaxJobCountCheck().equals("true") && completedJobs.size() > 0) { // reduce completed job count from zookeeper CommonUtils.updateZkWithJobCount(zk, jobRemoveCountMap, false); } http://git-wip-us.apache.org/repos/asf/airavata/blob/3cfc7114/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/JobCountValidator.java ---------------------------------------------------------------------- diff --git a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/JobCountValidator.java b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/JobCountValidator.java deleted file mode 100644 index f1cc5f9..0000000 --- a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/validator/impl/JobCountValidator.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * - * 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.orchestrator.core.validator.impl; - -import org.airavata.appcatalog.cpi.AppCatalog; -import org.airavata.appcatalog.cpi.AppCatalogException; -import org.apache.aiaravata.application.catalog.data.impl.AppCatalogFactory; -import org.apache.airavata.common.exception.ApplicationSettingsException; -import org.apache.airavata.common.utils.AiravataUtils; -import org.apache.airavata.common.utils.Constants; -import org.apache.airavata.common.utils.RequestData; -import org.apache.airavata.common.utils.ServerSettings; -import org.apache.airavata.credential.store.credential.AuditInfo; -import org.apache.airavata.credential.store.store.CredentialReader; -import org.apache.airavata.credential.store.store.CredentialReaderFactory; -import org.apache.airavata.gfac.monitor.util.CommonUtils; -import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription; -import org.apache.airavata.model.appcatalog.computeresource.BatchQueue; -import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription; -import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterface; -import org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission; -import org.apache.airavata.model.error.ValidatorResult; -import org.apache.airavata.model.workspace.experiment.Experiment; -import org.apache.airavata.model.workspace.experiment.TaskDetails; -import org.apache.airavata.model.workspace.experiment.WorkflowNodeDetails; -import org.apache.airavata.orchestrator.core.context.OrchestratorContext; -import org.apache.airavata.orchestrator.core.validator.JobMetadataValidator; -import org.apache.airavata.persistance.registry.jpa.model.TaskDetail; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.Map; - -/** - * Job count validator validate max job submission count for a given resource under given community user name. - */ -public class JobCountValidator implements JobMetadataValidator { - private static final Logger logger = LoggerFactory.getLogger(JobCountValidator.class); - - @Override - public ValidatorResult validate(Experiment experiment, WorkflowNodeDetails workflowNodeDetail, TaskDetails taskID, - String credStoreToken) { - ValidatorResult result; - try { - ComputeResourceDescription computeResourceDes = CommonUtils.getComputeResourceDescription(taskID); - if (computeResourceDes.getBatchQueuesSize() > 0) { - BatchQueue batchQueue = CommonUtils.getBatchQueueByName(computeResourceDes.getBatchQueues(), - taskID.getTaskScheduling().getQueueName()); - if (batchQueue == null) { - throw new IllegalArgumentException("Invalid queue name, There is no queue with name :" + - taskID.getTaskScheduling().getQueueName()); - } - int resourceMaxJobCount = batchQueue.getMaxJobsInQueue(); - if (resourceMaxJobCount > 0) { - for (JobSubmissionInterface jobSubmissionInterface : computeResourceDes.getJobSubmissionInterfaces()) { - switch (jobSubmissionInterface.getJobSubmissionProtocol()) { - case LOCAL: - // nothing to do - return new ValidatorResult(true); - case SSH: - SSHJobSubmission sshJobSubmission = - AppCatalogFactory.getAppCatalog().getComputeResource().getSSHJobSubmission( - jobSubmissionInterface.getJobSubmissionInterfaceId()); - switch (sshJobSubmission.getSecurityProtocol()) { - case GSI: - // gsi - RequestData requestData = new RequestData(ServerSettings.getDefaultUserGateway()); - requestData.setTokenId(credStoreToken); - return isJobSpaceAvailable(requestData.getMyProxyUserName(), - computeResourceDes.getHostName(), batchQueue.getQueueName(), resourceMaxJobCount); - case SSH_KEYS: - CredentialReader credentialReader = CredentialReaderFactory.createCredentialStoreReader(); - AuditInfo auditInfo = credentialReader.getAuditInfo(experiment.getUserName(), credStoreToken); - return isJobSpaceAvailable(auditInfo.getCommunityUser().getUserName(), - computeResourceDes.getHostName(), batchQueue.getQueueName(), resourceMaxJobCount); - // ssh - default: - result = new ValidatorResult(false); - result.setErrorDetails("Doesn't support " + sshJobSubmission.getSecurityProtocol() + - " protocol yet"); - return result; - } - default: - result = new ValidatorResult(false); - result.setErrorDetails("Doesn't support " + - jobSubmissionInterface.getJobSubmissionProtocol() + " protocol yet"); - return result; - } - } - result = new ValidatorResult(false); - result.setErrorDetails("No JobSubmission interface found"); - return result; - - }// end of inner if - }// end of outer if - return new ValidatorResult(true); - } catch (Exception e) { - logger.error("Exception occur while running job count validation process ", e); - result = new ValidatorResult(false); - result.setErrorDetails("Exception occur while running job count validation process "); - return result; - } - - } - - private ValidatorResult isJobSpaceAvailable(String communityUserName, String computeHostName, String queueName, int resourceMaxJobCount) - throws ApplicationSettingsException { - if (communityUserName == null) { - throw new IllegalArgumentException("Community user name should not be null"); - } - if (computeHostName == null) { - throw new IllegalArgumentException("Compute resource should not be null"); - } - String keyPath = new StringBuilder("/" + Constants.STAT).append("/").append(communityUserName) - .append("/").toString(); - String key = keyPath + computeHostName + "/" + Constants.JOB + "/" + queueName; - Map<String, Integer> jobCountMap = AiravataUtils.getJobCountMap(OrchestratorContext.getZk()); - if (jobCountMap.containsKey(key)) { - int count = jobCountMap.get(key); - logger.info("Submitted job count = " + count + ", max job count = " + resourceMaxJobCount); - if (count < resourceMaxJobCount) { - return new ValidatorResult(true); - } - } else { - logger.info("Job count map doesn't has key : " + key); - return new ValidatorResult(true); - } - logger.info("Resource " + computeHostName + " doesn't has space to submit another job, " + - "Configured resource max job count is " + resourceMaxJobCount + "."); - ValidatorResult result = new ValidatorResult(false); - result.setErrorDetails("Please honour to the gobal max job count " + resourceMaxJobCount); - return result; - } -} http://git-wip-us.apache.org/repos/asf/airavata/blob/3cfc7114/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java ---------------------------------------------------------------------- diff --git a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java index c0760dd..53edc83 100644 --- a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java +++ b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java @@ -36,7 +36,6 @@ import org.apache.airavata.orchestrator.core.exception.OrchestratorException; import org.apache.airavata.orchestrator.core.job.JobSubmitter; import org.apache.airavata.orchestrator.core.utils.OrchestratorUtils; import org.apache.airavata.orchestrator.core.validator.JobMetadataValidator; -import org.apache.airavata.orchestrator.core.validator.impl.JobCountValidator; import org.apache.airavata.registry.cpi.ChildDataType; import org.apache.airavata.registry.cpi.Registry; import org.apache.airavata.registry.cpi.RegistryModelType; @@ -110,7 +109,7 @@ public class SimpleOrchestratorImpl extends AbstractOrchestrator{ // creating monitorID to register with monitoring queue // this is a special case because amqp has to be in place before submitting the job try { - if (ServerSettings.getEnableJobRestrictionValidation().equals("true") && + if (ServerSettings.getEnableMaxJobCountCheck().equals("true") && task.getTaskScheduling().getQueueName() != null) { ComputeResourceDescription computeResourceDes = CommonUtils.getComputeResourceDescription(task); String communityUserName = OrchestratorUtils.getCommunityUserName(experiment, computeResourceDes, task,
