syntax = "proto3";
package dbtesterpb;

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

import "dbtesterpb/database_id.proto";

import "dbtesterpb/flag_etcd.proto";
import "dbtesterpb/flag_zookeeper.proto";
import "dbtesterpb/flag_consul.proto";
import "dbtesterpb/flag_zetcd.proto";
import "dbtesterpb/flag_cetcd.proto";

import "dbtesterpb/config_client_machine.proto";

option (gogoproto.marshaler_all) = true;
option (gogoproto.sizer_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.goproto_getters_all) = false;

service Transporter {
  rpc Transfer(Request) returns (Response) {}
}

enum Operation {
  Start = 0;
  Stop = 1;
  Heartbeat = 2;
}

message Request {
  Operation Operation = 1;
  bool TriggerLogUpload = 2;

  DatabaseID DatabaseID = 3;
  string DatabaseTag = 4;

  // PeerIPsString encodes a list of endpoints in string
  // because Protocol Buffer does not have a list or array datatype
  // which is ordered. 'repeated' does not guarantee the ordering.
  string PeerIPsString = 5;
  uint32 IPIndex = 6;

  int64 CurrentClientNumber = 7;

  ConfigClientMachineInitial ConfigClientMachineInitial = 8;

  flag__etcd__v2_3 flag__etcd__v2_3 = 100;
  flag__etcd__v3_1 flag__etcd__v3_1 = 101;
  flag__etcd__v3_2 flag__etcd__v3_2 = 102;
  flag__etcd__tip flag__etcd__tip = 103;

  flag__zookeeper__r3_4_9 flag__zookeeper__r3_4_9 = 200;
  flag__zookeeper__r3_5_2_alpha flag__zookeeper__r3_5_2_alpha = 201;
  flag__zookeeper__r3_5_3_beta flag__zookeeper__r3_5_3_beta = 202;

  flag__consul__v0_7_5 flag__consul__v0_7_5 = 300;
  flag__consul__v0_8_0 flag__consul__v0_8_0 = 301;
  flag__consul__v0_8_4 flag__consul__v0_8_4 = 302;

  flag__cetcd__beta flag__cetcd__beta = 400;
  flag__zetcd__beta flag__zetcd__beta = 500;
}

message Response {
  bool Success = 1;

  // DiskSpaceUsageBytes is the data size of the database on disk in bytes.
  // It measures after database is requested to stop.
  int64 DiskSpaceUsageBytes = 2;
}
