Search in sources :

Example 1 with Signal

use of org.ow2.proactive.scheduler.signal.Signal in project scheduling by ow2-proactive.

the class SignalApiTest method testReadyForSignalWithVariables.

@Test
public void testReadyForSignalWithVariables() throws SignalApiException, InvalidChannelException {
    String signalName = "test_signal_1";
    JobVariable jobVariable1 = new JobVariable("name1", "value1");
    JobVariable jobVariable2 = new JobVariable("name2", "value2");
    List<JobVariable> jobVariables = new ArrayList<>();
    jobVariables.add(jobVariable1);
    jobVariables.add(jobVariable2);
    signalApi.readyForSignal(signalName, jobVariables);
    Assert.assertTrue(((Signal) synchronizationInternal.get(USER, TASK_ID, SIGNALS_CHANNEL + JOB_ID.value(), READY_PREFIX + signalName)).getName().equals(signalName));
    Assert.assertNotNull((synchronizationInternal.get(USER, TASK_ID, SIGNALS_CHANNEL + JOB_ID.value(), READY_PREFIX + signalName)));
    Assert.assertEquals(jobVariables, ((Signal) synchronizationInternal.get(USER, TASK_ID, SIGNALS_CHANNEL + JOB_ID.value(), READY_PREFIX + signalName)).getInputVariables());
}
Also used : JobVariable(org.ow2.proactive.scheduler.common.job.JobVariable)

Example 2 with Signal

use of org.ow2.proactive.scheduler.signal.Signal in project scheduling by ow2-proactive.

the class SchedulerFrontend method insertJobSignals.

