content: /**
   * Licensed 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.aurora.scheduler.mesos;
  
  import java.util.Collection;
  
  import com.google.common.util.concurrent.Service;
  
  import org.apache.mesos.v1.Protos.Filters;
  import org.apache.mesos.v1.Protos.Offer.Operation;
  import org.apache.mesos.v1.Protos.OfferID;
  import org.apache.mesos.v1.Protos.TaskStatus;
  
  /**
   * Wraps the mesos Scheduler driver to ensure its used in a valid lifecycle; namely:
   * <pre>
   *   (run -> kill*)? -> stop*
   * </pre>
   *
   * Also ensures the driver is only asked for when needed.
   */
  public interface Driver extends Service {
  
    /**
     * Performs operations eg launching a task or reserving an offer.
     *
     * @param offerId ID of the resource offer to accept with the task.
     * @param operations Operations to perform on the offer eg reserve offer and launch a task.
     * @param filter offer filter applied to unused resources in this offer.
     */
    void acceptOffers(OfferID offerId, Collection<Operation> operations, Filters filter);
  
    /**
     * Accepts an inverse offer.
     *
     * @param offerID ID of the inverse offer.
     * @param filter offer filter to apply.
     */
    void acceptInverseOffer(OfferID offerID, Filters filter);
  
    /**
     * Declines a resource offer.
     *
     * @param offerId ID of the offer to decline.
     * @param filter offer filter applied to this declined offer.
     */
    void declineOffer(OfferID offerId, Filters filter);
  
    /**
     * Sends a kill task request for the given {@code taskId} to the mesos master.
     *
     * @param taskId The id of the task to kill.
     */
    void killTask(String taskId);
  
    /**
     * Acknowledges the given {@code status} update.
     *
     * @param status The status to acknowledge.
     */
    void acknowledgeStatusUpdate(TaskStatus status);
  
    /**
     * Blocks until the driver is no longer active.
     */
    void blockUntilStopped();
  
    /**
     * Aborts the driver.
     */
    void abort();
  
    /**
     * Requests task reconciliation.
     *
     * @param statuses Task statuses to reconcile.
     */
    void reconcileTasks(Collection<TaskStatus> statuses);
  }
  