Search in sources :

Example 6 with UPID

use of com.groupon.mesos.util.UPID in project jesos by groupon.

the class InternalSchedulerDriver method sendMessage.

//
// Remote message delivery
//
@Subscribe
public void sendMessage(final RemoteMessageEnvelope envelope) throws Exception {
    final Message message = envelope.getMessage();
    final UPID recipient = envelope.getRecipient();
    checkState(!recipient.equals(context.getDriverUPID()), "Received a message with local recipient! (%s)", message);
    sender.sendHttpMessage(recipient, message);
}
Also used : UPID(com.groupon.mesos.util.UPID) DeactivateFrameworkMessage(mesos.internal.Messages.DeactivateFrameworkMessage) ReconcileTasksMessage(mesos.internal.Messages.ReconcileTasksMessage) KillTaskMessage(mesos.internal.Messages.KillTaskMessage) StatusUpdateAcknowledgementMessage(mesos.internal.Messages.StatusUpdateAcknowledgementMessage) ReregisterFrameworkMessage(mesos.internal.Messages.ReregisterFrameworkMessage) ResourceRequestMessage(mesos.internal.Messages.ResourceRequestMessage) StatusUpdateMessage(mesos.internal.Messages.StatusUpdateMessage) LaunchTasksMessage(mesos.internal.Messages.LaunchTasksMessage) FrameworkToExecutorMessage(mesos.internal.Messages.FrameworkToExecutorMessage) RegisterFrameworkMessage(mesos.internal.Messages.RegisterFrameworkMessage) UnregisterFrameworkMessage(mesos.internal.Messages.UnregisterFrameworkMessage) ReviveOffersMessage(mesos.internal.Messages.ReviveOffersMessage) Message(com.google.protobuf.Message) Subscribe(com.google.common.eventbus.Subscribe)

Example 7 with UPID

use of com.groupon.mesos.util.UPID in project jesos by groupon.

the class InternalSchedulerDriver method sendFrameworkMessage.

@Override
public Status sendFrameworkMessage(final ExecutorID executorId, final SlaveID slaveId, final byte[] data) {
    checkNotNull(executorId, "executorId is null");
    checkNotNull(slaveId, "slaveId is null");
    checkNotNull(data, "data is null");
    if (!context.isStateMachine(DRIVER_RUNNING)) {
        return context.getStateMachine();
    }
    final FrameworkToExecutorMessage message = FrameworkToExecutorMessage.newBuilder().setFrameworkId(context.getFrameworkId()).setExecutorId(executorId).setSlaveId(slaveId).setData(ByteString.copyFrom(data)).build();
    // directly to the slave, otherwise to the master and let the master sort it out.
    if (context.containsSlave(message.getSlaveId())) {
        final UPID slave = context.getSlaveUPID(message.getSlaveId());
        eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), slave, message));
    } else {
        eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), context.getMasterUPID(), message));
    }
    return context.getStateMachine();
}
Also used : UPID(com.groupon.mesos.util.UPID) RemoteMessageEnvelope(com.groupon.mesos.scheduler.SchedulerMessageEnvelope.RemoteMessageEnvelope) FrameworkToExecutorMessage(mesos.internal.Messages.FrameworkToExecutorMessage)

Example 8 with UPID

use of com.groupon.mesos.util.UPID in project jesos by groupon.

the class LocalSchedulerMessageProcessor method driverIsConnected.

private boolean driverIsConnected(final UPID messageSender) {
    final MasterInfo master = context.connectedMaster();
    if (master == null) {
        LOG.warn("Received message from  %s, but no master is leading, ignoring!", messageSender);
        return false;
    }
    // Master PID may have changed in the context in the meantime. Don't rely on the context
    // to be up to date but resolve the MasterInfo that was retrieved earlier.
    final UPID masterUpid = UPID.create(master.getPid());
    if (!masterUpid.equals(messageSender)) {
        LOG.warn("Received message from %s, leading master is %s, ignoring!", messageSender, masterUpid);
        return false;
    }
    return true;
}
Also used : MasterInfo(org.apache.mesos.Protos.MasterInfo) UPID(com.groupon.mesos.util.UPID)

Example 9 with UPID

use of com.groupon.mesos.util.UPID in project jesos by groupon.

the class LocalSchedulerMessageProcessor method frameworkError.

@Subscribe
public void frameworkError(final FrameworkErrorMessageEnvelope envelope) {
    checkState(envelope.getRecipient().equals(context.getDriverUPID()), "Received a remote message for local delivery");
    final UPID sender = envelope.getSender();
    if (!driverIsConnected(sender)) {
        return;
    }
    final FrameworkErrorMessage frameworkErrorMessage = envelope.getMessage();
    eventBus.post(new SchedulerCallback() {

        @Override
        public Runnable getCallback(final Scheduler scheduler, final SchedulerDriver schedulerDriver) {
            return new Runnable() {

                @Override
                public void run() {
                    schedulerDriver.abort();
                    scheduler.error(schedulerDriver, frameworkErrorMessage.getMessage());
                }
            };
        }
    });
}
Also used : UPID(com.groupon.mesos.util.UPID) Scheduler(org.apache.mesos.Scheduler) FrameworkErrorMessage(mesos.internal.Messages.FrameworkErrorMessage) SchedulerDriver(org.apache.mesos.SchedulerDriver) Subscribe(com.google.common.eventbus.Subscribe)

