diff --git a/proto/indexpb.proto b/proto/indexpb.proto index cd75c2c..37a5091 100644 --- a/proto/indexpb.proto +++ b/proto/indexpb.proto @@ -23,6 +23,8 @@ service Index { } rpc Rollback (indexrpcpb.ApplyReq) returns (indexrpcpb.RollbackResp) { } + rpc Merge (indexrpcpb.ApplyReq) returns (indexrpcpb.MergeResp) { + } rpc Search (indexrpcpb.SearchReq) returns (indexrpcpb.SearchResp) { } rpc Schema (indexrpcpb.SchemaReq) returns (indexrpcpb.SchemaResp) { diff --git a/proto/indexrpcpb.proto b/proto/indexrpcpb.proto index 07e361d..8b81f10 100644 --- a/proto/indexrpcpb.proto +++ b/proto/indexrpcpb.proto @@ -16,6 +16,7 @@ enum ReqType { Delete = 3; Commit = 4; Rollback = 5; + Merge = 6; } message ApplyReq { @@ -27,6 +28,7 @@ message ApplyReq { DeleteReq delete_req = 6; CommitReq commit_req = 7; RollbackReq rollback_req = 8; + MergeReq merge_req = 9; } message ConfChangeReq { @@ -121,6 +123,15 @@ message RollbackResp { RespErr err = 1; } +message MergeReq { + uint64 client_id = 1; + uint64 seq = 2; +} + +message MergeResp { + RespErr err = 1; +} + message SearchReq { uint64 client_id = 1; uint64 seq = 2; diff --git a/src/client/client.rs b/src/client/client.rs index 2a06deb..cb64a1e 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -9,8 +9,8 @@ use raft::eraftpb::{ConfChange, ConfChangeType}; use crate::proto::indexpb_grpc::IndexClient; use crate::proto::indexrpcpb::{ ApplyReq, CommitReq, CommitResp, ConfChangeReq, DeleteReq, DeleteResp, GetReq, GetResp, - MetricsReq, MetricsResp, PeersReq, PeersResp, PutReq, PutResp, RaftDone, ReqType, RespErr, - RollbackReq, RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, + MergeReq, MergeResp, MetricsReq, MetricsResp, PeersReq, PeersResp, PutReq, PutResp, RaftDone, + ReqType, RespErr, RollbackReq, RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, }; pub fn create_client(addr: &str) -> IndexClient { @@ -287,6 +287,36 @@ impl Clerk { } } + pub fn merge(&mut self) { + let mut merge_req = MergeReq::new(); + merge_req.set_client_id(self.client_id); + merge_req.set_seq(self.request_seq); + + let mut req = ApplyReq::new(); + req.set_client_id(self.client_id); + req.set_req_type(ReqType::Merge); + req.set_merge_req(merge_req); + + self.request_seq += 1; + + loop { + let reply = self.servers[self.leader_id] + .merge(&req) + .unwrap_or_else(|_e| { + let mut resp = MergeResp::new(); + resp.set_err(RespErr::ErrWrongLeader); + resp + }); + match reply.err { + RespErr::OK => return, + RespErr::ErrWrongLeader => (), + RespErr::ErrNoKey => return, + } + self.leader_id = (self.leader_id + 1) % self.servers.len(); + thread::sleep(Duration::from_millis(100)); + } + } + pub fn search(&mut self, query: &str) -> String { let mut req = SearchReq::new(); req.set_client_id(self.client_id); diff --git a/src/cmd.rs b/src/cmd.rs index c5f833e..e4b94f2 100644 --- a/src/cmd.rs +++ b/src/cmd.rs @@ -2,6 +2,7 @@ pub mod commit; pub mod delete; pub mod get; pub mod leave; +pub mod merge; pub mod metrics; pub mod peers; pub mod rollback; diff --git a/src/cmd/merge.rs b/src/cmd/merge.rs new file mode 100644 index 0000000..a69fbe5 --- /dev/null +++ b/src/cmd/merge.rs @@ -0,0 +1,21 @@ +use clap::ArgMatches; + +use crate::client::client::{create_client, Clerk}; +use crate::util::log::set_logger; + +pub fn run_merge_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); + client.merge(); + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index fc736b7..0423bd1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ use bayard::cmd::commit::run_commit_cli; use bayard::cmd::delete::run_delete_cli; use bayard::cmd::get::run_get_cli; 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::rollback::run_rollback_cli; @@ -304,6 +305,27 @@ fn main() { .takes_value(true), ) ) + .subcommand( + SubCommand::with_name("merge") + .name("merge") + .setting(AppSettings::DeriveDisplayOrder) + .version(crate_version!()) + .author(crate_authors!()) + .about("Merge index") + .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("search") .name("search") @@ -353,30 +375,6 @@ fn main() { .takes_value(true), ) ) -// .subcommand( -// SubCommand::with_name("version") -// .name("version") -// .setting(AppSettings::DeriveDisplayOrder) -// .version(crate_version!()) -// .author(crate_authors!()) -// .about("Show remote server version") -// .arg( -// Arg::with_name("HOST") -// .help("The node address") -// .short("H") -// .long("host") -// .default_value("0.0.0.0") -// .takes_value(true), -// ) -// .arg( -// Arg::with_name("CLIENT_PORT") -// .help("The gRPC listen port for client connection") -// .short("c") -// .long("client-port") -// .default_value("5000") -// .takes_value(true), -// ) -// ) .get_matches(); let (subcommand, some_options) = app.subcommand(); @@ -391,9 +389,9 @@ fn main() { "delete" => run_delete_cli, "commit" => run_commit_cli, "rollback" => run_rollback_cli, + "merge" => run_merge_cli, "search" => run_search_cli, "schema" => run_schema_cli, - // "version" => run_version_cli, _ => panic!("Subcommand {} is unknown", subcommand), }; diff --git a/src/proto/indexpb.rs b/src/proto/indexpb.rs index e917a78..cb2bb33 100644 --- a/src/proto/indexpb.rs +++ b/src/proto/indexpb.rs @@ -28,7 +28,7 @@ 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\x82\x05\n\x05Index\x120\n\x04Raft\x12\x10.eraftpb.Message\x1a\x14.i\ + oto2\xba\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.\ @@ -38,15 +38,16 @@ static file_descriptor_proto_data: &'static [u8] = b"\ 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\x129\n\x06Search\x12\x15.indexrpcpb.SearchReq\x1a\x16.inde\ - xrpcpb.SearchResp\"\0\x129\n\x06Schema\x12\x15.indexrpcpb.SchemaReq\x1a\ - \x16.indexrpcpb.SchemaResp\"\0J\xb2\x05\n\x06\x12\x04\0\0\x1d\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\x1d\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\ + 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\ + \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\ + \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\ \x04\t\x04\n\x05\n\x0c\n\x05\x06\0\x02\x01\x01\x12\x03\t\x08\x16\n\x0c\n\ \x05\x06\0\x02\x01\x02\x12\x03\t\x180\n\x0c\n\x05\x06\0\x02\x01\x03\x12\ \x03\t;N\n\x0c\n\x04\x06\0\x02\x02\x12\x04\x0b\x04\x0c\x05\n\x0c\n\x05\ @@ -69,11 +70,13 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \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\ \x04\x06\0\x02\t\x12\x04\x19\x04\x1a\x05\n\x0c\n\x05\x06\0\x02\t\x01\x12\ - \x03\x19\x08\x0e\n\x0c\n\x05\x06\0\x02\t\x02\x12\x03\x19\x10$\n\x0c\n\ - \x05\x06\0\x02\t\x03\x12\x03\x19/D\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/Db\x06proto3\ + \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\ "; 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 e3bf3cc..0d99b46 100644 --- a/src/proto/indexpb_grpc.rs +++ b/src/proto/indexpb_grpc.rs @@ -81,6 +81,13 @@ const METHOD_INDEX_ROLLBACK: ::grpcio::Method = ::grpcio::Method { + ty: ::grpcio::MethodType::Unary, + name: "/indexpb.Index/Merge", + 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_SEARCH: ::grpcio::Method = ::grpcio::Method { ty: ::grpcio::MethodType::Unary, name: "/indexpb.Index/Search", @@ -251,6 +258,22 @@ impl IndexClient { self.rollback_async_opt(req, ::grpcio::CallOption::default()) } + pub fn merge_opt(&self, req: &super::indexrpcpb::ApplyReq, opt: ::grpcio::CallOption) -> ::grpcio::Result { + self.client.unary_call(&METHOD_INDEX_MERGE, req, opt) + } + + pub fn merge(&self, req: &super::indexrpcpb::ApplyReq) -> ::grpcio::Result { + self.merge_opt(req, ::grpcio::CallOption::default()) + } + + pub fn merge_async_opt(&self, req: &super::indexrpcpb::ApplyReq, opt: ::grpcio::CallOption) -> ::grpcio::Result<::grpcio::ClientUnaryReceiver> { + self.client.unary_call_async(&METHOD_INDEX_MERGE, req, opt) + } + + pub fn merge_async(&self, req: &super::indexrpcpb::ApplyReq) -> ::grpcio::Result<::grpcio::ClientUnaryReceiver> { + self.merge_async_opt(req, ::grpcio::CallOption::default()) + } + pub fn search_opt(&self, req: &super::indexrpcpb::SearchReq, opt: ::grpcio::CallOption) -> ::grpcio::Result { self.client.unary_call(&METHOD_INDEX_SEARCH, req, opt) } @@ -297,6 +320,7 @@ pub trait Index { fn delete(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ApplyReq, sink: ::grpcio::UnarySink); fn commit(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ApplyReq, sink: ::grpcio::UnarySink); fn rollback(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ApplyReq, sink: ::grpcio::UnarySink); + fn merge(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ApplyReq, sink: ::grpcio::UnarySink); fn search(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::SearchReq, sink: ::grpcio::UnarySink); fn schema(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::SchemaReq, sink: ::grpcio::UnarySink); } @@ -340,6 +364,10 @@ pub fn create_index(s: S) -> ::grpcio::Servic instance.rollback(ctx, req, resp) }); let mut instance = s.clone(); + builder = builder.add_unary_handler(&METHOD_INDEX_MERGE, move |ctx, req, resp| { + instance.merge(ctx, req, resp) + }); + let mut instance = s.clone(); builder = builder.add_unary_handler(&METHOD_INDEX_SEARCH, move |ctx, req, resp| { instance.search(ctx, req, resp) }); diff --git a/src/proto/indexrpcpb.rs b/src/proto/indexrpcpb.rs index 55a2aad..2ff3538 100644 --- a/src/proto/indexrpcpb.rs +++ b/src/proto/indexrpcpb.rs @@ -37,6 +37,7 @@ pub struct ApplyReq { pub delete_req: ::protobuf::SingularPtrField, pub commit_req: ::protobuf::SingularPtrField, pub rollback_req: ::protobuf::SingularPtrField, + pub merge_req: ::protobuf::SingularPtrField, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -280,6 +281,39 @@ impl ApplyReq { pub fn take_rollback_req(&mut self) -> RollbackReq { self.rollback_req.take().unwrap_or_else(|| RollbackReq::new()) } + + // .indexrpcpb.MergeReq merge_req = 9; + + + pub fn get_merge_req(&self) -> &MergeReq { + self.merge_req.as_ref().unwrap_or_else(|| MergeReq::default_instance()) + } + pub fn clear_merge_req(&mut self) { + self.merge_req.clear(); + } + + pub fn has_merge_req(&self) -> bool { + self.merge_req.is_some() + } + + // Param is passed by value, moved + pub fn set_merge_req(&mut self, v: MergeReq) { + self.merge_req = ::protobuf::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_merge_req(&mut self) -> &mut MergeReq { + if self.merge_req.is_none() { + self.merge_req.set_default(); + } + self.merge_req.as_mut().unwrap() + } + + // Take field + pub fn take_merge_req(&mut self) -> MergeReq { + self.merge_req.take().unwrap_or_else(|| MergeReq::new()) + } } impl ::protobuf::Message for ApplyReq { @@ -314,6 +348,11 @@ impl ::protobuf::Message for ApplyReq { return false; } }; + for v in &self.merge_req { + if !v.is_initialized() { + return false; + } + }; true } @@ -349,6 +388,9 @@ impl ::protobuf::Message for ApplyReq { 8 => { ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.rollback_req)?; }, + 9 => { + ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.merge_req)?; + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -391,6 +433,10 @@ impl ::protobuf::Message for ApplyReq { let len = v.compute_size(); my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; } + if let Some(ref v) = self.merge_req.as_ref() { + let len = v.compute_size(); + my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; + } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size @@ -433,6 +479,11 @@ impl ::protobuf::Message for ApplyReq { os.write_raw_varint32(v.get_cached_size())?; v.write_to_with_cached_sizes(os)?; } + if let Some(ref v) = self.merge_req.as_ref() { + os.write_tag(9, ::protobuf::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -515,6 +566,11 @@ impl ::protobuf::Message for ApplyReq { |m: &ApplyReq| { &m.rollback_req }, |m: &mut ApplyReq| { &mut m.rollback_req }, )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "merge_req", + |m: &ApplyReq| { &m.merge_req }, + |m: &mut ApplyReq| { &mut m.merge_req }, + )); ::protobuf::reflect::MessageDescriptor::new::( "ApplyReq", fields, @@ -545,6 +601,7 @@ impl ::protobuf::Clear for ApplyReq { self.delete_req.clear(); self.commit_req.clear(); self.rollback_req.clear(); + self.merge_req.clear(); self.unknown_fields.clear(); } } @@ -4237,6 +4294,361 @@ impl ::protobuf::reflect::ProtobufValue for RollbackResp { } } +#[derive(PartialEq,Clone,Default)] +pub struct MergeReq { + // 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 MergeReq { + fn default() -> &'a MergeReq { + ::default_instance() + } +} + +impl MergeReq { + pub fn new() -> MergeReq { + ::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 MergeReq { + 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() -> MergeReq { + MergeReq::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: &MergeReq| { &m.client_id }, + |m: &mut MergeReq| { &mut m.client_id }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( + "seq", + |m: &MergeReq| { &m.seq }, + |m: &mut MergeReq| { &mut m.seq }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "MergeReq", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static MergeReq { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const MergeReq, + }; + unsafe { + instance.get(MergeReq::new) + } + } +} + +impl ::protobuf::Clear for MergeReq { + fn clear(&mut self) { + self.client_id = 0; + self.seq = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for MergeReq { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for MergeReq { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +pub struct MergeResp { + // message fields + pub err: RespErr, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a MergeResp { + fn default() -> &'a MergeResp { + ::default_instance() + } +} + +impl MergeResp { + pub fn new() -> MergeResp { + ::std::default::Default::default() + } + + // .indexrpcpb.RespErr err = 1; + + + 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 MergeResp { + 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_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.err, 1, &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.err != RespErr::OK { + my_size += ::protobuf::rt::enum_size(1, 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.err != RespErr::OK { + os.write_enum(1, 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() -> MergeResp { + MergeResp::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::ProtobufTypeEnum>( + "err", + |m: &MergeResp| { &m.err }, + |m: &mut MergeResp| { &mut m.err }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "MergeResp", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static MergeResp { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const MergeResp, + }; + unsafe { + instance.get(MergeResp::new) + } + } +} + +impl ::protobuf::Clear for MergeResp { + fn clear(&mut self) { + self.err = RespErr::OK; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for MergeResp { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for MergeResp { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + #[derive(PartialEq,Clone,Default)] pub struct SearchReq { // message fields @@ -5139,6 +5551,7 @@ pub enum ReqType { Delete = 3, Commit = 4, Rollback = 5, + Merge = 6, } impl ::protobuf::ProtobufEnum for ReqType { @@ -5154,6 +5567,7 @@ impl ::protobuf::ProtobufEnum for ReqType { 3 => ::std::option::Option::Some(ReqType::Delete), 4 => ::std::option::Option::Some(ReqType::Commit), 5 => ::std::option::Option::Some(ReqType::Rollback), + 6 => ::std::option::Option::Some(ReqType::Merge), _ => ::std::option::Option::None } } @@ -5166,6 +5580,7 @@ impl ::protobuf::ProtobufEnum for ReqType { ReqType::Delete, ReqType::Commit, ReqType::Rollback, + ReqType::Merge, ]; values } @@ -5199,7 +5614,7 @@ impl ::protobuf::reflect::ProtobufValue for ReqType { } static file_descriptor_proto_data: &'static [u8] = b"\ - \n\x10indexrpcpb.proto\x12\nindexrpcpb\x1a\reraftpb.proto\"\x8f\x03\n\ + \n\x10indexrpcpb.proto\x12\nindexrpcpb\x1a\reraftpb.proto\"\xc2\x03\n\ \x08ApplyReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12.\ \n\x08req_type\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.ReqTypeR\x07reqType\ \x12.\n\x08join_req\x18\x03\x20\x01(\x0b2\x13.indexrpcpb.JoinReqR\x07joi\ @@ -5208,15 +5623,16 @@ static file_descriptor_proto_data: &'static [u8] = b"\ eqR\x06putReq\x124\n\ndelete_req\x18\x06\x20\x01(\x0b2\x15.indexrpcpb.De\ leteReqR\tdeleteReq\x124\n\ncommit_req\x18\x07\x20\x01(\x0b2\x15.indexrp\ cpb.CommitReqR\tcommitReq\x12:\n\x0crollback_req\x18\x08\x20\x01(\x0b2\ - \x17.indexrpcpb.RollbackReqR\x0brollbackReq\"X\n\rConfChangeReq\x12#\n\ - \x02cc\x18\x01\x20\x01(\x0b2\x13.eraftpb.ConfChangeR\x02cc\x12\x0e\n\x02\ - ip\x18\x02\x20\x01(\tR\x02ip\x12\x12\n\x04port\x18\x03\x20\x01(\rR\x04po\ - rt\"1\n\x08RaftDone\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.R\ - espErrR\x03err\"\\\n\x07JoinReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\ - \x04R\x08clientId\x12\x17\n\x07peer_id\x18\x02\x20\x01(\x04R\x06peerId\ - \x12\x1b\n\tpeer_addr\x18\x03\x20\x01(\tR\x08peerAddr\"]\n\x08LeaveReq\ - \x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x17\n\x07pee\ - r_id\x18\x02\x20\x01(\x04R\x06peerId\x12\x1b\n\tpeer_addr\x18\x03\x20\ + \x17.indexrpcpb.RollbackReqR\x0brollbackReq\x121\n\tmerge_req\x18\t\x20\ + \x01(\x0b2\x14.indexrpcpb.MergeReqR\x08mergeReq\"X\n\rConfChangeReq\x12#\ + \n\x02cc\x18\x01\x20\x01(\x0b2\x13.eraftpb.ConfChangeR\x02cc\x12\x0e\n\ + \x02ip\x18\x02\x20\x01(\tR\x02ip\x12\x12\n\x04port\x18\x03\x20\x01(\rR\ + \x04port\"1\n\x08RaftDone\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexr\ + pcpb.RespErrR\x03err\"\\\n\x07JoinReq\x12\x1b\n\tclient_id\x18\x01\x20\ + \x01(\x04R\x08clientId\x12\x17\n\x07peer_id\x18\x02\x20\x01(\x04R\x06pee\ + 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(\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\ @@ -5241,234 +5657,235 @@ static file_descriptor_proto_data: &'static [u8] = b"\ 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\"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.Res\ - pErrR\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\nSchemaR\ - esp\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*M\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\x05J\xa8&\n\x07\x12\x05\0\0\x8e\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\ - \x12\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\n\n\x02\x04\0\x12\x04\x14\0\x1d\x01\n\n\n\x03\x04\0\x01\ - \x12\x03\x14\x08\x10\n\x0b\n\x04\x04\0\x02\0\x12\x03\x15\x04\x19\n\r\n\ - \x05\x04\0\x02\0\x04\x12\x04\x15\x04\x14\x12\n\x0c\n\x05\x04\0\x02\0\x05\ - \x12\x03\x15\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x15\x0b\x14\n\x0c\ - \n\x05\x04\0\x02\0\x03\x12\x03\x15\x17\x18\n\x0b\n\x04\x04\0\x02\x01\x12\ - \x03\x16\x04\x19\n\r\n\x05\x04\0\x02\x01\x04\x12\x04\x16\x04\x15\x19\n\ - \x0c\n\x05\x04\0\x02\x01\x06\x12\x03\x16\x04\x0b\n\x0c\n\x05\x04\0\x02\ - \x01\x01\x12\x03\x16\x0c\x14\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x16\ - \x17\x18\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x17\x04\x19\n\r\n\x05\x04\0\ - \x02\x02\x04\x12\x04\x17\x04\x16\x19\n\x0c\n\x05\x04\0\x02\x02\x06\x12\ - \x03\x17\x04\x0b\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x17\x0c\x14\n\x0c\ - \n\x05\x04\0\x02\x02\x03\x12\x03\x17\x17\x18\n\x0b\n\x04\x04\0\x02\x03\ - \x12\x03\x18\x04\x1b\n\r\n\x05\x04\0\x02\x03\x04\x12\x04\x18\x04\x17\x19\ - \n\x0c\n\x05\x04\0\x02\x03\x06\x12\x03\x18\x04\x0c\n\x0c\n\x05\x04\0\x02\ - \x03\x01\x12\x03\x18\r\x16\n\x0c\n\x05\x04\0\x02\x03\x03\x12\x03\x18\x19\ - \x1a\n\x0b\n\x04\x04\0\x02\x04\x12\x03\x19\x04\x17\n\r\n\x05\x04\0\x02\ - \x04\x04\x12\x04\x19\x04\x18\x1b\n\x0c\n\x05\x04\0\x02\x04\x06\x12\x03\ - \x19\x04\n\n\x0c\n\x05\x04\0\x02\x04\x01\x12\x03\x19\x0b\x12\n\x0c\n\x05\ - \x04\0\x02\x04\x03\x12\x03\x19\x15\x16\n\x0b\n\x04\x04\0\x02\x05\x12\x03\ - \x1a\x04\x1d\n\r\n\x05\x04\0\x02\x05\x04\x12\x04\x1a\x04\x19\x17\n\x0c\n\ - \x05\x04\0\x02\x05\x06\x12\x03\x1a\x04\r\n\x0c\n\x05\x04\0\x02\x05\x01\ - \x12\x03\x1a\x0e\x18\n\x0c\n\x05\x04\0\x02\x05\x03\x12\x03\x1a\x1b\x1c\n\ - \x0b\n\x04\x04\0\x02\x06\x12\x03\x1b\x04\x1d\n\r\n\x05\x04\0\x02\x06\x04\ - \x12\x04\x1b\x04\x1a\x1d\n\x0c\n\x05\x04\0\x02\x06\x06\x12\x03\x1b\x04\r\ - \n\x0c\n\x05\x04\0\x02\x06\x01\x12\x03\x1b\x0e\x18\n\x0c\n\x05\x04\0\x02\ - \x06\x03\x12\x03\x1b\x1b\x1c\n\x0b\n\x04\x04\0\x02\x07\x12\x03\x1c\x04!\ - \n\r\n\x05\x04\0\x02\x07\x04\x12\x04\x1c\x04\x1b\x1d\n\x0c\n\x05\x04\0\ - \x02\x07\x06\x12\x03\x1c\x04\x0f\n\x0c\n\x05\x04\0\x02\x07\x01\x12\x03\ - \x1c\x10\x1c\n\x0c\n\x05\x04\0\x02\x07\x03\x12\x03\x1c\x1f\x20\n\n\n\x02\ - \x04\x01\x12\x04\x1f\0#\x01\n\n\n\x03\x04\x01\x01\x12\x03\x1f\x08\x15\n\ - \x0b\n\x04\x04\x01\x02\0\x12\x03\x20\x04\x1e\n\r\n\x05\x04\x01\x02\0\x04\ - \x12\x04\x20\x04\x1f\x17\n\x0c\n\x05\x04\x01\x02\0\x06\x12\x03\x20\x04\ - \x16\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x20\x17\x19\n\x0c\n\x05\x04\ - \x01\x02\0\x03\x12\x03\x20\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\x20\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\x04/\03\x01\ - \n\n\n\x03\x04\x04\x01\x12\x03/\x08\x10\n\x0b\n\x04\x04\x04\x02\0\x12\ - \x030\x04\x19\n\r\n\x05\x04\x04\x02\0\x04\x12\x040\x04/\x12\n\x0c\n\x05\ - \x04\x04\x02\0\x05\x12\x030\x04\n\n\x0c\n\x05\x04\x04\x02\0\x01\x12\x030\ - \x0b\x14\n\x0c\n\x05\x04\x04\x02\0\x03\x12\x030\x17\x18\n\x0b\n\x04\x04\ - \x04\x02\x01\x12\x031\x04\x17\n\r\n\x05\x04\x04\x02\x01\x04\x12\x041\x04\ - 0\x19\n\x0c\n\x05\x04\x04\x02\x01\x05\x12\x031\x04\n\n\x0c\n\x05\x04\x04\ - \x02\x01\x01\x12\x031\x0b\x12\n\x0c\n\x05\x04\x04\x02\x01\x03\x12\x031\ - \x15\x16\n\x0b\n\x04\x04\x04\x02\x02\x12\x032\x04\x19\n\r\n\x05\x04\x04\ - \x02\x02\x04\x12\x042\x041\x17\n\x0c\n\x05\x04\x04\x02\x02\x05\x12\x032\ - \x04\n\n\x0c\n\x05\x04\x04\x02\x02\x01\x12\x032\x0b\x14\n\x0c\n\x05\x04\ - \x04\x02\x02\x03\x12\x032\x17\x18\n\n\n\x02\x04\x05\x12\x045\08\x01\n\n\ - \n\x03\x04\x05\x01\x12\x035\x08\x10\n\x0b\n\x04\x04\x05\x02\0\x12\x036\ - \x04\x19\n\r\n\x05\x04\x05\x02\0\x04\x12\x046\x045\x12\n\x0c\n\x05\x04\ - \x05\x02\0\x05\x12\x036\x04\n\n\x0c\n\x05\x04\x05\x02\0\x01\x12\x036\x0b\ - \x14\n\x0c\n\x05\x04\x05\x02\0\x03\x12\x036\x17\x18\n\x0b\n\x04\x04\x05\ - \x02\x01\x12\x037\x04\x13\n\r\n\x05\x04\x05\x02\x01\x04\x12\x047\x046\ - \x19\n\x0c\n\x05\x04\x05\x02\x01\x05\x12\x037\x04\n\n\x0c\n\x05\x04\x05\ - \x02\x01\x01\x12\x037\x0b\x0e\n\x0c\n\x05\x04\x05\x02\x01\x03\x12\x037\ - \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\x04?\0B\x01\n\n\n\x03\x04\x07\x01\x12\x03?\x08\x12\n\x0b\n\x04\x04\ - \x07\x02\0\x12\x03@\x04\x19\n\r\n\x05\x04\x07\x02\0\x04\x12\x04@\x04?\ - \x14\n\x0c\n\x05\x04\x07\x02\0\x05\x12\x03@\x04\n\n\x0c\n\x05\x04\x07\ - \x02\0\x01\x12\x03@\x0b\x14\n\x0c\n\x05\x04\x07\x02\0\x03\x12\x03@\x17\ - \x18\n\x0b\n\x04\x04\x07\x02\x01\x12\x03A\x04\x13\n\r\n\x05\x04\x07\x02\ - \x01\x04\x12\x04A\x04@\x19\n\x0c\n\x05\x04\x07\x02\x01\x05\x12\x03A\x04\ - \n\n\x0c\n\x05\x04\x07\x02\x01\x01\x12\x03A\x0b\x0e\n\x0c\n\x05\x04\x07\ - \x02\x01\x03\x12\x03A\x11\x12\n\n\n\x02\x04\x08\x12\x04D\0G\x01\n\n\n\ - \x03\x04\x08\x01\x12\x03D\x08\x13\n\x0b\n\x04\x04\x08\x02\0\x12\x03E\x04\ - \x15\n\r\n\x05\x04\x08\x02\0\x04\x12\x04E\x04D\x15\n\x0c\n\x05\x04\x08\ - \x02\0\x05\x12\x03E\x04\n\n\x0c\n\x05\x04\x08\x02\0\x01\x12\x03E\x0b\x10\ - \n\x0c\n\x05\x04\x08\x02\0\x03\x12\x03E\x13\x14\n\x0b\n\x04\x04\x08\x02\ - \x01\x12\x03F\x04\x14\n\r\n\x05\x04\x08\x02\x01\x04\x12\x04F\x04E\x15\n\ - \x0c\n\x05\x04\x08\x02\x01\x06\x12\x03F\x04\x0b\n\x0c\n\x05\x04\x08\x02\ - \x01\x01\x12\x03F\x0c\x0f\n\x0c\n\x05\x04\x08\x02\x01\x03\x12\x03F\x12\ - \x13\n\n\n\x02\x04\t\x12\x04I\0M\x01\n\n\n\x03\x04\t\x01\x12\x03I\x08\ - \x0e\n\x0b\n\x04\x04\t\x02\0\x12\x03J\x04\x19\n\r\n\x05\x04\t\x02\0\x04\ - \x12\x04J\x04I\x10\n\x0c\n\x05\x04\t\x02\0\x05\x12\x03J\x04\n\n\x0c\n\ - \x05\x04\t\x02\0\x01\x12\x03J\x0b\x14\n\x0c\n\x05\x04\t\x02\0\x03\x12\ - \x03J\x17\x18\n\x0b\n\x04\x04\t\x02\x01\x12\x03K\x04\x13\n\r\n\x05\x04\t\ - \x02\x01\x04\x12\x04K\x04J\x19\n\x0c\n\x05\x04\t\x02\x01\x05\x12\x03K\ - \x04\n\n\x0c\n\x05\x04\t\x02\x01\x01\x12\x03K\x0b\x0e\n\x0c\n\x05\x04\t\ - \x02\x01\x03\x12\x03K\x11\x12\n\x0b\n\x04\x04\t\x02\x02\x12\x03L\x04\x16\ - \n\r\n\x05\x04\t\x02\x02\x04\x12\x04L\x04K\x13\n\x0c\n\x05\x04\t\x02\x02\ - \x05\x12\x03L\x04\n\n\x0c\n\x05\x04\t\x02\x02\x01\x12\x03L\x0b\x11\n\x0c\ - \n\x05\x04\t\x02\x02\x03\x12\x03L\x14\x15\n\n\n\x02\x04\n\x12\x04O\0R\ - \x01\n\n\n\x03\x04\n\x01\x12\x03O\x08\x0f\n\x0b\n\x04\x04\n\x02\0\x12\ - \x03P\x04\x15\n\r\n\x05\x04\n\x02\0\x04\x12\x04P\x04O\x11\n\x0c\n\x05\ - \x04\n\x02\0\x05\x12\x03P\x04\n\n\x0c\n\x05\x04\n\x02\0\x01\x12\x03P\x0b\ - \x10\n\x0c\n\x05\x04\n\x02\0\x03\x12\x03P\x13\x14\n\x0b\n\x04\x04\n\x02\ - \x01\x12\x03Q\x04\x14\n\r\n\x05\x04\n\x02\x01\x04\x12\x04Q\x04P\x15\n\ - \x0c\n\x05\x04\n\x02\x01\x06\x12\x03Q\x04\x0b\n\x0c\n\x05\x04\n\x02\x01\ - \x01\x12\x03Q\x0c\x0f\n\x0c\n\x05\x04\n\x02\x01\x03\x12\x03Q\x12\x13\n\n\ - \n\x02\x04\x0b\x12\x04T\0Y\x01\n\n\n\x03\x04\x0b\x01\x12\x03T\x08\x0e\n\ - \x0b\n\x04\x04\x0b\x02\0\x12\x03U\x04\x19\n\r\n\x05\x04\x0b\x02\0\x04\ - \x12\x04U\x04T\x10\n\x0c\n\x05\x04\x0b\x02\0\x05\x12\x03U\x04\n\n\x0c\n\ - \x05\x04\x0b\x02\0\x01\x12\x03U\x0b\x14\n\x0c\n\x05\x04\x0b\x02\0\x03\ - \x12\x03U\x17\x18\n\x0b\n\x04\x04\x0b\x02\x01\x12\x03V\x04\x13\n\r\n\x05\ - \x04\x0b\x02\x01\x04\x12\x04V\x04U\x19\n\x0c\n\x05\x04\x0b\x02\x01\x05\ - \x12\x03V\x04\n\n\x0c\n\x05\x04\x0b\x02\x01\x01\x12\x03V\x0b\x0e\n\x0c\n\ - \x05\x04\x0b\x02\x01\x03\x12\x03V\x11\x12\n\x0b\n\x04\x04\x0b\x02\x02\ - \x12\x03W\x04\x16\n\r\n\x05\x04\x0b\x02\x02\x04\x12\x04W\x04V\x13\n\x0c\ - \n\x05\x04\x0b\x02\x02\x05\x12\x03W\x04\n\n\x0c\n\x05\x04\x0b\x02\x02\ - \x01\x12\x03W\x0b\x11\n\x0c\n\x05\x04\x0b\x02\x02\x03\x12\x03W\x14\x15\n\ - \x0b\n\x04\x04\x0b\x02\x03\x12\x03X\x04\x16\n\r\n\x05\x04\x0b\x02\x03\ - \x04\x12\x04X\x04W\x16\n\x0c\n\x05\x04\x0b\x02\x03\x05\x12\x03X\x04\n\n\ - \x0c\n\x05\x04\x0b\x02\x03\x01\x12\x03X\x0b\x11\n\x0c\n\x05\x04\x0b\x02\ - \x03\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\ - \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\ - \x04_\0c\x01\n\n\n\x03\x04\r\x01\x12\x03_\x08\x11\n\x0b\n\x04\x04\r\x02\ - \0\x12\x03`\x04\x19\n\r\n\x05\x04\r\x02\0\x04\x12\x04`\x04_\x13\n\x0c\n\ - \x05\x04\r\x02\0\x05\x12\x03`\x04\n\n\x0c\n\x05\x04\r\x02\0\x01\x12\x03`\ - \x0b\x14\n\x0c\n\x05\x04\r\x02\0\x03\x12\x03`\x17\x18\n\x0b\n\x04\x04\r\ - \x02\x01\x12\x03a\x04\x13\n\r\n\x05\x04\r\x02\x01\x04\x12\x04a\x04`\x19\ - \n\x0c\n\x05\x04\r\x02\x01\x05\x12\x03a\x04\n\n\x0c\n\x05\x04\r\x02\x01\ - \x01\x12\x03a\x0b\x0e\n\x0c\n\x05\x04\r\x02\x01\x03\x12\x03a\x11\x12\n\ - \x0b\n\x04\x04\r\x02\x02\x12\x03b\x04\x16\n\r\n\x05\x04\r\x02\x02\x04\ - \x12\x04b\x04a\x13\n\x0c\n\x05\x04\r\x02\x02\x05\x12\x03b\x04\n\n\x0c\n\ - \x05\x04\r\x02\x02\x01\x12\x03b\x0b\x11\n\x0c\n\x05\x04\r\x02\x02\x03\ - \x12\x03b\x14\x15\n\n\n\x02\x04\x0e\x12\x04e\0g\x01\n\n\n\x03\x04\x0e\ - \x01\x12\x03e\x08\x12\n\x0b\n\x04\x04\x0e\x02\0\x12\x03f\x04\x14\n\r\n\ - \x05\x04\x0e\x02\0\x04\x12\x04f\x04e\x14\n\x0c\n\x05\x04\x0e\x02\0\x06\ - \x12\x03f\x04\x0b\n\x0c\n\x05\x04\x0e\x02\0\x01\x12\x03f\x0c\x0f\n\x0c\n\ - \x05\x04\x0e\x02\0\x03\x12\x03f\x12\x13\n\n\n\x02\x04\x0f\x12\x04i\0l\ - \x01\n\n\n\x03\x04\x0f\x01\x12\x03i\x08\x11\n\x0b\n\x04\x04\x0f\x02\0\ - \x12\x03j\x04\x19\n\r\n\x05\x04\x0f\x02\0\x04\x12\x04j\x04i\x13\n\x0c\n\ - \x05\x04\x0f\x02\0\x05\x12\x03j\x04\n\n\x0c\n\x05\x04\x0f\x02\0\x01\x12\ - \x03j\x0b\x14\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\x03j\x17\x18\n\x0b\n\x04\ - \x04\x0f\x02\x01\x12\x03k\x04\x13\n\r\n\x05\x04\x0f\x02\x01\x04\x12\x04k\ - \x04j\x19\n\x0c\n\x05\x04\x0f\x02\x01\x05\x12\x03k\x04\n\n\x0c\n\x05\x04\ - \x0f\x02\x01\x01\x12\x03k\x0b\x0e\n\x0c\n\x05\x04\x0f\x02\x01\x03\x12\ - \x03k\x11\x12\n\n\n\x02\x04\x10\x12\x04n\0p\x01\n\n\n\x03\x04\x10\x01\ - \x12\x03n\x08\x12\n\x0b\n\x04\x04\x10\x02\0\x12\x03o\x04\x14\n\r\n\x05\ - \x04\x10\x02\0\x04\x12\x04o\x04n\x14\n\x0c\n\x05\x04\x10\x02\0\x06\x12\ - \x03o\x04\x0b\n\x0c\n\x05\x04\x10\x02\0\x01\x12\x03o\x0c\x0f\n\x0c\n\x05\ - \x04\x10\x02\0\x03\x12\x03o\x12\x13\n\n\n\x02\x04\x11\x12\x04r\0u\x01\n\ - \n\n\x03\x04\x11\x01\x12\x03r\x08\x13\n\x0b\n\x04\x04\x11\x02\0\x12\x03s\ - \x04\x19\n\r\n\x05\x04\x11\x02\0\x04\x12\x04s\x04r\x15\n\x0c\n\x05\x04\ - \x11\x02\0\x05\x12\x03s\x04\n\n\x0c\n\x05\x04\x11\x02\0\x01\x12\x03s\x0b\ - \x14\n\x0c\n\x05\x04\x11\x02\0\x03\x12\x03s\x17\x18\n\x0b\n\x04\x04\x11\ - \x02\x01\x12\x03t\x04\x13\n\r\n\x05\x04\x11\x02\x01\x04\x12\x04t\x04s\ - \x19\n\x0c\n\x05\x04\x11\x02\x01\x05\x12\x03t\x04\n\n\x0c\n\x05\x04\x11\ - \x02\x01\x01\x12\x03t\x0b\x0e\n\x0c\n\x05\x04\x11\x02\x01\x03\x12\x03t\ - \x11\x12\n\n\n\x02\x04\x12\x12\x04w\0y\x01\n\n\n\x03\x04\x12\x01\x12\x03\ - w\x08\x14\n\x0b\n\x04\x04\x12\x02\0\x12\x03x\x04\x14\n\r\n\x05\x04\x12\ - \x02\0\x04\x12\x04x\x04w\x16\n\x0c\n\x05\x04\x12\x02\0\x06\x12\x03x\x04\ - \x0b\n\x0c\n\x05\x04\x12\x02\0\x01\x12\x03x\x0c\x0f\n\x0c\n\x05\x04\x12\ - \x02\0\x03\x12\x03x\x12\x13\n\n\n\x02\x04\x13\x12\x04{\0\x7f\x01\n\n\n\ - \x03\x04\x13\x01\x12\x03{\x08\x11\n\x0b\n\x04\x04\x13\x02\0\x12\x03|\x04\ - \x19\n\r\n\x05\x04\x13\x02\0\x04\x12\x04|\x04{\x13\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}\x04\x13\n\r\n\x05\x04\x13\x02\x01\x04\x12\x04}\x04|\x19\n\ - \x0c\n\x05\x04\x13\x02\x01\x05\x12\x03}\x04\n\n\x0c\n\x05\x04\x13\x02\ - \x01\x01\x12\x03}\x0b\x0e\n\x0c\n\x05\x04\x13\x02\x01\x03\x12\x03}\x11\ - \x12\n\x0b\n\x04\x04\x13\x02\x02\x12\x03~\x04\x15\n\r\n\x05\x04\x13\x02\ - \x02\x04\x12\x04~\x04}\x13\n\x0c\n\x05\x04\x13\x02\x02\x05\x12\x03~\x04\ - \n\n\x0c\n\x05\x04\x13\x02\x02\x01\x12\x03~\x0b\x10\n\x0c\n\x05\x04\x13\ - \x02\x02\x03\x12\x03~\x13\x14\n\x0c\n\x02\x04\x14\x12\x06\x81\x01\0\x84\ - \x01\x01\n\x0b\n\x03\x04\x14\x01\x12\x04\x81\x01\x08\x12\n\x0c\n\x04\x04\ - \x14\x02\0\x12\x04\x82\x01\x04\x15\n\x0f\n\x05\x04\x14\x02\0\x04\x12\x06\ - \x82\x01\x04\x81\x01\x14\n\r\n\x05\x04\x14\x02\0\x05\x12\x04\x82\x01\x04\ - \n\n\r\n\x05\x04\x14\x02\0\x01\x12\x04\x82\x01\x0b\x10\n\r\n\x05\x04\x14\ - \x02\0\x03\x12\x04\x82\x01\x13\x14\n\x0c\n\x04\x04\x14\x02\x01\x12\x04\ - \x83\x01\x04\x14\n\x0f\n\x05\x04\x14\x02\x01\x04\x12\x06\x83\x01\x04\x82\ - \x01\x15\n\r\n\x05\x04\x14\x02\x01\x06\x12\x04\x83\x01\x04\x0b\n\r\n\x05\ - \x04\x14\x02\x01\x01\x12\x04\x83\x01\x0c\x0f\n\r\n\x05\x04\x14\x02\x01\ - \x03\x12\x04\x83\x01\x12\x13\n\x0c\n\x02\x04\x15\x12\x06\x86\x01\0\x89\ + \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\ + \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\ @@ -5477,16 +5894,38 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \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\x02\x04\x16\x12\x06\x8b\x01\0\x8e\ - \x01\x01\n\x0b\n\x03\x04\x16\x01\x12\x04\x8b\x01\x08\x12\n\x0c\n\x04\x04\ - \x16\x02\0\x12\x04\x8c\x01\x04\x15\n\x0f\n\x05\x04\x16\x02\0\x04\x12\x06\ - \x8c\x01\x04\x8b\x01\x14\n\r\n\x05\x04\x16\x02\0\x05\x12\x04\x8c\x01\x04\ - \n\n\r\n\x05\x04\x16\x02\0\x01\x12\x04\x8c\x01\x0b\x10\n\r\n\x05\x04\x16\ - \x02\0\x03\x12\x04\x8c\x01\x13\x14\n\x0c\n\x04\x04\x16\x02\x01\x12\x04\ - \x8d\x01\x04\x14\n\x0f\n\x05\x04\x16\x02\x01\x04\x12\x06\x8d\x01\x04\x8c\ - \x01\x15\n\r\n\x05\x04\x16\x02\x01\x06\x12\x04\x8d\x01\x04\x0b\n\r\n\x05\ - \x04\x16\x02\x01\x01\x12\x04\x8d\x01\x0c\x0f\n\r\n\x05\x04\x16\x02\x01\ - \x03\x12\x04\x8d\x01\x12\x13b\x06proto3\ + \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\ "; 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 1c9cdd6..4e2f6de 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::mpsc::{self, Receiver, SyncSender}; use std::sync::{Arc, Mutex}; +use std::sync::mpsc::{self, Receiver, SyncSender}; use std::time::Duration; -use std::{fs, thread}; -use crossbeam_channel::{bounded, select, Receiver as CReceiver}; +use crossbeam_channel::{bounded, Receiver as CReceiver, select}; 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, Term}; -use crate::client::client::{create_client, Clerk}; +use crate::client::client::{Clerk, create_client}; use crate::proto::indexpb_grpc::{self, Index as IndexService, IndexClient}; use crate::proto::indexrpcpb::{ - ApplyReq, CommitResp, ConfChangeReq, DeleteResp, GetReq, GetResp, JoinReq, LeaveReq, + ApplyReq, CommitResp, ConfChangeReq, DeleteResp, GetReq, GetResp, JoinReq, LeaveReq, MergeResp, MetricsReq, MetricsResp, PeersReq, PeersResp, 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); @@ -360,6 +360,28 @@ impl IndexServer { } } } + ReqType::Merge => { + metrics.lock().unwrap().inc_request_count("merge"); + + let segments = index.searchable_segment_ids().unwrap(); + let segment_meta: SegmentMeta = index_writer + .lock() + .unwrap() + .merge(&segments) + .unwrap() + .wait() + .expect("merge failed"); + info!("merge finished with segment meta {:?}", segment_meta); + + index_writer + .lock() + .unwrap() + .garbage_collect_files() + .unwrap(); + info!("garbage collent irrelevant segments"); + + NotifyArgs(term, String::from(""), RespErr::OK) + } } } } @@ -525,6 +547,16 @@ impl IndexService for IndexServer { ) } + fn merge(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + let (err, _) = Self::start_op(self, &req); + let mut resp = MergeResp::new(); + resp.set_err(err); + ctx.spawn( + sink.success(resp) + .map_err(move |e| error!("failed to reply {:?}: {:?}", req, e)), + ) + } + fn search(&mut self, ctx: RpcContext, req: SearchReq, sink: UnarySink) { self.metrics.lock().unwrap().inc_request_count("search");