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

/**
 * These .proto interfaces are private and stable.
 * Please see http://wiki.apache.org/hadoop/Compatibility
 * for what changes are allowed for a *stable* .proto interface.
 */

option java_package = "org.apache.hadoop.ipc.proto";
option java_outer_classname = "GenericRefreshProtocolProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
package hadoop.common;

/**
 *  Refresh request.
 */
message GenericRefreshRequestProto {
    optional string identifier = 1;
    repeated string args = 2;
}

/**
 * A single response from a refresh handler.
 */
message GenericRefreshResponseProto {
    optional int32 exitStatus = 1; // unix exit status to return
    optional string userMessage = 2; // to be displayed to the user
    optional string senderName = 3; // which handler sent this message
}

/**
 * Collection of responses from zero or more handlers.
 */
message GenericRefreshResponseCollectionProto {
    repeated GenericRefreshResponseProto responses = 1;
}

/**
 * Protocol which is used to refresh a user-specified feature.
 */
service GenericRefreshProtocolService {
  rpc refresh(GenericRefreshRequestProto)
      returns(GenericRefreshResponseCollectionProto);
}