Example 10 with UPID

use of com.groupon.mesos.util.UPID in project jesos by groupon.

the class LocalSchedulerMessageProcessor method frameworkStatusUpdate.

@Subscribe
public void frameworkStatusUpdate(final StatusUpdateMessageEnvelope envelope) throws IOException {
    checkState(envelope.getRecipient().equals(context.getDriverUPID()), "Received a remote message for local delivery");
    final UPID sender = envelope.getSender();
    if (!driverIsConnected(sender)) {
        return;
    }
    final StatusUpdateMessage statusUpdateMessage = envelope.getMessage();
    final FrameworkID frameworkId = context.getFrameworkId();
    final FrameworkID messageFrameworkId = statusUpdateMessage.getUpdate().getFrameworkId();
    checkState(frameworkId.equals(messageFrameworkId), "Received Message for framework %s, but local id is %s", messageFrameworkId, frameworkId);
    final TaskStatus.Builder taskStatusBuilder = TaskStatus.newBuilder(statusUpdateMessage.getUpdate().getStatus());
    final TaskStatus taskStatus;
    // If the update is driver-generated or master-generated, it does not require acknowledgement (from Mesos source code, sched.cpp).
    final Optional<UPID> pid = statusUpdateMessage.hasPid() ? Optional.of(UPID.create(statusUpdateMessage.getPid())) : Optional.<UPID>absent();
    final boolean noAckRequired = envelope.getSender().equals(context.getDriverUPID()) || pid.isPresent() && pid.get().equals(context.getDriverUPID());
    if (noAckRequired) {
        taskStatus = taskStatusBuilder.clearUuid().build();
    } else {
        taskStatus = taskStatusBuilder.setUuid(statusUpdateMessage.getUpdate().getUuid()).build();
    }
    eventBus.post(new SchedulerCallback() {

        @Override
        public Runnable getCallback(final Scheduler scheduler, final SchedulerDriver schedulerDriver) {
            return new Runnable() {

                @Override
                public void run() {
                    scheduler.statusUpdate(schedulerDriver, taskStatus);
                }
            };
        }
    });
    if (implicitAcknowledgements && !noAckRequired) {
        final StatusUpdateAcknowledgementMessage statusUpdateAcknowledgementMessage = StatusUpdateAcknowledgementMessage.newBuilder().setFrameworkId(frameworkId).setSlaveId(statusUpdateMessage.getUpdate().getSlaveId()).setTaskId(taskStatus.getTaskId()).setUuid(statusUpdateMessage.getUpdate().getUuid()).build();
        eventBus.post(new RemoteMessageEnvelope(context.getDriverUPID(), context.getMasterUPID(), statusUpdateAcknowledgementMessage));
    }
}
Also used : Scheduler(org.apache.mesos.Scheduler) TaskStatus(org.apache.mesos.Protos.TaskStatus) UPID(com.groupon.mesos.util.UPID) RemoteMessageEnvelope(com.groupon.mesos.scheduler.SchedulerMessageEnvelope.RemoteMessageEnvelope) StatusUpdateAcknowledgementMessage(mesos.internal.Messages.StatusUpdateAcknowledgementMessage) StatusUpdateMessage(mesos.internal.Messages.StatusUpdateMessage) FrameworkID(org.apache.mesos.Protos.FrameworkID) SchedulerDriver(org.apache.mesos.SchedulerDriver) Subscribe(com.google.common.eventbus.Subscribe)

Aggregations

UPID (com.groupon.mesos.util.UPID)10 Subscribe (com.google.common.eventbus.Subscribe)8 Scheduler (org.apache.mesos.Scheduler)6 SchedulerDriver (org.apache.mesos.SchedulerDriver)6 StatusUpdateMessage (mesos.internal.Messages.StatusUpdateMessage)3 Message (com.google.protobuf.Message)2 RemoteMessageEnvelope (com.groupon.mesos.scheduler.SchedulerMessageEnvelope.RemoteMessageEnvelope)2 ExecutorToFrameworkMessage (mesos.internal.Messages.ExecutorToFrameworkMessage)2 FrameworkToExecutorMessage (mesos.internal.Messages.FrameworkToExecutorMessage)2 StatusUpdateAcknowledgementMessage (mesos.internal.Messages.StatusUpdateAcknowledgementMessage)2 DeactivateFrameworkMessage (mesos.internal.Messages.DeactivateFrameworkMessage)1 FrameworkErrorMessage (mesos.internal.Messages.FrameworkErrorMessage)1 KillTaskMessage (mesos.internal.Messages.KillTaskMessage)1 LaunchTasksMessage (mesos.internal.Messages.LaunchTasksMessage)1 LostSlaveMessage (mesos.internal.Messages.LostSlaveMessage)1 ReconcileTasksMessage (mesos.internal.Messages.ReconcileTasksMessage)1 RegisterExecutorMessage (mesos.internal.Messages.RegisterExecutorMessage)1 RegisterFrameworkMessage (mesos.internal.Messages.RegisterFrameworkMessage)1 ReregisterFrameworkMessage (mesos.internal.Messages.ReregisterFrameworkMessage)1 RescindResourceOfferMessage (mesos.internal.Messages.RescindResourceOfferMessage)1