private JobInfo insertJobSignals(JobInfo jobInfo) {
    String jobid = jobInfo.getJobId().value();
    if (checkJobPermissionMethod(jobid, "addJobSignal")) {
        try {
            TaskId taskId = createFakeTaskId(jobInfo.getJobId().value());
            if (publicStore.channelExists(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobid)) {
                Set<Map.Entry<String, Serializable>> signalEntries = publicStore.entrySet(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobid);
                Set<String> signalsToBeAdded = signalEntries.stream().map(entry -> entry.getKey()).collect(Collectors.toSet());
                List<Signal> signalList = signalEntries.stream().map(entry -> (Signal) entry.getValue()).collect(Collectors.toList());
                Map<String, Map<String, JobVariable>> detailedSignalsToBeAdded = new LinkedHashMap<>();
                signalList.forEach(signal -> {
                    Map<String, JobVariable> variableMap = new LinkedHashMap<>();
                    if (signal.getInputVariables() != null) {
                        signal.getInputVariables().forEach(jobVariable -> variableMap.put(jobVariable.getName(), jobVariable));
                    }
                    detailedSignalsToBeAdded.put(signal.getName(), variableMap);
                });
                Set<String> jobSignals = jobInfo.getSignals();
                Map<String, Map<String, JobVariable>> jobDetailedSignals = jobInfo.getDetailedSignals();
                if (signalsToBeAdded != null && !signalsToBeAdded.isEmpty()) {
                    jobSignals.addAll(signalsToBeAdded);
                    jobInfo.setSignals(jobSignals);
                }
                if (detailedSignalsToBeAdded != null && !detailedSignalsToBeAdded.isEmpty()) {
                    jobDetailedSignals.putAll(detailedSignalsToBeAdded);
                    jobInfo.setDetailedSignals(jobDetailedSignals);
                }
            }
        } catch (InvalidChannelException e) {
            logger.warn("Could not retrieve the signals of the job " + jobid);
        }
    }
    return jobInfo;
}
Also used : FileSystemException(org.objectweb.proactive.extensions.dataspaces.exceptions.FileSystemException) TaskDescriptor(org.ow2.proactive.scheduler.common.TaskDescriptor) KeyException(java.security.KeyException) NodeSet(org.ow2.proactive.utils.NodeSet) YOU_DO_NOT_HAVE_PERMISSION_TO_LIST_THIRD_PARTY_CREDENTIALS_IN_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_LIST_THIRD_PARTY_CREDENTIALS_IN_THE_SCHEDULER) StreamResult(javax.xml.transform.stream.StreamResult) StringUtils(org.apache.commons.lang3.StringUtils) PASchedulerProperties(org.ow2.proactive.scheduler.core.properties.PASchedulerProperties) UnknownJobException(org.ow2.proactive.scheduler.common.exception.UnknownJobException) SchedulerUserInfo(org.ow2.proactive.scheduler.job.SchedulerUserInfo) YOU_DO_NOT_HAVE_PERMISSION_TO_KILL_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_KILL_THE_SCHEDULER) Body(org.objectweb.proactive.Body) YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_TASK_RESULT_OF_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_TASK_RESULT_OF_THIS_JOB) DefaultModelJobValidatorServiceProvider(org.ow2.proactive.scheduler.common.job.factories.spi.model.DefaultModelJobValidatorServiceProvider) ImmediateService(org.objectweb.proactive.annotation.ImmediateService) YOU_DO_NOT_HAVE_PERMISSION_TO_FINISH_THIS_TASK(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_FINISH_THIS_TASK) TaskStatus(org.ow2.proactive.scheduler.common.task.TaskStatus) YOU_DO_NOT_HAVE_PERMISSION_TO_REGISTER_SERVICE_TO_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_REGISTER_SERVICE_TO_THIS_JOB) TaskIdImpl(org.ow2.proactive.scheduler.task.TaskIdImpl) YOU_DO_NOT_HAVE_PERMISSION_TO_PREEMPT_THIS_TASK(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_PREEMPT_THIS_TASK) JobFactory(org.ow2.proactive.scheduler.common.job.factories.JobFactory) YOU_DO_NOT_HAVE_PERMISSION_TO_REMOVE_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_REMOVE_THIS_JOB) RMProxy(org.ow2.proactive.scheduler.core.rmproxies.RMProxy) SynchronizationInternal(org.ow2.proactive.scheduler.synchronization.SynchronizationInternal) InitActive(org.objectweb.proactive.InitActive) EndActive(org.objectweb.proactive.EndActive) TaskCouldNotRestartException(org.ow2.proactive.scheduler.common.exception.TaskCouldNotRestartException) TaskStatesPage(org.ow2.proactive.scheduler.common.task.TaskStatesPage) InvalidChannelException(org.ow2.proactive.scheduler.synchronization.InvalidChannelException) SchedulerConnection(org.ow2.proactive.scheduler.common.SchedulerConnection) IOUtils(org.apache.commons.io.IOUtils) SchedulerAuthentication(org.ow2.proactive.scheduler.authentication.SchedulerAuthentication) YOU_DO_NOT_HAVE_PERMISSION_TO_KILL_THIS_TASK(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_KILL_THIS_TASK) YOU_DO_NOT_HAVE_PERMISSION_TO_START_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_START_THE_SCHEDULER) YOU_DO_NOT_HAVE_PERMISSION_TO_REMOVE_THIRD_PARTY_CREDENTIALS_FROM_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_REMOVE_THIRD_PARTY_CREDENTIALS_FROM_THE_SCHEDULER) JobFilterCriteria(org.ow2.proactive.scheduler.common.JobFilterCriteria) SchedulerDBManager(org.ow2.proactive.scheduler.core.db.SchedulerDBManager) YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_RESULT_OF_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_RESULT_OF_THIS_JOB) java.util(java.util) JobCreationException(org.ow2.proactive.scheduler.common.exception.JobCreationException) PermissionException(org.ow2.proactive.scheduler.common.exception.PermissionException) StreamSource(javax.xml.transform.stream.StreamSource) TaskInfo(org.ow2.proactive.scheduler.common.task.TaskInfo) NotConnectedException(org.ow2.proactive.scheduler.common.exception.NotConnectedException) YOU_DO_NOT_HAVE_PERMISSION_TO_RESTART_THIS_TASK(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_RESTART_THIS_TASK) Service(org.objectweb.proactive.Service) UserData(org.ow2.proactive.authentication.UserData) AlreadyConnectedException(org.ow2.proactive.scheduler.common.exception.AlreadyConnectedException) EligibleTaskDescriptor(org.ow2.proactive.scheduler.descriptor.EligibleTaskDescriptor) Signal(org.ow2.proactive.scheduler.signal.Signal) UnknownTaskException(org.ow2.proactive.scheduler.common.exception.UnknownTaskException) YOU_DO_NOT_HAVE_PERMISSIONS_TO_GET_THE_LOGS_OF_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSIONS_TO_GET_THE_LOGS_OF_THIS_JOB) TaskCouldNotStartException(org.ow2.proactive.scheduler.common.exception.TaskCouldNotStartException) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) YOU_DO_NOT_HAVE_PERMISSION_TO_LISTEN_THE_LOG_OF_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_LISTEN_THE_LOG_OF_THIS_JOB) YOU_DO_NOT_HAVE_PERMISSION_TO_FREEZE_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_FREEZE_THE_SCHEDULER) JobIdImpl(org.ow2.proactive.scheduler.job.JobIdImpl) Credentials(org.ow2.proactive.authentication.crypto.Credentials) YOU_DO_NOT_HAVE_PERMISSION_TO_RESUME_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_RESUME_THE_SCHEDULER) SchedulerStateRecoverHelper(org.ow2.proactive.scheduler.core.db.SchedulerStateRecoverHelper) YOU_DO_NOT_HAVE_PERMISSION_TO_RESTART_IN_ERROR_TASKS_IN_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_RESTART_IN_ERROR_TASKS_IN_THIS_JOB) javax.xml.transform(javax.xml.transform) YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_TASK_LOGS_OF_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_TASK_LOGS_OF_THIS_JOB) TaskResultImpl(org.ow2.proactive.scheduler.task.TaskResultImpl) SchedulerEventListener(org.ow2.proactive.scheduler.common.SchedulerEventListener) YOU_DO_NOT_HAVE_PERMISSION_TO_DO_THIS_OPERATION(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_DO_THIS_OPERATION) SchedulerAccountsManager(org.ow2.proactive.scheduler.core.account.SchedulerAccountsManager) InternalTask(org.ow2.proactive.scheduler.task.internal.InternalTask) DataSpacesFileObject(org.objectweb.proactive.extensions.dataspaces.api.DataSpacesFileObject) RunActive(org.objectweb.proactive.RunActive) JobInfo(org.ow2.proactive.scheduler.common.job.JobInfo) YOU_DO_NOT_HAVE_PERMISSION_TO_DETACH_SERVICE_TO_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_DETACH_SERVICE_TO_THIS_JOB) AppenderProvider(org.ow2.proactive.scheduler.common.util.logforwarder.AppenderProvider) UserIdentificationImpl(org.ow2.proactive.scheduler.job.UserIdentificationImpl) YOU_DO_NOT_HAVE_PERMISSION_TO_PAUSE_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_PAUSE_THE_SCHEDULER) SchedulerEvent(org.ow2.proactive.scheduler.common.SchedulerEvent) RMConnection(org.ow2.proactive.resourcemanager.frontend.RMConnection) SortSpecifierContainer(org.ow2.proactive.scheduler.common.SortSpecifierContainer) Task(org.ow2.proactive.scheduler.common.task.Task) YOU_DO_NOT_HAVE_PERMISSION_TO_SHUTDOWN_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_SHUTDOWN_THE_SCHEDULER) TaskState(org.ow2.proactive.scheduler.common.task.TaskState) PAExecutors(org.ow2.proactive.utils.PAExecutors) Logger(org.apache.log4j.Logger) YOU_DO_NOT_HAVE_PERMISSION_TO_GET_TASK_STATES(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_GET_TASK_STATES) YOU_DO_NOT_HAVE_PERMISSION_TO_GET_TASK_IDS(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_GET_TASK_IDS) YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THIS_JOB) URI(java.net.URI) SchedulerSpaceInterface(org.ow2.proactive.scheduler.common.SchedulerSpaceInterface) JobValidationException(org.ow2.proactive.scheduler.common.exception.JobValidationException) Policy(org.ow2.proactive.scheduler.policy.Policy) Request(org.objectweb.proactive.core.body.request.Request) SchedulerJMXHelper(org.ow2.proactive.scheduler.core.jmx.SchedulerJMXHelper) JobId(org.ow2.proactive.scheduler.common.job.JobId) YOU_DO_NOT_HAVE_PERMISSION_TO_STOP_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_STOP_THE_SCHEDULER) JobAlreadyFinishedException(org.ow2.proactive.scheduler.common.exception.JobAlreadyFinishedException) JobPriority(org.ow2.proactive.scheduler.common.job.JobPriority) RMProxiesManager(org.ow2.proactive.scheduler.core.rmproxies.RMProxiesManager) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Page(org.ow2.proactive.scheduler.common.Page) JobState(org.ow2.proactive.scheduler.common.job.JobState) Collectors(java.util.stream.Collectors) YOU_DO_NOT_HAVE_PERMISSION_TO_KILL_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_KILL_THIS_JOB) Tools(org.ow2.proactive.utils.Tools) YOU_DO_NOT_HAVE_PERMISSION_TO_ADD_EXTERNAL_ENDPOINT_URL_TO_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_ADD_EXTERNAL_ENDPOINT_URL_TO_THIS_JOB) ActiveObject(org.objectweb.proactive.extensions.annotation.ActiveObject) SchedulerState(org.ow2.proactive.scheduler.common.SchedulerState) SchedulerPortalConfiguration(org.ow2.proactive.scheduler.util.SchedulerPortalConfiguration) YOU_DO_NOT_HAVE_PERMISSION_TO_ENABLE_VISE_THIS_TASK(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_ENABLE_VISE_THIS_TASK) HybridEncryptionUtil(org.ow2.proactive.authentication.crypto.HybridEncryptionUtil) TableSizeMonitorRunner(org.ow2.proactive.scheduler.core.helpers.TableSizeMonitorRunner) YOU_DO_NOT_HAVE_PERMISSION_TO_SEND_SIGNALS_TO_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_SEND_SIGNALS_TO_THIS_JOB) ServerJobAndTaskLogs(org.ow2.proactive.scheduler.util.ServerJobAndTaskLogs) UniqueID(org.objectweb.proactive.core.UniqueID) SignalApiImpl(org.ow2.proactive.scheduler.signal.SignalApiImpl) JobSortParameter(org.ow2.proactive.scheduler.common.JobSortParameter) SubmissionClosedException(org.ow2.proactive.scheduler.common.exception.SubmissionClosedException) Job(org.ow2.proactive.scheduler.common.job.Job) TaskResult(org.ow2.proactive.scheduler.common.task.TaskResult) JobResult(org.ow2.proactive.scheduler.common.job.JobResult) SchedulerStatus(org.ow2.proactive.scheduler.common.SchedulerStatus) PAActiveObject(org.objectweb.proactive.api.PAActiveObject) YOU_DO_NOT_HAVE_PERMISSION_TO_PAUSE_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_PAUSE_THIS_JOB) DatabaseManagerException(org.ow2.proactive.db.DatabaseManagerException) TaskId(org.ow2.proactive.scheduler.common.task.TaskId) TaskSkippedException(org.ow2.proactive.scheduler.common.exception.TaskSkippedException) Scheduler(org.ow2.proactive.scheduler.common.Scheduler) JobsMemoryMonitorRunner(org.ow2.proactive.scheduler.core.helpers.JobsMemoryMonitorRunner) Charset(java.nio.charset.Charset) SortParameter(org.ow2.proactive.db.SortParameter) ExecutorService(java.util.concurrent.ExecutorService) IdentifiedJob(org.ow2.proactive.scheduler.job.IdentifiedJob) NamedThreadFactory(org.objectweb.proactive.utils.NamedThreadFactory) YOU_DO_NOT_HAVE_PERMISSION_TO_RESUME_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_RESUME_THIS_JOB) PublicKey(java.security.PublicKey) JobDescriptor(org.ow2.proactive.scheduler.common.JobDescriptor) SchedulerConstants(org.ow2.proactive.scheduler.common.SchedulerConstants) Subject(javax.security.auth.Subject) TimeUnit(java.util.concurrent.TimeUnit) ProActiveException(org.objectweb.proactive.core.ProActiveException) ClientsPolicy(org.ow2.proactive.policy.ClientsPolicy) InternalJob(org.ow2.proactive.scheduler.job.InternalJob) SignalApiException(org.ow2.proactive.scheduler.signal.SignalApiException) java.io(java.io) JobUsage(org.ow2.proactive.scheduler.common.usage.JobUsage) AOSynchronization(org.ow2.proactive.scheduler.synchronization.AOSynchronization) YOU_DO_NOT_HAVE_PERMISSION_TO_PUT_THIRD_PARTY_CREDENTIALS_IN_THE_SCHEDULER(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_PUT_THIRD_PARTY_CREDENTIALS_IN_THE_SCHEDULER) YOU_DO_NOT_HAVE_PERMISSION_TO_SUBMIT_A_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_SUBMIT_A_JOB) RecoveredSchedulerState(org.ow2.proactive.scheduler.core.db.RecoveredSchedulerState) YOU_DO_NOT_HAVE_PERMISSION_TO_RELOAD_POLICY_CONFIGURATION(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_RELOAD_POLICY_CONFIGURATION) SimpleTaskLogs(org.ow2.proactive.scheduler.common.task.SimpleTaskLogs) JobVariable(org.ow2.proactive.scheduler.common.job.JobVariable) YOU_DO_NOT_HAVE_PERMISSION_TO_REMOVE_EXTERNAL_ENDPOINT_URL_TO_THIS_JOB(org.ow2.proactive.scheduler.core.SchedulerFrontendState.YOU_DO_NOT_HAVE_PERMISSION_TO_REMOVE_EXTERNAL_ENDPOINT_URL_TO_THIS_JOB) TaskId(org.ow2.proactive.scheduler.common.task.TaskId) InvalidChannelException(org.ow2.proactive.scheduler.synchronization.InvalidChannelException) Signal(org.ow2.proactive.scheduler.signal.Signal) JobVariable(org.ow2.proactive.scheduler.common.job.JobVariable)

