//  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.

syntax = "proto2";
package heron.proto.scheduler;

option java_package = "org.apache.heron.proto.scheduler";
option java_outer_classname = "Scheduler";

import "common.proto";
import "packing_plan.proto";

message SchedulerLocation {
  required string topology_name = 1;
  // host:port or DNS address of scheduler which can be reached for runtime management.
  required string http_endpoint = 2;
  // Optional links to topology's customized ui page
  // Example: link to the Mesos Slave UI page displaying all scheduled containers
  repeated string job_page_link = 3;
}

//
// Interfaces called by scheduler
//
message KillTopologyRequest {
  required string topology_name = 1;
}

message RestartTopologyRequest {
  required string topology_name = 1;
  // container_index would be -1 if no container is specified to restart
  // That means we would restart all containers.
  required int32 container_index = 2;
}

message UpdateTopologyRequest {
  required heron.proto.system.PackingPlan currentPackingPlan = 1;
  required heron.proto.system.PackingPlan proposedPackingPlan = 2;
}

message SchedulerResponse {
  required heron.proto.system.Status status = 1;
}
