/*
 *
 * Copyright beikunyun filesystem team.
 *
 *
 */

 syntax = "proto3";
 package bky.registry.api;
 
 
 message Metadata{
     string kv = 1;
 }
 //client向server拉取数据请求创建文件或目录
 message PullCreateReq {
     //0: 客户端向服务端发送请求; 1: 服务端向客户端发送请求; 其他：未定义行为
     int32 sendtype = 1;        
     //Tenent及用户各使用16bits标识码，称为tcode;
     //在rocksdb里面每个key都会该信息，可以把这部分信息抽离出来，再在数据接收端进行key值的拼接，以减少网络层数据传输的压力
     string tcode = 2;  
 }
 message PullCreateResp {
     string tcode = 1;
     repeated Metadata md = 2; 
     // 0:成功;  -1: 失败; 其他：未定义行为
     int32 ret_code = 3;
 }
 
 //client向server推送数据请求创建文件或目录
 message PushCreateReq {
     //0: 客户端向服务端发送请求; 1: 服务端向客户端发送请求; 其他：未定义行为
     int32 sendtype = 1;        
     //Tenent及用户各使用16bits标识码，称为tcode;
     string tcode = 2;  
     repeated Metadata metadata = 3; 
 }
 message PushCreateResp {
     string tcode = 1;
     //数据推送是否更新成功
     int32 retCode = 2;
 }
 
message WatchUpdateReq{
    int32 clientId = 1;
    string tcode = 2;
}

message WatchUpdateResp{
    int32 clientId = 1;
    string notifyMsg = 2;
}


//  //文件路径,对应rocksdb的key值
//  message AbsPath{
//      string k = 1;
//  }
//  //删除
//  message RemoveReq{
//      string tcode = 1;
//      repeated AbsPath path = 2;
//  }
//  message RemoveResp{
//      string tcode = 1;
//      int32 retCode = 2;
//  }
 //更新
//  message UpdateReq{
//      string tcode = 1;
//      repeated Metadata md = 2;
//  }
//  message UpdateResp{
//      string tcode = 1;
//      int32 retCode = 2;
//  }
//  //目录查询
//  message QueryDirdentsReq{
//      string tcode = 1;
//      repeated AbsPath path= 2;
//  }
//  message QueryDirdentsResp{
//      string tcode = 1;
//      repeated Metadata md = 2;
//  }
 
 service MetadataOps {
     rpc CreateByPull(stream PullCreateReq) returns (stream PullCreateResp) {}
     rpc CreateByPush(stream PushCreateReq) returns (stream PushCreateResp) {}
     rpc WatchUpdate(stream WatchUpdateReq) returns (stream WatchUpdateResp){}
    //  rpc Remove(stream RemoveReq) returns(stream RemoveResp){}
    //  rpc Update(stream UpdateReq) returns(stream UpdateResp){}
    //  rpc QueryDirdents(stream QueryDirdentsReq) returns(stream QueryDirdentsResp){}
 }