syntax = "proto3";
package milvus.proto.master;

option go_package="github.com/zilliztech/milvus-distributed/internal/proto/masterpb";

import "common.proto";
import "internal_msg.proto";
import "service_msg.proto";

service Master {
    /**
     * @brief This method is used to create collection
     *
     * @param CreateCollectionRequest, use to provide collection information to be created.
     *
     * @return Status
     */
    rpc CreateCollection(internal.CreateCollectionRequest) returns (common.Status){}
    
    /**
     * @brief This method is used to delete collection.
     *
     * @param DropCollectionRequest, collection name is going to be deleted.
     *
     * @return Status
     */
    rpc DropCollection(internal.DropCollectionRequest) returns (common.Status) {}

    /**
     * @brief This method is used to test collection existence.
     *
     * @param HasCollectionRequest, collection name is going to be tested.
     *
     * @return BoolResponse
     */
    rpc HasCollection(internal.HasCollectionRequest) returns (service.BoolResponse) {}

    /**
     * @brief This method is used to get collection schema.
     *
     * @param DescribeCollectionRequest, target collection name.
     *
     * @return CollectionSchema
     */
    rpc DescribeCollection(internal.DescribeCollectionRequest) returns (service.CollectionDescription) {}

    /**
     * @brief This method is used to list all collections.
     *
     * @return StringListResponse, collection name list
     */
    rpc ShowCollections(internal.ShowCollectionRequest) returns (service.StringListResponse) {}

    /**
     * @brief This method is used to create partition
     *
     * @return Status
     */
    rpc CreatePartition(internal.CreatePartitionRequest) returns (common.Status) {}

    /**
     * @brief This method is used to drop partition
     *
     * @return Status
     */
    rpc DropPartition(internal.DropPartitionRequest) returns (common.Status) {}

    /**
     * @brief This method is used to test partition existence.
     *
     * @return BoolResponse
     */
    rpc HasPartition(internal.HasPartitionRequest) returns (service.BoolResponse) {}

    /**
     * @brief This method is used to get basic partition infomation.
     *
     * @return PartitionDescription
     */
    rpc DescribePartition(internal.DescribePartitionRequest) returns (service.PartitionDescription) {}

    /**
     * @brief This method is used to show partition information
     *
     * @param ShowPartitionRequest, target collection name.
     *
     * @return StringListResponse
     */
    rpc ShowPartitions(internal.ShowPartitionRequest) returns (service.StringListResponse) {}


    rpc AllocTimestamp(internal.TsoRequest) returns (internal.TsoResponse) {}
    rpc AllocID(internal.IDRequest) returns (internal.IDResponse) {}
}