Example 3 with Signal

use of org.ow2.proactive.scheduler.signal.Signal in project scheduling by ow2-proactive.

the class SchedulerClientTest method testSignals.

@Test(timeout = MAX_WAIT_TIME)
public void testSignals() throws Throwable {
    ISchedulerClient client = clientInstance();
    Job job = nodeClientJob("/functionaltests/descriptors/register_service_with_signals.groovy", null, null);
    // submit job with 'ready signal' and add variables
    JobId jobId = submitJob(job, client);
    JobInfo jobInfo;
    // wait until 'ready_my_signal' signal is sent
    do {
        jobInfo = client.getJobInfo(jobId.toString());
        Assert.assertNotNull(jobInfo);
        Thread.sleep(1000);
    } while (!jobInfo.getSignals().contains("ready_my_signal"));
    Map<String, String> outpuVariables = new HashMap<>();
    outpuVariables.put("name", "15");
    // validate the job variables
    List<JobVariable> jobVariables = client.validateJobSignal(jobId.value(), "my_signal", outpuVariables);
    // add 'my_signal' signal
    Set<String> signals = client.addJobSignal(jobId.value(), "my_signal", outpuVariables);
    // wait until the job is finished
    client.waitForJob(jobId.toString(), TimeUnit.MINUTES.toMillis(5));
    Assert.assertFalse(signals.contains("ready_my_signal"));
    Assert.assertTrue(signals.contains("my_signal"));
    JobVariable nameJobVariable = jobVariables.stream().filter(jobVariable -> jobVariable.getName().equals("name")).findFirst().get();
    Assert.assertNotNull(nameJobVariable);
    Assert.assertEquals("15", nameJobVariable.getValue());
    Assert.assertEquals("PA:Integer", nameJobVariable.getModel());
    JobVariable secondJobVariable = jobVariables.stream().filter(jobVariable -> jobVariable.getName().equals("second")).findFirst().get();
    Assert.assertNotNull(secondJobVariable);
    Assert.assertEquals("15", secondJobVariable.getValue());
    Assert.assertEquals("PA:Integer", secondJobVariable.getModel());
}
Also used : JobInfo(org.ow2.proactive.scheduler.common.job.JobInfo) ISchedulerClient(org.ow2.proactive.scheduler.rest.ISchedulerClient) TaskFlowJob(org.ow2.proactive.scheduler.common.job.TaskFlowJob) SimpleJob(functionaltests.jobs.SimpleJob) Job(org.ow2.proactive.scheduler.common.job.Job) NonTerminatingJob(functionaltests.jobs.NonTerminatingJob) JobVariable(org.ow2.proactive.scheduler.common.job.JobVariable) JobId(org.ow2.proactive.scheduler.common.job.JobId) Test(org.junit.Test)

