diff --git a/proto/indexrpcpb.proto b/proto/indexrpcpb.proto index 778feae..fbd14bb 100644 --- a/proto/indexrpcpb.proto +++ b/proto/indexrpcpb.proto @@ -6,7 +6,17 @@ import "eraftpb.proto"; enum RespErr { OK = 0; ErrWrongLeader = 1; - ErrNoKey = 2; + ErrProbeFailed = 2; + ErrPeerFailed = 3; + ErrMetricsFailed = 4; + ErrGetFailed = 5; + ErrPutFailed = 6; + ErrDeleteFailed = 7; + ErrCommitFailed = 8; + ErrRollbackFailed = 9; + ErrMergeFailed = 10; + ErrSearchFailed = 11; + ErrSchemaFailed = 12; } enum ReqType { @@ -157,7 +167,6 @@ message SearchReq { bool exclude_docs = 7; string facet_field = 8; repeated string facet_prefixes = 9; - // repeated string facets = 10; } message SearchResp { diff --git a/src/client/client.rs b/src/client/client.rs index 996fa5b..2ce2e93 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -1,3 +1,4 @@ +use std::collections::HashMap; use std::sync::Arc; use std::thread; use std::time::Duration; @@ -29,6 +30,7 @@ pub struct Clerk { client_id: u64, request_seq: u64, leader_id: usize, + max_retry_count: usize, } impl Clerk { @@ -38,10 +40,22 @@ impl Clerk { client_id, request_seq: 0, leader_id: 0, + max_retry_count: 5, } } pub fn join(&mut self, id: u64, ip: &str, port: u16) { + self.join_with_retry(id, ip, port, 5, Duration::from_millis(100)) + } + + pub fn join_with_retry( + &mut self, + id: u64, + ip: &str, + port: u16, + max_retry: usize, + duration: Duration, + ) { let mut cc = ConfChange::new(); cc.set_id(id); cc.set_node_id(id); @@ -52,22 +66,38 @@ impl Clerk { cc_req.set_ip(ip.to_string()); cc_req.set_port(port as u32); + let mut request_count: usize = 0; loop { + if request_count > max_retry { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return; + } + let reply = self.servers[self.leader_id] .raft_conf_change(&cc_req) .unwrap_or_else(|e| { - error!("{:?}", e); + let msg = format!("{:?}", e); + error!("{:?}", msg); + let mut resp = RaftDone::new(); resp.set_err(RespErr::ErrWrongLeader); resp }); match reply.err { RespErr::OK => return, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return, + _ => error!("failed to add node"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); - thread::sleep(Duration::from_millis(100)); + request_count += 1; + debug!("{}", "retry to add node"); + + thread::sleep(duration); } } @@ -79,21 +109,34 @@ impl Clerk { let mut cc_req = ConfChangeReq::new(); cc_req.set_cc(cc); + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + return; + } + let reply = self.servers[self.leader_id] .raft_conf_change(&cc_req) .unwrap_or_else(|e| { - error!("{:?}", e); + let msg = format!("{:?}", e); + error!("{:?}", msg); + let mut resp = RaftDone::new(); resp.set_err(RespErr::ErrWrongLeader); resp }); match reply.err { RespErr::OK => return, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return, + _ => error!("failed to delete from the cluster"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to add node"); + thread::sleep(Duration::from_millis(100)); } } @@ -104,20 +147,42 @@ impl Clerk { req.set_seq(self.request_seq); self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .probe(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + ret.insert("health", "NG".to_string()); + let mut resp = ProbeResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrProbeFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to probe node"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to probe node"); + thread::sleep(Duration::from_millis(100)); } } @@ -128,20 +193,41 @@ impl Clerk { req.set_seq(self.request_seq); self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .peers(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = PeersResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrPeerFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to get peers"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to get peers"); + thread::sleep(Duration::from_millis(100)); } } @@ -152,20 +238,35 @@ impl Clerk { req.set_seq(self.request_seq); self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + return "{}".to_string(); + } + let reply = self.servers[self.leader_id] .metrics(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + let mut resp = MetricsResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrMetricsFailed); + resp.set_value("".to_string()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to get metrics"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to get metrics"); + thread::sleep(Duration::from_millis(100)); } } @@ -177,18 +278,39 @@ impl Clerk { req.set_doc_id(doc_id.to_owned()); self.request_seq += 1; + let mut request_count: usize = 0; loop { - let reply = self.servers[self.leader_id].get(&req).unwrap_or_else(|_e| { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + + let reply = self.servers[self.leader_id].get(&req).unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = GetResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrGetFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to get document"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to get document"); + thread::sleep(Duration::from_millis(100)); } } @@ -207,19 +329,39 @@ impl Clerk { self.request_seq += 1; + let mut request_count: usize = 0; loop { - let reply = self.servers[self.leader_id].put(&req).unwrap_or_else(|_e| { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + + let reply = self.servers[self.leader_id].put(&req).unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = PutResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrPutFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to put document"), } - debug!("put redo: {}", self.leader_id); + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to put document"); + thread::sleep(Duration::from_millis(100)); } } @@ -237,20 +379,41 @@ impl Clerk { self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .delete(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = DeleteResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrDeleteFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return reply.value, + _ => error!("failed to delete document"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to delete document"); + thread::sleep(Duration::from_millis(100)); } } @@ -267,20 +430,40 @@ impl Clerk { self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .commit(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = CommitResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrCommitFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return reply.value, + _ => error!("failed to commit index"), } self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to commit index"); + thread::sleep(Duration::from_millis(100)); } } @@ -297,20 +480,41 @@ impl Clerk { self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .rollback(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = RollbackResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrRollbackFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return reply.value, + _ => error!("failed to rollback index"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to rollback index"); + thread::sleep(Duration::from_millis(100)); } } @@ -327,20 +531,41 @@ impl Clerk { self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .merge(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = MergeResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrMergeFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return reply.value, + _ => error!("failed to merge index"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to merge index"); + thread::sleep(Duration::from_millis(100)); } } @@ -354,7 +579,6 @@ impl Clerk { exclude_docs: bool, facet_field: &str, facet_prefixes: Vec, - // facets: Vec, ) -> String { let mut req = SearchReq::new(); req.set_client_id(self.client_id); @@ -366,23 +590,43 @@ impl Clerk { req.set_exclude_docs(exclude_docs); req.set_facet_field(facet_field.to_string()); req.set_facet_prefixes(RepeatedField::from_vec(facet_prefixes)); - // req.set_facets(RepeatedField::from_vec(facets)); self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .search(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = SearchResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrSearchFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to search index"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to search index"); + thread::sleep(Duration::from_millis(100)); } } @@ -393,20 +637,41 @@ impl Clerk { req.set_seq(self.request_seq); self.request_seq += 1; + let mut request_count: usize = 0; loop { + if request_count > self.max_retry_count { + let msg = "exceeded max retry count"; + debug!("{}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + + return serde_json::to_string(&ret).unwrap(); + } + let reply = self.servers[self.leader_id] .schema(&req) - .unwrap_or_else(|_e| { + .unwrap_or_else(|e| { + let msg = format!("{:?}", e); + error!("{:?}", msg); + + let mut ret = HashMap::new(); + ret.insert("error", msg.to_string()); + let mut resp = SchemaResp::new(); - resp.set_err(RespErr::ErrWrongLeader); + resp.set_err(RespErr::ErrSchemaFailed); + resp.set_value(serde_json::to_string(&ret).unwrap()); resp }); match reply.err { RespErr::OK => return reply.value, - RespErr::ErrWrongLeader => (), - RespErr::ErrNoKey => return String::from(""), + _ => error!("failed to get index schema"), } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + request_count += 1; + debug!("{}", "retry to get index schema"); + thread::sleep(Duration::from_millis(100)); } } diff --git a/src/cmd/gateway.rs b/src/cmd/gateway.rs index 619e7c1..2538b2d 100644 --- a/src/cmd/gateway.rs +++ b/src/cmd/gateway.rs @@ -153,25 +153,7 @@ fn search(req: &mut Request) -> IronResult { .unwrap(); } let exclude_count = map.contains_key("exclude_count"); - // if map.contains_key("exclude_count") { - // exclude_count = map - // .get("exclude_count") - // .unwrap() - // .get(0) - // .unwrap_or(&String::from("true")) - // .parse::() - // .unwrap(); - // } let exclude_docs = map.contains_key("exclude_docs"); - // if map.contains_key("exclude_docs") { - // exclude_docs = map - // .get("exclude_docs") - // .unwrap() - // .get(0) - // .unwrap_or(&String::from("true")) - // .parse::() - // .unwrap(); - // } let mut facet_field: &str = ""; if map.contains_key("facet_field") { facet_field = map.get("facet_field").unwrap().get(0).unwrap(); diff --git a/src/cmd/metrics.rs b/src/cmd/metrics.rs index f62a9d1..dce44f8 100644 --- a/src/cmd/metrics.rs +++ b/src/cmd/metrics.rs @@ -6,11 +6,10 @@ use crate::util::log::set_logger; pub fn run_metrics_cli(matches: &ArgMatches) -> Result<(), String> { set_logger(); - let servers: Vec<_> = matches - .values_of("SERVERS") - .unwrap() - .map(|addr| create_client(addr)) - .collect(); + let server = matches.value_of("SERVER").unwrap(); + + let mut servers = Vec::new(); + servers.push(create_client(server)); let client_id = rand::random(); diff --git a/src/cmd/peers.rs b/src/cmd/peers.rs index 230a430..1ccfc8f 100644 --- a/src/cmd/peers.rs +++ b/src/cmd/peers.rs @@ -6,11 +6,10 @@ use crate::util::log::set_logger; pub fn run_peers_cli(matches: &ArgMatches) -> Result<(), String> { set_logger(); - let servers: Vec<_> = matches - .values_of("SERVERS") - .unwrap() - .map(|addr| create_client(addr)) - .collect(); + let server = matches.value_of("SERVER").unwrap(); + + let mut servers = Vec::new(); + servers.push(create_client(server)); let client_id = rand::random(); diff --git a/src/cmd/probe.rs b/src/cmd/probe.rs index 8fee46d..76e5283 100644 --- a/src/cmd/probe.rs +++ b/src/cmd/probe.rs @@ -6,11 +6,10 @@ 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 server = matches.value_of("SERVER").unwrap(); + + let mut servers = Vec::new(); + servers.push(create_client(server)); let client_id = rand::random(); diff --git a/src/main.rs b/src/main.rs index 3dd7f85..a9b10c1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -121,16 +121,12 @@ fn main() { .version_message("Prints version information.") .version_short("v") .arg( - Arg::with_name("SERVERS") - .help("Server addresses in an existing cluster separated by \",\". If not specified, use default servers.") + Arg::with_name("SERVER") + .help("Server address in an existing cluster.") .short("s") - .long("servers") + .long("server") .value_name("IP:PORT") .default_value("127.0.0.1:5000") - .multiple(true) - .use_delimiter(true) - .require_delimiter(true) - .value_delimiter(",") .takes_value(true), ) ) @@ -145,16 +141,12 @@ fn main() { .version_message("Prints version information.") .version_short("v") .arg( - Arg::with_name("SERVERS") - .help("Server addresses in an existing cluster separated by \",\". If not specified, use default servers.") + Arg::with_name("SERVER") + .help("Server address in an existing cluster.") .short("s") - .long("servers") + .long("server") .value_name("IP:PORT") .default_value("127.0.0.1:5000") - .multiple(true) - .use_delimiter(true) - .require_delimiter(true) - .value_delimiter(",") .takes_value(true), ) ) @@ -169,16 +161,12 @@ fn main() { .version_message("Prints version information.") .version_short("v") .arg( - Arg::with_name("SERVERS") - .help("Server addresses in an existing cluster separated by \",\". If not specified, use default servers.") + Arg::with_name("SERVER") + .help("Server address in an existing cluster.") .short("s") - .long("servers") + .long("server") .value_name("IP:PORT") .default_value("127.0.0.1:5000") - .multiple(true) - .use_delimiter(true) - .require_delimiter(true) - .value_delimiter(",") .takes_value(true), ) ) @@ -459,16 +447,6 @@ fn main() { .number_of_values(1) .takes_value(true), ) -// .arg( -// Arg::with_name("FACET") -// .help("Hierarchical facet.") -// .short("F") -// .long("facet") -// .value_name("FIELD_NAME:FIELD_VALUE") -// .multiple(true) -// .number_of_values(1) -// .takes_value(true), -// ) .arg( Arg::with_name("QUERY") .help("Query string to search the index.") diff --git a/src/proto/indexrpcpb.rs b/src/proto/indexrpcpb.rs index ad8c9b3..61e46be 100644 --- a/src/proto/indexrpcpb.rs +++ b/src/proto/indexrpcpb.rs @@ -6319,7 +6319,17 @@ impl ::protobuf::reflect::ProtobufValue for SchemaResp { pub enum RespErr { OK = 0, ErrWrongLeader = 1, - ErrNoKey = 2, + ErrProbeFailed = 2, + ErrPeerFailed = 3, + ErrMetricsFailed = 4, + ErrGetFailed = 5, + ErrPutFailed = 6, + ErrDeleteFailed = 7, + ErrCommitFailed = 8, + ErrRollbackFailed = 9, + ErrMergeFailed = 10, + ErrSearchFailed = 11, + ErrSchemaFailed = 12, } impl ::protobuf::ProtobufEnum for RespErr { @@ -6331,7 +6341,17 @@ impl ::protobuf::ProtobufEnum for RespErr { match value { 0 => ::std::option::Option::Some(RespErr::OK), 1 => ::std::option::Option::Some(RespErr::ErrWrongLeader), - 2 => ::std::option::Option::Some(RespErr::ErrNoKey), + 2 => ::std::option::Option::Some(RespErr::ErrProbeFailed), + 3 => ::std::option::Option::Some(RespErr::ErrPeerFailed), + 4 => ::std::option::Option::Some(RespErr::ErrMetricsFailed), + 5 => ::std::option::Option::Some(RespErr::ErrGetFailed), + 6 => ::std::option::Option::Some(RespErr::ErrPutFailed), + 7 => ::std::option::Option::Some(RespErr::ErrDeleteFailed), + 8 => ::std::option::Option::Some(RespErr::ErrCommitFailed), + 9 => ::std::option::Option::Some(RespErr::ErrRollbackFailed), + 10 => ::std::option::Option::Some(RespErr::ErrMergeFailed), + 11 => ::std::option::Option::Some(RespErr::ErrSearchFailed), + 12 => ::std::option::Option::Some(RespErr::ErrSchemaFailed), _ => ::std::option::Option::None } } @@ -6340,7 +6360,17 @@ impl ::protobuf::ProtobufEnum for RespErr { static values: &'static [RespErr] = &[ RespErr::OK, RespErr::ErrWrongLeader, - RespErr::ErrNoKey, + RespErr::ErrProbeFailed, + RespErr::ErrPeerFailed, + RespErr::ErrMetricsFailed, + RespErr::ErrGetFailed, + RespErr::ErrPutFailed, + RespErr::ErrDeleteFailed, + RespErr::ErrCommitFailed, + RespErr::ErrRollbackFailed, + RespErr::ErrMergeFailed, + RespErr::ErrSearchFailed, + RespErr::ErrSchemaFailed, ]; values } @@ -6510,324 +6540,351 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \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\x05value\x18\ \x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexr\ - pcpb.RespErrR\x03err*3\n\x07RespErr\x12\x06\n\x02OK\x10\0\x12\x12\n\x0eE\ - rrWrongLeader\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\x08Rollba\ - ck\x10\x05\x12\t\n\x05Merge\x10\x06J\xf92\n\x07\x12\x05\0\0\xaf\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\x04\ - 2\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\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\0j\x01\n\n\n\x03\x04\x0e\x01\x12\x03g\x08\ - \x0f\n\x0b\n\x04\x04\x0e\x02\0\x12\x03h\x04\x15\n\r\n\x05\x04\x0e\x02\0\ - \x04\x12\x04h\x04g\x11\n\x0c\n\x05\x04\x0e\x02\0\x05\x12\x03h\x04\n\n\ - \x0c\n\x05\x04\x0e\x02\0\x01\x12\x03h\x0b\x10\n\x0c\n\x05\x04\x0e\x02\0\ - \x03\x12\x03h\x13\x14\n\x0b\n\x04\x04\x0e\x02\x01\x12\x03i\x04\x14\n\r\n\ - \x05\x04\x0e\x02\x01\x04\x12\x04i\x04h\x15\n\x0c\n\x05\x04\x0e\x02\x01\ - \x06\x12\x03i\x04\x0b\n\x0c\n\x05\x04\x0e\x02\x01\x01\x12\x03i\x0c\x0f\n\ - \x0c\n\x05\x04\x0e\x02\x01\x03\x12\x03i\x12\x13\n\n\n\x02\x04\x0f\x12\ - \x04l\0p\x01\n\n\n\x03\x04\x0f\x01\x12\x03l\x08\x11\n\x0b\n\x04\x04\x0f\ - \x02\0\x12\x03m\x04\x19\n\r\n\x05\x04\x0f\x02\0\x04\x12\x04m\x04l\x13\n\ - \x0c\n\x05\x04\x0f\x02\0\x05\x12\x03m\x04\n\n\x0c\n\x05\x04\x0f\x02\0\ - \x01\x12\x03m\x0b\x14\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\x03m\x17\x18\n\ - \x0b\n\x04\x04\x0f\x02\x01\x12\x03n\x04\x13\n\r\n\x05\x04\x0f\x02\x01\ - \x04\x12\x04n\x04m\x19\n\x0c\n\x05\x04\x0f\x02\x01\x05\x12\x03n\x04\n\n\ - \x0c\n\x05\x04\x0f\x02\x01\x01\x12\x03n\x0b\x0e\n\x0c\n\x05\x04\x0f\x02\ - \x01\x03\x12\x03n\x11\x12\n\x0b\n\x04\x04\x0f\x02\x02\x12\x03o\x04\x16\n\ - \r\n\x05\x04\x0f\x02\x02\x04\x12\x04o\x04n\x13\n\x0c\n\x05\x04\x0f\x02\ - \x02\x05\x12\x03o\x04\n\n\x0c\n\x05\x04\x0f\x02\x02\x01\x12\x03o\x0b\x11\ - \n\x0c\n\x05\x04\x0f\x02\x02\x03\x12\x03o\x14\x15\n\n\n\x02\x04\x10\x12\ - \x04r\0u\x01\n\n\n\x03\x04\x10\x01\x12\x03r\x08\x12\n\x0b\n\x04\x04\x10\ - \x02\0\x12\x03s\x04\x15\n\r\n\x05\x04\x10\x02\0\x04\x12\x04s\x04r\x14\n\ - \x0c\n\x05\x04\x10\x02\0\x05\x12\x03s\x04\n\n\x0c\n\x05\x04\x10\x02\0\ - \x01\x12\x03s\x0b\x10\n\x0c\n\x05\x04\x10\x02\0\x03\x12\x03s\x13\x14\n\ - \x0b\n\x04\x04\x10\x02\x01\x12\x03t\x04\x14\n\r\n\x05\x04\x10\x02\x01\ - \x04\x12\x04t\x04s\x15\n\x0c\n\x05\x04\x10\x02\x01\x06\x12\x03t\x04\x0b\ - \n\x0c\n\x05\x04\x10\x02\x01\x01\x12\x03t\x0c\x0f\n\x0c\n\x05\x04\x10\ - \x02\x01\x03\x12\x03t\x12\x13\n\n\n\x02\x04\x11\x12\x04w\0z\x01\n\n\n\ - \x03\x04\x11\x01\x12\x03w\x08\x11\n\x0b\n\x04\x04\x11\x02\0\x12\x03x\x04\ - \x19\n\r\n\x05\x04\x11\x02\0\x04\x12\x04x\x04w\x13\n\x0c\n\x05\x04\x11\ - \x02\0\x05\x12\x03x\x04\n\n\x0c\n\x05\x04\x11\x02\0\x01\x12\x03x\x0b\x14\ - \n\x0c\n\x05\x04\x11\x02\0\x03\x12\x03x\x17\x18\n\x0b\n\x04\x04\x11\x02\ - \x01\x12\x03y\x04\x13\n\r\n\x05\x04\x11\x02\x01\x04\x12\x04y\x04x\x19\n\ - \x0c\n\x05\x04\x11\x02\x01\x05\x12\x03y\x04\n\n\x0c\n\x05\x04\x11\x02\ - \x01\x01\x12\x03y\x0b\x0e\n\x0c\n\x05\x04\x11\x02\x01\x03\x12\x03y\x11\ - \x12\n\n\n\x02\x04\x12\x12\x04|\0\x7f\x01\n\n\n\x03\x04\x12\x01\x12\x03|\ - \x08\x12\n\x0b\n\x04\x04\x12\x02\0\x12\x03}\x04\x15\n\r\n\x05\x04\x12\ - \x02\0\x04\x12\x04}\x04|\x14\n\x0c\n\x05\x04\x12\x02\0\x05\x12\x03}\x04\ - \n\n\x0c\n\x05\x04\x12\x02\0\x01\x12\x03}\x0b\x10\n\x0c\n\x05\x04\x12\ - \x02\0\x03\x12\x03}\x13\x14\n\x0b\n\x04\x04\x12\x02\x01\x12\x03~\x04\x14\ - \n\r\n\x05\x04\x12\x02\x01\x04\x12\x04~\x04}\x15\n\x0c\n\x05\x04\x12\x02\ - \x01\x06\x12\x03~\x04\x0b\n\x0c\n\x05\x04\x12\x02\x01\x01\x12\x03~\x0c\ - \x0f\n\x0c\n\x05\x04\x12\x02\x01\x03\x12\x03~\x12\x13\n\x0c\n\x02\x04\ - \x13\x12\x06\x81\x01\0\x84\x01\x01\n\x0b\n\x03\x04\x13\x01\x12\x04\x81\ - \x01\x08\x13\n\x0c\n\x04\x04\x13\x02\0\x12\x04\x82\x01\x04\x19\n\x0f\n\ - \x05\x04\x13\x02\0\x04\x12\x06\x82\x01\x04\x81\x01\x15\n\r\n\x05\x04\x13\ - \x02\0\x05\x12\x04\x82\x01\x04\n\n\r\n\x05\x04\x13\x02\0\x01\x12\x04\x82\ - \x01\x0b\x14\n\r\n\x05\x04\x13\x02\0\x03\x12\x04\x82\x01\x17\x18\n\x0c\n\ - \x04\x04\x13\x02\x01\x12\x04\x83\x01\x04\x13\n\x0f\n\x05\x04\x13\x02\x01\ - \x04\x12\x06\x83\x01\x04\x82\x01\x19\n\r\n\x05\x04\x13\x02\x01\x05\x12\ - \x04\x83\x01\x04\n\n\r\n\x05\x04\x13\x02\x01\x01\x12\x04\x83\x01\x0b\x0e\ - \n\r\n\x05\x04\x13\x02\x01\x03\x12\x04\x83\x01\x11\x12\n\x0c\n\x02\x04\ - \x14\x12\x06\x86\x01\0\x89\x01\x01\n\x0b\n\x03\x04\x14\x01\x12\x04\x86\ - \x01\x08\x14\n\x0c\n\x04\x04\x14\x02\0\x12\x04\x87\x01\x04\x15\n\x0f\n\ - \x05\x04\x14\x02\0\x04\x12\x06\x87\x01\x04\x86\x01\x16\n\r\n\x05\x04\x14\ - \x02\0\x05\x12\x04\x87\x01\x04\n\n\r\n\x05\x04\x14\x02\0\x01\x12\x04\x87\ - \x01\x0b\x10\n\r\n\x05\x04\x14\x02\0\x03\x12\x04\x87\x01\x13\x14\n\x0c\n\ - \x04\x04\x14\x02\x01\x12\x04\x88\x01\x04\x14\n\x0f\n\x05\x04\x14\x02\x01\ - \x04\x12\x06\x88\x01\x04\x87\x01\x15\n\r\n\x05\x04\x14\x02\x01\x06\x12\ - \x04\x88\x01\x04\x0b\n\r\n\x05\x04\x14\x02\x01\x01\x12\x04\x88\x01\x0c\ - \x0f\n\r\n\x05\x04\x14\x02\x01\x03\x12\x04\x88\x01\x12\x13\n\x0c\n\x02\ - \x04\x15\x12\x06\x8b\x01\0\x8e\x01\x01\n\x0b\n\x03\x04\x15\x01\x12\x04\ - \x8b\x01\x08\x10\n\x0c\n\x04\x04\x15\x02\0\x12\x04\x8c\x01\x04\x19\n\x0f\ - \n\x05\x04\x15\x02\0\x04\x12\x06\x8c\x01\x04\x8b\x01\x12\n\r\n\x05\x04\ - \x15\x02\0\x05\x12\x04\x8c\x01\x04\n\n\r\n\x05\x04\x15\x02\0\x01\x12\x04\ - \x8c\x01\x0b\x14\n\r\n\x05\x04\x15\x02\0\x03\x12\x04\x8c\x01\x17\x18\n\ - \x0c\n\x04\x04\x15\x02\x01\x12\x04\x8d\x01\x04\x13\n\x0f\n\x05\x04\x15\ - \x02\x01\x04\x12\x06\x8d\x01\x04\x8c\x01\x19\n\r\n\x05\x04\x15\x02\x01\ - \x05\x12\x04\x8d\x01\x04\n\n\r\n\x05\x04\x15\x02\x01\x01\x12\x04\x8d\x01\ - \x0b\x0e\n\r\n\x05\x04\x15\x02\x01\x03\x12\x04\x8d\x01\x11\x12\n\x0c\n\ - \x02\x04\x16\x12\x06\x90\x01\0\x93\x01\x01\n\x0b\n\x03\x04\x16\x01\x12\ - \x04\x90\x01\x08\x11\n\x0c\n\x04\x04\x16\x02\0\x12\x04\x91\x01\x04\x15\n\ - \x0f\n\x05\x04\x16\x02\0\x04\x12\x06\x91\x01\x04\x90\x01\x13\n\r\n\x05\ - \x04\x16\x02\0\x05\x12\x04\x91\x01\x04\n\n\r\n\x05\x04\x16\x02\0\x01\x12\ - \x04\x91\x01\x0b\x10\n\r\n\x05\x04\x16\x02\0\x03\x12\x04\x91\x01\x13\x14\ - \n\x0c\n\x04\x04\x16\x02\x01\x12\x04\x92\x01\x04\x14\n\x0f\n\x05\x04\x16\ - \x02\x01\x04\x12\x06\x92\x01\x04\x91\x01\x15\n\r\n\x05\x04\x16\x02\x01\ - \x06\x12\x04\x92\x01\x04\x0b\n\r\n\x05\x04\x16\x02\x01\x01\x12\x04\x92\ - \x01\x0c\x0f\n\r\n\x05\x04\x16\x02\x01\x03\x12\x04\x92\x01\x12\x13\n\x0c\ - \n\x02\x04\x17\x12\x06\x95\x01\0\xa0\x01\x01\n\x0b\n\x03\x04\x17\x01\x12\ - \x04\x95\x01\x08\x11\n\x0c\n\x04\x04\x17\x02\0\x12\x04\x96\x01\x04\x19\n\ - \x0f\n\x05\x04\x17\x02\0\x04\x12\x06\x96\x01\x04\x95\x01\x13\n\r\n\x05\ - \x04\x17\x02\0\x05\x12\x04\x96\x01\x04\n\n\r\n\x05\x04\x17\x02\0\x01\x12\ - \x04\x96\x01\x0b\x14\n\r\n\x05\x04\x17\x02\0\x03\x12\x04\x96\x01\x17\x18\ - \n\x0c\n\x04\x04\x17\x02\x01\x12\x04\x97\x01\x04\x13\n\x0f\n\x05\x04\x17\ - \x02\x01\x04\x12\x06\x97\x01\x04\x96\x01\x19\n\r\n\x05\x04\x17\x02\x01\ - \x05\x12\x04\x97\x01\x04\n\n\r\n\x05\x04\x17\x02\x01\x01\x12\x04\x97\x01\ - \x0b\x0e\n\r\n\x05\x04\x17\x02\x01\x03\x12\x04\x97\x01\x11\x12\n\x0c\n\ - \x04\x04\x17\x02\x02\x12\x04\x98\x01\x04\x15\n\x0f\n\x05\x04\x17\x02\x02\ - \x04\x12\x06\x98\x01\x04\x97\x01\x13\n\r\n\x05\x04\x17\x02\x02\x05\x12\ - \x04\x98\x01\x04\n\n\r\n\x05\x04\x17\x02\x02\x01\x12\x04\x98\x01\x0b\x10\ - \n\r\n\x05\x04\x17\x02\x02\x03\x12\x04\x98\x01\x13\x14\n\x0c\n\x04\x04\ - \x17\x02\x03\x12\x04\x99\x01\x04\x14\n\x0f\n\x05\x04\x17\x02\x03\x04\x12\ - \x06\x99\x01\x04\x98\x01\x15\n\r\n\x05\x04\x17\x02\x03\x05\x12\x04\x99\ - \x01\x04\n\n\r\n\x05\x04\x17\x02\x03\x01\x12\x04\x99\x01\x0b\x0f\n\r\n\ - \x05\x04\x17\x02\x03\x03\x12\x04\x99\x01\x12\x13\n\x0c\n\x04\x04\x17\x02\ - \x04\x12\x04\x9a\x01\x04\x15\n\x0f\n\x05\x04\x17\x02\x04\x04\x12\x06\x9a\ - \x01\x04\x99\x01\x14\n\r\n\x05\x04\x17\x02\x04\x05\x12\x04\x9a\x01\x04\n\ - \n\r\n\x05\x04\x17\x02\x04\x01\x12\x04\x9a\x01\x0b\x10\n\r\n\x05\x04\x17\ - \x02\x04\x03\x12\x04\x9a\x01\x13\x14\n\x0c\n\x04\x04\x17\x02\x05\x12\x04\ - \x9b\x01\x04\x1b\n\x0f\n\x05\x04\x17\x02\x05\x04\x12\x06\x9b\x01\x04\x9a\ - \x01\x15\n\r\n\x05\x04\x17\x02\x05\x05\x12\x04\x9b\x01\x04\x08\n\r\n\x05\ - \x04\x17\x02\x05\x01\x12\x04\x9b\x01\t\x16\n\r\n\x05\x04\x17\x02\x05\x03\ - \x12\x04\x9b\x01\x19\x1a\n\x0c\n\x04\x04\x17\x02\x06\x12\x04\x9c\x01\x04\ - \x1a\n\x0f\n\x05\x04\x17\x02\x06\x04\x12\x06\x9c\x01\x04\x9b\x01\x1b\n\r\ - \n\x05\x04\x17\x02\x06\x05\x12\x04\x9c\x01\x04\x08\n\r\n\x05\x04\x17\x02\ - \x06\x01\x12\x04\x9c\x01\t\x15\n\r\n\x05\x04\x17\x02\x06\x03\x12\x04\x9c\ - \x01\x18\x19\n\x0c\n\x04\x04\x17\x02\x07\x12\x04\x9d\x01\x04\x1b\n\x0f\n\ - \x05\x04\x17\x02\x07\x04\x12\x06\x9d\x01\x04\x9c\x01\x1a\n\r\n\x05\x04\ - \x17\x02\x07\x05\x12\x04\x9d\x01\x04\n\n\r\n\x05\x04\x17\x02\x07\x01\x12\ - \x04\x9d\x01\x0b\x16\n\r\n\x05\x04\x17\x02\x07\x03\x12\x04\x9d\x01\x19\ - \x1a\n/\n\x04\x04\x17\x02\x08\x12\x04\x9e\x01\x04'\"!\x20\x20\x20\x20rep\ - eated\x20string\x20facets\x20=\x2010;\n\n\r\n\x05\x04\x17\x02\x08\x04\ - \x12\x04\x9e\x01\x04\x0c\n\r\n\x05\x04\x17\x02\x08\x05\x12\x04\x9e\x01\r\ - \x13\n\r\n\x05\x04\x17\x02\x08\x01\x12\x04\x9e\x01\x14\"\n\r\n\x05\x04\ - \x17\x02\x08\x03\x12\x04\x9e\x01%&\n\x0c\n\x02\x04\x18\x12\x06\xa2\x01\0\ - \xa5\x01\x01\n\x0b\n\x03\x04\x18\x01\x12\x04\xa2\x01\x08\x12\n\x0c\n\x04\ - \x04\x18\x02\0\x12\x04\xa3\x01\x04\x15\n\x0f\n\x05\x04\x18\x02\0\x04\x12\ - \x06\xa3\x01\x04\xa2\x01\x14\n\r\n\x05\x04\x18\x02\0\x05\x12\x04\xa3\x01\ - \x04\n\n\r\n\x05\x04\x18\x02\0\x01\x12\x04\xa3\x01\x0b\x10\n\r\n\x05\x04\ - \x18\x02\0\x03\x12\x04\xa3\x01\x13\x14\n\x0c\n\x04\x04\x18\x02\x01\x12\ - \x04\xa4\x01\x04\x14\n\x0f\n\x05\x04\x18\x02\x01\x04\x12\x06\xa4\x01\x04\ - \xa3\x01\x15\n\r\n\x05\x04\x18\x02\x01\x06\x12\x04\xa4\x01\x04\x0b\n\r\n\ - \x05\x04\x18\x02\x01\x01\x12\x04\xa4\x01\x0c\x0f\n\r\n\x05\x04\x18\x02\ - \x01\x03\x12\x04\xa4\x01\x12\x13\n\x0c\n\x02\x04\x19\x12\x06\xa7\x01\0\ - \xaa\x01\x01\n\x0b\n\x03\x04\x19\x01\x12\x04\xa7\x01\x08\x11\n\x0c\n\x04\ - \x04\x19\x02\0\x12\x04\xa8\x01\x04\x19\n\x0f\n\x05\x04\x19\x02\0\x04\x12\ - \x06\xa8\x01\x04\xa7\x01\x13\n\r\n\x05\x04\x19\x02\0\x05\x12\x04\xa8\x01\ - \x04\n\n\r\n\x05\x04\x19\x02\0\x01\x12\x04\xa8\x01\x0b\x14\n\r\n\x05\x04\ - \x19\x02\0\x03\x12\x04\xa8\x01\x17\x18\n\x0c\n\x04\x04\x19\x02\x01\x12\ - \x04\xa9\x01\x04\x13\n\x0f\n\x05\x04\x19\x02\x01\x04\x12\x06\xa9\x01\x04\ - \xa8\x01\x19\n\r\n\x05\x04\x19\x02\x01\x05\x12\x04\xa9\x01\x04\n\n\r\n\ - \x05\x04\x19\x02\x01\x01\x12\x04\xa9\x01\x0b\x0e\n\r\n\x05\x04\x19\x02\ - \x01\x03\x12\x04\xa9\x01\x11\x12\n\x0c\n\x02\x04\x1a\x12\x06\xac\x01\0\ - \xaf\x01\x01\n\x0b\n\x03\x04\x1a\x01\x12\x04\xac\x01\x08\x12\n\x0c\n\x04\ - \x04\x1a\x02\0\x12\x04\xad\x01\x04\x15\n\x0f\n\x05\x04\x1a\x02\0\x04\x12\ - \x06\xad\x01\x04\xac\x01\x14\n\r\n\x05\x04\x1a\x02\0\x05\x12\x04\xad\x01\ - \x04\n\n\r\n\x05\x04\x1a\x02\0\x01\x12\x04\xad\x01\x0b\x10\n\r\n\x05\x04\ - \x1a\x02\0\x03\x12\x04\xad\x01\x13\x14\n\x0c\n\x04\x04\x1a\x02\x01\x12\ - \x04\xae\x01\x04\x14\n\x0f\n\x05\x04\x1a\x02\x01\x04\x12\x06\xae\x01\x04\ - \xad\x01\x15\n\r\n\x05\x04\x1a\x02\x01\x06\x12\x04\xae\x01\x04\x0b\n\r\n\ - \x05\x04\x1a\x02\x01\x01\x12\x04\xae\x01\x0c\x0f\n\r\n\x05\x04\x1a\x02\ - \x01\x03\x12\x04\xae\x01\x12\x13b\x06proto3\ + pcpb.RespErrR\x03err*\x85\x02\n\x07RespErr\x12\x06\n\x02OK\x10\0\x12\x12\ + \n\x0eErrWrongLeader\x10\x01\x12\x12\n\x0eErrProbeFailed\x10\x02\x12\x11\ + \n\rErrPeerFailed\x10\x03\x12\x14\n\x10ErrMetricsFailed\x10\x04\x12\x10\ + \n\x0cErrGetFailed\x10\x05\x12\x10\n\x0cErrPutFailed\x10\x06\x12\x13\n\ + \x0fErrDeleteFailed\x10\x07\x12\x13\n\x0fErrCommitFailed\x10\x08\x12\x15\ + \n\x11ErrRollbackFailed\x10\t\x12\x12\n\x0eErrMergeFailed\x10\n\x12\x13\ + \n\x0fErrSearchFailed\x10\x0b\x12\x13\n\x0fErrSchemaFailed\x10\x0c*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\xc66\n\x07\x12\x05\ + \0\0\xba\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\x14\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\x17\n\x0c\n\x05\x05\0\x02\x02\x01\x12\x03\x08\x04\x12\n\ + \x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x08\x15\x16\n\x0b\n\x04\x05\0\x02\ + \x03\x12\x03\t\x04\x16\n\x0c\n\x05\x05\0\x02\x03\x01\x12\x03\t\x04\x11\n\ + \x0c\n\x05\x05\0\x02\x03\x02\x12\x03\t\x14\x15\n\x0b\n\x04\x05\0\x02\x04\ + \x12\x03\n\x04\x19\n\x0c\n\x05\x05\0\x02\x04\x01\x12\x03\n\x04\x14\n\x0c\ + \n\x05\x05\0\x02\x04\x02\x12\x03\n\x17\x18\n\x0b\n\x04\x05\0\x02\x05\x12\ + \x03\x0b\x04\x15\n\x0c\n\x05\x05\0\x02\x05\x01\x12\x03\x0b\x04\x10\n\x0c\ + \n\x05\x05\0\x02\x05\x02\x12\x03\x0b\x13\x14\n\x0b\n\x04\x05\0\x02\x06\ + \x12\x03\x0c\x04\x15\n\x0c\n\x05\x05\0\x02\x06\x01\x12\x03\x0c\x04\x10\n\ + \x0c\n\x05\x05\0\x02\x06\x02\x12\x03\x0c\x13\x14\n\x0b\n\x04\x05\0\x02\ + \x07\x12\x03\r\x04\x18\n\x0c\n\x05\x05\0\x02\x07\x01\x12\x03\r\x04\x13\n\ + \x0c\n\x05\x05\0\x02\x07\x02\x12\x03\r\x16\x17\n\x0b\n\x04\x05\0\x02\x08\ + \x12\x03\x0e\x04\x18\n\x0c\n\x05\x05\0\x02\x08\x01\x12\x03\x0e\x04\x13\n\ + \x0c\n\x05\x05\0\x02\x08\x02\x12\x03\x0e\x16\x17\n\x0b\n\x04\x05\0\x02\t\ + \x12\x03\x0f\x04\x1a\n\x0c\n\x05\x05\0\x02\t\x01\x12\x03\x0f\x04\x15\n\ + \x0c\n\x05\x05\0\x02\t\x02\x12\x03\x0f\x18\x19\n\x0b\n\x04\x05\0\x02\n\ + \x12\x03\x10\x04\x18\n\x0c\n\x05\x05\0\x02\n\x01\x12\x03\x10\x04\x12\n\ + \x0c\n\x05\x05\0\x02\n\x02\x12\x03\x10\x15\x17\n\x0b\n\x04\x05\0\x02\x0b\ + \x12\x03\x11\x04\x19\n\x0c\n\x05\x05\0\x02\x0b\x01\x12\x03\x11\x04\x13\n\ + \x0c\n\x05\x05\0\x02\x0b\x02\x12\x03\x11\x16\x18\n\x1f\n\x04\x05\0\x02\ + \x0c\x12\x03\x12\x04\x19\"\x12\x20\x20\x20\x20ErrNoKey\x20=\x202;\n\n\ + \x0c\n\x05\x05\0\x02\x0c\x01\x12\x03\x12\x04\x13\n\x0c\n\x05\x05\0\x02\ + \x0c\x02\x12\x03\x12\x16\x18\n\n\n\x02\x05\x01\x12\x04\x16\0\x1e\x01\n\n\ + \n\x03\x05\x01\x01\x12\x03\x16\x05\x0c\n\x0b\n\x04\x05\x01\x02\0\x12\x03\ + \x17\x04\r\n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03\x17\x04\x08\n\x0c\n\x05\ + \x05\x01\x02\0\x02\x12\x03\x17\x0b\x0c\n\x0b\n\x04\x05\x01\x02\x01\x12\ + \x03\x18\x04\x0e\n\x0c\n\x05\x05\x01\x02\x01\x01\x12\x03\x18\x04\t\n\x0c\ + \n\x05\x05\x01\x02\x01\x02\x12\x03\x18\x0c\r\n\x0b\n\x04\x05\x01\x02\x02\ + \x12\x03\x19\x04\x0c\n\x0c\n\x05\x05\x01\x02\x02\x01\x12\x03\x19\x04\x07\ + \n\x0c\n\x05\x05\x01\x02\x02\x02\x12\x03\x19\n\x0b\n\x0b\n\x04\x05\x01\ + \x02\x03\x12\x03\x1a\x04\x0f\n\x0c\n\x05\x05\x01\x02\x03\x01\x12\x03\x1a\ + \x04\n\n\x0c\n\x05\x05\x01\x02\x03\x02\x12\x03\x1a\r\x0e\n\x0b\n\x04\x05\ + \x01\x02\x04\x12\x03\x1b\x04\x0f\n\x0c\n\x05\x05\x01\x02\x04\x01\x12\x03\ + \x1b\x04\n\n\x0c\n\x05\x05\x01\x02\x04\x02\x12\x03\x1b\r\x0e\n\x0b\n\x04\ + \x05\x01\x02\x05\x12\x03\x1c\x04\x11\n\x0c\n\x05\x05\x01\x02\x05\x01\x12\ + \x03\x1c\x04\x0c\n\x0c\n\x05\x05\x01\x02\x05\x02\x12\x03\x1c\x0f\x10\n\ + \x0b\n\x04\x05\x01\x02\x06\x12\x03\x1d\x04\x0e\n\x0c\n\x05\x05\x01\x02\ + \x06\x01\x12\x03\x1d\x04\t\n\x0c\n\x05\x05\x01\x02\x06\x02\x12\x03\x1d\ + \x0c\r\n\n\n\x02\x04\0\x12\x04\x20\0*\x01\n\n\n\x03\x04\0\x01\x12\x03\ + \x20\x08\x10\n\x0b\n\x04\x04\0\x02\0\x12\x03!\x04\x19\n\r\n\x05\x04\0\ + \x02\0\x04\x12\x04!\x04\x20\x12\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03!\x04\ + \n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03!\x0b\x14\n\x0c\n\x05\x04\0\x02\0\ + \x03\x12\x03!\x17\x18\n\x0b\n\x04\x04\0\x02\x01\x12\x03\"\x04\x19\n\r\n\ + \x05\x04\0\x02\x01\x04\x12\x04\"\x04!\x19\n\x0c\n\x05\x04\0\x02\x01\x06\ + \x12\x03\"\x04\x0b\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\"\x0c\x14\n\x0c\ + \n\x05\x04\0\x02\x01\x03\x12\x03\"\x17\x18\n\x0b\n\x04\x04\0\x02\x02\x12\ + \x03#\x04\x19\n\r\n\x05\x04\0\x02\x02\x04\x12\x04#\x04\"\x19\n\x0c\n\x05\ + \x04\0\x02\x02\x06\x12\x03#\x04\x0b\n\x0c\n\x05\x04\0\x02\x02\x01\x12\ + \x03#\x0c\x14\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03#\x17\x18\n\x0b\n\x04\ + \x04\0\x02\x03\x12\x03$\x04\x1b\n\r\n\x05\x04\0\x02\x03\x04\x12\x04$\x04\ + #\x19\n\x0c\n\x05\x04\0\x02\x03\x06\x12\x03$\x04\x0c\n\x0c\n\x05\x04\0\ + \x02\x03\x01\x12\x03$\r\x16\n\x0c\n\x05\x04\0\x02\x03\x03\x12\x03$\x19\ + \x1a\n\x0b\n\x04\x04\0\x02\x04\x12\x03%\x04\x17\n\r\n\x05\x04\0\x02\x04\ + \x04\x12\x04%\x04$\x1b\n\x0c\n\x05\x04\0\x02\x04\x06\x12\x03%\x04\n\n\ + \x0c\n\x05\x04\0\x02\x04\x01\x12\x03%\x0b\x12\n\x0c\n\x05\x04\0\x02\x04\ + \x03\x12\x03%\x15\x16\n\x0b\n\x04\x04\0\x02\x05\x12\x03&\x04\x1d\n\r\n\ + \x05\x04\0\x02\x05\x04\x12\x04&\x04%\x17\n\x0c\n\x05\x04\0\x02\x05\x06\ + \x12\x03&\x04\r\n\x0c\n\x05\x04\0\x02\x05\x01\x12\x03&\x0e\x18\n\x0c\n\ + \x05\x04\0\x02\x05\x03\x12\x03&\x1b\x1c\n\x0b\n\x04\x04\0\x02\x06\x12\ + \x03'\x04\x1d\n\r\n\x05\x04\0\x02\x06\x04\x12\x04'\x04&\x1d\n\x0c\n\x05\ + \x04\0\x02\x06\x06\x12\x03'\x04\r\n\x0c\n\x05\x04\0\x02\x06\x01\x12\x03'\ + \x0e\x18\n\x0c\n\x05\x04\0\x02\x06\x03\x12\x03'\x1b\x1c\n\x0b\n\x04\x04\ + \0\x02\x07\x12\x03(\x04!\n\r\n\x05\x04\0\x02\x07\x04\x12\x04(\x04'\x1d\n\ + \x0c\n\x05\x04\0\x02\x07\x06\x12\x03(\x04\x0f\n\x0c\n\x05\x04\0\x02\x07\ + \x01\x12\x03(\x10\x1c\n\x0c\n\x05\x04\0\x02\x07\x03\x12\x03(\x1f\x20\n\ + \x0b\n\x04\x04\0\x02\x08\x12\x03)\x04\x1b\n\r\n\x05\x04\0\x02\x08\x04\ + \x12\x04)\x04(!\n\x0c\n\x05\x04\0\x02\x08\x06\x12\x03)\x04\x0c\n\x0c\n\ + \x05\x04\0\x02\x08\x01\x12\x03)\r\x16\n\x0c\n\x05\x04\0\x02\x08\x03\x12\ + \x03)\x19\x1a\n\n\n\x02\x04\x01\x12\x04,\00\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\x042\04\x01\n\n\n\x03\x04\x02\x01\x12\x03\ + 2\x08\x10\n\x0b\n\x04\x04\x02\x02\0\x12\x033\x04\x14\n\r\n\x05\x04\x02\ + \x02\0\x04\x12\x043\x042\x12\n\x0c\n\x05\x04\x02\x02\0\x06\x12\x033\x04\ + \x0b\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x033\x0c\x0f\n\x0c\n\x05\x04\x02\ + \x02\0\x03\x12\x033\x12\x13\n\n\n\x02\x04\x03\x12\x046\0:\x01\n\n\n\x03\ + \x04\x03\x01\x12\x036\x08\x0f\n\x0b\n\x04\x04\x03\x02\0\x12\x037\x04\x19\ + \n\r\n\x05\x04\x03\x02\0\x04\x12\x047\x046\x11\n\x0c\n\x05\x04\x03\x02\0\ + \x05\x12\x037\x04\n\n\x0c\n\x05\x04\x03\x02\0\x01\x12\x037\x0b\x14\n\x0c\ + \n\x05\x04\x03\x02\0\x03\x12\x037\x17\x18\n\x0b\n\x04\x04\x03\x02\x01\ + \x12\x038\x04\x17\n\r\n\x05\x04\x03\x02\x01\x04\x12\x048\x047\x19\n\x0c\ + \n\x05\x04\x03\x02\x01\x05\x12\x038\x04\n\n\x0c\n\x05\x04\x03\x02\x01\ + \x01\x12\x038\x0b\x12\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x038\x15\x16\n\ + \x0b\n\x04\x04\x03\x02\x02\x12\x039\x04\x19\n\r\n\x05\x04\x03\x02\x02\ + \x04\x12\x049\x048\x17\n\x0c\n\x05\x04\x03\x02\x02\x05\x12\x039\x04\n\n\ + \x0c\n\x05\x04\x03\x02\x02\x01\x12\x039\x0b\x14\n\x0c\n\x05\x04\x03\x02\ + \x02\x03\x12\x039\x17\x18\n\n\n\x02\x04\x04\x12\x04<\0@\x01\n\n\n\x03\ + \x04\x04\x01\x12\x03<\x08\x10\n\x0b\n\x04\x04\x04\x02\0\x12\x03=\x04\x19\ + \n\r\n\x05\x04\x04\x02\0\x04\x12\x04=\x04<\x12\n\x0c\n\x05\x04\x04\x02\0\ + \x05\x12\x03=\x04\n\n\x0c\n\x05\x04\x04\x02\0\x01\x12\x03=\x0b\x14\n\x0c\ + \n\x05\x04\x04\x02\0\x03\x12\x03=\x17\x18\n\x0b\n\x04\x04\x04\x02\x01\ + \x12\x03>\x04\x17\n\r\n\x05\x04\x04\x02\x01\x04\x12\x04>\x04=\x19\n\x0c\ + \n\x05\x04\x04\x02\x01\x05\x12\x03>\x04\n\n\x0c\n\x05\x04\x04\x02\x01\ + \x01\x12\x03>\x0b\x12\n\x0c\n\x05\x04\x04\x02\x01\x03\x12\x03>\x15\x16\n\ + \x0b\n\x04\x04\x04\x02\x02\x12\x03?\x04\x19\n\r\n\x05\x04\x04\x02\x02\ + \x04\x12\x04?\x04>\x17\n\x0c\n\x05\x04\x04\x02\x02\x05\x12\x03?\x04\n\n\ + \x0c\n\x05\x04\x04\x02\x02\x01\x12\x03?\x0b\x14\n\x0c\n\x05\x04\x04\x02\ + \x02\x03\x12\x03?\x17\x18\n\n\n\x02\x04\x05\x12\x04B\0E\x01\n\n\n\x03\ + \x04\x05\x01\x12\x03B\x08\x10\n\x0b\n\x04\x04\x05\x02\0\x12\x03C\x04\x19\ + \n\r\n\x05\x04\x05\x02\0\x04\x12\x04C\x04B\x12\n\x0c\n\x05\x04\x05\x02\0\ + \x05\x12\x03C\x04\n\n\x0c\n\x05\x04\x05\x02\0\x01\x12\x03C\x0b\x14\n\x0c\ + \n\x05\x04\x05\x02\0\x03\x12\x03C\x17\x18\n\x0b\n\x04\x04\x05\x02\x01\ + \x12\x03D\x04\x13\n\r\n\x05\x04\x05\x02\x01\x04\x12\x04D\x04C\x19\n\x0c\ + \n\x05\x04\x05\x02\x01\x05\x12\x03D\x04\n\n\x0c\n\x05\x04\x05\x02\x01\ + \x01\x12\x03D\x0b\x0e\n\x0c\n\x05\x04\x05\x02\x01\x03\x12\x03D\x11\x12\n\ + \n\n\x02\x04\x06\x12\x04G\0J\x01\n\n\n\x03\x04\x06\x01\x12\x03G\x08\x11\ + \n\x0b\n\x04\x04\x06\x02\0\x12\x03H\x04\x15\n\r\n\x05\x04\x06\x02\0\x04\ + \x12\x04H\x04G\x13\n\x0c\n\x05\x04\x06\x02\0\x05\x12\x03H\x04\n\n\x0c\n\ + \x05\x04\x06\x02\0\x01\x12\x03H\x0b\x10\n\x0c\n\x05\x04\x06\x02\0\x03\ + \x12\x03H\x13\x14\n\x0b\n\x04\x04\x06\x02\x01\x12\x03I\x04\x14\n\r\n\x05\ + \x04\x06\x02\x01\x04\x12\x04I\x04H\x15\n\x0c\n\x05\x04\x06\x02\x01\x06\ + \x12\x03I\x04\x0b\n\x0c\n\x05\x04\x06\x02\x01\x01\x12\x03I\x0c\x0f\n\x0c\ + \n\x05\x04\x06\x02\x01\x03\x12\x03I\x12\x13\n\n\n\x02\x04\x07\x12\x04L\0\ + O\x01\n\n\n\x03\x04\x07\x01\x12\x03L\x08\x10\n\x0b\n\x04\x04\x07\x02\0\ + \x12\x03M\x04\x19\n\r\n\x05\x04\x07\x02\0\x04\x12\x04M\x04L\x12\n\x0c\n\ + \x05\x04\x07\x02\0\x05\x12\x03M\x04\n\n\x0c\n\x05\x04\x07\x02\0\x01\x12\ + \x03M\x0b\x14\n\x0c\n\x05\x04\x07\x02\0\x03\x12\x03M\x17\x18\n\x0b\n\x04\ + \x04\x07\x02\x01\x12\x03N\x04\x13\n\r\n\x05\x04\x07\x02\x01\x04\x12\x04N\ + \x04M\x19\n\x0c\n\x05\x04\x07\x02\x01\x05\x12\x03N\x04\n\n\x0c\n\x05\x04\ + \x07\x02\x01\x01\x12\x03N\x0b\x0e\n\x0c\n\x05\x04\x07\x02\x01\x03\x12\ + \x03N\x11\x12\n\n\n\x02\x04\x08\x12\x04Q\0T\x01\n\n\n\x03\x04\x08\x01\ + \x12\x03Q\x08\x11\n\x0b\n\x04\x04\x08\x02\0\x12\x03R\x04\x15\n\r\n\x05\ + \x04\x08\x02\0\x04\x12\x04R\x04Q\x13\n\x0c\n\x05\x04\x08\x02\0\x05\x12\ + \x03R\x04\n\n\x0c\n\x05\x04\x08\x02\0\x01\x12\x03R\x0b\x10\n\x0c\n\x05\ + \x04\x08\x02\0\x03\x12\x03R\x13\x14\n\x0b\n\x04\x04\x08\x02\x01\x12\x03S\ + \x04\x14\n\r\n\x05\x04\x08\x02\x01\x04\x12\x04S\x04R\x15\n\x0c\n\x05\x04\ + \x08\x02\x01\x06\x12\x03S\x04\x0b\n\x0c\n\x05\x04\x08\x02\x01\x01\x12\ + \x03S\x0c\x0f\n\x0c\n\x05\x04\x08\x02\x01\x03\x12\x03S\x12\x13\n\n\n\x02\ + \x04\t\x12\x04V\0Y\x01\n\n\n\x03\x04\t\x01\x12\x03V\x08\x12\n\x0b\n\x04\ + \x04\t\x02\0\x12\x03W\x04\x19\n\r\n\x05\x04\t\x02\0\x04\x12\x04W\x04V\ + \x14\n\x0c\n\x05\x04\t\x02\0\x05\x12\x03W\x04\n\n\x0c\n\x05\x04\t\x02\0\ + \x01\x12\x03W\x0b\x14\n\x0c\n\x05\x04\t\x02\0\x03\x12\x03W\x17\x18\n\x0b\ + \n\x04\x04\t\x02\x01\x12\x03X\x04\x13\n\r\n\x05\x04\t\x02\x01\x04\x12\ + \x04X\x04W\x19\n\x0c\n\x05\x04\t\x02\x01\x05\x12\x03X\x04\n\n\x0c\n\x05\ + \x04\t\x02\x01\x01\x12\x03X\x0b\x0e\n\x0c\n\x05\x04\t\x02\x01\x03\x12\ + \x03X\x11\x12\n\n\n\x02\x04\n\x12\x04[\0^\x01\n\n\n\x03\x04\n\x01\x12\ + \x03[\x08\x13\n\x0b\n\x04\x04\n\x02\0\x12\x03\\\x04\x15\n\r\n\x05\x04\n\ + \x02\0\x04\x12\x04\\\x04[\x15\n\x0c\n\x05\x04\n\x02\0\x05\x12\x03\\\x04\ + \n\n\x0c\n\x05\x04\n\x02\0\x01\x12\x03\\\x0b\x10\n\x0c\n\x05\x04\n\x02\0\ + \x03\x12\x03\\\x13\x14\n\x0b\n\x04\x04\n\x02\x01\x12\x03]\x04\x14\n\r\n\ + \x05\x04\n\x02\x01\x04\x12\x04]\x04\\\x15\n\x0c\n\x05\x04\n\x02\x01\x06\ + \x12\x03]\x04\x0b\n\x0c\n\x05\x04\n\x02\x01\x01\x12\x03]\x0c\x0f\n\x0c\n\ + \x05\x04\n\x02\x01\x03\x12\x03]\x12\x13\n\n\n\x02\x04\x0b\x12\x04`\0d\ + \x01\n\n\n\x03\x04\x0b\x01\x12\x03`\x08\x0e\n\x0b\n\x04\x04\x0b\x02\0\ + \x12\x03a\x04\x19\n\r\n\x05\x04\x0b\x02\0\x04\x12\x04a\x04`\x10\n\x0c\n\ + \x05\x04\x0b\x02\0\x05\x12\x03a\x04\n\n\x0c\n\x05\x04\x0b\x02\0\x01\x12\ + \x03a\x0b\x14\n\x0c\n\x05\x04\x0b\x02\0\x03\x12\x03a\x17\x18\n\x0b\n\x04\ + \x04\x0b\x02\x01\x12\x03b\x04\x13\n\r\n\x05\x04\x0b\x02\x01\x04\x12\x04b\ + \x04a\x19\n\x0c\n\x05\x04\x0b\x02\x01\x05\x12\x03b\x04\n\n\x0c\n\x05\x04\ + \x0b\x02\x01\x01\x12\x03b\x0b\x0e\n\x0c\n\x05\x04\x0b\x02\x01\x03\x12\ + \x03b\x11\x12\n\x0b\n\x04\x04\x0b\x02\x02\x12\x03c\x04\x16\n\r\n\x05\x04\ + \x0b\x02\x02\x04\x12\x04c\x04b\x13\n\x0c\n\x05\x04\x0b\x02\x02\x05\x12\ + \x03c\x04\n\n\x0c\n\x05\x04\x0b\x02\x02\x01\x12\x03c\x0b\x11\n\x0c\n\x05\ + \x04\x0b\x02\x02\x03\x12\x03c\x14\x15\n\n\n\x02\x04\x0c\x12\x04f\0i\x01\ + \n\n\n\x03\x04\x0c\x01\x12\x03f\x08\x0f\n\x0b\n\x04\x04\x0c\x02\0\x12\ + \x03g\x04\x15\n\r\n\x05\x04\x0c\x02\0\x04\x12\x04g\x04f\x11\n\x0c\n\x05\ + \x04\x0c\x02\0\x05\x12\x03g\x04\n\n\x0c\n\x05\x04\x0c\x02\0\x01\x12\x03g\ + \x0b\x10\n\x0c\n\x05\x04\x0c\x02\0\x03\x12\x03g\x13\x14\n\x0b\n\x04\x04\ + \x0c\x02\x01\x12\x03h\x04\x14\n\r\n\x05\x04\x0c\x02\x01\x04\x12\x04h\x04\ + g\x15\n\x0c\n\x05\x04\x0c\x02\x01\x06\x12\x03h\x04\x0b\n\x0c\n\x05\x04\ + \x0c\x02\x01\x01\x12\x03h\x0c\x0f\n\x0c\n\x05\x04\x0c\x02\x01\x03\x12\ + \x03h\x12\x13\n\n\n\x02\x04\r\x12\x04k\0p\x01\n\n\n\x03\x04\r\x01\x12\ + \x03k\x08\x0e\n\x0b\n\x04\x04\r\x02\0\x12\x03l\x04\x19\n\r\n\x05\x04\r\ + \x02\0\x04\x12\x04l\x04k\x10\n\x0c\n\x05\x04\r\x02\0\x05\x12\x03l\x04\n\ + \n\x0c\n\x05\x04\r\x02\0\x01\x12\x03l\x0b\x14\n\x0c\n\x05\x04\r\x02\0\ + \x03\x12\x03l\x17\x18\n\x0b\n\x04\x04\r\x02\x01\x12\x03m\x04\x13\n\r\n\ + \x05\x04\r\x02\x01\x04\x12\x04m\x04l\x19\n\x0c\n\x05\x04\r\x02\x01\x05\ + \x12\x03m\x04\n\n\x0c\n\x05\x04\r\x02\x01\x01\x12\x03m\x0b\x0e\n\x0c\n\ + \x05\x04\r\x02\x01\x03\x12\x03m\x11\x12\n\x0b\n\x04\x04\r\x02\x02\x12\ + \x03n\x04\x16\n\r\n\x05\x04\r\x02\x02\x04\x12\x04n\x04m\x13\n\x0c\n\x05\ + \x04\r\x02\x02\x05\x12\x03n\x04\n\n\x0c\n\x05\x04\r\x02\x02\x01\x12\x03n\ + \x0b\x11\n\x0c\n\x05\x04\r\x02\x02\x03\x12\x03n\x14\x15\n\x0b\n\x04\x04\ + \r\x02\x03\x12\x03o\x04\x16\n\r\n\x05\x04\r\x02\x03\x04\x12\x04o\x04n\ + \x16\n\x0c\n\x05\x04\r\x02\x03\x05\x12\x03o\x04\n\n\x0c\n\x05\x04\r\x02\ + \x03\x01\x12\x03o\x0b\x11\n\x0c\n\x05\x04\r\x02\x03\x03\x12\x03o\x14\x15\ + \n\n\n\x02\x04\x0e\x12\x04r\0u\x01\n\n\n\x03\x04\x0e\x01\x12\x03r\x08\ + \x0f\n\x0b\n\x04\x04\x0e\x02\0\x12\x03s\x04\x15\n\r\n\x05\x04\x0e\x02\0\ + \x04\x12\x04s\x04r\x11\n\x0c\n\x05\x04\x0e\x02\0\x05\x12\x03s\x04\n\n\ + \x0c\n\x05\x04\x0e\x02\0\x01\x12\x03s\x0b\x10\n\x0c\n\x05\x04\x0e\x02\0\ + \x03\x12\x03s\x13\x14\n\x0b\n\x04\x04\x0e\x02\x01\x12\x03t\x04\x14\n\r\n\ + \x05\x04\x0e\x02\x01\x04\x12\x04t\x04s\x15\n\x0c\n\x05\x04\x0e\x02\x01\ + \x06\x12\x03t\x04\x0b\n\x0c\n\x05\x04\x0e\x02\x01\x01\x12\x03t\x0c\x0f\n\ + \x0c\n\x05\x04\x0e\x02\x01\x03\x12\x03t\x12\x13\n\n\n\x02\x04\x0f\x12\ + \x04w\0{\x01\n\n\n\x03\x04\x0f\x01\x12\x03w\x08\x11\n\x0b\n\x04\x04\x0f\ + \x02\0\x12\x03x\x04\x19\n\r\n\x05\x04\x0f\x02\0\x04\x12\x04x\x04w\x13\n\ + \x0c\n\x05\x04\x0f\x02\0\x05\x12\x03x\x04\n\n\x0c\n\x05\x04\x0f\x02\0\ + \x01\x12\x03x\x0b\x14\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\x03x\x17\x18\n\ + \x0b\n\x04\x04\x0f\x02\x01\x12\x03y\x04\x13\n\r\n\x05\x04\x0f\x02\x01\ + \x04\x12\x04y\x04x\x19\n\x0c\n\x05\x04\x0f\x02\x01\x05\x12\x03y\x04\n\n\ + \x0c\n\x05\x04\x0f\x02\x01\x01\x12\x03y\x0b\x0e\n\x0c\n\x05\x04\x0f\x02\ + \x01\x03\x12\x03y\x11\x12\n\x0b\n\x04\x04\x0f\x02\x02\x12\x03z\x04\x16\n\ + \r\n\x05\x04\x0f\x02\x02\x04\x12\x04z\x04y\x13\n\x0c\n\x05\x04\x0f\x02\ + \x02\x05\x12\x03z\x04\n\n\x0c\n\x05\x04\x0f\x02\x02\x01\x12\x03z\x0b\x11\ + \n\x0c\n\x05\x04\x0f\x02\x02\x03\x12\x03z\x14\x15\n\x0b\n\x02\x04\x10\ + \x12\x05}\0\x80\x01\x01\n\n\n\x03\x04\x10\x01\x12\x03}\x08\x12\n\x0b\n\ + \x04\x04\x10\x02\0\x12\x03~\x04\x15\n\r\n\x05\x04\x10\x02\0\x04\x12\x04~\ + \x04}\x14\n\x0c\n\x05\x04\x10\x02\0\x05\x12\x03~\x04\n\n\x0c\n\x05\x04\ + \x10\x02\0\x01\x12\x03~\x0b\x10\n\x0c\n\x05\x04\x10\x02\0\x03\x12\x03~\ + \x13\x14\n\x0b\n\x04\x04\x10\x02\x01\x12\x03\x7f\x04\x14\n\r\n\x05\x04\ + \x10\x02\x01\x04\x12\x04\x7f\x04~\x15\n\x0c\n\x05\x04\x10\x02\x01\x06\ + \x12\x03\x7f\x04\x0b\n\x0c\n\x05\x04\x10\x02\x01\x01\x12\x03\x7f\x0c\x0f\ + \n\x0c\n\x05\x04\x10\x02\x01\x03\x12\x03\x7f\x12\x13\n\x0c\n\x02\x04\x11\ + \x12\x06\x82\x01\0\x85\x01\x01\n\x0b\n\x03\x04\x11\x01\x12\x04\x82\x01\ + \x08\x11\n\x0c\n\x04\x04\x11\x02\0\x12\x04\x83\x01\x04\x19\n\x0f\n\x05\ + \x04\x11\x02\0\x04\x12\x06\x83\x01\x04\x82\x01\x13\n\r\n\x05\x04\x11\x02\ + \0\x05\x12\x04\x83\x01\x04\n\n\r\n\x05\x04\x11\x02\0\x01\x12\x04\x83\x01\ + \x0b\x14\n\r\n\x05\x04\x11\x02\0\x03\x12\x04\x83\x01\x17\x18\n\x0c\n\x04\ + \x04\x11\x02\x01\x12\x04\x84\x01\x04\x13\n\x0f\n\x05\x04\x11\x02\x01\x04\ + \x12\x06\x84\x01\x04\x83\x01\x19\n\r\n\x05\x04\x11\x02\x01\x05\x12\x04\ + \x84\x01\x04\n\n\r\n\x05\x04\x11\x02\x01\x01\x12\x04\x84\x01\x0b\x0e\n\r\ + \n\x05\x04\x11\x02\x01\x03\x12\x04\x84\x01\x11\x12\n\x0c\n\x02\x04\x12\ + \x12\x06\x87\x01\0\x8a\x01\x01\n\x0b\n\x03\x04\x12\x01\x12\x04\x87\x01\ + \x08\x12\n\x0c\n\x04\x04\x12\x02\0\x12\x04\x88\x01\x04\x15\n\x0f\n\x05\ + \x04\x12\x02\0\x04\x12\x06\x88\x01\x04\x87\x01\x14\n\r\n\x05\x04\x12\x02\ + \0\x05\x12\x04\x88\x01\x04\n\n\r\n\x05\x04\x12\x02\0\x01\x12\x04\x88\x01\ + \x0b\x10\n\r\n\x05\x04\x12\x02\0\x03\x12\x04\x88\x01\x13\x14\n\x0c\n\x04\ + \x04\x12\x02\x01\x12\x04\x89\x01\x04\x14\n\x0f\n\x05\x04\x12\x02\x01\x04\ + \x12\x06\x89\x01\x04\x88\x01\x15\n\r\n\x05\x04\x12\x02\x01\x06\x12\x04\ + \x89\x01\x04\x0b\n\r\n\x05\x04\x12\x02\x01\x01\x12\x04\x89\x01\x0c\x0f\n\ + \r\n\x05\x04\x12\x02\x01\x03\x12\x04\x89\x01\x12\x13\n\x0c\n\x02\x04\x13\ + \x12\x06\x8c\x01\0\x8f\x01\x01\n\x0b\n\x03\x04\x13\x01\x12\x04\x8c\x01\ + \x08\x13\n\x0c\n\x04\x04\x13\x02\0\x12\x04\x8d\x01\x04\x19\n\x0f\n\x05\ + \x04\x13\x02\0\x04\x12\x06\x8d\x01\x04\x8c\x01\x15\n\r\n\x05\x04\x13\x02\ + \0\x05\x12\x04\x8d\x01\x04\n\n\r\n\x05\x04\x13\x02\0\x01\x12\x04\x8d\x01\ + \x0b\x14\n\r\n\x05\x04\x13\x02\0\x03\x12\x04\x8d\x01\x17\x18\n\x0c\n\x04\ + \x04\x13\x02\x01\x12\x04\x8e\x01\x04\x13\n\x0f\n\x05\x04\x13\x02\x01\x04\ + \x12\x06\x8e\x01\x04\x8d\x01\x19\n\r\n\x05\x04\x13\x02\x01\x05\x12\x04\ + \x8e\x01\x04\n\n\r\n\x05\x04\x13\x02\x01\x01\x12\x04\x8e\x01\x0b\x0e\n\r\ + \n\x05\x04\x13\x02\x01\x03\x12\x04\x8e\x01\x11\x12\n\x0c\n\x02\x04\x14\ + \x12\x06\x91\x01\0\x94\x01\x01\n\x0b\n\x03\x04\x14\x01\x12\x04\x91\x01\ + \x08\x14\n\x0c\n\x04\x04\x14\x02\0\x12\x04\x92\x01\x04\x15\n\x0f\n\x05\ + \x04\x14\x02\0\x04\x12\x06\x92\x01\x04\x91\x01\x16\n\r\n\x05\x04\x14\x02\ + \0\x05\x12\x04\x92\x01\x04\n\n\r\n\x05\x04\x14\x02\0\x01\x12\x04\x92\x01\ + \x0b\x10\n\r\n\x05\x04\x14\x02\0\x03\x12\x04\x92\x01\x13\x14\n\x0c\n\x04\ + \x04\x14\x02\x01\x12\x04\x93\x01\x04\x14\n\x0f\n\x05\x04\x14\x02\x01\x04\ + \x12\x06\x93\x01\x04\x92\x01\x15\n\r\n\x05\x04\x14\x02\x01\x06\x12\x04\ + \x93\x01\x04\x0b\n\r\n\x05\x04\x14\x02\x01\x01\x12\x04\x93\x01\x0c\x0f\n\ + \r\n\x05\x04\x14\x02\x01\x03\x12\x04\x93\x01\x12\x13\n\x0c\n\x02\x04\x15\ + \x12\x06\x96\x01\0\x99\x01\x01\n\x0b\n\x03\x04\x15\x01\x12\x04\x96\x01\ + \x08\x10\n\x0c\n\x04\x04\x15\x02\0\x12\x04\x97\x01\x04\x19\n\x0f\n\x05\ + \x04\x15\x02\0\x04\x12\x06\x97\x01\x04\x96\x01\x12\n\r\n\x05\x04\x15\x02\ + \0\x05\x12\x04\x97\x01\x04\n\n\r\n\x05\x04\x15\x02\0\x01\x12\x04\x97\x01\ + \x0b\x14\n\r\n\x05\x04\x15\x02\0\x03\x12\x04\x97\x01\x17\x18\n\x0c\n\x04\ + \x04\x15\x02\x01\x12\x04\x98\x01\x04\x13\n\x0f\n\x05\x04\x15\x02\x01\x04\ + \x12\x06\x98\x01\x04\x97\x01\x19\n\r\n\x05\x04\x15\x02\x01\x05\x12\x04\ + \x98\x01\x04\n\n\r\n\x05\x04\x15\x02\x01\x01\x12\x04\x98\x01\x0b\x0e\n\r\ + \n\x05\x04\x15\x02\x01\x03\x12\x04\x98\x01\x11\x12\n\x0c\n\x02\x04\x16\ + \x12\x06\x9b\x01\0\x9e\x01\x01\n\x0b\n\x03\x04\x16\x01\x12\x04\x9b\x01\ + \x08\x11\n\x0c\n\x04\x04\x16\x02\0\x12\x04\x9c\x01\x04\x15\n\x0f\n\x05\ + \x04\x16\x02\0\x04\x12\x06\x9c\x01\x04\x9b\x01\x13\n\r\n\x05\x04\x16\x02\ + \0\x05\x12\x04\x9c\x01\x04\n\n\r\n\x05\x04\x16\x02\0\x01\x12\x04\x9c\x01\ + \x0b\x10\n\r\n\x05\x04\x16\x02\0\x03\x12\x04\x9c\x01\x13\x14\n\x0c\n\x04\ + \x04\x16\x02\x01\x12\x04\x9d\x01\x04\x14\n\x0f\n\x05\x04\x16\x02\x01\x04\ + \x12\x06\x9d\x01\x04\x9c\x01\x15\n\r\n\x05\x04\x16\x02\x01\x06\x12\x04\ + \x9d\x01\x04\x0b\n\r\n\x05\x04\x16\x02\x01\x01\x12\x04\x9d\x01\x0c\x0f\n\ + \r\n\x05\x04\x16\x02\x01\x03\x12\x04\x9d\x01\x12\x13\n\x0c\n\x02\x04\x17\ + \x12\x06\xa0\x01\0\xab\x01\x01\n\x0b\n\x03\x04\x17\x01\x12\x04\xa0\x01\ + \x08\x11\n\x0c\n\x04\x04\x17\x02\0\x12\x04\xa1\x01\x04\x19\n\x0f\n\x05\ + \x04\x17\x02\0\x04\x12\x06\xa1\x01\x04\xa0\x01\x13\n\r\n\x05\x04\x17\x02\ + \0\x05\x12\x04\xa1\x01\x04\n\n\r\n\x05\x04\x17\x02\0\x01\x12\x04\xa1\x01\ + \x0b\x14\n\r\n\x05\x04\x17\x02\0\x03\x12\x04\xa1\x01\x17\x18\n\x0c\n\x04\ + \x04\x17\x02\x01\x12\x04\xa2\x01\x04\x13\n\x0f\n\x05\x04\x17\x02\x01\x04\ + \x12\x06\xa2\x01\x04\xa1\x01\x19\n\r\n\x05\x04\x17\x02\x01\x05\x12\x04\ + \xa2\x01\x04\n\n\r\n\x05\x04\x17\x02\x01\x01\x12\x04\xa2\x01\x0b\x0e\n\r\ + \n\x05\x04\x17\x02\x01\x03\x12\x04\xa2\x01\x11\x12\n\x0c\n\x04\x04\x17\ + \x02\x02\x12\x04\xa3\x01\x04\x15\n\x0f\n\x05\x04\x17\x02\x02\x04\x12\x06\ + \xa3\x01\x04\xa2\x01\x13\n\r\n\x05\x04\x17\x02\x02\x05\x12\x04\xa3\x01\ + \x04\n\n\r\n\x05\x04\x17\x02\x02\x01\x12\x04\xa3\x01\x0b\x10\n\r\n\x05\ + \x04\x17\x02\x02\x03\x12\x04\xa3\x01\x13\x14\n\x0c\n\x04\x04\x17\x02\x03\ + \x12\x04\xa4\x01\x04\x14\n\x0f\n\x05\x04\x17\x02\x03\x04\x12\x06\xa4\x01\ + \x04\xa3\x01\x15\n\r\n\x05\x04\x17\x02\x03\x05\x12\x04\xa4\x01\x04\n\n\r\ + \n\x05\x04\x17\x02\x03\x01\x12\x04\xa4\x01\x0b\x0f\n\r\n\x05\x04\x17\x02\ + \x03\x03\x12\x04\xa4\x01\x12\x13\n\x0c\n\x04\x04\x17\x02\x04\x12\x04\xa5\ + \x01\x04\x15\n\x0f\n\x05\x04\x17\x02\x04\x04\x12\x06\xa5\x01\x04\xa4\x01\ + \x14\n\r\n\x05\x04\x17\x02\x04\x05\x12\x04\xa5\x01\x04\n\n\r\n\x05\x04\ + \x17\x02\x04\x01\x12\x04\xa5\x01\x0b\x10\n\r\n\x05\x04\x17\x02\x04\x03\ + \x12\x04\xa5\x01\x13\x14\n\x0c\n\x04\x04\x17\x02\x05\x12\x04\xa6\x01\x04\ + \x1b\n\x0f\n\x05\x04\x17\x02\x05\x04\x12\x06\xa6\x01\x04\xa5\x01\x15\n\r\ + \n\x05\x04\x17\x02\x05\x05\x12\x04\xa6\x01\x04\x08\n\r\n\x05\x04\x17\x02\ + \x05\x01\x12\x04\xa6\x01\t\x16\n\r\n\x05\x04\x17\x02\x05\x03\x12\x04\xa6\ + \x01\x19\x1a\n\x0c\n\x04\x04\x17\x02\x06\x12\x04\xa7\x01\x04\x1a\n\x0f\n\ + \x05\x04\x17\x02\x06\x04\x12\x06\xa7\x01\x04\xa6\x01\x1b\n\r\n\x05\x04\ + \x17\x02\x06\x05\x12\x04\xa7\x01\x04\x08\n\r\n\x05\x04\x17\x02\x06\x01\ + \x12\x04\xa7\x01\t\x15\n\r\n\x05\x04\x17\x02\x06\x03\x12\x04\xa7\x01\x18\ + \x19\n\x0c\n\x04\x04\x17\x02\x07\x12\x04\xa8\x01\x04\x1b\n\x0f\n\x05\x04\ + \x17\x02\x07\x04\x12\x06\xa8\x01\x04\xa7\x01\x1a\n\r\n\x05\x04\x17\x02\ + \x07\x05\x12\x04\xa8\x01\x04\n\n\r\n\x05\x04\x17\x02\x07\x01\x12\x04\xa8\ + \x01\x0b\x16\n\r\n\x05\x04\x17\x02\x07\x03\x12\x04\xa8\x01\x19\x1a\n/\n\ + \x04\x04\x17\x02\x08\x12\x04\xa9\x01\x04'\"!\x20\x20\x20\x20repeated\x20\ + string\x20facets\x20=\x2010;\n\n\r\n\x05\x04\x17\x02\x08\x04\x12\x04\xa9\ + \x01\x04\x0c\n\r\n\x05\x04\x17\x02\x08\x05\x12\x04\xa9\x01\r\x13\n\r\n\ + \x05\x04\x17\x02\x08\x01\x12\x04\xa9\x01\x14\"\n\r\n\x05\x04\x17\x02\x08\ + \x03\x12\x04\xa9\x01%&\n\x0c\n\x02\x04\x18\x12\x06\xad\x01\0\xb0\x01\x01\ + \n\x0b\n\x03\x04\x18\x01\x12\x04\xad\x01\x08\x12\n\x0c\n\x04\x04\x18\x02\ + \0\x12\x04\xae\x01\x04\x15\n\x0f\n\x05\x04\x18\x02\0\x04\x12\x06\xae\x01\ + \x04\xad\x01\x14\n\r\n\x05\x04\x18\x02\0\x05\x12\x04\xae\x01\x04\n\n\r\n\ + \x05\x04\x18\x02\0\x01\x12\x04\xae\x01\x0b\x10\n\r\n\x05\x04\x18\x02\0\ + \x03\x12\x04\xae\x01\x13\x14\n\x0c\n\x04\x04\x18\x02\x01\x12\x04\xaf\x01\ + \x04\x14\n\x0f\n\x05\x04\x18\x02\x01\x04\x12\x06\xaf\x01\x04\xae\x01\x15\ + \n\r\n\x05\x04\x18\x02\x01\x06\x12\x04\xaf\x01\x04\x0b\n\r\n\x05\x04\x18\ + \x02\x01\x01\x12\x04\xaf\x01\x0c\x0f\n\r\n\x05\x04\x18\x02\x01\x03\x12\ + \x04\xaf\x01\x12\x13\n\x0c\n\x02\x04\x19\x12\x06\xb2\x01\0\xb5\x01\x01\n\ + \x0b\n\x03\x04\x19\x01\x12\x04\xb2\x01\x08\x11\n\x0c\n\x04\x04\x19\x02\0\ + \x12\x04\xb3\x01\x04\x19\n\x0f\n\x05\x04\x19\x02\0\x04\x12\x06\xb3\x01\ + \x04\xb2\x01\x13\n\r\n\x05\x04\x19\x02\0\x05\x12\x04\xb3\x01\x04\n\n\r\n\ + \x05\x04\x19\x02\0\x01\x12\x04\xb3\x01\x0b\x14\n\r\n\x05\x04\x19\x02\0\ + \x03\x12\x04\xb3\x01\x17\x18\n\x0c\n\x04\x04\x19\x02\x01\x12\x04\xb4\x01\ + \x04\x13\n\x0f\n\x05\x04\x19\x02\x01\x04\x12\x06\xb4\x01\x04\xb3\x01\x19\ + \n\r\n\x05\x04\x19\x02\x01\x05\x12\x04\xb4\x01\x04\n\n\r\n\x05\x04\x19\ + \x02\x01\x01\x12\x04\xb4\x01\x0b\x0e\n\r\n\x05\x04\x19\x02\x01\x03\x12\ + \x04\xb4\x01\x11\x12\n\x0c\n\x02\x04\x1a\x12\x06\xb7\x01\0\xba\x01\x01\n\ + \x0b\n\x03\x04\x1a\x01\x12\x04\xb7\x01\x08\x12\n\x0c\n\x04\x04\x1a\x02\0\ + \x12\x04\xb8\x01\x04\x15\n\x0f\n\x05\x04\x1a\x02\0\x04\x12\x06\xb8\x01\ + \x04\xb7\x01\x14\n\r\n\x05\x04\x1a\x02\0\x05\x12\x04\xb8\x01\x04\n\n\r\n\ + \x05\x04\x1a\x02\0\x01\x12\x04\xb8\x01\x0b\x10\n\r\n\x05\x04\x1a\x02\0\ + \x03\x12\x04\xb8\x01\x13\x14\n\x0c\n\x04\x04\x1a\x02\x01\x12\x04\xb9\x01\ + \x04\x14\n\x0f\n\x05\x04\x1a\x02\x01\x04\x12\x06\xb9\x01\x04\xb8\x01\x15\ + \n\r\n\x05\x04\x1a\x02\x01\x06\x12\x04\xb9\x01\x04\x0b\n\r\n\x05\x04\x1a\ + \x02\x01\x01\x12\x04\xb9\x01\x0c\x0f\n\r\n\x05\x04\x1a\x02\x01\x03\x12\ + \x04\xb9\x01\x12\x13b\x06proto3\ "; static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy { diff --git a/src/server/peer.rs b/src/server/peer.rs index 139cc77..071ac7a 100644 --- a/src/server/peer.rs +++ b/src/server/peer.rs @@ -17,7 +17,7 @@ pub enum PeerMessage { } pub struct Peer { - raft_group: RawNode, + pub raft_group: RawNode, // last_applying_idx: u64, // last_compacted_idx: u64, apply_ch: SyncSender, diff --git a/src/server/server.rs b/src/server/server.rs index 9983ae4..234f6bb 100644 --- a/src/server/server.rs +++ b/src/server/server.rs @@ -131,7 +131,7 @@ impl IndexServer { let client_id = rand::random(); let mut client = Clerk::new(&servers, client_id); - client.join(id, host, port); + client.join_with_retry(id, host, port, 10, Duration::from_secs(3)); // Wait for signals for termination (SIGINT, SIGTERM). let sigterm_receiver = sigterm_channel().unwrap(); @@ -177,11 +177,11 @@ impl IndexServer { self.rf_message_ch .send(PeerMessage::Propose(req.write_to_bytes().unwrap_or_else( |e| { - panic!("request write to bytes error: {}", e); + panic!("request write to bytes error: {:?}", e); }, ))) .unwrap_or_else(|e| { - error!("send propose to raft error: {}", e); + error!("send propose to raft error: {:?}", e); }); match rh.recv_timeout(Duration::from_millis(1000)) { Ok(args) => { @@ -233,7 +233,7 @@ impl IndexServer { let mut map = notify_ch_map.lock().unwrap(); if let Some(s) = map.get(&client_id) { s.send(result).unwrap_or_else(|e| { - error!("notify apply result error: {}", e); + error!("notify apply result error: {:?}", e); }); } map.remove(&client_id); @@ -244,7 +244,7 @@ impl IndexServer { let mut map = notify_ch_map.lock().unwrap(); if let Some(s) = map.get(&cc.get_node_id()) { s.send(result).unwrap_or_else(|e| { - error!("notify apply result error: {}", e); + error!("notify apply result error: {:?}", e); }); } map.remove(&cc.get_node_id()); @@ -265,7 +265,6 @@ impl IndexServer { index_writer: Arc>, metrics: Arc>, ) -> NotifyArgs { - debug!("{:?}", &req); match req.req_type { ReqType::Join => { metrics.lock().unwrap().inc_request_count("join"); @@ -297,16 +296,20 @@ impl IndexServer { ReqType::Put => { metrics.lock().unwrap().inc_request_count("put"); + let field = index.schema().get_field(unique_key_field_name).unwrap(); + let mut doc = index .schema() .parse_document(req.get_put_req().get_fields()) .unwrap(); - let field = index.schema().get_field(unique_key_field_name).unwrap(); doc.add_text(field, req.get_put_req().get_doc_id()); + + // delete doc index_writer .lock() .unwrap() .delete_term(Term::from_field_text(field, req.get_put_req().get_doc_id())); + // add doc let opstamp = index_writer.lock().unwrap().add_document(doc); let mut ret = HashMap::new(); @@ -353,7 +356,7 @@ impl IndexServer { NotifyArgs( term, serde_json::to_string(&ret).unwrap(), - RespErr::ErrWrongLeader, + RespErr::ErrCommitFailed, ) } } @@ -379,7 +382,7 @@ impl IndexServer { NotifyArgs( term, serde_json::to_string(&ret).unwrap(), - RespErr::ErrWrongLeader, + RespErr::ErrRollbackFailed, ) } } @@ -416,7 +419,7 @@ impl IndexServer { NotifyArgs( term, serde_json::to_string(&ret).unwrap(), - RespErr::ErrWrongLeader, + RespErr::ErrMergeFailed, ) } } @@ -427,14 +430,19 @@ impl IndexServer { impl IndexService for IndexServer { fn raft(&mut self, ctx: RpcContext, req: RaftMessage, sink: UnarySink) { + // debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("raft"); self.rf_message_ch .send(PeerMessage::Message(req.clone())) .unwrap_or_else(|e| { - error!("send message to raft error: {}", e); + error!("send message to raft error: {:?}", e); }); let resp = RaftDone::new(); + + // debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -442,6 +450,8 @@ impl IndexService for IndexServer { } fn raft_conf_change(&mut self, ctx: RpcContext, req: ConfChangeReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics .lock() .unwrap() @@ -488,6 +498,8 @@ impl IndexService for IndexServer { _ => resp.set_err(RespErr::ErrWrongLeader), } + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -495,6 +507,8 @@ impl IndexService for IndexServer { } fn probe(&mut self, ctx: RpcContext, req: ProbeReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("probe"); let mut ret = HashMap::new(); @@ -503,6 +517,9 @@ impl IndexService for IndexServer { let mut resp = ProbeResp::new(); resp.set_err(RespErr::OK); resp.set_value(serde_json::to_string(&ret).unwrap()); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -510,11 +527,16 @@ impl IndexService for IndexServer { } fn peers(&mut self, ctx: RpcContext, req: PeersReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("peers"); let mut resp = PeersResp::new(); resp.set_err(RespErr::OK); resp.set_value(serde_json::to_string(&self.peers_addr.lock().unwrap().clone()).unwrap()); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -522,11 +544,16 @@ impl IndexService for IndexServer { } fn metrics(&mut self, ctx: RpcContext, req: MetricsReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("metrics"); let mut resp = MetricsResp::new(); resp.set_err(RespErr::OK); resp.set_value(self.metrics.lock().unwrap().get_metrics()); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -534,6 +561,8 @@ impl IndexService for IndexServer { } fn get(&mut self, ctx: RpcContext, req: GetReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("get"); let t = Term::from_field_text( @@ -555,6 +584,9 @@ impl IndexService for IndexServer { let mut resp = GetResp::new(); resp.set_err(RespErr::OK); resp.set_value(serde_json::to_string(&named_doc).unwrap()); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -562,10 +594,15 @@ impl IndexService for IndexServer { } fn put(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + debug!("request: {:?}", req); + let (err, ret) = Self::start_op(self, &req); let mut resp = PutResp::new(); resp.set_err(err); resp.set_value(ret); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -573,10 +610,15 @@ impl IndexService for IndexServer { } fn delete(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + debug!("request: {:?}", req); + let (err, ret) = Self::start_op(self, &req); let mut resp = DeleteResp::new(); resp.set_err(err); resp.set_value(ret); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -584,10 +626,15 @@ impl IndexService for IndexServer { } fn commit(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + debug!("request: {:?}", req); + let (err, ret) = Self::start_op(self, &req); let mut resp = CommitResp::new(); resp.set_err(err); resp.set_value(ret); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -595,10 +642,15 @@ impl IndexService for IndexServer { } fn rollback(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + debug!("request: {:?}", req); + let (err, ret) = Self::start_op(self, &req); let mut resp = RollbackResp::new(); resp.set_err(err); resp.set_value(ret); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -606,10 +658,15 @@ impl IndexService for IndexServer { } fn merge(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + debug!("request: {:?}", req); + let (err, ret) = Self::start_op(self, &req); let mut resp = MergeResp::new(); resp.set_err(err); resp.set_value(ret); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -617,6 +674,8 @@ impl IndexService for IndexServer { } fn search(&mut self, ctx: RpcContext, req: SearchReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("search"); let schema = self.index.schema(); @@ -659,38 +718,6 @@ impl IndexService for IndexServer { Some(multi_collector.add_collector(facet_collector)) }; - // // single field facet - // let mut facet_collector = FacetCollector::for_field(schema.get_field(req.get_facet_field()).unwrap()); - // for facet_prefix in req.get_facet_prefixes() { - // facet_collector.add_facet(facet_prefix); - // } - // let facet_handle = multi_collector.add_collector(facet_collector); - - // // multi field facet - // let mut facet_data: HashMap<&str, Vec> = HashMap::new(); - // for f in req.get_facets() { - // let mut parts = f.split(':'); - // let field_name = parts.next().unwrap(); - // let field_value = parts.next().unwrap(); - // let mut field_values: Vec = Vec::new(); - // if facet_data.contains_key(field_name) { - // field_values = facet_data.get(field_name).unwrap().to_vec(); - // } - // field_values.push(field_value.to_string()); - // facet_data.insert(field_name, field_values); - // } - // debug!("facet_data: {:?}", facet_data); - // let mut facet_handles = HashMap::new(); - // for field_name in facet_data.keys() { - // let field = schema.get_field(*field_name).unwrap(); - // let mut facet_collector = FacetCollector::for_field(field); - // for field_value in facet_data.get(*field_name).unwrap() { - // facet_collector.add_facet(field_value); - // } - // let facet_handle = multi_collector.add_collector(facet_collector); - // facet_handles.insert(*field_name, facet_handle); - // } - // search index let mut multi_fruit = searcher.search(&query, &multi_collector).unwrap(); @@ -720,23 +747,6 @@ impl IndexService for IndexServer { facet.insert(req.get_facet_field().to_string(), facet_kv); } - // // single field facet - // let facet_counts = facet_handle.extract(&mut multi_fruit); - // for facet_prefix in req.get_facet_prefixes() { - // for (facet_value, facet_count) in facet_counts.get(facet_prefix) { - // debug!("{:?}={}", facet_value.to_string(), facet_count); - // } - // } - - // // multi field facet - // for field_name in facet_handles.keys() { - // let facet_counts = facet_handles.get(*field_name).unwrap().extract(&mut multi_fruit); - // for facet_value in facet_data.get(*field_name).unwrap().to_vec() { - // debug!("facet_value: {}", facet_value); - // let facet_count = facet_counts.get(&facet_value); - // } - // } - let mut docs: Vec = Vec::new(); let mut doc_pos: u64 = 0; for (score, doc_address) in top_docs { @@ -763,6 +773,9 @@ impl IndexService for IndexServer { let mut resp = SearchResp::new(); resp.set_err(RespErr::OK); resp.set_value(serde_json::to_string(&sr).unwrap()); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), @@ -770,6 +783,8 @@ impl IndexService for IndexServer { } fn schema(&mut self, ctx: RpcContext, req: SchemaReq, sink: UnarySink) { + debug!("request: {:?}", req); + self.metrics.lock().unwrap().inc_request_count("schema"); let mut resp = SchemaResp::new(); @@ -778,9 +793,12 @@ impl IndexService for IndexServer { "{}", serde_json::to_string(&self.index.schema()).unwrap() )); + + debug!("response: {:?}", resp); + ctx.spawn( sink.success(resp) .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), - ) + ); } }