From 25de796ce60bb55e3af087c3eee79e1674e3e046 Mon Sep 17 00:00:00 2001 From: Minoru Osuka Date: Mon, 25 Nov 2019 20:59:04 +0900 Subject: [PATCH] Add probe command --- proto/indexpb.proto | 2 + proto/indexrpcpb.proto | 10 + src/client/client.rs | 33 +- src/cmd.rs | 1 + src/cmd/probe.rs | 22 + src/main.rs | 23 + src/proto/indexpb.rs | 66 +-- src/proto/indexpb_grpc.rs | 28 ++ src/proto/indexrpcpb.rs | 997 +++++++++++++++++++++++++++----------- src/server/server.rs | 34 +- 10 files changed, 882 insertions(+), 334 deletions(-) create mode 100644 src/cmd/probe.rs diff --git a/proto/indexpb.proto b/proto/indexpb.proto index 37a5091..3ca600b 100644 --- a/proto/indexpb.proto +++ b/proto/indexpb.proto @@ -9,6 +9,8 @@ service Index { } rpc RaftConfChange (indexrpcpb.ConfChangeReq) returns (indexrpcpb.RaftDone) { } + rpc Probe (indexrpcpb.ProbeReq) returns (indexrpcpb.ProbeResp) { + } rpc Peers (indexrpcpb.PeersReq) returns (indexrpcpb.PeersResp) { } rpc Metrics (indexrpcpb.MetricsReq) returns (indexrpcpb.MetricsResp) { diff --git a/proto/indexrpcpb.proto b/proto/indexrpcpb.proto index 8b81f10..cab075d 100644 --- a/proto/indexrpcpb.proto +++ b/proto/indexrpcpb.proto @@ -53,6 +53,16 @@ message LeaveReq { string peer_addr = 3; } +message ProbeReq { + uint64 client_id = 1; + uint64 seq = 2; +} + +message ProbeResp { + string value = 1; + RespErr err = 2; +} + message PeersReq { uint64 client_id = 1; uint64 seq = 2; diff --git a/src/client/client.rs b/src/client/client.rs index cb64a1e..5612ae8 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -9,15 +9,18 @@ use raft::eraftpb::{ConfChange, ConfChangeType}; use crate::proto::indexpb_grpc::IndexClient; use crate::proto::indexrpcpb::{ ApplyReq, CommitReq, CommitResp, ConfChangeReq, DeleteReq, DeleteResp, GetReq, GetResp, - MergeReq, MergeResp, MetricsReq, MetricsResp, PeersReq, PeersResp, PutReq, PutResp, RaftDone, - ReqType, RespErr, RollbackReq, RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, + MergeReq, MergeResp, MetricsReq, MetricsResp, PeersReq, PeersResp, ProbeReq, ProbeResp, PutReq, + PutResp, RaftDone, ReqType, RespErr, RollbackReq, RollbackResp, SchemaReq, SchemaResp, + SearchReq, SearchResp, }; pub fn create_client(addr: &str) -> IndexClient { let env = Arc::new(EnvBuilder::new().build()); let ch = ChannelBuilder::new(env).connect(&addr); + debug!("create channel for {}", addr); + let index_client = IndexClient::new(ch); debug!("create index client for {}", addr); - IndexClient::new(ch) + index_client } pub struct Clerk { @@ -94,6 +97,30 @@ impl Clerk { } } + pub fn probe(&mut self) -> String { + let mut req = ProbeReq::new(); + req.set_client_id(self.client_id); + req.set_seq(self.request_seq); + self.request_seq += 1; + + loop { + let reply = self.servers[self.leader_id] + .probe(&req) + .unwrap_or_else(|_e| { + let mut resp = ProbeResp::new(); + resp.set_err(RespErr::ErrWrongLeader); + resp + }); + match reply.err { + RespErr::OK => return reply.value, + RespErr::ErrWrongLeader => (), + RespErr::ErrNoKey => return String::from(""), + } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + thread::sleep(Duration::from_millis(100)); + } + } + pub fn peers(&mut self) -> String { let mut req = PeersReq::new(); req.set_client_id(self.client_id); diff --git a/src/cmd.rs b/src/cmd.rs index e4b94f2..10adaf8 100644 --- a/src/cmd.rs +++ b/src/cmd.rs @@ -5,6 +5,7 @@ pub mod leave; pub mod merge; pub mod metrics; pub mod peers; +pub mod probe; pub mod rollback; pub mod schema; pub mod search; diff --git a/src/cmd/probe.rs b/src/cmd/probe.rs new file mode 100644 index 0000000..8fee46d --- /dev/null +++ b/src/cmd/probe.rs @@ -0,0 +1,22 @@ +use clap::ArgMatches; + +use crate::client::client::{create_client, Clerk}; +use crate::util::log::set_logger; + +pub fn run_probe_cli(matches: &ArgMatches) -> Result<(), String> { + set_logger(); + + let servers: Vec<_> = matches + .values_of("SERVERS") + .unwrap() + .map(|addr| create_client(addr)) + .collect(); + + let client_id = rand::random(); + + let mut client = Clerk::new(&servers, client_id); + let value = client.probe(); + print!("{}", value); + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 0423bd1..a89662e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,7 @@ use bayard::cmd::leave::run_leave_cli; use bayard::cmd::merge::run_merge_cli; use bayard::cmd::metrics::run_metrics_cli; use bayard::cmd::peers::run_peers_cli; +use bayard::cmd::probe::run_probe_cli; use bayard::cmd::rollback::run_rollback_cli; use bayard::cmd::schema::run_schema_cli; use bayard::cmd::search::run_search_cli; @@ -100,6 +101,27 @@ fn main() { .takes_value(true), ) ) + .subcommand( + SubCommand::with_name("probe") + .name("probe") + .setting(AppSettings::DeriveDisplayOrder) + .version(crate_version!()) + .author(crate_authors!()) + .about("Probe a server") + .arg( + Arg::with_name("SERVERS") + .help("The server addresses. Use `,` to separate address. Example: `127.0.0.1:5000,127.0.0.1:5001`") + .short("s") + .long("servers") + .value_name("IP:PORT") + .default_value("127.0.0.1:5000") + .multiple(true) + .use_delimiter(true) + .require_delimiter(true) + .value_delimiter(",") + .takes_value(true), + ) + ) .subcommand( SubCommand::with_name("peers") .name("peers") @@ -381,6 +403,7 @@ fn main() { let options = some_options.unwrap(); let run_cli = match subcommand { "serve" => run_serve_cli, + "probe" => run_probe_cli, "peers" => run_peers_cli, "metrics" => run_metrics_cli, "leave" => run_leave_cli, diff --git a/src/proto/indexpb.rs b/src/proto/indexpb.rs index cb2bb33..40f984f 100644 --- a/src/proto/indexpb.rs +++ b/src/proto/indexpb.rs @@ -28,23 +28,24 @@ const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_8_0; static file_descriptor_proto_data: &'static [u8] = b"\ \n\rindexpb.proto\x12\x07indexpb\x1a\x10indexrpcpb.proto\x1a\reraftpb.pr\ - oto2\xba\x05\n\x05Index\x120\n\x04Raft\x12\x10.eraftpb.Message\x1a\x14.i\ + oto2\xf2\x05\n\x05Index\x120\n\x04Raft\x12\x10.eraftpb.Message\x1a\x14.i\ ndexrpcpb.RaftDone\"\0\x12C\n\x0eRaftConfChange\x12\x19.indexrpcpb.ConfC\ - hangeReq\x1a\x14.indexrpcpb.RaftDone\"\0\x126\n\x05Peers\x12\x14.indexrp\ - cpb.PeersReq\x1a\x15.indexrpcpb.PeersResp\"\0\x12<\n\x07Metrics\x12\x16.\ - indexrpcpb.MetricsReq\x1a\x17.indexrpcpb.MetricsResp\"\0\x120\n\x03Get\ - \x12\x12.indexrpcpb.GetReq\x1a\x13.indexrpcpb.GetResp\"\0\x122\n\x03Put\ - \x12\x14.indexrpcpb.ApplyReq\x1a\x13.indexrpcpb.PutResp\"\0\x128\n\x06De\ - lete\x12\x14.indexrpcpb.ApplyReq\x1a\x16.indexrpcpb.DeleteResp\"\0\x128\ - \n\x06Commit\x12\x14.indexrpcpb.ApplyReq\x1a\x16.indexrpcpb.CommitResp\"\ - \0\x12<\n\x08Rollback\x12\x14.indexrpcpb.ApplyReq\x1a\x18.indexrpcpb.Rol\ - lbackResp\"\0\x126\n\x05Merge\x12\x14.indexrpcpb.ApplyReq\x1a\x15.indexr\ - pcpb.MergeResp\"\0\x129\n\x06Search\x12\x15.indexrpcpb.SearchReq\x1a\x16\ - .indexrpcpb.SearchResp\"\0\x129\n\x06Schema\x12\x15.indexrpcpb.SchemaReq\ - \x1a\x16.indexrpcpb.SchemaResp\"\0J\xea\x05\n\x06\x12\x04\0\0\x1f\x01\n\ + hangeReq\x1a\x14.indexrpcpb.RaftDone\"\0\x126\n\x05Probe\x12\x14.indexrp\ + cpb.ProbeReq\x1a\x15.indexrpcpb.ProbeResp\"\0\x126\n\x05Peers\x12\x14.in\ + dexrpcpb.PeersReq\x1a\x15.indexrpcpb.PeersResp\"\0\x12<\n\x07Metrics\x12\ + \x16.indexrpcpb.MetricsReq\x1a\x17.indexrpcpb.MetricsResp\"\0\x120\n\x03\ + Get\x12\x12.indexrpcpb.GetReq\x1a\x13.indexrpcpb.GetResp\"\0\x122\n\x03P\ + ut\x12\x14.indexrpcpb.ApplyReq\x1a\x13.indexrpcpb.PutResp\"\0\x128\n\x06\ + Delete\x12\x14.indexrpcpb.ApplyReq\x1a\x16.indexrpcpb.DeleteResp\"\0\x12\ + 8\n\x06Commit\x12\x14.indexrpcpb.ApplyReq\x1a\x16.indexrpcpb.CommitResp\ + \"\0\x12<\n\x08Rollback\x12\x14.indexrpcpb.ApplyReq\x1a\x18.indexrpcpb.R\ + ollbackResp\"\0\x126\n\x05Merge\x12\x14.indexrpcpb.ApplyReq\x1a\x15.inde\ + xrpcpb.MergeResp\"\0\x129\n\x06Search\x12\x15.indexrpcpb.SearchReq\x1a\ + \x16.indexrpcpb.SearchResp\"\0\x129\n\x06Schema\x12\x15.indexrpcpb.Schem\ + aReq\x1a\x16.indexrpcpb.SchemaResp\"\0J\xa2\x06\n\x06\x12\x04\0\0!\x01\n\ \x08\n\x01\x0c\x12\x03\0\0\x12\n\x08\n\x01\x02\x12\x03\x01\0\x10\n\t\n\ \x02\x03\0\x12\x03\x03\0\x1a\n\t\n\x02\x03\x01\x12\x03\x04\0\x17\n\n\n\ - \x02\x06\0\x12\x04\x06\0\x1f\x01\n\n\n\x03\x06\0\x01\x12\x03\x06\x08\r\n\ + \x02\x06\0\x12\x04\x06\0!\x01\n\n\n\x03\x06\0\x01\x12\x03\x06\x08\r\n\ \x0c\n\x04\x06\0\x02\0\x12\x04\x07\x04\x08\x05\n\x0c\n\x05\x06\0\x02\0\ \x01\x12\x03\x07\x08\x0c\n\x0c\n\x05\x06\0\x02\0\x02\x12\x03\x07\x0e\x1d\ \n\x0c\n\x05\x06\0\x02\0\x03\x12\x03\x07(;\n\x0c\n\x04\x06\0\x02\x01\x12\ @@ -54,29 +55,32 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x06\0\x02\x02\x01\x12\x03\x0b\x08\r\n\x0c\n\x05\x06\0\x02\x02\x02\x12\ \x03\x0b\x0f\"\n\x0c\n\x05\x06\0\x02\x02\x03\x12\x03\x0b-A\n\x0c\n\x04\ \x06\0\x02\x03\x12\x04\r\x04\x0e\x05\n\x0c\n\x05\x06\0\x02\x03\x01\x12\ - \x03\r\x08\x0f\n\x0c\n\x05\x06\0\x02\x03\x02\x12\x03\r\x11&\n\x0c\n\x05\ - \x06\0\x02\x03\x03\x12\x03\r1G\n\x0c\n\x04\x06\0\x02\x04\x12\x04\x0f\x04\ - \x10\x05\n\x0c\n\x05\x06\0\x02\x04\x01\x12\x03\x0f\x08\x0b\n\x0c\n\x05\ - \x06\0\x02\x04\x02\x12\x03\x0f\r\x1e\n\x0c\n\x05\x06\0\x02\x04\x03\x12\ - \x03\x0f);\n\x0c\n\x04\x06\0\x02\x05\x12\x04\x11\x04\x12\x05\n\x0c\n\x05\ + \x03\r\x08\r\n\x0c\n\x05\x06\0\x02\x03\x02\x12\x03\r\x0f\"\n\x0c\n\x05\ + \x06\0\x02\x03\x03\x12\x03\r-A\n\x0c\n\x04\x06\0\x02\x04\x12\x04\x0f\x04\ + \x10\x05\n\x0c\n\x05\x06\0\x02\x04\x01\x12\x03\x0f\x08\x0f\n\x0c\n\x05\ + \x06\0\x02\x04\x02\x12\x03\x0f\x11&\n\x0c\n\x05\x06\0\x02\x04\x03\x12\ + \x03\x0f1G\n\x0c\n\x04\x06\0\x02\x05\x12\x04\x11\x04\x12\x05\n\x0c\n\x05\ \x06\0\x02\x05\x01\x12\x03\x11\x08\x0b\n\x0c\n\x05\x06\0\x02\x05\x02\x12\ - \x03\x11\r\x20\n\x0c\n\x05\x06\0\x02\x05\x03\x12\x03\x11+=\n\x0c\n\x04\ + \x03\x11\r\x1e\n\x0c\n\x05\x06\0\x02\x05\x03\x12\x03\x11);\n\x0c\n\x04\ \x06\0\x02\x06\x12\x04\x13\x04\x14\x05\n\x0c\n\x05\x06\0\x02\x06\x01\x12\ - \x03\x13\x08\x0e\n\x0c\n\x05\x06\0\x02\x06\x02\x12\x03\x13\x10#\n\x0c\n\ - \x05\x06\0\x02\x06\x03\x12\x03\x13.C\n\x0c\n\x04\x06\0\x02\x07\x12\x04\ + \x03\x13\x08\x0b\n\x0c\n\x05\x06\0\x02\x06\x02\x12\x03\x13\r\x20\n\x0c\n\ + \x05\x06\0\x02\x06\x03\x12\x03\x13+=\n\x0c\n\x04\x06\0\x02\x07\x12\x04\ \x15\x04\x16\x05\n\x0c\n\x05\x06\0\x02\x07\x01\x12\x03\x15\x08\x0e\n\x0c\ \n\x05\x06\0\x02\x07\x02\x12\x03\x15\x10#\n\x0c\n\x05\x06\0\x02\x07\x03\ \x12\x03\x15.C\n\x0c\n\x04\x06\0\x02\x08\x12\x04\x17\x04\x18\x05\n\x0c\n\ - \x05\x06\0\x02\x08\x01\x12\x03\x17\x08\x10\n\x0c\n\x05\x06\0\x02\x08\x02\ - \x12\x03\x17\x12%\n\x0c\n\x05\x06\0\x02\x08\x03\x12\x03\x170G\n\x0c\n\ + \x05\x06\0\x02\x08\x01\x12\x03\x17\x08\x0e\n\x0c\n\x05\x06\0\x02\x08\x02\ + \x12\x03\x17\x10#\n\x0c\n\x05\x06\0\x02\x08\x03\x12\x03\x17.C\n\x0c\n\ \x04\x06\0\x02\t\x12\x04\x19\x04\x1a\x05\n\x0c\n\x05\x06\0\x02\t\x01\x12\ - \x03\x19\x08\r\n\x0c\n\x05\x06\0\x02\t\x02\x12\x03\x19\x0f\"\n\x0c\n\x05\ - \x06\0\x02\t\x03\x12\x03\x19-A\n\x0c\n\x04\x06\0\x02\n\x12\x04\x1b\x04\ - \x1c\x05\n\x0c\n\x05\x06\0\x02\n\x01\x12\x03\x1b\x08\x0e\n\x0c\n\x05\x06\ - \0\x02\n\x02\x12\x03\x1b\x10$\n\x0c\n\x05\x06\0\x02\n\x03\x12\x03\x1b/D\ - \n\x0c\n\x04\x06\0\x02\x0b\x12\x04\x1d\x04\x1e\x05\n\x0c\n\x05\x06\0\x02\ - \x0b\x01\x12\x03\x1d\x08\x0e\n\x0c\n\x05\x06\0\x02\x0b\x02\x12\x03\x1d\ - \x10$\n\x0c\n\x05\x06\0\x02\x0b\x03\x12\x03\x1d/Db\x06proto3\ + \x03\x19\x08\x10\n\x0c\n\x05\x06\0\x02\t\x02\x12\x03\x19\x12%\n\x0c\n\ + \x05\x06\0\x02\t\x03\x12\x03\x190G\n\x0c\n\x04\x06\0\x02\n\x12\x04\x1b\ + \x04\x1c\x05\n\x0c\n\x05\x06\0\x02\n\x01\x12\x03\x1b\x08\r\n\x0c\n\x05\ + \x06\0\x02\n\x02\x12\x03\x1b\x0f\"\n\x0c\n\x05\x06\0\x02\n\x03\x12\x03\ + \x1b-A\n\x0c\n\x04\x06\0\x02\x0b\x12\x04\x1d\x04\x1e\x05\n\x0c\n\x05\x06\ + \0\x02\x0b\x01\x12\x03\x1d\x08\x0e\n\x0c\n\x05\x06\0\x02\x0b\x02\x12\x03\ + \x1d\x10$\n\x0c\n\x05\x06\0\x02\x0b\x03\x12\x03\x1d/D\n\x0c\n\x04\x06\0\ + \x02\x0c\x12\x04\x1f\x04\x20\x05\n\x0c\n\x05\x06\0\x02\x0c\x01\x12\x03\ + \x1f\x08\x0e\n\x0c\n\x05\x06\0\x02\x0c\x02\x12\x03\x1f\x10$\n\x0c\n\x05\ + \x06\0\x02\x0c\x03\x12\x03\x1f/Db\x06proto3\ "; static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy { diff --git a/src/proto/indexpb_grpc.rs b/src/proto/indexpb_grpc.rs index 0d99b46..db94d38 100644 --- a/src/proto/indexpb_grpc.rs +++ b/src/proto/indexpb_grpc.rs @@ -32,6 +32,13 @@ const METHOD_INDEX_RAFT_CONF_CHANGE: ::grpcio::Method = ::grpcio::Method { + ty: ::grpcio::MethodType::Unary, + name: "/indexpb.Index/Probe", + req_mar: ::grpcio::Marshaller { ser: ::grpcio::pb_ser, de: ::grpcio::pb_de }, + resp_mar: ::grpcio::Marshaller { ser: ::grpcio::pb_ser, de: ::grpcio::pb_de }, +}; + const METHOD_INDEX_PEERS: ::grpcio::Method = ::grpcio::Method { ty: ::grpcio::MethodType::Unary, name: "/indexpb.Index/Peers", @@ -146,6 +153,22 @@ impl IndexClient { self.raft_conf_change_async_opt(req, ::grpcio::CallOption::default()) } + pub fn probe_opt(&self, req: &super::indexrpcpb::ProbeReq, opt: ::grpcio::CallOption) -> ::grpcio::Result { + self.client.unary_call(&METHOD_INDEX_PROBE, req, opt) + } + + pub fn probe(&self, req: &super::indexrpcpb::ProbeReq) -> ::grpcio::Result { + self.probe_opt(req, ::grpcio::CallOption::default()) + } + + pub fn probe_async_opt(&self, req: &super::indexrpcpb::ProbeReq, opt: ::grpcio::CallOption) -> ::grpcio::Result<::grpcio::ClientUnaryReceiver> { + self.client.unary_call_async(&METHOD_INDEX_PROBE, req, opt) + } + + pub fn probe_async(&self, req: &super::indexrpcpb::ProbeReq) -> ::grpcio::Result<::grpcio::ClientUnaryReceiver> { + self.probe_async_opt(req, ::grpcio::CallOption::default()) + } + pub fn peers_opt(&self, req: &super::indexrpcpb::PeersReq, opt: ::grpcio::CallOption) -> ::grpcio::Result { self.client.unary_call(&METHOD_INDEX_PEERS, req, opt) } @@ -313,6 +336,7 @@ impl IndexClient { pub trait Index { fn raft(&mut self, ctx: ::grpcio::RpcContext, req: super::eraftpb::Message, sink: ::grpcio::UnarySink); fn raft_conf_change(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ConfChangeReq, sink: ::grpcio::UnarySink); + fn probe(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ProbeReq, sink: ::grpcio::UnarySink); fn peers(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::PeersReq, sink: ::grpcio::UnarySink); fn metrics(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::MetricsReq, sink: ::grpcio::UnarySink); fn get(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::GetReq, sink: ::grpcio::UnarySink); @@ -336,6 +360,10 @@ pub fn create_index(s: S) -> ::grpcio::Servic instance.raft_conf_change(ctx, req, resp) }); let mut instance = s.clone(); + builder = builder.add_unary_handler(&METHOD_INDEX_PROBE, move |ctx, req, resp| { + instance.probe(ctx, req, resp) + }); + let mut instance = s.clone(); builder = builder.add_unary_handler(&METHOD_INDEX_PEERS, move |ctx, req, resp| { instance.peers(ctx, req, resp) }); diff --git a/src/proto/indexrpcpb.rs b/src/proto/indexrpcpb.rs index 2ff3538..c4eead9 100644 --- a/src/proto/indexrpcpb.rs +++ b/src/proto/indexrpcpb.rs @@ -1515,6 +1515,403 @@ impl ::protobuf::reflect::ProtobufValue for LeaveReq { } } +#[derive(PartialEq,Clone,Default)] +pub struct ProbeReq { + // message fields + pub client_id: u64, + pub seq: u64, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a ProbeReq { + fn default() -> &'a ProbeReq { + ::default_instance() + } +} + +impl ProbeReq { + pub fn new() -> ProbeReq { + ::std::default::Default::default() + } + + // uint64 client_id = 1; + + + pub fn get_client_id(&self) -> u64 { + self.client_id + } + pub fn clear_client_id(&mut self) { + self.client_id = 0; + } + + // Param is passed by value, moved + pub fn set_client_id(&mut self, v: u64) { + self.client_id = v; + } + + // uint64 seq = 2; + + + pub fn get_seq(&self) -> u64 { + self.seq + } + pub fn clear_seq(&mut self) { + self.seq = 0; + } + + // Param is passed by value, moved + pub fn set_seq(&mut self, v: u64) { + self.seq = v; + } +} + +impl ::protobuf::Message for ProbeReq { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint64()?; + self.client_id = tmp; + }, + 2 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint64()?; + self.seq = tmp; + }, + _ => { + ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.client_id != 0 { + my_size += ::protobuf::rt::value_size(1, self.client_id, ::protobuf::wire_format::WireTypeVarint); + } + if self.seq != 0 { + my_size += ::protobuf::rt::value_size(2, self.seq, ::protobuf::wire_format::WireTypeVarint); + } + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { + if self.client_id != 0 { + os.write_uint64(1, self.client_id)?; + } + if self.seq != 0 { + os.write_uint64(2, self.seq)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: Box) -> ::std::boxed::Box { + self + } + + fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> ProbeReq { + ProbeReq::new() + } + + fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( + "client_id", + |m: &ProbeReq| { &m.client_id }, + |m: &mut ProbeReq| { &mut m.client_id }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( + "seq", + |m: &ProbeReq| { &m.seq }, + |m: &mut ProbeReq| { &mut m.seq }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "ProbeReq", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static ProbeReq { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ProbeReq, + }; + unsafe { + instance.get(ProbeReq::new) + } + } +} + +impl ::protobuf::Clear for ProbeReq { + fn clear(&mut self) { + self.client_id = 0; + self.seq = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for ProbeReq { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for ProbeReq { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +pub struct ProbeResp { + // message fields + pub value: ::std::string::String, + pub err: RespErr, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a ProbeResp { + fn default() -> &'a ProbeResp { + ::default_instance() + } +} + +impl ProbeResp { + pub fn new() -> ProbeResp { + ::std::default::Default::default() + } + + // string value = 1; + + + pub fn get_value(&self) -> &str { + &self.value + } + pub fn clear_value(&mut self) { + self.value.clear(); + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: ::std::string::String) { + self.value = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_value(&mut self) -> &mut ::std::string::String { + &mut self.value + } + + // Take field + pub fn take_value(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.value, ::std::string::String::new()) + } + + // .indexrpcpb.RespErr err = 2; + + + pub fn get_err(&self) -> RespErr { + self.err + } + pub fn clear_err(&mut self) { + self.err = RespErr::OK; + } + + // Param is passed by value, moved + pub fn set_err(&mut self, v: RespErr) { + self.err = v; + } +} + +impl ::protobuf::Message for ProbeResp { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.value)?; + }, + 2 => { + ::protobuf::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.err, 2, &mut self.unknown_fields)? + }, + _ => { + ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.value.is_empty() { + my_size += ::protobuf::rt::string_size(1, &self.value); + } + if self.err != RespErr::OK { + my_size += ::protobuf::rt::enum_size(2, self.err); + } + my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { + if !self.value.is_empty() { + os.write_string(1, &self.value)?; + } + if self.err != RespErr::OK { + os.write_enum(2, self.err.value())?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: Box) -> ::std::boxed::Box { + self + } + + fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> ProbeResp { + ProbeResp::new() + } + + fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "value", + |m: &ProbeResp| { &m.value }, + |m: &mut ProbeResp| { &mut m.value }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "err", + |m: &ProbeResp| { &m.err }, + |m: &mut ProbeResp| { &mut m.err }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "ProbeResp", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static ProbeResp { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ProbeResp, + }; + unsafe { + instance.get(ProbeResp::new) + } + } +} + +impl ::protobuf::Clear for ProbeResp { + fn clear(&mut self) { + self.value.clear(); + self.err = RespErr::OK; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for ProbeResp { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for ProbeResp { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + #[derive(PartialEq,Clone,Default)] pub struct PeersReq { // message fields @@ -5633,299 +6030,321 @@ static file_descriptor_proto_data: &'static [u8] = b"\ rId\x12\x1b\n\tpeer_addr\x18\x03\x20\x01(\tR\x08peerAddr\"]\n\x08LeaveRe\ q\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x17\n\x07pe\ er_id\x18\x02\x20\x01(\x04R\x06peerId\x12\x1b\n\tpeer_addr\x18\x03\x20\ - \x01(\tR\x08peerAddr\"9\n\x08PeersReq\x12\x1b\n\tclient_id\x18\x01\x20\ + \x01(\tR\x08peerAddr\"9\n\x08ProbeReq\x12\x1b\n\tclient_id\x18\x01\x20\ \x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"H\ - \n\tPeersResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\x05value\x12%\n\x03\ - err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\";\n\nMetricsRe\ + \n\tProbeResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\x05value\x12%\n\x03\ + err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"9\n\x08PeersRe\ q\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03se\ - q\x18\x02\x20\x01(\x04R\x03seq\"J\n\x0bMetricsResp\x12\x14\n\x05value\ - \x18\x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.in\ - dexrpcpb.RespErrR\x03err\"N\n\x06GetReq\x12\x1b\n\tclient_id\x18\x01\x20\ - \x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\ - \x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05docId\"F\n\x07GetResp\x12\x14\n\ - \x05value\x18\x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\ - \x0e2\x13.indexrpcpb.RespErrR\x03err\"f\n\x06PutReq\x12\x1b\n\tclient_id\ - \x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04\ - R\x03seq\x12\x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05docId\x12\x16\n\x06f\ - ields\x18\x04\x20\x01(\tR\x06fields\"0\n\x07PutResp\x12%\n\x03err\x18\ - \x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"Q\n\tDeleteReq\x12\ + q\x18\x02\x20\x01(\x04R\x03seq\"H\n\tPeersResp\x12\x14\n\x05value\x18\ + \x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexr\ + pcpb.RespErrR\x03err\";\n\nMetricsReq\x12\x1b\n\tclient_id\x18\x01\x20\ + \x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"J\ + \n\x0bMetricsResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\x05value\x12%\n\ + \x03err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"N\n\x06Get\ + Req\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03\ + seq\x18\x02\x20\x01(\x04R\x03seq\x12\x15\n\x06doc_id\x18\x03\x20\x01(\tR\ + \x05docId\"F\n\x07GetResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\x05valu\ + e\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"f\ + \n\x06PutReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\ + \x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\x15\n\x06doc_id\x18\x03\ + \x20\x01(\tR\x05docId\x12\x16\n\x06fields\x18\x04\x20\x01(\tR\x06fields\ + \"0\n\x07PutResp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.Resp\ + ErrR\x03err\"Q\n\tDeleteReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\ + \x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\x15\n\x06\ + doc_id\x18\x03\x20\x01(\tR\x05docId\"3\n\nDeleteResp\x12%\n\x03err\x18\ + \x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\":\n\tCommitReq\x12\ \x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\ - \x02\x20\x01(\x04R\x03seq\x12\x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05doc\ - Id\"3\n\nDeleteResp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.R\ - espErrR\x03err\":\n\tCommitReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04\ - R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"3\n\nCommit\ - Resp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\ - \"<\n\x0bRollbackReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clien\ - tId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"5\n\x0cRollbackResp\ - \x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"9\n\ - \x08MergeReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\ - \x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"2\n\tMergeResp\x12%\n\x03err\ - \x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"P\n\tSearchReq\ - \x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\ - \x18\x02\x20\x01(\x04R\x03seq\x12\x14\n\x05query\x18\x03\x20\x01(\tR\x05\ - query\"I\n\nSearchResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\x05value\ - \x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\":\n\ - \tSchemaReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\ - \x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"I\n\nSchemaResp\x12\x14\n\ + \x02\x20\x01(\x04R\x03seq\"3\n\nCommitResp\x12%\n\x03err\x18\x01\x20\x01\ + (\x0e2\x13.indexrpcpb.RespErrR\x03err\"<\n\x0bRollbackReq\x12\x1b\n\tcli\ + ent_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\ + \x01(\x04R\x03seq\"5\n\x0cRollbackResp\x12%\n\x03err\x18\x01\x20\x01(\ + \x0e2\x13.indexrpcpb.RespErrR\x03err\"9\n\x08MergeReq\x12\x1b\n\tclient_\ + id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\ + \x04R\x03seq\"2\n\tMergeResp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.ind\ + exrpcpb.RespErrR\x03err\"P\n\tSearchReq\x12\x1b\n\tclient_id\x18\x01\x20\ + \x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\ + \x14\n\x05query\x18\x03\x20\x01(\tR\x05query\"I\n\nSearchResp\x12\x14\n\ \x05value\x18\x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\ - \x0e2\x13.indexrpcpb.RespErrR\x03err*3\n\x07RespErr\x12\x06\n\x02OK\x10\ - \0\x12\x12\n\x0eErrWrongLeader\x10\x01\x12\x0c\n\x08ErrNoKey\x10\x02*X\n\ - \x07ReqType\x12\x08\n\x04Join\x10\0\x12\t\n\x05Leave\x10\x01\x12\x07\n\ - \x03Put\x10\x02\x12\n\n\x06Delete\x10\x03\x12\n\n\x06Commit\x10\x04\x12\ - \x0c\n\x08Rollback\x10\x05\x12\t\n\x05Merge\x10\x06J\xb8)\n\x07\x12\x05\ - \0\0\x99\x01\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\x08\n\x01\x02\x12\x03\ - \x01\0\x13\n\t\n\x02\x03\0\x12\x03\x03\0\x17\n\n\n\x02\x05\0\x12\x04\x05\ - \0\t\x01\n\n\n\x03\x05\0\x01\x12\x03\x05\x05\x0c\n\x0b\n\x04\x05\0\x02\0\ - \x12\x03\x06\x04\x0b\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\x06\x04\x06\n\ - \x0c\n\x05\x05\0\x02\0\x02\x12\x03\x06\t\n\n\x0b\n\x04\x05\0\x02\x01\x12\ - \x03\x07\x04\x17\n\x0c\n\x05\x05\0\x02\x01\x01\x12\x03\x07\x04\x12\n\x0c\ - \n\x05\x05\0\x02\x01\x02\x12\x03\x07\x15\x16\n\x0b\n\x04\x05\0\x02\x02\ - \x12\x03\x08\x04\x11\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\x08\x04\x0c\n\ - \x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x08\x0f\x10\n\n\n\x02\x05\x01\x12\ - \x04\x0b\0\x13\x01\n\n\n\x03\x05\x01\x01\x12\x03\x0b\x05\x0c\n\x0b\n\x04\ - \x05\x01\x02\0\x12\x03\x0c\x04\r\n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03\ - \x0c\x04\x08\n\x0c\n\x05\x05\x01\x02\0\x02\x12\x03\x0c\x0b\x0c\n\x0b\n\ - \x04\x05\x01\x02\x01\x12\x03\r\x04\x0e\n\x0c\n\x05\x05\x01\x02\x01\x01\ - \x12\x03\r\x04\t\n\x0c\n\x05\x05\x01\x02\x01\x02\x12\x03\r\x0c\r\n\x0b\n\ - \x04\x05\x01\x02\x02\x12\x03\x0e\x04\x0c\n\x0c\n\x05\x05\x01\x02\x02\x01\ - \x12\x03\x0e\x04\x07\n\x0c\n\x05\x05\x01\x02\x02\x02\x12\x03\x0e\n\x0b\n\ - \x0b\n\x04\x05\x01\x02\x03\x12\x03\x0f\x04\x0f\n\x0c\n\x05\x05\x01\x02\ - \x03\x01\x12\x03\x0f\x04\n\n\x0c\n\x05\x05\x01\x02\x03\x02\x12\x03\x0f\r\ - \x0e\n\x0b\n\x04\x05\x01\x02\x04\x12\x03\x10\x04\x0f\n\x0c\n\x05\x05\x01\ - \x02\x04\x01\x12\x03\x10\x04\n\n\x0c\n\x05\x05\x01\x02\x04\x02\x12\x03\ - \x10\r\x0e\n\x0b\n\x04\x05\x01\x02\x05\x12\x03\x11\x04\x11\n\x0c\n\x05\ - \x05\x01\x02\x05\x01\x12\x03\x11\x04\x0c\n\x0c\n\x05\x05\x01\x02\x05\x02\ - \x12\x03\x11\x0f\x10\n\x0b\n\x04\x05\x01\x02\x06\x12\x03\x12\x04\x0e\n\ - \x0c\n\x05\x05\x01\x02\x06\x01\x12\x03\x12\x04\t\n\x0c\n\x05\x05\x01\x02\ - \x06\x02\x12\x03\x12\x0c\r\n\n\n\x02\x04\0\x12\x04\x15\0\x1f\x01\n\n\n\ - \x03\x04\0\x01\x12\x03\x15\x08\x10\n\x0b\n\x04\x04\0\x02\0\x12\x03\x16\ - \x04\x19\n\r\n\x05\x04\0\x02\0\x04\x12\x04\x16\x04\x15\x12\n\x0c\n\x05\ - \x04\0\x02\0\x05\x12\x03\x16\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\ - \x16\x0b\x14\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x16\x17\x18\n\x0b\n\x04\ - \x04\0\x02\x01\x12\x03\x17\x04\x19\n\r\n\x05\x04\0\x02\x01\x04\x12\x04\ - \x17\x04\x16\x19\n\x0c\n\x05\x04\0\x02\x01\x06\x12\x03\x17\x04\x0b\n\x0c\ - \n\x05\x04\0\x02\x01\x01\x12\x03\x17\x0c\x14\n\x0c\n\x05\x04\0\x02\x01\ - \x03\x12\x03\x17\x17\x18\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x18\x04\x19\n\ - \r\n\x05\x04\0\x02\x02\x04\x12\x04\x18\x04\x17\x19\n\x0c\n\x05\x04\0\x02\ - \x02\x06\x12\x03\x18\x04\x0b\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x18\ - \x0c\x14\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\x18\x17\x18\n\x0b\n\x04\ - \x04\0\x02\x03\x12\x03\x19\x04\x1b\n\r\n\x05\x04\0\x02\x03\x04\x12\x04\ - \x19\x04\x18\x19\n\x0c\n\x05\x04\0\x02\x03\x06\x12\x03\x19\x04\x0c\n\x0c\ - \n\x05\x04\0\x02\x03\x01\x12\x03\x19\r\x16\n\x0c\n\x05\x04\0\x02\x03\x03\ - \x12\x03\x19\x19\x1a\n\x0b\n\x04\x04\0\x02\x04\x12\x03\x1a\x04\x17\n\r\n\ - \x05\x04\0\x02\x04\x04\x12\x04\x1a\x04\x19\x1b\n\x0c\n\x05\x04\0\x02\x04\ - \x06\x12\x03\x1a\x04\n\n\x0c\n\x05\x04\0\x02\x04\x01\x12\x03\x1a\x0b\x12\ - \n\x0c\n\x05\x04\0\x02\x04\x03\x12\x03\x1a\x15\x16\n\x0b\n\x04\x04\0\x02\ - \x05\x12\x03\x1b\x04\x1d\n\r\n\x05\x04\0\x02\x05\x04\x12\x04\x1b\x04\x1a\ - \x17\n\x0c\n\x05\x04\0\x02\x05\x06\x12\x03\x1b\x04\r\n\x0c\n\x05\x04\0\ - \x02\x05\x01\x12\x03\x1b\x0e\x18\n\x0c\n\x05\x04\0\x02\x05\x03\x12\x03\ - \x1b\x1b\x1c\n\x0b\n\x04\x04\0\x02\x06\x12\x03\x1c\x04\x1d\n\r\n\x05\x04\ - \0\x02\x06\x04\x12\x04\x1c\x04\x1b\x1d\n\x0c\n\x05\x04\0\x02\x06\x06\x12\ - \x03\x1c\x04\r\n\x0c\n\x05\x04\0\x02\x06\x01\x12\x03\x1c\x0e\x18\n\x0c\n\ - \x05\x04\0\x02\x06\x03\x12\x03\x1c\x1b\x1c\n\x0b\n\x04\x04\0\x02\x07\x12\ - \x03\x1d\x04!\n\r\n\x05\x04\0\x02\x07\x04\x12\x04\x1d\x04\x1c\x1d\n\x0c\ - \n\x05\x04\0\x02\x07\x06\x12\x03\x1d\x04\x0f\n\x0c\n\x05\x04\0\x02\x07\ - \x01\x12\x03\x1d\x10\x1c\n\x0c\n\x05\x04\0\x02\x07\x03\x12\x03\x1d\x1f\ - \x20\n\x0b\n\x04\x04\0\x02\x08\x12\x03\x1e\x04\x1b\n\r\n\x05\x04\0\x02\ - \x08\x04\x12\x04\x1e\x04\x1d!\n\x0c\n\x05\x04\0\x02\x08\x06\x12\x03\x1e\ - \x04\x0c\n\x0c\n\x05\x04\0\x02\x08\x01\x12\x03\x1e\r\x16\n\x0c\n\x05\x04\ - \0\x02\x08\x03\x12\x03\x1e\x19\x1a\n\n\n\x02\x04\x01\x12\x04!\0%\x01\n\n\ - \n\x03\x04\x01\x01\x12\x03!\x08\x15\n\x0b\n\x04\x04\x01\x02\0\x12\x03\"\ - \x04\x1e\n\r\n\x05\x04\x01\x02\0\x04\x12\x04\"\x04!\x17\n\x0c\n\x05\x04\ - \x01\x02\0\x06\x12\x03\"\x04\x16\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\"\ - \x17\x19\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\"\x1c\x1d\n\x0b\n\x04\x04\ - \x01\x02\x01\x12\x03#\x04\x12\n\r\n\x05\x04\x01\x02\x01\x04\x12\x04#\x04\ - \"\x1e\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03#\x04\n\n\x0c\n\x05\x04\ - \x01\x02\x01\x01\x12\x03#\x0b\r\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03#\ - \x10\x11\n\x0b\n\x04\x04\x01\x02\x02\x12\x03$\x04\x14\n\r\n\x05\x04\x01\ - \x02\x02\x04\x12\x04$\x04#\x12\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03$\ - \x04\n\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x03$\x0b\x0f\n\x0c\n\x05\x04\ - \x01\x02\x02\x03\x12\x03$\x12\x13\n\n\n\x02\x04\x02\x12\x04'\0)\x01\n\n\ - \n\x03\x04\x02\x01\x12\x03'\x08\x10\n\x0b\n\x04\x04\x02\x02\0\x12\x03(\ - \x04\x14\n\r\n\x05\x04\x02\x02\0\x04\x12\x04(\x04'\x12\n\x0c\n\x05\x04\ - \x02\x02\0\x06\x12\x03(\x04\x0b\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03(\ - \x0c\x0f\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03(\x12\x13\n\n\n\x02\x04\ - \x03\x12\x04+\0/\x01\n\n\n\x03\x04\x03\x01\x12\x03+\x08\x0f\n\x0b\n\x04\ - \x04\x03\x02\0\x12\x03,\x04\x19\n\r\n\x05\x04\x03\x02\0\x04\x12\x04,\x04\ - +\x11\n\x0c\n\x05\x04\x03\x02\0\x05\x12\x03,\x04\n\n\x0c\n\x05\x04\x03\ - \x02\0\x01\x12\x03,\x0b\x14\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03,\x17\ - \x18\n\x0b\n\x04\x04\x03\x02\x01\x12\x03-\x04\x17\n\r\n\x05\x04\x03\x02\ - \x01\x04\x12\x04-\x04,\x19\n\x0c\n\x05\x04\x03\x02\x01\x05\x12\x03-\x04\ - \n\n\x0c\n\x05\x04\x03\x02\x01\x01\x12\x03-\x0b\x12\n\x0c\n\x05\x04\x03\ - \x02\x01\x03\x12\x03-\x15\x16\n\x0b\n\x04\x04\x03\x02\x02\x12\x03.\x04\ - \x19\n\r\n\x05\x04\x03\x02\x02\x04\x12\x04.\x04-\x17\n\x0c\n\x05\x04\x03\ - \x02\x02\x05\x12\x03.\x04\n\n\x0c\n\x05\x04\x03\x02\x02\x01\x12\x03.\x0b\ - \x14\n\x0c\n\x05\x04\x03\x02\x02\x03\x12\x03.\x17\x18\n\n\n\x02\x04\x04\ - \x12\x041\05\x01\n\n\n\x03\x04\x04\x01\x12\x031\x08\x10\n\x0b\n\x04\x04\ - \x04\x02\0\x12\x032\x04\x19\n\r\n\x05\x04\x04\x02\0\x04\x12\x042\x041\ - \x12\n\x0c\n\x05\x04\x04\x02\0\x05\x12\x032\x04\n\n\x0c\n\x05\x04\x04\ - \x02\0\x01\x12\x032\x0b\x14\n\x0c\n\x05\x04\x04\x02\0\x03\x12\x032\x17\ - \x18\n\x0b\n\x04\x04\x04\x02\x01\x12\x033\x04\x17\n\r\n\x05\x04\x04\x02\ - \x01\x04\x12\x043\x042\x19\n\x0c\n\x05\x04\x04\x02\x01\x05\x12\x033\x04\ - \n\n\x0c\n\x05\x04\x04\x02\x01\x01\x12\x033\x0b\x12\n\x0c\n\x05\x04\x04\ - \x02\x01\x03\x12\x033\x15\x16\n\x0b\n\x04\x04\x04\x02\x02\x12\x034\x04\ - \x19\n\r\n\x05\x04\x04\x02\x02\x04\x12\x044\x043\x17\n\x0c\n\x05\x04\x04\ - \x02\x02\x05\x12\x034\x04\n\n\x0c\n\x05\x04\x04\x02\x02\x01\x12\x034\x0b\ - \x14\n\x0c\n\x05\x04\x04\x02\x02\x03\x12\x034\x17\x18\n\n\n\x02\x04\x05\ - \x12\x047\0:\x01\n\n\n\x03\x04\x05\x01\x12\x037\x08\x10\n\x0b\n\x04\x04\ - \x05\x02\0\x12\x038\x04\x19\n\r\n\x05\x04\x05\x02\0\x04\x12\x048\x047\ - \x12\n\x0c\n\x05\x04\x05\x02\0\x05\x12\x038\x04\n\n\x0c\n\x05\x04\x05\ - \x02\0\x01\x12\x038\x0b\x14\n\x0c\n\x05\x04\x05\x02\0\x03\x12\x038\x17\ - \x18\n\x0b\n\x04\x04\x05\x02\x01\x12\x039\x04\x13\n\r\n\x05\x04\x05\x02\ - \x01\x04\x12\x049\x048\x19\n\x0c\n\x05\x04\x05\x02\x01\x05\x12\x039\x04\ - \n\n\x0c\n\x05\x04\x05\x02\x01\x01\x12\x039\x0b\x0e\n\x0c\n\x05\x04\x05\ - \x02\x01\x03\x12\x039\x11\x12\n\n\n\x02\x04\x06\x12\x04<\0?\x01\n\n\n\ - \x03\x04\x06\x01\x12\x03<\x08\x11\n\x0b\n\x04\x04\x06\x02\0\x12\x03=\x04\ - \x15\n\r\n\x05\x04\x06\x02\0\x04\x12\x04=\x04<\x13\n\x0c\n\x05\x04\x06\ - \x02\0\x05\x12\x03=\x04\n\n\x0c\n\x05\x04\x06\x02\0\x01\x12\x03=\x0b\x10\ - \n\x0c\n\x05\x04\x06\x02\0\x03\x12\x03=\x13\x14\n\x0b\n\x04\x04\x06\x02\ - \x01\x12\x03>\x04\x14\n\r\n\x05\x04\x06\x02\x01\x04\x12\x04>\x04=\x15\n\ - \x0c\n\x05\x04\x06\x02\x01\x06\x12\x03>\x04\x0b\n\x0c\n\x05\x04\x06\x02\ - \x01\x01\x12\x03>\x0c\x0f\n\x0c\n\x05\x04\x06\x02\x01\x03\x12\x03>\x12\ - \x13\n\n\n\x02\x04\x07\x12\x04A\0D\x01\n\n\n\x03\x04\x07\x01\x12\x03A\ - \x08\x12\n\x0b\n\x04\x04\x07\x02\0\x12\x03B\x04\x19\n\r\n\x05\x04\x07\ - \x02\0\x04\x12\x04B\x04A\x14\n\x0c\n\x05\x04\x07\x02\0\x05\x12\x03B\x04\ - \n\n\x0c\n\x05\x04\x07\x02\0\x01\x12\x03B\x0b\x14\n\x0c\n\x05\x04\x07\ - \x02\0\x03\x12\x03B\x17\x18\n\x0b\n\x04\x04\x07\x02\x01\x12\x03C\x04\x13\ - \n\r\n\x05\x04\x07\x02\x01\x04\x12\x04C\x04B\x19\n\x0c\n\x05\x04\x07\x02\ - \x01\x05\x12\x03C\x04\n\n\x0c\n\x05\x04\x07\x02\x01\x01\x12\x03C\x0b\x0e\ - \n\x0c\n\x05\x04\x07\x02\x01\x03\x12\x03C\x11\x12\n\n\n\x02\x04\x08\x12\ - \x04F\0I\x01\n\n\n\x03\x04\x08\x01\x12\x03F\x08\x13\n\x0b\n\x04\x04\x08\ - \x02\0\x12\x03G\x04\x15\n\r\n\x05\x04\x08\x02\0\x04\x12\x04G\x04F\x15\n\ - \x0c\n\x05\x04\x08\x02\0\x05\x12\x03G\x04\n\n\x0c\n\x05\x04\x08\x02\0\ - \x01\x12\x03G\x0b\x10\n\x0c\n\x05\x04\x08\x02\0\x03\x12\x03G\x13\x14\n\ - \x0b\n\x04\x04\x08\x02\x01\x12\x03H\x04\x14\n\r\n\x05\x04\x08\x02\x01\ - \x04\x12\x04H\x04G\x15\n\x0c\n\x05\x04\x08\x02\x01\x06\x12\x03H\x04\x0b\ - \n\x0c\n\x05\x04\x08\x02\x01\x01\x12\x03H\x0c\x0f\n\x0c\n\x05\x04\x08\ - \x02\x01\x03\x12\x03H\x12\x13\n\n\n\x02\x04\t\x12\x04K\0O\x01\n\n\n\x03\ - \x04\t\x01\x12\x03K\x08\x0e\n\x0b\n\x04\x04\t\x02\0\x12\x03L\x04\x19\n\r\ - \n\x05\x04\t\x02\0\x04\x12\x04L\x04K\x10\n\x0c\n\x05\x04\t\x02\0\x05\x12\ - \x03L\x04\n\n\x0c\n\x05\x04\t\x02\0\x01\x12\x03L\x0b\x14\n\x0c\n\x05\x04\ - \t\x02\0\x03\x12\x03L\x17\x18\n\x0b\n\x04\x04\t\x02\x01\x12\x03M\x04\x13\ - \n\r\n\x05\x04\t\x02\x01\x04\x12\x04M\x04L\x19\n\x0c\n\x05\x04\t\x02\x01\ - \x05\x12\x03M\x04\n\n\x0c\n\x05\x04\t\x02\x01\x01\x12\x03M\x0b\x0e\n\x0c\ - \n\x05\x04\t\x02\x01\x03\x12\x03M\x11\x12\n\x0b\n\x04\x04\t\x02\x02\x12\ - \x03N\x04\x16\n\r\n\x05\x04\t\x02\x02\x04\x12\x04N\x04M\x13\n\x0c\n\x05\ - \x04\t\x02\x02\x05\x12\x03N\x04\n\n\x0c\n\x05\x04\t\x02\x02\x01\x12\x03N\ - \x0b\x11\n\x0c\n\x05\x04\t\x02\x02\x03\x12\x03N\x14\x15\n\n\n\x02\x04\n\ - \x12\x04Q\0T\x01\n\n\n\x03\x04\n\x01\x12\x03Q\x08\x0f\n\x0b\n\x04\x04\n\ - \x02\0\x12\x03R\x04\x15\n\r\n\x05\x04\n\x02\0\x04\x12\x04R\x04Q\x11\n\ - \x0c\n\x05\x04\n\x02\0\x05\x12\x03R\x04\n\n\x0c\n\x05\x04\n\x02\0\x01\ - \x12\x03R\x0b\x10\n\x0c\n\x05\x04\n\x02\0\x03\x12\x03R\x13\x14\n\x0b\n\ - \x04\x04\n\x02\x01\x12\x03S\x04\x14\n\r\n\x05\x04\n\x02\x01\x04\x12\x04S\ - \x04R\x15\n\x0c\n\x05\x04\n\x02\x01\x06\x12\x03S\x04\x0b\n\x0c\n\x05\x04\ - \n\x02\x01\x01\x12\x03S\x0c\x0f\n\x0c\n\x05\x04\n\x02\x01\x03\x12\x03S\ - \x12\x13\n\n\n\x02\x04\x0b\x12\x04V\0[\x01\n\n\n\x03\x04\x0b\x01\x12\x03\ - V\x08\x0e\n\x0b\n\x04\x04\x0b\x02\0\x12\x03W\x04\x19\n\r\n\x05\x04\x0b\ - \x02\0\x04\x12\x04W\x04V\x10\n\x0c\n\x05\x04\x0b\x02\0\x05\x12\x03W\x04\ - \n\n\x0c\n\x05\x04\x0b\x02\0\x01\x12\x03W\x0b\x14\n\x0c\n\x05\x04\x0b\ - \x02\0\x03\x12\x03W\x17\x18\n\x0b\n\x04\x04\x0b\x02\x01\x12\x03X\x04\x13\ - \n\r\n\x05\x04\x0b\x02\x01\x04\x12\x04X\x04W\x19\n\x0c\n\x05\x04\x0b\x02\ - \x01\x05\x12\x03X\x04\n\n\x0c\n\x05\x04\x0b\x02\x01\x01\x12\x03X\x0b\x0e\ - \n\x0c\n\x05\x04\x0b\x02\x01\x03\x12\x03X\x11\x12\n\x0b\n\x04\x04\x0b\ - \x02\x02\x12\x03Y\x04\x16\n\r\n\x05\x04\x0b\x02\x02\x04\x12\x04Y\x04X\ - \x13\n\x0c\n\x05\x04\x0b\x02\x02\x05\x12\x03Y\x04\n\n\x0c\n\x05\x04\x0b\ - \x02\x02\x01\x12\x03Y\x0b\x11\n\x0c\n\x05\x04\x0b\x02\x02\x03\x12\x03Y\ - \x14\x15\n\x0b\n\x04\x04\x0b\x02\x03\x12\x03Z\x04\x16\n\r\n\x05\x04\x0b\ - \x02\x03\x04\x12\x04Z\x04Y\x16\n\x0c\n\x05\x04\x0b\x02\x03\x05\x12\x03Z\ - \x04\n\n\x0c\n\x05\x04\x0b\x02\x03\x01\x12\x03Z\x0b\x11\n\x0c\n\x05\x04\ - \x0b\x02\x03\x03\x12\x03Z\x14\x15\n\n\n\x02\x04\x0c\x12\x04]\0_\x01\n\n\ - \n\x03\x04\x0c\x01\x12\x03]\x08\x0f\n\x0b\n\x04\x04\x0c\x02\0\x12\x03^\ - \x04\x14\n\r\n\x05\x04\x0c\x02\0\x04\x12\x04^\x04]\x11\n\x0c\n\x05\x04\ - \x0c\x02\0\x06\x12\x03^\x04\x0b\n\x0c\n\x05\x04\x0c\x02\0\x01\x12\x03^\ - \x0c\x0f\n\x0c\n\x05\x04\x0c\x02\0\x03\x12\x03^\x12\x13\n\n\n\x02\x04\r\ - \x12\x04a\0e\x01\n\n\n\x03\x04\r\x01\x12\x03a\x08\x11\n\x0b\n\x04\x04\r\ - \x02\0\x12\x03b\x04\x19\n\r\n\x05\x04\r\x02\0\x04\x12\x04b\x04a\x13\n\ - \x0c\n\x05\x04\r\x02\0\x05\x12\x03b\x04\n\n\x0c\n\x05\x04\r\x02\0\x01\ - \x12\x03b\x0b\x14\n\x0c\n\x05\x04\r\x02\0\x03\x12\x03b\x17\x18\n\x0b\n\ - \x04\x04\r\x02\x01\x12\x03c\x04\x13\n\r\n\x05\x04\r\x02\x01\x04\x12\x04c\ - \x04b\x19\n\x0c\n\x05\x04\r\x02\x01\x05\x12\x03c\x04\n\n\x0c\n\x05\x04\r\ - \x02\x01\x01\x12\x03c\x0b\x0e\n\x0c\n\x05\x04\r\x02\x01\x03\x12\x03c\x11\ - \x12\n\x0b\n\x04\x04\r\x02\x02\x12\x03d\x04\x16\n\r\n\x05\x04\r\x02\x02\ - \x04\x12\x04d\x04c\x13\n\x0c\n\x05\x04\r\x02\x02\x05\x12\x03d\x04\n\n\ - \x0c\n\x05\x04\r\x02\x02\x01\x12\x03d\x0b\x11\n\x0c\n\x05\x04\r\x02\x02\ - \x03\x12\x03d\x14\x15\n\n\n\x02\x04\x0e\x12\x04g\0i\x01\n\n\n\x03\x04\ - \x0e\x01\x12\x03g\x08\x12\n\x0b\n\x04\x04\x0e\x02\0\x12\x03h\x04\x14\n\r\ - \n\x05\x04\x0e\x02\0\x04\x12\x04h\x04g\x14\n\x0c\n\x05\x04\x0e\x02\0\x06\ - \x12\x03h\x04\x0b\n\x0c\n\x05\x04\x0e\x02\0\x01\x12\x03h\x0c\x0f\n\x0c\n\ - \x05\x04\x0e\x02\0\x03\x12\x03h\x12\x13\n\n\n\x02\x04\x0f\x12\x04k\0n\ - \x01\n\n\n\x03\x04\x0f\x01\x12\x03k\x08\x11\n\x0b\n\x04\x04\x0f\x02\0\ - \x12\x03l\x04\x19\n\r\n\x05\x04\x0f\x02\0\x04\x12\x04l\x04k\x13\n\x0c\n\ - \x05\x04\x0f\x02\0\x05\x12\x03l\x04\n\n\x0c\n\x05\x04\x0f\x02\0\x01\x12\ - \x03l\x0b\x14\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\x03l\x17\x18\n\x0b\n\x04\ - \x04\x0f\x02\x01\x12\x03m\x04\x13\n\r\n\x05\x04\x0f\x02\x01\x04\x12\x04m\ - \x04l\x19\n\x0c\n\x05\x04\x0f\x02\x01\x05\x12\x03m\x04\n\n\x0c\n\x05\x04\ - \x0f\x02\x01\x01\x12\x03m\x0b\x0e\n\x0c\n\x05\x04\x0f\x02\x01\x03\x12\ - \x03m\x11\x12\n\n\n\x02\x04\x10\x12\x04p\0r\x01\n\n\n\x03\x04\x10\x01\ - \x12\x03p\x08\x12\n\x0b\n\x04\x04\x10\x02\0\x12\x03q\x04\x14\n\r\n\x05\ - \x04\x10\x02\0\x04\x12\x04q\x04p\x14\n\x0c\n\x05\x04\x10\x02\0\x06\x12\ - \x03q\x04\x0b\n\x0c\n\x05\x04\x10\x02\0\x01\x12\x03q\x0c\x0f\n\x0c\n\x05\ - \x04\x10\x02\0\x03\x12\x03q\x12\x13\n\n\n\x02\x04\x11\x12\x04t\0w\x01\n\ - \n\n\x03\x04\x11\x01\x12\x03t\x08\x13\n\x0b\n\x04\x04\x11\x02\0\x12\x03u\ - \x04\x19\n\r\n\x05\x04\x11\x02\0\x04\x12\x04u\x04t\x15\n\x0c\n\x05\x04\ - \x11\x02\0\x05\x12\x03u\x04\n\n\x0c\n\x05\x04\x11\x02\0\x01\x12\x03u\x0b\ - \x14\n\x0c\n\x05\x04\x11\x02\0\x03\x12\x03u\x17\x18\n\x0b\n\x04\x04\x11\ - \x02\x01\x12\x03v\x04\x13\n\r\n\x05\x04\x11\x02\x01\x04\x12\x04v\x04u\ - \x19\n\x0c\n\x05\x04\x11\x02\x01\x05\x12\x03v\x04\n\n\x0c\n\x05\x04\x11\ - \x02\x01\x01\x12\x03v\x0b\x0e\n\x0c\n\x05\x04\x11\x02\x01\x03\x12\x03v\ - \x11\x12\n\n\n\x02\x04\x12\x12\x04y\0{\x01\n\n\n\x03\x04\x12\x01\x12\x03\ - y\x08\x14\n\x0b\n\x04\x04\x12\x02\0\x12\x03z\x04\x14\n\r\n\x05\x04\x12\ - \x02\0\x04\x12\x04z\x04y\x16\n\x0c\n\x05\x04\x12\x02\0\x06\x12\x03z\x04\ - \x0b\n\x0c\n\x05\x04\x12\x02\0\x01\x12\x03z\x0c\x0f\n\x0c\n\x05\x04\x12\ - \x02\0\x03\x12\x03z\x12\x13\n\x0b\n\x02\x04\x13\x12\x05}\0\x80\x01\x01\n\ - \n\n\x03\x04\x13\x01\x12\x03}\x08\x10\n\x0b\n\x04\x04\x13\x02\0\x12\x03~\ - \x04\x19\n\r\n\x05\x04\x13\x02\0\x04\x12\x04~\x04}\x12\n\x0c\n\x05\x04\ - \x13\x02\0\x05\x12\x03~\x04\n\n\x0c\n\x05\x04\x13\x02\0\x01\x12\x03~\x0b\ - \x14\n\x0c\n\x05\x04\x13\x02\0\x03\x12\x03~\x17\x18\n\x0b\n\x04\x04\x13\ - \x02\x01\x12\x03\x7f\x04\x13\n\r\n\x05\x04\x13\x02\x01\x04\x12\x04\x7f\ - \x04~\x19\n\x0c\n\x05\x04\x13\x02\x01\x05\x12\x03\x7f\x04\n\n\x0c\n\x05\ - \x04\x13\x02\x01\x01\x12\x03\x7f\x0b\x0e\n\x0c\n\x05\x04\x13\x02\x01\x03\ - \x12\x03\x7f\x11\x12\n\x0c\n\x02\x04\x14\x12\x06\x82\x01\0\x84\x01\x01\n\ - \x0b\n\x03\x04\x14\x01\x12\x04\x82\x01\x08\x11\n\x0c\n\x04\x04\x14\x02\0\ - \x12\x04\x83\x01\x04\x14\n\x0f\n\x05\x04\x14\x02\0\x04\x12\x06\x83\x01\ - \x04\x82\x01\x13\n\r\n\x05\x04\x14\x02\0\x06\x12\x04\x83\x01\x04\x0b\n\r\ - \n\x05\x04\x14\x02\0\x01\x12\x04\x83\x01\x0c\x0f\n\r\n\x05\x04\x14\x02\0\ - \x03\x12\x04\x83\x01\x12\x13\n\x0c\n\x02\x04\x15\x12\x06\x86\x01\0\x8a\ - \x01\x01\n\x0b\n\x03\x04\x15\x01\x12\x04\x86\x01\x08\x11\n\x0c\n\x04\x04\ - \x15\x02\0\x12\x04\x87\x01\x04\x19\n\x0f\n\x05\x04\x15\x02\0\x04\x12\x06\ - \x87\x01\x04\x86\x01\x13\n\r\n\x05\x04\x15\x02\0\x05\x12\x04\x87\x01\x04\ - \n\n\r\n\x05\x04\x15\x02\0\x01\x12\x04\x87\x01\x0b\x14\n\r\n\x05\x04\x15\ - \x02\0\x03\x12\x04\x87\x01\x17\x18\n\x0c\n\x04\x04\x15\x02\x01\x12\x04\ - \x88\x01\x04\x13\n\x0f\n\x05\x04\x15\x02\x01\x04\x12\x06\x88\x01\x04\x87\ - \x01\x19\n\r\n\x05\x04\x15\x02\x01\x05\x12\x04\x88\x01\x04\n\n\r\n\x05\ - \x04\x15\x02\x01\x01\x12\x04\x88\x01\x0b\x0e\n\r\n\x05\x04\x15\x02\x01\ - \x03\x12\x04\x88\x01\x11\x12\n\x0c\n\x04\x04\x15\x02\x02\x12\x04\x89\x01\ - \x04\x15\n\x0f\n\x05\x04\x15\x02\x02\x04\x12\x06\x89\x01\x04\x88\x01\x13\ - \n\r\n\x05\x04\x15\x02\x02\x05\x12\x04\x89\x01\x04\n\n\r\n\x05\x04\x15\ - \x02\x02\x01\x12\x04\x89\x01\x0b\x10\n\r\n\x05\x04\x15\x02\x02\x03\x12\ - \x04\x89\x01\x13\x14\n\x0c\n\x02\x04\x16\x12\x06\x8c\x01\0\x8f\x01\x01\n\ - \x0b\n\x03\x04\x16\x01\x12\x04\x8c\x01\x08\x12\n\x0c\n\x04\x04\x16\x02\0\ - \x12\x04\x8d\x01\x04\x15\n\x0f\n\x05\x04\x16\x02\0\x04\x12\x06\x8d\x01\ - \x04\x8c\x01\x14\n\r\n\x05\x04\x16\x02\0\x05\x12\x04\x8d\x01\x04\n\n\r\n\ - \x05\x04\x16\x02\0\x01\x12\x04\x8d\x01\x0b\x10\n\r\n\x05\x04\x16\x02\0\ - \x03\x12\x04\x8d\x01\x13\x14\n\x0c\n\x04\x04\x16\x02\x01\x12\x04\x8e\x01\ - \x04\x14\n\x0f\n\x05\x04\x16\x02\x01\x04\x12\x06\x8e\x01\x04\x8d\x01\x15\ - \n\r\n\x05\x04\x16\x02\x01\x06\x12\x04\x8e\x01\x04\x0b\n\r\n\x05\x04\x16\ - \x02\x01\x01\x12\x04\x8e\x01\x0c\x0f\n\r\n\x05\x04\x16\x02\x01\x03\x12\ - \x04\x8e\x01\x12\x13\n\x0c\n\x02\x04\x17\x12\x06\x91\x01\0\x94\x01\x01\n\ - \x0b\n\x03\x04\x17\x01\x12\x04\x91\x01\x08\x11\n\x0c\n\x04\x04\x17\x02\0\ - \x12\x04\x92\x01\x04\x19\n\x0f\n\x05\x04\x17\x02\0\x04\x12\x06\x92\x01\ - \x04\x91\x01\x13\n\r\n\x05\x04\x17\x02\0\x05\x12\x04\x92\x01\x04\n\n\r\n\ - \x05\x04\x17\x02\0\x01\x12\x04\x92\x01\x0b\x14\n\r\n\x05\x04\x17\x02\0\ - \x03\x12\x04\x92\x01\x17\x18\n\x0c\n\x04\x04\x17\x02\x01\x12\x04\x93\x01\ - \x04\x13\n\x0f\n\x05\x04\x17\x02\x01\x04\x12\x06\x93\x01\x04\x92\x01\x19\ - \n\r\n\x05\x04\x17\x02\x01\x05\x12\x04\x93\x01\x04\n\n\r\n\x05\x04\x17\ - \x02\x01\x01\x12\x04\x93\x01\x0b\x0e\n\r\n\x05\x04\x17\x02\x01\x03\x12\ - \x04\x93\x01\x11\x12\n\x0c\n\x02\x04\x18\x12\x06\x96\x01\0\x99\x01\x01\n\ - \x0b\n\x03\x04\x18\x01\x12\x04\x96\x01\x08\x12\n\x0c\n\x04\x04\x18\x02\0\ - \x12\x04\x97\x01\x04\x15\n\x0f\n\x05\x04\x18\x02\0\x04\x12\x06\x97\x01\ - \x04\x96\x01\x14\n\r\n\x05\x04\x18\x02\0\x05\x12\x04\x97\x01\x04\n\n\r\n\ - \x05\x04\x18\x02\0\x01\x12\x04\x97\x01\x0b\x10\n\r\n\x05\x04\x18\x02\0\ - \x03\x12\x04\x97\x01\x13\x14\n\x0c\n\x04\x04\x18\x02\x01\x12\x04\x98\x01\ - \x04\x14\n\x0f\n\x05\x04\x18\x02\x01\x04\x12\x06\x98\x01\x04\x97\x01\x15\ - \n\r\n\x05\x04\x18\x02\x01\x06\x12\x04\x98\x01\x04\x0b\n\r\n\x05\x04\x18\ - \x02\x01\x01\x12\x04\x98\x01\x0c\x0f\n\r\n\x05\x04\x18\x02\x01\x03\x12\ - \x04\x98\x01\x12\x13b\x06proto3\ + \x0e2\x13.indexrpcpb.RespErrR\x03err\":\n\tSchemaReq\x12\x1b\n\tclient_i\ + d\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\ + \x04R\x03seq\"I\n\nSchemaResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\x05\ + value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\ + *3\n\x07RespErr\x12\x06\n\x02OK\x10\0\x12\x12\n\x0eErrWrongLeader\x10\ + \x01\x12\x0c\n\x08ErrNoKey\x10\x02*X\n\x07ReqType\x12\x08\n\x04Join\x10\ + \0\x12\t\n\x05Leave\x10\x01\x12\x07\n\x03Put\x10\x02\x12\n\n\x06Delete\ + \x10\x03\x12\n\n\x06Commit\x10\x04\x12\x0c\n\x08Rollback\x10\x05\x12\t\n\ + \x05Merge\x10\x06J\x9d,\n\x07\x12\x05\0\0\xa3\x01\x01\n\x08\n\x01\x0c\ + \x12\x03\0\0\x12\n\x08\n\x01\x02\x12\x03\x01\0\x13\n\t\n\x02\x03\0\x12\ + \x03\x03\0\x17\n\n\n\x02\x05\0\x12\x04\x05\0\t\x01\n\n\n\x03\x05\0\x01\ + \x12\x03\x05\x05\x0c\n\x0b\n\x04\x05\0\x02\0\x12\x03\x06\x04\x0b\n\x0c\n\ + \x05\x05\0\x02\0\x01\x12\x03\x06\x04\x06\n\x0c\n\x05\x05\0\x02\0\x02\x12\ + \x03\x06\t\n\n\x0b\n\x04\x05\0\x02\x01\x12\x03\x07\x04\x17\n\x0c\n\x05\ + \x05\0\x02\x01\x01\x12\x03\x07\x04\x12\n\x0c\n\x05\x05\0\x02\x01\x02\x12\ + \x03\x07\x15\x16\n\x0b\n\x04\x05\0\x02\x02\x12\x03\x08\x04\x11\n\x0c\n\ + \x05\x05\0\x02\x02\x01\x12\x03\x08\x04\x0c\n\x0c\n\x05\x05\0\x02\x02\x02\ + \x12\x03\x08\x0f\x10\n\n\n\x02\x05\x01\x12\x04\x0b\0\x13\x01\n\n\n\x03\ + \x05\x01\x01\x12\x03\x0b\x05\x0c\n\x0b\n\x04\x05\x01\x02\0\x12\x03\x0c\ + \x04\r\n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03\x0c\x04\x08\n\x0c\n\x05\x05\ + \x01\x02\0\x02\x12\x03\x0c\x0b\x0c\n\x0b\n\x04\x05\x01\x02\x01\x12\x03\r\ + \x04\x0e\n\x0c\n\x05\x05\x01\x02\x01\x01\x12\x03\r\x04\t\n\x0c\n\x05\x05\ + \x01\x02\x01\x02\x12\x03\r\x0c\r\n\x0b\n\x04\x05\x01\x02\x02\x12\x03\x0e\ + \x04\x0c\n\x0c\n\x05\x05\x01\x02\x02\x01\x12\x03\x0e\x04\x07\n\x0c\n\x05\ + \x05\x01\x02\x02\x02\x12\x03\x0e\n\x0b\n\x0b\n\x04\x05\x01\x02\x03\x12\ + \x03\x0f\x04\x0f\n\x0c\n\x05\x05\x01\x02\x03\x01\x12\x03\x0f\x04\n\n\x0c\ + \n\x05\x05\x01\x02\x03\x02\x12\x03\x0f\r\x0e\n\x0b\n\x04\x05\x01\x02\x04\ + \x12\x03\x10\x04\x0f\n\x0c\n\x05\x05\x01\x02\x04\x01\x12\x03\x10\x04\n\n\ + \x0c\n\x05\x05\x01\x02\x04\x02\x12\x03\x10\r\x0e\n\x0b\n\x04\x05\x01\x02\ + \x05\x12\x03\x11\x04\x11\n\x0c\n\x05\x05\x01\x02\x05\x01\x12\x03\x11\x04\ + \x0c\n\x0c\n\x05\x05\x01\x02\x05\x02\x12\x03\x11\x0f\x10\n\x0b\n\x04\x05\ + \x01\x02\x06\x12\x03\x12\x04\x0e\n\x0c\n\x05\x05\x01\x02\x06\x01\x12\x03\ + \x12\x04\t\n\x0c\n\x05\x05\x01\x02\x06\x02\x12\x03\x12\x0c\r\n\n\n\x02\ + \x04\0\x12\x04\x15\0\x1f\x01\n\n\n\x03\x04\0\x01\x12\x03\x15\x08\x10\n\ + \x0b\n\x04\x04\0\x02\0\x12\x03\x16\x04\x19\n\r\n\x05\x04\0\x02\0\x04\x12\ + \x04\x16\x04\x15\x12\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x16\x04\n\n\x0c\ + \n\x05\x04\0\x02\0\x01\x12\x03\x16\x0b\x14\n\x0c\n\x05\x04\0\x02\0\x03\ + \x12\x03\x16\x17\x18\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x17\x04\x19\n\r\n\ + \x05\x04\0\x02\x01\x04\x12\x04\x17\x04\x16\x19\n\x0c\n\x05\x04\0\x02\x01\ + \x06\x12\x03\x17\x04\x0b\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x17\x0c\ + \x14\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x17\x17\x18\n\x0b\n\x04\x04\0\ + \x02\x02\x12\x03\x18\x04\x19\n\r\n\x05\x04\0\x02\x02\x04\x12\x04\x18\x04\ + \x17\x19\n\x0c\n\x05\x04\0\x02\x02\x06\x12\x03\x18\x04\x0b\n\x0c\n\x05\ + \x04\0\x02\x02\x01\x12\x03\x18\x0c\x14\n\x0c\n\x05\x04\0\x02\x02\x03\x12\ + \x03\x18\x17\x18\n\x0b\n\x04\x04\0\x02\x03\x12\x03\x19\x04\x1b\n\r\n\x05\ + \x04\0\x02\x03\x04\x12\x04\x19\x04\x18\x19\n\x0c\n\x05\x04\0\x02\x03\x06\ + \x12\x03\x19\x04\x0c\n\x0c\n\x05\x04\0\x02\x03\x01\x12\x03\x19\r\x16\n\ + \x0c\n\x05\x04\0\x02\x03\x03\x12\x03\x19\x19\x1a\n\x0b\n\x04\x04\0\x02\ + \x04\x12\x03\x1a\x04\x17\n\r\n\x05\x04\0\x02\x04\x04\x12\x04\x1a\x04\x19\ + \x1b\n\x0c\n\x05\x04\0\x02\x04\x06\x12\x03\x1a\x04\n\n\x0c\n\x05\x04\0\ + \x02\x04\x01\x12\x03\x1a\x0b\x12\n\x0c\n\x05\x04\0\x02\x04\x03\x12\x03\ + \x1a\x15\x16\n\x0b\n\x04\x04\0\x02\x05\x12\x03\x1b\x04\x1d\n\r\n\x05\x04\ + \0\x02\x05\x04\x12\x04\x1b\x04\x1a\x17\n\x0c\n\x05\x04\0\x02\x05\x06\x12\ + \x03\x1b\x04\r\n\x0c\n\x05\x04\0\x02\x05\x01\x12\x03\x1b\x0e\x18\n\x0c\n\ + \x05\x04\0\x02\x05\x03\x12\x03\x1b\x1b\x1c\n\x0b\n\x04\x04\0\x02\x06\x12\ + \x03\x1c\x04\x1d\n\r\n\x05\x04\0\x02\x06\x04\x12\x04\x1c\x04\x1b\x1d\n\ + \x0c\n\x05\x04\0\x02\x06\x06\x12\x03\x1c\x04\r\n\x0c\n\x05\x04\0\x02\x06\ + \x01\x12\x03\x1c\x0e\x18\n\x0c\n\x05\x04\0\x02\x06\x03\x12\x03\x1c\x1b\ + \x1c\n\x0b\n\x04\x04\0\x02\x07\x12\x03\x1d\x04!\n\r\n\x05\x04\0\x02\x07\ + \x04\x12\x04\x1d\x04\x1c\x1d\n\x0c\n\x05\x04\0\x02\x07\x06\x12\x03\x1d\ + \x04\x0f\n\x0c\n\x05\x04\0\x02\x07\x01\x12\x03\x1d\x10\x1c\n\x0c\n\x05\ + \x04\0\x02\x07\x03\x12\x03\x1d\x1f\x20\n\x0b\n\x04\x04\0\x02\x08\x12\x03\ + \x1e\x04\x1b\n\r\n\x05\x04\0\x02\x08\x04\x12\x04\x1e\x04\x1d!\n\x0c\n\ + \x05\x04\0\x02\x08\x06\x12\x03\x1e\x04\x0c\n\x0c\n\x05\x04\0\x02\x08\x01\ + \x12\x03\x1e\r\x16\n\x0c\n\x05\x04\0\x02\x08\x03\x12\x03\x1e\x19\x1a\n\n\ + \n\x02\x04\x01\x12\x04!\0%\x01\n\n\n\x03\x04\x01\x01\x12\x03!\x08\x15\n\ + \x0b\n\x04\x04\x01\x02\0\x12\x03\"\x04\x1e\n\r\n\x05\x04\x01\x02\0\x04\ + \x12\x04\"\x04!\x17\n\x0c\n\x05\x04\x01\x02\0\x06\x12\x03\"\x04\x16\n\ + \x0c\n\x05\x04\x01\x02\0\x01\x12\x03\"\x17\x19\n\x0c\n\x05\x04\x01\x02\0\ + \x03\x12\x03\"\x1c\x1d\n\x0b\n\x04\x04\x01\x02\x01\x12\x03#\x04\x12\n\r\ + \n\x05\x04\x01\x02\x01\x04\x12\x04#\x04\"\x1e\n\x0c\n\x05\x04\x01\x02\ + \x01\x05\x12\x03#\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03#\x0b\r\n\ + \x0c\n\x05\x04\x01\x02\x01\x03\x12\x03#\x10\x11\n\x0b\n\x04\x04\x01\x02\ + \x02\x12\x03$\x04\x14\n\r\n\x05\x04\x01\x02\x02\x04\x12\x04$\x04#\x12\n\ + \x0c\n\x05\x04\x01\x02\x02\x05\x12\x03$\x04\n\n\x0c\n\x05\x04\x01\x02\ + \x02\x01\x12\x03$\x0b\x0f\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03$\x12\ + \x13\n\n\n\x02\x04\x02\x12\x04'\0)\x01\n\n\n\x03\x04\x02\x01\x12\x03'\ + \x08\x10\n\x0b\n\x04\x04\x02\x02\0\x12\x03(\x04\x14\n\r\n\x05\x04\x02\ + \x02\0\x04\x12\x04(\x04'\x12\n\x0c\n\x05\x04\x02\x02\0\x06\x12\x03(\x04\ + \x0b\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03(\x0c\x0f\n\x0c\n\x05\x04\x02\ + \x02\0\x03\x12\x03(\x12\x13\n\n\n\x02\x04\x03\x12\x04+\0/\x01\n\n\n\x03\ + \x04\x03\x01\x12\x03+\x08\x0f\n\x0b\n\x04\x04\x03\x02\0\x12\x03,\x04\x19\ + \n\r\n\x05\x04\x03\x02\0\x04\x12\x04,\x04+\x11\n\x0c\n\x05\x04\x03\x02\0\ + \x05\x12\x03,\x04\n\n\x0c\n\x05\x04\x03\x02\0\x01\x12\x03,\x0b\x14\n\x0c\ + \n\x05\x04\x03\x02\0\x03\x12\x03,\x17\x18\n\x0b\n\x04\x04\x03\x02\x01\ + \x12\x03-\x04\x17\n\r\n\x05\x04\x03\x02\x01\x04\x12\x04-\x04,\x19\n\x0c\ + \n\x05\x04\x03\x02\x01\x05\x12\x03-\x04\n\n\x0c\n\x05\x04\x03\x02\x01\ + \x01\x12\x03-\x0b\x12\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03-\x15\x16\n\ + \x0b\n\x04\x04\x03\x02\x02\x12\x03.\x04\x19\n\r\n\x05\x04\x03\x02\x02\ + \x04\x12\x04.\x04-\x17\n\x0c\n\x05\x04\x03\x02\x02\x05\x12\x03.\x04\n\n\ + \x0c\n\x05\x04\x03\x02\x02\x01\x12\x03.\x0b\x14\n\x0c\n\x05\x04\x03\x02\ + \x02\x03\x12\x03.\x17\x18\n\n\n\x02\x04\x04\x12\x041\05\x01\n\n\n\x03\ + \x04\x04\x01\x12\x031\x08\x10\n\x0b\n\x04\x04\x04\x02\0\x12\x032\x04\x19\ + \n\r\n\x05\x04\x04\x02\0\x04\x12\x042\x041\x12\n\x0c\n\x05\x04\x04\x02\0\ + \x05\x12\x032\x04\n\n\x0c\n\x05\x04\x04\x02\0\x01\x12\x032\x0b\x14\n\x0c\ + \n\x05\x04\x04\x02\0\x03\x12\x032\x17\x18\n\x0b\n\x04\x04\x04\x02\x01\ + \x12\x033\x04\x17\n\r\n\x05\x04\x04\x02\x01\x04\x12\x043\x042\x19\n\x0c\ + \n\x05\x04\x04\x02\x01\x05\x12\x033\x04\n\n\x0c\n\x05\x04\x04\x02\x01\ + \x01\x12\x033\x0b\x12\n\x0c\n\x05\x04\x04\x02\x01\x03\x12\x033\x15\x16\n\ + \x0b\n\x04\x04\x04\x02\x02\x12\x034\x04\x19\n\r\n\x05\x04\x04\x02\x02\ + \x04\x12\x044\x043\x17\n\x0c\n\x05\x04\x04\x02\x02\x05\x12\x034\x04\n\n\ + \x0c\n\x05\x04\x04\x02\x02\x01\x12\x034\x0b\x14\n\x0c\n\x05\x04\x04\x02\ + \x02\x03\x12\x034\x17\x18\n\n\n\x02\x04\x05\x12\x047\0:\x01\n\n\n\x03\ + \x04\x05\x01\x12\x037\x08\x10\n\x0b\n\x04\x04\x05\x02\0\x12\x038\x04\x19\ + \n\r\n\x05\x04\x05\x02\0\x04\x12\x048\x047\x12\n\x0c\n\x05\x04\x05\x02\0\ + \x05\x12\x038\x04\n\n\x0c\n\x05\x04\x05\x02\0\x01\x12\x038\x0b\x14\n\x0c\ + \n\x05\x04\x05\x02\0\x03\x12\x038\x17\x18\n\x0b\n\x04\x04\x05\x02\x01\ + \x12\x039\x04\x13\n\r\n\x05\x04\x05\x02\x01\x04\x12\x049\x048\x19\n\x0c\ + \n\x05\x04\x05\x02\x01\x05\x12\x039\x04\n\n\x0c\n\x05\x04\x05\x02\x01\ + \x01\x12\x039\x0b\x0e\n\x0c\n\x05\x04\x05\x02\x01\x03\x12\x039\x11\x12\n\ + \n\n\x02\x04\x06\x12\x04<\0?\x01\n\n\n\x03\x04\x06\x01\x12\x03<\x08\x11\ + \n\x0b\n\x04\x04\x06\x02\0\x12\x03=\x04\x15\n\r\n\x05\x04\x06\x02\0\x04\ + \x12\x04=\x04<\x13\n\x0c\n\x05\x04\x06\x02\0\x05\x12\x03=\x04\n\n\x0c\n\ + \x05\x04\x06\x02\0\x01\x12\x03=\x0b\x10\n\x0c\n\x05\x04\x06\x02\0\x03\ + \x12\x03=\x13\x14\n\x0b\n\x04\x04\x06\x02\x01\x12\x03>\x04\x14\n\r\n\x05\ + \x04\x06\x02\x01\x04\x12\x04>\x04=\x15\n\x0c\n\x05\x04\x06\x02\x01\x06\ + \x12\x03>\x04\x0b\n\x0c\n\x05\x04\x06\x02\x01\x01\x12\x03>\x0c\x0f\n\x0c\ + \n\x05\x04\x06\x02\x01\x03\x12\x03>\x12\x13\n\n\n\x02\x04\x07\x12\x04A\0\ + D\x01\n\n\n\x03\x04\x07\x01\x12\x03A\x08\x10\n\x0b\n\x04\x04\x07\x02\0\ + \x12\x03B\x04\x19\n\r\n\x05\x04\x07\x02\0\x04\x12\x04B\x04A\x12\n\x0c\n\ + \x05\x04\x07\x02\0\x05\x12\x03B\x04\n\n\x0c\n\x05\x04\x07\x02\0\x01\x12\ + \x03B\x0b\x14\n\x0c\n\x05\x04\x07\x02\0\x03\x12\x03B\x17\x18\n\x0b\n\x04\ + \x04\x07\x02\x01\x12\x03C\x04\x13\n\r\n\x05\x04\x07\x02\x01\x04\x12\x04C\ + \x04B\x19\n\x0c\n\x05\x04\x07\x02\x01\x05\x12\x03C\x04\n\n\x0c\n\x05\x04\ + \x07\x02\x01\x01\x12\x03C\x0b\x0e\n\x0c\n\x05\x04\x07\x02\x01\x03\x12\ + \x03C\x11\x12\n\n\n\x02\x04\x08\x12\x04F\0I\x01\n\n\n\x03\x04\x08\x01\ + \x12\x03F\x08\x11\n\x0b\n\x04\x04\x08\x02\0\x12\x03G\x04\x15\n\r\n\x05\ + \x04\x08\x02\0\x04\x12\x04G\x04F\x13\n\x0c\n\x05\x04\x08\x02\0\x05\x12\ + \x03G\x04\n\n\x0c\n\x05\x04\x08\x02\0\x01\x12\x03G\x0b\x10\n\x0c\n\x05\ + \x04\x08\x02\0\x03\x12\x03G\x13\x14\n\x0b\n\x04\x04\x08\x02\x01\x12\x03H\ + \x04\x14\n\r\n\x05\x04\x08\x02\x01\x04\x12\x04H\x04G\x15\n\x0c\n\x05\x04\ + \x08\x02\x01\x06\x12\x03H\x04\x0b\n\x0c\n\x05\x04\x08\x02\x01\x01\x12\ + \x03H\x0c\x0f\n\x0c\n\x05\x04\x08\x02\x01\x03\x12\x03H\x12\x13\n\n\n\x02\ + \x04\t\x12\x04K\0N\x01\n\n\n\x03\x04\t\x01\x12\x03K\x08\x12\n\x0b\n\x04\ + \x04\t\x02\0\x12\x03L\x04\x19\n\r\n\x05\x04\t\x02\0\x04\x12\x04L\x04K\ + \x14\n\x0c\n\x05\x04\t\x02\0\x05\x12\x03L\x04\n\n\x0c\n\x05\x04\t\x02\0\ + \x01\x12\x03L\x0b\x14\n\x0c\n\x05\x04\t\x02\0\x03\x12\x03L\x17\x18\n\x0b\ + \n\x04\x04\t\x02\x01\x12\x03M\x04\x13\n\r\n\x05\x04\t\x02\x01\x04\x12\ + \x04M\x04L\x19\n\x0c\n\x05\x04\t\x02\x01\x05\x12\x03M\x04\n\n\x0c\n\x05\ + \x04\t\x02\x01\x01\x12\x03M\x0b\x0e\n\x0c\n\x05\x04\t\x02\x01\x03\x12\ + \x03M\x11\x12\n\n\n\x02\x04\n\x12\x04P\0S\x01\n\n\n\x03\x04\n\x01\x12\ + \x03P\x08\x13\n\x0b\n\x04\x04\n\x02\0\x12\x03Q\x04\x15\n\r\n\x05\x04\n\ + \x02\0\x04\x12\x04Q\x04P\x15\n\x0c\n\x05\x04\n\x02\0\x05\x12\x03Q\x04\n\ + \n\x0c\n\x05\x04\n\x02\0\x01\x12\x03Q\x0b\x10\n\x0c\n\x05\x04\n\x02\0\ + \x03\x12\x03Q\x13\x14\n\x0b\n\x04\x04\n\x02\x01\x12\x03R\x04\x14\n\r\n\ + \x05\x04\n\x02\x01\x04\x12\x04R\x04Q\x15\n\x0c\n\x05\x04\n\x02\x01\x06\ + \x12\x03R\x04\x0b\n\x0c\n\x05\x04\n\x02\x01\x01\x12\x03R\x0c\x0f\n\x0c\n\ + \x05\x04\n\x02\x01\x03\x12\x03R\x12\x13\n\n\n\x02\x04\x0b\x12\x04U\0Y\ + \x01\n\n\n\x03\x04\x0b\x01\x12\x03U\x08\x0e\n\x0b\n\x04\x04\x0b\x02\0\ + \x12\x03V\x04\x19\n\r\n\x05\x04\x0b\x02\0\x04\x12\x04V\x04U\x10\n\x0c\n\ + \x05\x04\x0b\x02\0\x05\x12\x03V\x04\n\n\x0c\n\x05\x04\x0b\x02\0\x01\x12\ + \x03V\x0b\x14\n\x0c\n\x05\x04\x0b\x02\0\x03\x12\x03V\x17\x18\n\x0b\n\x04\ + \x04\x0b\x02\x01\x12\x03W\x04\x13\n\r\n\x05\x04\x0b\x02\x01\x04\x12\x04W\ + \x04V\x19\n\x0c\n\x05\x04\x0b\x02\x01\x05\x12\x03W\x04\n\n\x0c\n\x05\x04\ + \x0b\x02\x01\x01\x12\x03W\x0b\x0e\n\x0c\n\x05\x04\x0b\x02\x01\x03\x12\ + \x03W\x11\x12\n\x0b\n\x04\x04\x0b\x02\x02\x12\x03X\x04\x16\n\r\n\x05\x04\ + \x0b\x02\x02\x04\x12\x04X\x04W\x13\n\x0c\n\x05\x04\x0b\x02\x02\x05\x12\ + \x03X\x04\n\n\x0c\n\x05\x04\x0b\x02\x02\x01\x12\x03X\x0b\x11\n\x0c\n\x05\ + \x04\x0b\x02\x02\x03\x12\x03X\x14\x15\n\n\n\x02\x04\x0c\x12\x04[\0^\x01\ + \n\n\n\x03\x04\x0c\x01\x12\x03[\x08\x0f\n\x0b\n\x04\x04\x0c\x02\0\x12\ + \x03\\\x04\x15\n\r\n\x05\x04\x0c\x02\0\x04\x12\x04\\\x04[\x11\n\x0c\n\ + \x05\x04\x0c\x02\0\x05\x12\x03\\\x04\n\n\x0c\n\x05\x04\x0c\x02\0\x01\x12\ + \x03\\\x0b\x10\n\x0c\n\x05\x04\x0c\x02\0\x03\x12\x03\\\x13\x14\n\x0b\n\ + \x04\x04\x0c\x02\x01\x12\x03]\x04\x14\n\r\n\x05\x04\x0c\x02\x01\x04\x12\ + \x04]\x04\\\x15\n\x0c\n\x05\x04\x0c\x02\x01\x06\x12\x03]\x04\x0b\n\x0c\n\ + \x05\x04\x0c\x02\x01\x01\x12\x03]\x0c\x0f\n\x0c\n\x05\x04\x0c\x02\x01\ + \x03\x12\x03]\x12\x13\n\n\n\x02\x04\r\x12\x04`\0e\x01\n\n\n\x03\x04\r\ + \x01\x12\x03`\x08\x0e\n\x0b\n\x04\x04\r\x02\0\x12\x03a\x04\x19\n\r\n\x05\ + \x04\r\x02\0\x04\x12\x04a\x04`\x10\n\x0c\n\x05\x04\r\x02\0\x05\x12\x03a\ + \x04\n\n\x0c\n\x05\x04\r\x02\0\x01\x12\x03a\x0b\x14\n\x0c\n\x05\x04\r\ + \x02\0\x03\x12\x03a\x17\x18\n\x0b\n\x04\x04\r\x02\x01\x12\x03b\x04\x13\n\ + \r\n\x05\x04\r\x02\x01\x04\x12\x04b\x04a\x19\n\x0c\n\x05\x04\r\x02\x01\ + \x05\x12\x03b\x04\n\n\x0c\n\x05\x04\r\x02\x01\x01\x12\x03b\x0b\x0e\n\x0c\ + \n\x05\x04\r\x02\x01\x03\x12\x03b\x11\x12\n\x0b\n\x04\x04\r\x02\x02\x12\ + \x03c\x04\x16\n\r\n\x05\x04\r\x02\x02\x04\x12\x04c\x04b\x13\n\x0c\n\x05\ + \x04\r\x02\x02\x05\x12\x03c\x04\n\n\x0c\n\x05\x04\r\x02\x02\x01\x12\x03c\ + \x0b\x11\n\x0c\n\x05\x04\r\x02\x02\x03\x12\x03c\x14\x15\n\x0b\n\x04\x04\ + \r\x02\x03\x12\x03d\x04\x16\n\r\n\x05\x04\r\x02\x03\x04\x12\x04d\x04c\ + \x16\n\x0c\n\x05\x04\r\x02\x03\x05\x12\x03d\x04\n\n\x0c\n\x05\x04\r\x02\ + \x03\x01\x12\x03d\x0b\x11\n\x0c\n\x05\x04\r\x02\x03\x03\x12\x03d\x14\x15\ + \n\n\n\x02\x04\x0e\x12\x04g\0i\x01\n\n\n\x03\x04\x0e\x01\x12\x03g\x08\ + \x0f\n\x0b\n\x04\x04\x0e\x02\0\x12\x03h\x04\x14\n\r\n\x05\x04\x0e\x02\0\ + \x04\x12\x04h\x04g\x11\n\x0c\n\x05\x04\x0e\x02\0\x06\x12\x03h\x04\x0b\n\ + \x0c\n\x05\x04\x0e\x02\0\x01\x12\x03h\x0c\x0f\n\x0c\n\x05\x04\x0e\x02\0\ + \x03\x12\x03h\x12\x13\n\n\n\x02\x04\x0f\x12\x04k\0o\x01\n\n\n\x03\x04\ + \x0f\x01\x12\x03k\x08\x11\n\x0b\n\x04\x04\x0f\x02\0\x12\x03l\x04\x19\n\r\ + \n\x05\x04\x0f\x02\0\x04\x12\x04l\x04k\x13\n\x0c\n\x05\x04\x0f\x02\0\x05\ + \x12\x03l\x04\n\n\x0c\n\x05\x04\x0f\x02\0\x01\x12\x03l\x0b\x14\n\x0c\n\ + \x05\x04\x0f\x02\0\x03\x12\x03l\x17\x18\n\x0b\n\x04\x04\x0f\x02\x01\x12\ + \x03m\x04\x13\n\r\n\x05\x04\x0f\x02\x01\x04\x12\x04m\x04l\x19\n\x0c\n\ + \x05\x04\x0f\x02\x01\x05\x12\x03m\x04\n\n\x0c\n\x05\x04\x0f\x02\x01\x01\ + \x12\x03m\x0b\x0e\n\x0c\n\x05\x04\x0f\x02\x01\x03\x12\x03m\x11\x12\n\x0b\ + \n\x04\x04\x0f\x02\x02\x12\x03n\x04\x16\n\r\n\x05\x04\x0f\x02\x02\x04\ + \x12\x04n\x04m\x13\n\x0c\n\x05\x04\x0f\x02\x02\x05\x12\x03n\x04\n\n\x0c\ + \n\x05\x04\x0f\x02\x02\x01\x12\x03n\x0b\x11\n\x0c\n\x05\x04\x0f\x02\x02\ + \x03\x12\x03n\x14\x15\n\n\n\x02\x04\x10\x12\x04q\0s\x01\n\n\n\x03\x04\ + \x10\x01\x12\x03q\x08\x12\n\x0b\n\x04\x04\x10\x02\0\x12\x03r\x04\x14\n\r\ + \n\x05\x04\x10\x02\0\x04\x12\x04r\x04q\x14\n\x0c\n\x05\x04\x10\x02\0\x06\ + \x12\x03r\x04\x0b\n\x0c\n\x05\x04\x10\x02\0\x01\x12\x03r\x0c\x0f\n\x0c\n\ + \x05\x04\x10\x02\0\x03\x12\x03r\x12\x13\n\n\n\x02\x04\x11\x12\x04u\0x\ + \x01\n\n\n\x03\x04\x11\x01\x12\x03u\x08\x11\n\x0b\n\x04\x04\x11\x02\0\ + \x12\x03v\x04\x19\n\r\n\x05\x04\x11\x02\0\x04\x12\x04v\x04u\x13\n\x0c\n\ + \x05\x04\x11\x02\0\x05\x12\x03v\x04\n\n\x0c\n\x05\x04\x11\x02\0\x01\x12\ + \x03v\x0b\x14\n\x0c\n\x05\x04\x11\x02\0\x03\x12\x03v\x17\x18\n\x0b\n\x04\ + \x04\x11\x02\x01\x12\x03w\x04\x13\n\r\n\x05\x04\x11\x02\x01\x04\x12\x04w\ + \x04v\x19\n\x0c\n\x05\x04\x11\x02\x01\x05\x12\x03w\x04\n\n\x0c\n\x05\x04\ + \x11\x02\x01\x01\x12\x03w\x0b\x0e\n\x0c\n\x05\x04\x11\x02\x01\x03\x12\ + \x03w\x11\x12\n\n\n\x02\x04\x12\x12\x04z\0|\x01\n\n\n\x03\x04\x12\x01\ + \x12\x03z\x08\x12\n\x0b\n\x04\x04\x12\x02\0\x12\x03{\x04\x14\n\r\n\x05\ + \x04\x12\x02\0\x04\x12\x04{\x04z\x14\n\x0c\n\x05\x04\x12\x02\0\x06\x12\ + \x03{\x04\x0b\n\x0c\n\x05\x04\x12\x02\0\x01\x12\x03{\x0c\x0f\n\x0c\n\x05\ + \x04\x12\x02\0\x03\x12\x03{\x12\x13\n\x0b\n\x02\x04\x13\x12\x05~\0\x81\ + \x01\x01\n\n\n\x03\x04\x13\x01\x12\x03~\x08\x13\n\x0b\n\x04\x04\x13\x02\ + \0\x12\x03\x7f\x04\x19\n\r\n\x05\x04\x13\x02\0\x04\x12\x04\x7f\x04~\x15\ + \n\x0c\n\x05\x04\x13\x02\0\x05\x12\x03\x7f\x04\n\n\x0c\n\x05\x04\x13\x02\ + \0\x01\x12\x03\x7f\x0b\x14\n\x0c\n\x05\x04\x13\x02\0\x03\x12\x03\x7f\x17\ + \x18\n\x0c\n\x04\x04\x13\x02\x01\x12\x04\x80\x01\x04\x13\n\x0e\n\x05\x04\ + \x13\x02\x01\x04\x12\x05\x80\x01\x04\x7f\x19\n\r\n\x05\x04\x13\x02\x01\ + \x05\x12\x04\x80\x01\x04\n\n\r\n\x05\x04\x13\x02\x01\x01\x12\x04\x80\x01\ + \x0b\x0e\n\r\n\x05\x04\x13\x02\x01\x03\x12\x04\x80\x01\x11\x12\n\x0c\n\ + \x02\x04\x14\x12\x06\x83\x01\0\x85\x01\x01\n\x0b\n\x03\x04\x14\x01\x12\ + \x04\x83\x01\x08\x14\n\x0c\n\x04\x04\x14\x02\0\x12\x04\x84\x01\x04\x14\n\ + \x0f\n\x05\x04\x14\x02\0\x04\x12\x06\x84\x01\x04\x83\x01\x16\n\r\n\x05\ + \x04\x14\x02\0\x06\x12\x04\x84\x01\x04\x0b\n\r\n\x05\x04\x14\x02\0\x01\ + \x12\x04\x84\x01\x0c\x0f\n\r\n\x05\x04\x14\x02\0\x03\x12\x04\x84\x01\x12\ + \x13\n\x0c\n\x02\x04\x15\x12\x06\x87\x01\0\x8a\x01\x01\n\x0b\n\x03\x04\ + \x15\x01\x12\x04\x87\x01\x08\x10\n\x0c\n\x04\x04\x15\x02\0\x12\x04\x88\ + \x01\x04\x19\n\x0f\n\x05\x04\x15\x02\0\x04\x12\x06\x88\x01\x04\x87\x01\ + \x12\n\r\n\x05\x04\x15\x02\0\x05\x12\x04\x88\x01\x04\n\n\r\n\x05\x04\x15\ + \x02\0\x01\x12\x04\x88\x01\x0b\x14\n\r\n\x05\x04\x15\x02\0\x03\x12\x04\ + \x88\x01\x17\x18\n\x0c\n\x04\x04\x15\x02\x01\x12\x04\x89\x01\x04\x13\n\ + \x0f\n\x05\x04\x15\x02\x01\x04\x12\x06\x89\x01\x04\x88\x01\x19\n\r\n\x05\ + \x04\x15\x02\x01\x05\x12\x04\x89\x01\x04\n\n\r\n\x05\x04\x15\x02\x01\x01\ + \x12\x04\x89\x01\x0b\x0e\n\r\n\x05\x04\x15\x02\x01\x03\x12\x04\x89\x01\ + \x11\x12\n\x0c\n\x02\x04\x16\x12\x06\x8c\x01\0\x8e\x01\x01\n\x0b\n\x03\ + \x04\x16\x01\x12\x04\x8c\x01\x08\x11\n\x0c\n\x04\x04\x16\x02\0\x12\x04\ + \x8d\x01\x04\x14\n\x0f\n\x05\x04\x16\x02\0\x04\x12\x06\x8d\x01\x04\x8c\ + \x01\x13\n\r\n\x05\x04\x16\x02\0\x06\x12\x04\x8d\x01\x04\x0b\n\r\n\x05\ + \x04\x16\x02\0\x01\x12\x04\x8d\x01\x0c\x0f\n\r\n\x05\x04\x16\x02\0\x03\ + \x12\x04\x8d\x01\x12\x13\n\x0c\n\x02\x04\x17\x12\x06\x90\x01\0\x94\x01\ + \x01\n\x0b\n\x03\x04\x17\x01\x12\x04\x90\x01\x08\x11\n\x0c\n\x04\x04\x17\ + \x02\0\x12\x04\x91\x01\x04\x19\n\x0f\n\x05\x04\x17\x02\0\x04\x12\x06\x91\ + \x01\x04\x90\x01\x13\n\r\n\x05\x04\x17\x02\0\x05\x12\x04\x91\x01\x04\n\n\ + \r\n\x05\x04\x17\x02\0\x01\x12\x04\x91\x01\x0b\x14\n\r\n\x05\x04\x17\x02\ + \0\x03\x12\x04\x91\x01\x17\x18\n\x0c\n\x04\x04\x17\x02\x01\x12\x04\x92\ + \x01\x04\x13\n\x0f\n\x05\x04\x17\x02\x01\x04\x12\x06\x92\x01\x04\x91\x01\ + \x19\n\r\n\x05\x04\x17\x02\x01\x05\x12\x04\x92\x01\x04\n\n\r\n\x05\x04\ + \x17\x02\x01\x01\x12\x04\x92\x01\x0b\x0e\n\r\n\x05\x04\x17\x02\x01\x03\ + \x12\x04\x92\x01\x11\x12\n\x0c\n\x04\x04\x17\x02\x02\x12\x04\x93\x01\x04\ + \x15\n\x0f\n\x05\x04\x17\x02\x02\x04\x12\x06\x93\x01\x04\x92\x01\x13\n\r\ + \n\x05\x04\x17\x02\x02\x05\x12\x04\x93\x01\x04\n\n\r\n\x05\x04\x17\x02\ + \x02\x01\x12\x04\x93\x01\x0b\x10\n\r\n\x05\x04\x17\x02\x02\x03\x12\x04\ + \x93\x01\x13\x14\n\x0c\n\x02\x04\x18\x12\x06\x96\x01\0\x99\x01\x01\n\x0b\ + \n\x03\x04\x18\x01\x12\x04\x96\x01\x08\x12\n\x0c\n\x04\x04\x18\x02\0\x12\ + \x04\x97\x01\x04\x15\n\x0f\n\x05\x04\x18\x02\0\x04\x12\x06\x97\x01\x04\ + \x96\x01\x14\n\r\n\x05\x04\x18\x02\0\x05\x12\x04\x97\x01\x04\n\n\r\n\x05\ + \x04\x18\x02\0\x01\x12\x04\x97\x01\x0b\x10\n\r\n\x05\x04\x18\x02\0\x03\ + \x12\x04\x97\x01\x13\x14\n\x0c\n\x04\x04\x18\x02\x01\x12\x04\x98\x01\x04\ + \x14\n\x0f\n\x05\x04\x18\x02\x01\x04\x12\x06\x98\x01\x04\x97\x01\x15\n\r\ + \n\x05\x04\x18\x02\x01\x06\x12\x04\x98\x01\x04\x0b\n\r\n\x05\x04\x18\x02\ + \x01\x01\x12\x04\x98\x01\x0c\x0f\n\r\n\x05\x04\x18\x02\x01\x03\x12\x04\ + \x98\x01\x12\x13\n\x0c\n\x02\x04\x19\x12\x06\x9b\x01\0\x9e\x01\x01\n\x0b\ + \n\x03\x04\x19\x01\x12\x04\x9b\x01\x08\x11\n\x0c\n\x04\x04\x19\x02\0\x12\ + \x04\x9c\x01\x04\x19\n\x0f\n\x05\x04\x19\x02\0\x04\x12\x06\x9c\x01\x04\ + \x9b\x01\x13\n\r\n\x05\x04\x19\x02\0\x05\x12\x04\x9c\x01\x04\n\n\r\n\x05\ + \x04\x19\x02\0\x01\x12\x04\x9c\x01\x0b\x14\n\r\n\x05\x04\x19\x02\0\x03\ + \x12\x04\x9c\x01\x17\x18\n\x0c\n\x04\x04\x19\x02\x01\x12\x04\x9d\x01\x04\ + \x13\n\x0f\n\x05\x04\x19\x02\x01\x04\x12\x06\x9d\x01\x04\x9c\x01\x19\n\r\ + \n\x05\x04\x19\x02\x01\x05\x12\x04\x9d\x01\x04\n\n\r\n\x05\x04\x19\x02\ + \x01\x01\x12\x04\x9d\x01\x0b\x0e\n\r\n\x05\x04\x19\x02\x01\x03\x12\x04\ + \x9d\x01\x11\x12\n\x0c\n\x02\x04\x1a\x12\x06\xa0\x01\0\xa3\x01\x01\n\x0b\ + \n\x03\x04\x1a\x01\x12\x04\xa0\x01\x08\x12\n\x0c\n\x04\x04\x1a\x02\0\x12\ + \x04\xa1\x01\x04\x15\n\x0f\n\x05\x04\x1a\x02\0\x04\x12\x06\xa1\x01\x04\ + \xa0\x01\x14\n\r\n\x05\x04\x1a\x02\0\x05\x12\x04\xa1\x01\x04\n\n\r\n\x05\ + \x04\x1a\x02\0\x01\x12\x04\xa1\x01\x0b\x10\n\r\n\x05\x04\x1a\x02\0\x03\ + \x12\x04\xa1\x01\x13\x14\n\x0c\n\x04\x04\x1a\x02\x01\x12\x04\xa2\x01\x04\ + \x14\n\x0f\n\x05\x04\x1a\x02\x01\x04\x12\x06\xa2\x01\x04\xa1\x01\x15\n\r\ + \n\x05\x04\x1a\x02\x01\x06\x12\x04\xa2\x01\x04\x0b\n\r\n\x05\x04\x1a\x02\ + \x01\x01\x12\x04\xa2\x01\x0c\x0f\n\r\n\x05\x04\x1a\x02\x01\x03\x12\x04\ + \xa2\x01\x12\x13b\x06proto3\ "; static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy { diff --git a/src/server/server.rs b/src/server/server.rs index 4e2f6de..68ed296 100644 --- a/src/server/server.rs +++ b/src/server/server.rs @@ -1,32 +1,32 @@ -use std::{fs, thread}; use std::collections::HashMap; use std::path::Path; -use std::sync::{Arc, Mutex}; use std::sync::mpsc::{self, Receiver, SyncSender}; +use std::sync::{Arc, Mutex}; use std::time::Duration; +use std::{fs, thread}; -use crossbeam_channel::{bounded, Receiver as CReceiver, select}; +use crossbeam_channel::{bounded, select, Receiver as CReceiver}; use ctrlc; use futures::Future; use grpcio::{ChannelBuilder, EnvBuilder, Environment, RpcContext, ServerBuilder, UnarySink}; use log::*; use protobuf::Message; use raft::eraftpb::{ConfChange, ConfChangeType, Entry, EntryType, Message as RaftMessage}; -use tantivy::{Document, Index, IndexWriter, SegmentMeta, Term}; use tantivy::collector::TopDocs; use tantivy::query::{QueryParser, TermQuery}; use tantivy::schema::{Field, FieldType, IndexRecordOption, NamedFieldDocument, Schema}; +use tantivy::{Document, Index, IndexWriter, SegmentMeta, Term}; -use crate::client::client::{Clerk, create_client}; +use crate::client::client::{create_client, Clerk}; use crate::proto::indexpb_grpc::{self, Index as IndexService, IndexClient}; use crate::proto::indexrpcpb::{ ApplyReq, CommitResp, ConfChangeReq, DeleteResp, GetReq, GetResp, JoinReq, LeaveReq, MergeResp, - MetricsReq, MetricsResp, PeersReq, PeersResp, PutResp, RaftDone, ReqType, RespErr, - RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, + MetricsReq, MetricsResp, PeersReq, PeersResp, ProbeReq, ProbeResp, PutResp, RaftDone, ReqType, + RespErr, RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, }; -use crate::server::{peer, util}; use crate::server::metrics::Metrics; use crate::server::peer::PeerMessage; +use crate::server::{peer, util}; struct NotifyArgs(u64, String, RespErr); @@ -269,7 +269,7 @@ impl IndexServer { peers: Arc>>, peers_addr: Arc>>, index: Arc, - unique_key_field: &str, + unique_key_field_name: &str, index_writer: Arc>, metrics: Arc>, ) -> NotifyArgs { @@ -309,7 +309,7 @@ impl IndexServer { .schema() .parse_document(req.get_put_req().get_fields()) .unwrap(); - let field = index.schema().get_field(unique_key_field).unwrap(); + let field = index.schema().get_field(unique_key_field_name).unwrap(); doc.add_text(field, req.get_put_req().get_doc_id()); index_writer .lock() @@ -326,7 +326,7 @@ impl IndexServer { .lock() .unwrap() .delete_term(Term::from_field_text( - index.schema().get_field(unique_key_field).unwrap(), + index.schema().get_field(unique_key_field_name).unwrap(), req.get_delete_req().get_doc_id(), )); @@ -455,6 +455,18 @@ impl IndexService for IndexServer { ) } + fn probe(&mut self, ctx: RpcContext, req: ProbeReq, sink: UnarySink) { + self.metrics.lock().unwrap().inc_request_count("probe"); + + let mut resp = ProbeResp::new(); + resp.set_err(RespErr::OK); + resp.set_value("OK".to_string()); + ctx.spawn( + sink.success(resp) + .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), + ) + } + fn peers(&mut self, ctx: RpcContext, req: PeersReq, sink: UnarySink) { self.metrics.lock().unwrap().inc_request_count("peers");