Example 4 with Signal

use of org.ow2.proactive.scheduler.signal.Signal in project scheduling by ow2-proactive.

the class SignalApiTest method classInit.

@BeforeClass
public static void classInit() throws IOException, ActiveObjectCreationException, NodeException, AlreadyBoundException {
    CentralPAPropertyRepository.PA_CLASSLOADING_USEHTTP.setValue(false);
    if (System.getProperty("log4j.configuration") == null) {
        // While logger is not configured and it not set with sys properties, use Console logger
        Logger.getRootLogger().getLoggerRepository().resetConfiguration();
        BasicConfigurator.configure(new ConsoleAppender(new PatternLayout("%m%n")));
        Logger.getRootLogger().setLevel(Level.DEBUG);
    }
    Logger.getLogger(SignalApiImpl.class).setLevel(Level.TRACE);
    tempFolder = folder.newFolder("signal");
    Node localNode = ProActiveRuntimeImpl.getProActiveRuntime().createLocalNode("signal-node-0", true, "signal-v-node-0");
    synchronizationInternal = PAActiveObject.newActive(AOSynchronization.class, new Object[] { tempFolder.getAbsolutePath() }, localNode);
    synchronizationInternal.createChannelIfAbsent(USER, TASK_ID, SIGNALS_CHANNEL, true);
    signalApi = new SignalApiImpl(USER, TASK_ID, synchronizationInternal);
    executor = Executors.newFixedThreadPool(2);
}
Also used : AOSynchronization(org.ow2.proactive.scheduler.synchronization.AOSynchronization) Node(org.objectweb.proactive.core.node.Node) PAActiveObject(org.objectweb.proactive.api.PAActiveObject)

