Search in sources :

Example 1 with RemoteMessageEnvelope

use of com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope in project jesos by groupon.

the class InternalExecutorDriver method sendStatusUpdate.

@Override
public Status sendStatusUpdate(final TaskStatus taskStatus) {
    checkNotNull(taskStatus, "status is null");
    if (!context.isStateMachine(DRIVER_RUNNING)) {
        return context.getStateMachine();
    }
    if (taskStatus.getState() == TASK_STAGING) {
        LOG.error("Executor is not allowed to send TASK_STAGING status update. Aborting!");
        eventBus.post(new ExecutorCallback() {

            @Override
            public Runnable getCallback(final Executor executor, final ExecutorDriver executorDriver) {
                return new Runnable() {

                    @Override
                    public void run() {
                        executorDriver.abort();
                        final String message = "Executor is not allowed to send TASK_STAGING status update. Aborting!";
                        LOG.debug("calling error(driver, %s)", message);
                        executor.error(executorDriver, message);
                    }
                };
            }
        });
        return context.getStateMachine();
    }
    final UUID uuid = UUID.randomUUID();
    final long now = TimeUtil.currentTime();
    final StatusUpdateMessage message = StatusUpdateMessage.newBuilder().setPid(context.getDriverUPID().asString()).setUpdate(StatusUpdate.newBuilder().setFrameworkId(context.getFrameworkId()).setExecutorId(context.getExecutorId()).setSlaveId(context.getSlaveId()).setStatus(TaskStatus.newBuilder(taskStatus).setTimestamp(now)).setTimestamp(now).setUuid(UUIDUtil.uuidBytes(UUID.randomUUID()))).build();
    context.addUpdate(uuid, message.getUpdate());
    eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), context.getSlaveUPID(), message));
    return context.getStateMachine();
}
Also used : RemoteMessageEnvelope(com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope) Executor(org.apache.mesos.Executor) StatusUpdateMessage(mesos.internal.Messages.StatusUpdateMessage) ByteString(com.google.protobuf.ByteString) ExecutorDriver(org.apache.mesos.ExecutorDriver) UUID(java.util.UUID)

Example 2 with RemoteMessageEnvelope

use of com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope in project jesos by groupon.

the class LocalExecutorMessageProcessor method reconnectExecutor.

@Subscribe
public void reconnectExecutor(final ReconnectExecutorMessageEnvelope envelope) {
    checkState(envelope.getRecipient().equals(context.getDriverUPID()), "Received a remote message for local delivery");
    if (context.isStateMachine(DRIVER_ABORTED)) {
        LOG.warn("driver is aborted!");
        return;
    }
    final ReconnectExecutorMessage message = envelope.getMessage();
    checkState(message.getSlaveId().equals(context.getSlaveId()), "Received reconnect from slave %s (expected %s)", message.getSlaveId().getValue(), context.getSlaveId().getValue());
    final ReregisterExecutorMessage.Builder builder = ReregisterExecutorMessage.newBuilder().setExecutorId(context.getExecutorId()).setFrameworkId(context.getFrameworkId()).addAllUpdates(context.getUpdates()).addAllTasks(tasks.values());
    eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), context.getSlaveUPID(), builder.build()));
}
Also used : RemoteMessageEnvelope(com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope) ReregisterExecutorMessage(mesos.internal.Messages.ReregisterExecutorMessage) ReconnectExecutorMessage(mesos.internal.Messages.ReconnectExecutorMessage) Subscribe(com.google.common.eventbus.Subscribe)

Example 3 with RemoteMessageEnvelope

use of com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope in project jesos by groupon.

the class InternalExecutorDriver method sendFrameworkMessage.

@Override
public Status sendFrameworkMessage(final byte[] data) {
    checkNotNull(data, "data is null");
    if (!context.isStateMachine(DRIVER_RUNNING)) {
        return context.getStateMachine();
    }
    final ExecutorToFrameworkMessage message = ExecutorToFrameworkMessage.newBuilder().setSlaveId(context.getSlaveId()).setFrameworkId(context.getFrameworkId()).setExecutorId(context.getExecutorId()).setData(ByteString.copyFrom(data)).build();
    eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), context.getSlaveUPID(), message));
    return context.getStateMachine();
}
Also used : RemoteMessageEnvelope(com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope) ExecutorToFrameworkMessage(mesos.internal.Messages.ExecutorToFrameworkMessage)

Example 4 with RemoteMessageEnvelope

use of com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope in project jesos by groupon.

the class InternalExecutorDriver method start.

//
// ========================================================================
//
// Mesos ExecutorDriver API
//
// ========================================================================
//
@Override
public Status start() {
    if (!context.isStateMachine(DRIVER_NOT_STARTED)) {
        return context.getStateMachine();
    }
    try {
        driverStart();
        //
        // Register with Mesos Slave
        //
        final RegisterExecutorMessage message = RegisterExecutorMessage.newBuilder().setFrameworkId(context.getFrameworkId()).setExecutorId(context.getExecutorId()).build();
        eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), context.getSlaveUPID(), message));
        context.setStateMachine(DRIVER_RUNNING);
    } catch (final Exception e) {
        context.setStateMachine(DRIVER_ABORTED);
        LOG.error(e, "Failed to create executor process for '%s'", context.getSlaveUPID());
        eventBus.post(new ExecutorCallback() {

            @Override
            public Runnable getCallback(final Executor executor, final ExecutorDriver executorDriver) {
                return new Runnable() {

                    @Override
                    public void run() {
                        final String message = format("Failed to create scheduler process for '%s': %s", context.getSlaveUPID(), e.getMessage());
                        LOG.debug("calling error(driver, %s)", message);
                        executor.error(executorDriver, message);
                    }
                };
            }
        });
    }
    return context.getStateMachine();
}
Also used : RegisterExecutorMessage(mesos.internal.Messages.RegisterExecutorMessage) RemoteMessageEnvelope(com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope) Executor(org.apache.mesos.Executor) ByteString(com.google.protobuf.ByteString) ExecutorDriver(org.apache.mesos.ExecutorDriver) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException)

Aggregations

RemoteMessageEnvelope (com.groupon.mesos.executor.ExecutorMessageEnvelope.RemoteMessageEnvelope)4 ByteString (com.google.protobuf.ByteString)2 Executor (org.apache.mesos.Executor)2 ExecutorDriver (org.apache.mesos.ExecutorDriver)2 Subscribe (com.google.common.eventbus.Subscribe)1 IOException (java.io.IOException)1 UUID (java.util.UUID)1 ExecutionException (java.util.concurrent.ExecutionException)1 ExecutorToFrameworkMessage (mesos.internal.Messages.ExecutorToFrameworkMessage)1 ReconnectExecutorMessage (mesos.internal.Messages.ReconnectExecutorMessage)1 RegisterExecutorMessage (mesos.internal.Messages.RegisterExecutorMessage)1 ReregisterExecutorMessage (mesos.internal.Messages.ReregisterExecutorMessage)1 StatusUpdateMessage (mesos.internal.Messages.StatusUpdateMessage)1