Search in sources :

Example 6 with Signal

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

the class SchedulerFrontend method validateJobSignal.

@Override
@ImmediateService
public List<JobVariable> validateJobSignal(String jobId, String signalName, Map<String, String> updatedVariables) throws NotConnectedException, UnknownJobException, PermissionException, SignalApiException, JobValidationException {
    if (updatedVariables == null || updatedVariables.isEmpty()) {
        return null;
    }
    String currentUser = frontendState.getCurrentUser();
    logger.debug("Request to validate signal " + signalName + " on job " + jobId + " received from " + currentUser);
    final JobId jobIdObject = JobIdImpl.makeJobId(jobId);
    frontendState.checkPermissions("addJobSignal", frontendState.getIdentifiedJob(jobIdObject), YOU_DO_NOT_HAVE_PERMISSION_TO_SEND_SIGNALS_TO_THIS_JOB);
    String readyPrefix = SignalApiImpl.READY_PREFIX;
    if (StringUtils.isBlank(signalName.trim())) {
        throw new SignalApiException("Empty signals are not allowed");
    }
    try {
        TaskId taskId = createFakeTaskId(jobId);
        publicStore.createChannelIfAbsent(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId, true);
        Signal signal = (Signal) publicStore.get(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId, readyPrefix + signalName);
        if (signal != null) {
            DefaultModelJobValidatorServiceProvider validatorServiceProvider = new DefaultModelJobValidatorServiceProvider();
            Map<String, Serializable> serializableUpdatedVariables = new LinkedHashMap<>();
            serializableUpdatedVariables.putAll(updatedVariables);
            validatorServiceProvider.validateVariables(signal.getInputVariables(), serializableUpdatedVariables, this, this);
            return signal.getInputVariables();
        } else {
            throw new SignalApiException("Signal not found");
        }
    } catch (InvalidChannelException e) {
        throw new SignalApiException("Could not read signals channel", e);
    } catch (IOException e) {
        throw new SignalApiException("Could not add signalName for the job " + jobId, e);
    }
}
Also used : InvalidChannelException(org.ow2.proactive.scheduler.synchronization.InvalidChannelException) Signal(org.ow2.proactive.scheduler.signal.Signal) DefaultModelJobValidatorServiceProvider(org.ow2.proactive.scheduler.common.job.factories.spi.model.DefaultModelJobValidatorServiceProvider) TaskId(org.ow2.proactive.scheduler.common.task.TaskId) SignalApiException(org.ow2.proactive.scheduler.signal.SignalApiException) JobId(org.ow2.proactive.scheduler.common.job.JobId) ImmediateService(org.objectweb.proactive.annotation.ImmediateService)

Example 7 with Signal

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

the class SchedulerFrontend method addJobSignal.

@Override
@ImmediateService
public Set<String> addJobSignal(String jobId, String signalName, Map<String, String> updatedVariables) throws NotConnectedException, UnknownJobException, PermissionException, SignalApiException, JobValidationException {
    String currentUser = frontendState.getCurrentUser();
    logger.info("Request to send signalName " + signalName + " on job " + jobId + " received from " + currentUser);
    final JobId jobIdObject = JobIdImpl.makeJobId(jobId);
    frontendState.checkPermissions("addJobSignal", frontendState.getIdentifiedJob(jobIdObject), YOU_DO_NOT_HAVE_PERMISSION_TO_SEND_SIGNALS_TO_THIS_JOB);
    if (StringUtils.isBlank(signalName.trim())) {
        throw new SignalApiException("Empty signals are not allowed");
    }
    try {
        TaskId taskId = createFakeTaskId(jobId);
        publicStore.createChannelIfAbsent(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId, true);
        Set<String> signals = publicStore.keySet(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId);
        String readyPrefix = SignalApiImpl.READY_PREFIX;
        if (!(signals.contains(readyPrefix + signalName) || signalName.startsWith(readyPrefix))) {
            throw new SignalApiException("Job " + jobId + " is not ready to receive the signalName " + signalName);
        }
        // Remove the existing ready signalName, add the signalName and return the set of signals
        Signal readySignal = (Signal) publicStore.get(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId, readyPrefix + signalName);
        setUpdatedVariables(updatedVariables, readySignal);
        publicStore.remove(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId, readyPrefix + signalName);
        publicStore.put(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId, signalName, readySignal);
        Set<String> finalSignals = publicStore.keySet(SIGNAL_ORIGINATOR, taskId, signalsChannel + jobId);
        return finalSignals;
    } catch (InvalidChannelException e) {
        throw new SignalApiException("Could not read signals channel", e);
    } catch (IOException e) {
        throw new SignalApiException("Could not add signalName for the job " + jobId, e);
    }
}
Also used : InvalidChannelException(org.ow2.proactive.scheduler.synchronization.InvalidChannelException) Signal(org.ow2.proactive.scheduler.signal.Signal) TaskId(org.ow2.proactive.scheduler.common.task.TaskId) SignalApiException(org.ow2.proactive.scheduler.signal.SignalApiException) JobId(org.ow2.proactive.scheduler.common.job.JobId) ImmediateService(org.objectweb.proactive.annotation.ImmediateService)

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