Example 5 with Signal

use of org.ow2.proactive.scheduler.signal.Signal in project scheduling by ow2-proactive.

the class SSHInfrastructureV2 method startNodeImpl.

/**
 * Internal node acquisition method
 * <p>
 * Starts a PA runtime on remote host using SSH, register it manually in the
 * nodesource.
 *
 * @param hostTracker The host on which one the node will be started
 * @param nbNodes number of nodes to deploy
 * @param depNodeURLs list of deploying or lost nodes urls created
 * @throws RMException
 *             acquisition failed
 */
public void startNodeImpl(final HostTracker hostTracker, final int nbNodes, final List<String> depNodeURLs) throws RMException {
    String fs = getTargetOSObj().fs;
    // we set the java security policy file
    ArrayList<String> sb = new ArrayList<>();
    final boolean containsSpace = schedulingPath.contains(" ");
    if (!deploymentMode.equals("useNodeJarStartupScript")) {
        if (containsSpace) {
            sb.add("-Dproactive.home=\"" + schedulingPath + "\"");
        } else {
            sb.add("-Dproactive.home=" + schedulingPath);
        }
    }
    String securitycmd = CentralPAPropertyRepository.JAVA_SECURITY_POLICY.getCmdLine();
    if (!this.javaOptions.contains(securitycmd) && !deploymentMode.equals("useNodeJarStartupScript")) {
        if (containsSpace) {
            securitycmd += "\"";
        }
        securitycmd += this.schedulingPath + fs + "config" + fs;
        securitycmd += "security.java.policy-client";
        if (containsSpace) {
            securitycmd += "\"";
        }
        sb.add(securitycmd);
    }
    // we set the log4j configuration file
    String log4jcmd = CentralPAPropertyRepository.LOG4J.getCmdLine();
    if (!this.javaOptions.contains(log4jcmd) && !deploymentMode.equals("useNodeJarStartupScript")) {
        // log4j only understands urls
        if (containsSpace) {
            log4jcmd += "\"";
        }
        log4jcmd += "file:";
        if (!this.schedulingPath.startsWith("/")) {
            log4jcmd += "/";
        }
        log4jcmd += this.schedulingPath.replace("\\", "/");
        log4jcmd += "/config/log/node.properties";
        if (containsSpace) {
            log4jcmd += "\"";
        }
        sb.add(log4jcmd);
    }
    // we add extra java/PA configuration
    if (this.javaOptions != null && !this.javaOptions.trim().isEmpty()) {
        sb.add(this.javaOptions.trim());
    }
    CommandLineBuilder clb = super.getDefaultCommandLineBuilder(getTargetOSObj());
    final boolean deployNodesInDetachedMode = PAResourceManagerProperties.RM_NODES_RECOVERY.getValueAsBoolean() || PAResourceManagerProperties.RM_PRESERVE_NODES_ON_SHUTDOWN.getValueAsBoolean();
    if (deployNodesInDetachedMode) {
        // if we do not want to kill the nodes when the RM exits or
        // restarts, then we should launch the nodes in background and
        // ignore the RM termination signal
        clb.setDetached();
    }
    clb.setJavaPath(this.javaPath);
    clb.setRmHome(this.schedulingPath);
    clb.setPaProperties(sb);
    final String nodeName = nodeNameBuilder.generateNodeName(hostTracker);
    clb.setNodeName(nodeName);
    clb.setNumberOfNodes(nbNodes);
    // set the stratup script retrieved from NodeCommandLine.properties
    if (!this.deploymentMode.equals("autoGenerated")) {
        clb.setDeploymentMode(deploymentMode);
        clb.setStartupScript((deploymentMode.equals("useStartupScript") ? startupScriptStandard : startupScriptWithNodeJarDownload));
    }
    if (this.deploymentMode.equals("useNodeJarStartupScript")) {
        clb.setNodeJarUrl(nodeJarUrl);
    }
    // finally, the credential's value
    String credString;
    try {
        Client currentClient = super.nodeSource.getAdministrator();
        credString = new String(currentClient.getCredentials().getBase64());
    } catch (KeyException e) {
        throw new RMException("Could not get base64 credentials", e);
    }
    clb.setCredentialsValueAndNullOthers(credString);
    // add an expected node. every unexpected node will be discarded
    String cmdLine;
    String obfuscatedCmdLine;
    try {
        cmdLine = clb.buildCommandLine(true);
        obfuscatedCmdLine = clb.buildCommandLine(false);
    } catch (IOException e) {
        throw new RMException("Cannot build the " + RMNodeStarter.class.getSimpleName() + "'s command line.", e);
    }
    // one escape the command to make it runnable through ssh
    if (cmdLine.contains("\"")) {
        cmdLine = cmdLine.replaceAll("\"", "\\\\\"");
    }
    final String finalCmdLine = cmdLine;
    // The final addDeployingNode() method will initiate a timeout that
    // will declare node as lost and set the description of the failure
    // with a simplistic message, since there is no way to override this
    // mechanism we consider only 90% of timeout to set custom description
    // in case of failure and still allow global timeout
    final int shorterTimeout = Math.round((90 * super.nodeTimeOut) / 100);
    JSch jsch = new JSch();
    final String msg = "deploy on " + hostTracker.getResolvedAddress();
    final List<String> createdNodeNames = RMNodeStarter.getWorkersNodeNames(nodeName, nbNodes);
    depNodeURLs.addAll(addMultipleDeployingNodes(createdNodeNames, obfuscatedCmdLine, msg, super.nodeTimeOut));
    addTimeouts(depNodeURLs);
    Session session;
    try {
        // Create ssh session to the hostname
        session = jsch.getSession(this.sshUsername, hostTracker.getResolvedAddress().getHostName(), this.sshPort);
        if (this.sshPassword == null) {
            jsch.addIdentity(this.sshUsername, this.sshPrivateKey, null, null);
        } else {
            session.setPassword(this.sshPassword);
        }
        session.setConfig(this.sshOptions);
        session.connect(shorterTimeout);
    } catch (JSchException e) {
        multipleDeclareDeployingNodeLost(depNodeURLs, "unable to " + msg + "\n" + getStackTraceAsString(e));
        throw new RMException("unable to " + msg, e);
    }
    SSHInfrastructureV2.logger.info("Executing SSH command: '" + finalCmdLine + "'");
    ScheduledExecutorService deployService = Executors.newSingleThreadScheduledExecutor();
    try {
        // Create ssh channel to run the cmd
        ByteArrayOutputStream baos = new ByteArrayOutputStream(DEFAULT_OUTPUT_BUFFER_LENGTH);
        ChannelExec channel;
        try {
            channel = (ChannelExec) session.openChannel("exec");
            channel.setCommand(finalCmdLine);
            channel.setOutputStream(baos);
            channel.setErrStream(baos);
            channel.connect();
        } catch (JSchException e) {
            multipleDeclareDeployingNodeLost(depNodeURLs, "unable to " + msg + "\n" + getStackTraceAsString(e));
            throw new RMException("unable to " + msg, e);
        }
        final ChannelExec chan = channel;
        Future<Void> deployResult = deployService.submit(new Callable<Void>() {

            @Override
            public Void call() throws Exception {
                while (!shutDown.get() && !checkAllNodesAreAcquiredAndDo(createdNodeNames, null, null)) {
                    if (anyTimedOut(depNodeURLs)) {
                        throw new IllegalStateException("The upper infrastructure has issued a timeout");
                    }
                    // processes live completely independently
                    if (!deployNodesInDetachedMode && chan.getExitStatus() != PROCESS_STILL_RUNNING_VALUE) {
                        throw new IllegalStateException("The jvm process of the node has exited prematurely");
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // we know the cause of this
                        return null;
                    // interruption just exit
                    }
                }
                // Victory
                return null;
            }
        });
        try {
            deployResult.get(shorterTimeout, TimeUnit.MILLISECONDS);
        } catch (ExecutionException e) {
            declareLostAndThrow("Unable to " + msg + " due to " + e.getCause(), depNodeURLs, channel, baos, e);
        } catch (InterruptedException e) {
            deployResult.cancel(true);
            declareLostAndThrow("Unable to " + msg + " due to an interruption", depNodeURLs, channel, baos, e);
        } catch (TimeoutException e) {
            deployResult.cancel(true);
            declareLostAndThrow("Unable to " + msg + " due to timeout", depNodeURLs, channel, baos, e);
        } finally {
            channel.disconnect();
        }
    } finally {
        removeTimeouts(depNodeURLs);
        session.disconnect();
        deployService.shutdownNow();
    }
}
Also used : JSchException(com.jcraft.jsch.JSchException) Throwables.getStackTraceAsString(com.google.common.base.Throwables.getStackTraceAsString) CommandLineBuilder(org.ow2.proactive.resourcemanager.utils.CommandLineBuilder) JSch(com.jcraft.jsch.JSch) RMException(org.ow2.proactive.resourcemanager.exception.RMException) Client(org.ow2.proactive.resourcemanager.authentication.Client) ExecutionException(java.util.concurrent.ExecutionException) TimeoutException(java.util.concurrent.TimeoutException) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) IOException(java.io.IOException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) KeyException(java.security.KeyException) ChannelExec(com.jcraft.jsch.ChannelExec) KeyException(java.security.KeyException) TimeoutException(java.util.concurrent.TimeoutException) IOException(java.io.IOException) RMException(org.ow2.proactive.resourcemanager.exception.RMException) ExecutionException(java.util.concurrent.ExecutionException) JSchException(com.jcraft.jsch.JSchException) Session(com.jcraft.jsch.Session)

Aggregations

ImmediateService (org.objectweb.proactive.annotation.ImmediateService)3 JobId (org.ow2.proactive.scheduler.common.job.JobId)3 JobVariable (org.ow2.proactive.scheduler.common.job.JobVariable)3 KeyException (java.security.KeyException)2 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)2 PAActiveObject (org.objectweb.proactive.api.PAActiveObject)2 TaskId (org.ow2.proactive.scheduler.common.task.TaskId)2 Signal (org.ow2.proactive.scheduler.signal.Signal)2 SignalApiException (org.ow2.proactive.scheduler.signal.SignalApiException)2 InvalidChannelException (org.ow2.proactive.scheduler.synchronization.InvalidChannelException)2 Throwables.getStackTraceAsString (com.google.common.base.Throwables.getStackTraceAsString)1 ChannelExec (com.jcraft.jsch.ChannelExec)1 JSch (com.jcraft.jsch.JSch)1 JSchException (com.jcraft.jsch.JSchException)1 Session (com.jcraft.jsch.Session)1 NonTerminatingJob (functionaltests.jobs.NonTerminatingJob)1 SimpleJob (functionaltests.jobs.SimpleJob)1 java.io (java.io)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 IOException (java.io.IOException)1