/* * 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.flink.mesos.scheduler; import akka.actor.ActorRef; import org.apache.flink.mesos.scheduler.messages.Disconnected; import org.apache.flink.mesos.scheduler.messages.Error; import org.apache.flink.mesos.scheduler.messages.ExecutorLost; import org.apache.flink.mesos.scheduler.messages.FrameworkMessage; import org.apache.flink.mesos.scheduler.messages.OfferRescinded; import org.apache.flink.mesos.scheduler.messages.ReRegistered; import org.apache.flink.mesos.scheduler.messages.Registered; import org.apache.flink.mesos.scheduler.messages.ResourceOffers; import org.apache.flink.mesos.scheduler.messages.SlaveLost; import org.apache.flink.mesos.scheduler.messages.StatusUpdate; import org.apache.mesos.Protos; import org.apache.mesos.Scheduler; import org.apache.mesos.SchedulerDriver; import java.util.List; /** * This class reacts to callbacks from the Mesos scheduler driver. * * In order to preserve actor concurrency safety, this class simply sends * corresponding messages to the Mesos resource master actor. * * See https://mesos.apache.org/api/latest/java/org/apache/mesos/Scheduler.html */ public class SchedulerProxy implements Scheduler { /** The actor to which we report the callbacks */ private final ActorRef mesosActor; public SchedulerProxy(ActorRef mesosActor) { this.mesosActor = mesosActor; } @Override public void registered(SchedulerDriver driver, Protos.FrameworkID frameworkId, Protos.MasterInfo masterInfo) { mesosActor.tell(new Registered(frameworkId, masterInfo), ActorRef.noSender()); } @Override public void reregistered(SchedulerDriver driver, Protos.MasterInfo masterInfo) { mesosActor.tell(new ReRegistered(masterInfo), ActorRef.noSender()); } @Override public void disconnected(SchedulerDriver driver) { mesosActor.tell(new Disconnected(), ActorRef.noSender()); } @Override public void resourceOffers(SchedulerDriver driver, List<Protos.Offer> offers) { mesosActor.tell(new ResourceOffers(offers), ActorRef.noSender()); } @Override public void offerRescinded(SchedulerDriver driver, Protos.OfferID offerId) { mesosActor.tell(new OfferRescinded(offerId), ActorRef.noSender()); } @Override public void statusUpdate(SchedulerDriver driver, Protos.TaskStatus status) { mesosActor.tell(new StatusUpdate(status), ActorRef.noSender()); } @Override public void frameworkMessage(SchedulerDriver driver, Protos.ExecutorID executorId, Protos.SlaveID slaveId, byte[] data) { mesosActor.tell(new FrameworkMessage(executorId, slaveId, data), ActorRef.noSender()); } @Override public void slaveLost(SchedulerDriver driver, Protos.SlaveID slaveId) { mesosActor.tell(new SlaveLost(slaveId), ActorRef.noSender()); } @Override public void executorLost(SchedulerDriver driver, Protos.ExecutorID executorId, Protos.SlaveID slaveId, int status) { mesosActor.tell(new ExecutorLost(executorId, slaveId, status), ActorRef.noSender()); } @Override public void error(SchedulerDriver driver, String message) { mesosActor.tell(new Error(message), ActorRef.noSender()); } }