From 77a10527d18b02fd3cd61adb166769e8d3c83a1a Mon Sep 17 00:00:00 2001 From: Minoru Osuka Date: Mon, 25 Nov 2019 16:05:52 +0900 Subject: [PATCH] Add rollback command --- proto/indexpb.proto | 2 + proto/indexrpcpb.proto | 11 + src/client/client.rs | 32 +- src/cmd.rs | 1 + src/cmd/rollback.rs | 21 + src/main.rs | 23 + src/proto/indexpb.rs | 72 +-- src/proto/indexpb_grpc.rs | 28 ++ src/proto/indexrpcpb.rs | 951 ++++++++++++++++++++++++++++---------- src/server/server.rs | 28 +- 10 files changed, 876 insertions(+), 293 deletions(-) create mode 100644 src/cmd/rollback.rs diff --git a/proto/indexpb.proto b/proto/indexpb.proto index b1584cf..cd75c2c 100644 --- a/proto/indexpb.proto +++ b/proto/indexpb.proto @@ -21,6 +21,8 @@ service Index { } rpc Commit (indexrpcpb.ApplyReq) returns (indexrpcpb.CommitResp) { } + rpc Rollback (indexrpcpb.ApplyReq) returns (indexrpcpb.RollbackResp) { + } 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 0546d41..07e361d 100644 --- a/proto/indexrpcpb.proto +++ b/proto/indexrpcpb.proto @@ -15,6 +15,7 @@ enum ReqType { Put = 2; Delete = 3; Commit = 4; + Rollback = 5; } message ApplyReq { @@ -25,6 +26,7 @@ message ApplyReq { PutReq put_req = 5; DeleteReq delete_req = 6; CommitReq commit_req = 7; + RollbackReq rollback_req = 8; } message ConfChangeReq { @@ -110,6 +112,15 @@ message CommitResp { RespErr err = 1; } +message RollbackReq { + uint64 client_id = 1; + uint64 seq = 2; +} + +message RollbackResp { + 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 16cec31..2a06deb 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -10,7 +10,7 @@ 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, - SchemaReq, SchemaResp, SearchReq, SearchResp, + RollbackReq, RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, }; pub fn create_client(addr: &str) -> IndexClient { @@ -257,6 +257,36 @@ impl Clerk { } } + pub fn rollback(&mut self) { + let mut rollback_req = RollbackReq::new(); + rollback_req.set_client_id(self.client_id); + rollback_req.set_seq(self.request_seq); + + let mut req = ApplyReq::new(); + req.set_client_id(self.client_id); + req.set_req_type(ReqType::Rollback); + req.set_rollback_req(rollback_req); + + self.request_seq += 1; + + loop { + let reply = self.servers[self.leader_id] + .rollback(&req) + .unwrap_or_else(|_e| { + let mut resp = RollbackResp::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 2c71b30..c5f833e 100644 --- a/src/cmd.rs +++ b/src/cmd.rs @@ -4,6 +4,7 @@ pub mod get; pub mod leave; pub mod metrics; pub mod peers; +pub mod rollback; pub mod schema; pub mod search; pub mod serve; diff --git a/src/cmd/rollback.rs b/src/cmd/rollback.rs new file mode 100644 index 0000000..6ff4e26 --- /dev/null +++ b/src/cmd/rollback.rs @@ -0,0 +1,21 @@ +use clap::ArgMatches; + +use crate::client::client::{create_client, Clerk}; +use crate::util::log::set_logger; + +pub fn run_rollback_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.rollback(); + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index b2c7f7d..fc736b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ use bayard::cmd::get::run_get_cli; use bayard::cmd::leave::run_leave_cli; use bayard::cmd::metrics::run_metrics_cli; use bayard::cmd::peers::run_peers_cli; +use bayard::cmd::rollback::run_rollback_cli; use bayard::cmd::schema::run_schema_cli; use bayard::cmd::search::run_search_cli; use bayard::cmd::serve::run_serve_cli; @@ -282,6 +283,27 @@ fn main() { .takes_value(true), ) ) + .subcommand( + SubCommand::with_name("rollback") + .name("rollback") + .setting(AppSettings::DeriveDisplayOrder) + .version(crate_version!()) + .author(crate_authors!()) + .about("Rollback 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") @@ -368,6 +390,7 @@ fn main() { "get" => run_get_cli, "delete" => run_delete_cli, "commit" => run_commit_cli, + "rollback" => run_rollback_cli, "search" => run_search_cli, "schema" => run_schema_cli, // "version" => run_version_cli, diff --git a/src/proto/indexpb.rs b/src/proto/indexpb.rs index 0c2e7e6..e917a78 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\xc4\x04\n\x05Index\x120\n\x04Raft\x12\x10.eraftpb.Message\x1a\x14.i\ + oto2\x82\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.\ @@ -37,39 +37,43 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x12\x14.indexrpcpb.ApplyReq\x1a\x13.indexrpcpb.PutResp\"\0\x128\n\x06De\ lete\x12\x14.indexrpcpb.ApplyReq\x1a\x16.indexrpcpb.DeleteResp\"\0\x128\ \n\x06Commit\x12\x14.indexrpcpb.ApplyReq\x1a\x16.indexrpcpb.CommitResp\"\ - \0\x129\n\x06Search\x12\x15.indexrpcpb.SearchReq\x1a\x16.indexrpcpb.Sear\ - chResp\"\0\x129\n\x06Schema\x12\x15.indexrpcpb.SchemaReq\x1a\x16.indexrp\ - cpb.SchemaResp\"\0J\xfa\x04\n\x06\x12\x04\0\0\x1b\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\x1b\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\x06\0\x02\x02\ - \x01\x12\x03\x0b\x08\r\n\x0c\n\x05\x06\0\x02\x02\x02\x12\x03\x0b\x0f\"\n\ - \x0c\n\x05\x06\0\x02\x02\x03\x12\x03\x0b-A\n\x0c\n\x04\x06\0\x02\x03\x12\ - \x04\r\x04\x0e\x05\n\x0c\n\x05\x06\0\x02\x03\x01\x12\x03\r\x08\x0f\n\x0c\ - \n\x05\x06\0\x02\x03\x02\x12\x03\r\x11&\n\x0c\n\x05\x06\0\x02\x03\x03\ - \x12\x03\r1G\n\x0c\n\x04\x06\0\x02\x04\x12\x04\x0f\x04\x10\x05\n\x0c\n\ - \x05\x06\0\x02\x04\x01\x12\x03\x0f\x08\x0b\n\x0c\n\x05\x06\0\x02\x04\x02\ - \x12\x03\x0f\r\x1e\n\x0c\n\x05\x06\0\x02\x04\x03\x12\x03\x0f);\n\x0c\n\ - \x04\x06\0\x02\x05\x12\x04\x11\x04\x12\x05\n\x0c\n\x05\x06\0\x02\x05\x01\ - \x12\x03\x11\x08\x0b\n\x0c\n\x05\x06\0\x02\x05\x02\x12\x03\x11\r\x20\n\ - \x0c\n\x05\x06\0\x02\x05\x03\x12\x03\x11+=\n\x0c\n\x04\x06\0\x02\x06\x12\ - \x04\x13\x04\x14\x05\n\x0c\n\x05\x06\0\x02\x06\x01\x12\x03\x13\x08\x0e\n\ - \x0c\n\x05\x06\0\x02\x06\x02\x12\x03\x13\x10#\n\x0c\n\x05\x06\0\x02\x06\ - \x03\x12\x03\x13.C\n\x0c\n\x04\x06\0\x02\x07\x12\x04\x15\x04\x16\x05\n\ - \x0c\n\x05\x06\0\x02\x07\x01\x12\x03\x15\x08\x0e\n\x0c\n\x05\x06\0\x02\ - \x07\x02\x12\x03\x15\x10#\n\x0c\n\x05\x06\0\x02\x07\x03\x12\x03\x15.C\n\ - \x0c\n\x04\x06\0\x02\x08\x12\x04\x17\x04\x18\x05\n\x0c\n\x05\x06\0\x02\ - \x08\x01\x12\x03\x17\x08\x0e\n\x0c\n\x05\x06\0\x02\x08\x02\x12\x03\x17\ - \x10$\n\x0c\n\x05\x06\0\x02\x08\x03\x12\x03\x17/D\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/Db\x06proto3\ + \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\ + \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\ + \x06\0\x02\x02\x01\x12\x03\x0b\x08\r\n\x0c\n\x05\x06\0\x02\x02\x02\x12\ + \x03\x0b\x0f\"\n\x0c\n\x05\x06\0\x02\x02\x03\x12\x03\x0b-A\n\x0c\n\x04\ + \x06\0\x02\x03\x12\x04\r\x04\x0e\x05\n\x0c\n\x05\x06\0\x02\x03\x01\x12\ + \x03\r\x08\x0f\n\x0c\n\x05\x06\0\x02\x03\x02\x12\x03\r\x11&\n\x0c\n\x05\ + \x06\0\x02\x03\x03\x12\x03\r1G\n\x0c\n\x04\x06\0\x02\x04\x12\x04\x0f\x04\ + \x10\x05\n\x0c\n\x05\x06\0\x02\x04\x01\x12\x03\x0f\x08\x0b\n\x0c\n\x05\ + \x06\0\x02\x04\x02\x12\x03\x0f\r\x1e\n\x0c\n\x05\x06\0\x02\x04\x03\x12\ + \x03\x0f);\n\x0c\n\x04\x06\0\x02\x05\x12\x04\x11\x04\x12\x05\n\x0c\n\x05\ + \x06\0\x02\x05\x01\x12\x03\x11\x08\x0b\n\x0c\n\x05\x06\0\x02\x05\x02\x12\ + \x03\x11\r\x20\n\x0c\n\x05\x06\0\x02\x05\x03\x12\x03\x11+=\n\x0c\n\x04\ + \x06\0\x02\x06\x12\x04\x13\x04\x14\x05\n\x0c\n\x05\x06\0\x02\x06\x01\x12\ + \x03\x13\x08\x0e\n\x0c\n\x05\x06\0\x02\x06\x02\x12\x03\x13\x10#\n\x0c\n\ + \x05\x06\0\x02\x06\x03\x12\x03\x13.C\n\x0c\n\x04\x06\0\x02\x07\x12\x04\ + \x15\x04\x16\x05\n\x0c\n\x05\x06\0\x02\x07\x01\x12\x03\x15\x08\x0e\n\x0c\ + \n\x05\x06\0\x02\x07\x02\x12\x03\x15\x10#\n\x0c\n\x05\x06\0\x02\x07\x03\ + \x12\x03\x15.C\n\x0c\n\x04\x06\0\x02\x08\x12\x04\x17\x04\x18\x05\n\x0c\n\ + \x05\x06\0\x02\x08\x01\x12\x03\x17\x08\x10\n\x0c\n\x05\x06\0\x02\x08\x02\ + \x12\x03\x17\x12%\n\x0c\n\x05\x06\0\x02\x08\x03\x12\x03\x170G\n\x0c\n\ + \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\ "; 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 1ccd01c..e3bf3cc 100644 --- a/src/proto/indexpb_grpc.rs +++ b/src/proto/indexpb_grpc.rs @@ -74,6 +74,13 @@ const METHOD_INDEX_COMMIT: ::grpcio::Method = ::grpcio::Method { + ty: ::grpcio::MethodType::Unary, + name: "/indexpb.Index/Rollback", + 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", @@ -228,6 +235,22 @@ impl IndexClient { self.commit_async_opt(req, ::grpcio::CallOption::default()) } + pub fn rollback_opt(&self, req: &super::indexrpcpb::ApplyReq, opt: ::grpcio::CallOption) -> ::grpcio::Result { + self.client.unary_call(&METHOD_INDEX_ROLLBACK, req, opt) + } + + pub fn rollback(&self, req: &super::indexrpcpb::ApplyReq) -> ::grpcio::Result { + self.rollback_opt(req, ::grpcio::CallOption::default()) + } + + pub fn rollback_async_opt(&self, req: &super::indexrpcpb::ApplyReq, opt: ::grpcio::CallOption) -> ::grpcio::Result<::grpcio::ClientUnaryReceiver> { + self.client.unary_call_async(&METHOD_INDEX_ROLLBACK, req, opt) + } + + pub fn rollback_async(&self, req: &super::indexrpcpb::ApplyReq) -> ::grpcio::Result<::grpcio::ClientUnaryReceiver> { + self.rollback_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) } @@ -273,6 +296,7 @@ pub trait Index { fn put(&mut self, ctx: ::grpcio::RpcContext, req: super::indexrpcpb::ApplyReq, sink: ::grpcio::UnarySink); 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 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); } @@ -312,6 +336,10 @@ pub fn create_index(s: S) -> ::grpcio::Servic instance.commit(ctx, req, resp) }); let mut instance = s.clone(); + builder = builder.add_unary_handler(&METHOD_INDEX_ROLLBACK, move |ctx, req, resp| { + instance.rollback(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 16a6e1f..55a2aad 100644 --- a/src/proto/indexrpcpb.rs +++ b/src/proto/indexrpcpb.rs @@ -36,6 +36,7 @@ pub struct ApplyReq { pub put_req: ::protobuf::SingularPtrField, pub delete_req: ::protobuf::SingularPtrField, pub commit_req: ::protobuf::SingularPtrField, + pub rollback_req: ::protobuf::SingularPtrField, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -246,6 +247,39 @@ impl ApplyReq { pub fn take_commit_req(&mut self) -> CommitReq { self.commit_req.take().unwrap_or_else(|| CommitReq::new()) } + + // .indexrpcpb.RollbackReq rollback_req = 8; + + + pub fn get_rollback_req(&self) -> &RollbackReq { + self.rollback_req.as_ref().unwrap_or_else(|| RollbackReq::default_instance()) + } + pub fn clear_rollback_req(&mut self) { + self.rollback_req.clear(); + } + + pub fn has_rollback_req(&self) -> bool { + self.rollback_req.is_some() + } + + // Param is passed by value, moved + pub fn set_rollback_req(&mut self, v: RollbackReq) { + self.rollback_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_rollback_req(&mut self) -> &mut RollbackReq { + if self.rollback_req.is_none() { + self.rollback_req.set_default(); + } + self.rollback_req.as_mut().unwrap() + } + + // Take field + pub fn take_rollback_req(&mut self) -> RollbackReq { + self.rollback_req.take().unwrap_or_else(|| RollbackReq::new()) + } } impl ::protobuf::Message for ApplyReq { @@ -275,6 +309,11 @@ impl ::protobuf::Message for ApplyReq { return false; } }; + for v in &self.rollback_req { + if !v.is_initialized() { + return false; + } + }; true } @@ -307,6 +346,9 @@ impl ::protobuf::Message for ApplyReq { 7 => { ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.commit_req)?; }, + 8 => { + ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.rollback_req)?; + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -345,6 +387,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.rollback_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 @@ -382,6 +428,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.rollback_req.as_ref() { + os.write_tag(8, ::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(()) } @@ -459,6 +510,11 @@ impl ::protobuf::Message for ApplyReq { |m: &ApplyReq| { &m.commit_req }, |m: &mut ApplyReq| { &mut m.commit_req }, )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "rollback_req", + |m: &ApplyReq| { &m.rollback_req }, + |m: &mut ApplyReq| { &mut m.rollback_req }, + )); ::protobuf::reflect::MessageDescriptor::new::( "ApplyReq", fields, @@ -488,6 +544,7 @@ impl ::protobuf::Clear for ApplyReq { self.put_req.clear(); self.delete_req.clear(); self.commit_req.clear(); + self.rollback_req.clear(); self.unknown_fields.clear(); } } @@ -3825,6 +3882,361 @@ impl ::protobuf::reflect::ProtobufValue for CommitResp { } } +#[derive(PartialEq,Clone,Default)] +pub struct RollbackReq { + // 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 RollbackReq { + fn default() -> &'a RollbackReq { + ::default_instance() + } +} + +impl RollbackReq { + pub fn new() -> RollbackReq { + ::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 RollbackReq { + 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() -> RollbackReq { + RollbackReq::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: &RollbackReq| { &m.client_id }, + |m: &mut RollbackReq| { &mut m.client_id }, + )); + fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( + "seq", + |m: &RollbackReq| { &m.seq }, + |m: &mut RollbackReq| { &mut m.seq }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "RollbackReq", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static RollbackReq { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const RollbackReq, + }; + unsafe { + instance.get(RollbackReq::new) + } + } +} + +impl ::protobuf::Clear for RollbackReq { + fn clear(&mut self) { + self.client_id = 0; + self.seq = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for RollbackReq { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for RollbackReq { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +pub struct RollbackResp { + // message fields + pub err: RespErr, + // special fields + pub unknown_fields: ::protobuf::UnknownFields, + pub cached_size: ::protobuf::CachedSize, +} + +impl<'a> ::std::default::Default for &'a RollbackResp { + fn default() -> &'a RollbackResp { + ::default_instance() + } +} + +impl RollbackResp { + pub fn new() -> RollbackResp { + ::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 RollbackResp { + 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() -> RollbackResp { + RollbackResp::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: &RollbackResp| { &m.err }, + |m: &mut RollbackResp| { &mut m.err }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "RollbackResp", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static RollbackResp { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const RollbackResp, + }; + unsafe { + instance.get(RollbackResp::new) + } + } +} + +impl ::protobuf::Clear for RollbackResp { + fn clear(&mut self) { + self.err = RespErr::OK; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for RollbackResp { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { + ::protobuf::text_format::fmt(self, f) + } +} + +impl ::protobuf::reflect::ProtobufValue for RollbackResp { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) + } +} + #[derive(PartialEq,Clone,Default)] pub struct SearchReq { // message fields @@ -4726,6 +5138,7 @@ pub enum ReqType { Put = 2, Delete = 3, Commit = 4, + Rollback = 5, } impl ::protobuf::ProtobufEnum for ReqType { @@ -4740,6 +5153,7 @@ impl ::protobuf::ProtobufEnum for ReqType { 2 => ::std::option::Option::Some(ReqType::Put), 3 => ::std::option::Option::Some(ReqType::Delete), 4 => ::std::option::Option::Some(ReqType::Commit), + 5 => ::std::option::Option::Some(ReqType::Rollback), _ => ::std::option::Option::None } } @@ -4751,6 +5165,7 @@ impl ::protobuf::ProtobufEnum for ReqType { ReqType::Put, ReqType::Delete, ReqType::Commit, + ReqType::Rollback, ]; values } @@ -4784,7 +5199,7 @@ impl ::protobuf::reflect::ProtobufValue for ReqType { } static file_descriptor_proto_data: &'static [u8] = b"\ - \n\x10indexrpcpb.proto\x12\nindexrpcpb\x1a\reraftpb.proto\"\xd3\x02\n\ + \n\x10indexrpcpb.proto\x12\nindexrpcpb\x1a\reraftpb.proto\"\x8f\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\ @@ -4792,262 +5207,286 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x08leaveReq\x12+\n\x07put_req\x18\x05\x20\x01(\x0b2\x12.indexrpcpb.PutR\ 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\"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\x08RaftDon\ - e\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.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\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\x07peer_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\ + 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\ + \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\ + err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\";\n\nMetricsRe\ + q\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03se\ + q\x18\x02\x20\x01(\x04R\x03seq\"J\n\x0bMetricsResp\x12\x14\n\x05value\ + \x18\x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.in\ + dexrpcpb.RespErrR\x03err\"N\n\x06GetReq\x12\x1b\n\tclient_id\x18\x01\x20\ + \x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\ + \x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05docId\"F\n\x07GetResp\x12\x14\n\ \x05value\x18\x01\x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\ - \x0e2\x13.indexrpcpb.RespErrR\x03err\";\n\nMetricsReq\x12\x1b\n\tclient_\ - id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\ - \x04R\x03seq\"J\n\x0bMetricsResp\x12\x14\n\x05value\x18\x01\x20\x01(\tR\ - \x05value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\ - \x03err\"N\n\x06GetReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08cli\ - entId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\x15\n\x06doc_id\ - \x18\x03\x20\x01(\tR\x05docId\"F\n\x07GetResp\x12\x14\n\x05value\x18\x01\ - \x20\x01(\tR\x05value\x12%\n\x03err\x18\x02\x20\x01(\x0e2\x13.indexrpcpb\ - .RespErrR\x03err\"f\n\x06PutReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\ - \x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\x12\x15\ - \n\x06doc_id\x18\x03\x20\x01(\tR\x05docId\x12\x16\n\x06fields\x18\x04\ - \x20\x01(\tR\x06fields\"0\n\x07PutResp\x12%\n\x03err\x18\x01\x20\x01(\ - \x0e2\x13.indexrpcpb.RespErrR\x03err\"Q\n\tDeleteReq\x12\x1b\n\tclient_i\ - d\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\ - \x04R\x03seq\x12\x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05docId\"3\n\nDele\ - teResp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03er\ - r\":\n\tCommitReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\ - \x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"3\n\nCommitResp\x12%\n\ - \x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"P\n\tSearc\ - hReq\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\x05\ - value\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*?\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\x04J\x99\ - #\n\x07\x12\x05\0\0\x83\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\x11\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\n\n\x02\x04\0\x12\x04\x13\0\x1b\x01\n\n\n\ - \x03\x04\0\x01\x12\x03\x13\x08\x10\n\x0b\n\x04\x04\0\x02\0\x12\x03\x14\ - \x04\x19\n\r\n\x05\x04\0\x02\0\x04\x12\x04\x14\x04\x13\x12\n\x0c\n\x05\ - \x04\0\x02\0\x05\x12\x03\x14\x04\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\ - \x14\x0b\x14\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x14\x17\x18\n\x0b\n\x04\ - \x04\0\x02\x01\x12\x03\x15\x04\x19\n\r\n\x05\x04\0\x02\x01\x04\x12\x04\ - \x15\x04\x14\x19\n\x0c\n\x05\x04\0\x02\x01\x06\x12\x03\x15\x04\x0b\n\x0c\ - \n\x05\x04\0\x02\x01\x01\x12\x03\x15\x0c\x14\n\x0c\n\x05\x04\0\x02\x01\ - \x03\x12\x03\x15\x17\x18\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x16\x04\x19\n\ - \r\n\x05\x04\0\x02\x02\x04\x12\x04\x16\x04\x15\x19\n\x0c\n\x05\x04\0\x02\ - \x02\x06\x12\x03\x16\x04\x0b\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x16\ - \x0c\x14\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\x16\x17\x18\n\x0b\n\x04\ - \x04\0\x02\x03\x12\x03\x17\x04\x1b\n\r\n\x05\x04\0\x02\x03\x04\x12\x04\ - \x17\x04\x16\x19\n\x0c\n\x05\x04\0\x02\x03\x06\x12\x03\x17\x04\x0c\n\x0c\ - \n\x05\x04\0\x02\x03\x01\x12\x03\x17\r\x16\n\x0c\n\x05\x04\0\x02\x03\x03\ - \x12\x03\x17\x19\x1a\n\x0b\n\x04\x04\0\x02\x04\x12\x03\x18\x04\x17\n\r\n\ - \x05\x04\0\x02\x04\x04\x12\x04\x18\x04\x17\x1b\n\x0c\n\x05\x04\0\x02\x04\ - \x06\x12\x03\x18\x04\n\n\x0c\n\x05\x04\0\x02\x04\x01\x12\x03\x18\x0b\x12\ - \n\x0c\n\x05\x04\0\x02\x04\x03\x12\x03\x18\x15\x16\n\x0b\n\x04\x04\0\x02\ - \x05\x12\x03\x19\x04\x1d\n\r\n\x05\x04\0\x02\x05\x04\x12\x04\x19\x04\x18\ - \x17\n\x0c\n\x05\x04\0\x02\x05\x06\x12\x03\x19\x04\r\n\x0c\n\x05\x04\0\ - \x02\x05\x01\x12\x03\x19\x0e\x18\n\x0c\n\x05\x04\0\x02\x05\x03\x12\x03\ - \x19\x1b\x1c\n\x0b\n\x04\x04\0\x02\x06\x12\x03\x1a\x04\x1d\n\r\n\x05\x04\ - \0\x02\x06\x04\x12\x04\x1a\x04\x19\x1d\n\x0c\n\x05\x04\0\x02\x06\x06\x12\ - \x03\x1a\x04\r\n\x0c\n\x05\x04\0\x02\x06\x01\x12\x03\x1a\x0e\x18\n\x0c\n\ - \x05\x04\0\x02\x06\x03\x12\x03\x1a\x1b\x1c\n\n\n\x02\x04\x01\x12\x04\x1d\ - \0!\x01\n\n\n\x03\x04\x01\x01\x12\x03\x1d\x08\x15\n\x0b\n\x04\x04\x01\ - \x02\0\x12\x03\x1e\x04\x1e\n\r\n\x05\x04\x01\x02\0\x04\x12\x04\x1e\x04\ - \x1d\x17\n\x0c\n\x05\x04\x01\x02\0\x06\x12\x03\x1e\x04\x16\n\x0c\n\x05\ - \x04\x01\x02\0\x01\x12\x03\x1e\x17\x19\n\x0c\n\x05\x04\x01\x02\0\x03\x12\ - \x03\x1e\x1c\x1d\n\x0b\n\x04\x04\x01\x02\x01\x12\x03\x1f\x04\x12\n\r\n\ - \x05\x04\x01\x02\x01\x04\x12\x04\x1f\x04\x1e\x1e\n\x0c\n\x05\x04\x01\x02\ - \x01\x05\x12\x03\x1f\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x1f\ - \x0b\r\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\x1f\x10\x11\n\x0b\n\x04\ - \x04\x01\x02\x02\x12\x03\x20\x04\x14\n\r\n\x05\x04\x01\x02\x02\x04\x12\ - \x04\x20\x04\x1f\x12\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03\x20\x04\n\n\ - \x0c\n\x05\x04\x01\x02\x02\x01\x12\x03\x20\x0b\x0f\n\x0c\n\x05\x04\x01\ - \x02\x02\x03\x12\x03\x20\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-\01\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\x030\x04\ - \x19\n\r\n\x05\x04\x04\x02\x02\x04\x12\x040\x04/\x17\n\x0c\n\x05\x04\x04\ - \x02\x02\x05\x12\x030\x04\n\n\x0c\n\x05\x04\x04\x02\x02\x01\x12\x030\x0b\ - \x14\n\x0c\n\x05\x04\x04\x02\x02\x03\x12\x030\x17\x18\n\n\n\x02\x04\x05\ - \x12\x043\06\x01\n\n\n\x03\x04\x05\x01\x12\x033\x08\x10\n\x0b\n\x04\x04\ - \x05\x02\0\x12\x034\x04\x19\n\r\n\x05\x04\x05\x02\0\x04\x12\x044\x043\ - \x12\n\x0c\n\x05\x04\x05\x02\0\x05\x12\x034\x04\n\n\x0c\n\x05\x04\x05\ - \x02\0\x01\x12\x034\x0b\x14\n\x0c\n\x05\x04\x05\x02\0\x03\x12\x034\x17\ - \x18\n\x0b\n\x04\x04\x05\x02\x01\x12\x035\x04\x13\n\r\n\x05\x04\x05\x02\ - \x01\x04\x12\x045\x044\x19\n\x0c\n\x05\x04\x05\x02\x01\x05\x12\x035\x04\ - \n\n\x0c\n\x05\x04\x05\x02\x01\x01\x12\x035\x0b\x0e\n\x0c\n\x05\x04\x05\ - \x02\x01\x03\x12\x035\x11\x12\n\n\n\x02\x04\x06\x12\x048\0;\x01\n\n\n\ - \x03\x04\x06\x01\x12\x038\x08\x11\n\x0b\n\x04\x04\x06\x02\0\x12\x039\x04\ - \x15\n\r\n\x05\x04\x06\x02\0\x04\x12\x049\x048\x13\n\x0c\n\x05\x04\x06\ - \x02\0\x05\x12\x039\x04\n\n\x0c\n\x05\x04\x06\x02\0\x01\x12\x039\x0b\x10\ - \n\x0c\n\x05\x04\x06\x02\0\x03\x12\x039\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:\x049\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=\0@\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\x03?\x04\x13\ - \n\r\n\x05\x04\x07\x02\x01\x04\x12\x04?\x04>\x19\n\x0c\n\x05\x04\x07\x02\ - \x01\x05\x12\x03?\x04\n\n\x0c\n\x05\x04\x07\x02\x01\x01\x12\x03?\x0b\x0e\ - \n\x0c\n\x05\x04\x07\x02\x01\x03\x12\x03?\x11\x12\n\n\n\x02\x04\x08\x12\ - \x04B\0E\x01\n\n\n\x03\x04\x08\x01\x12\x03B\x08\x13\n\x0b\n\x04\x04\x08\ - \x02\0\x12\x03C\x04\x15\n\r\n\x05\x04\x08\x02\0\x04\x12\x04C\x04B\x15\n\ - \x0c\n\x05\x04\x08\x02\0\x05\x12\x03C\x04\n\n\x0c\n\x05\x04\x08\x02\0\ - \x01\x12\x03C\x0b\x10\n\x0c\n\x05\x04\x08\x02\0\x03\x12\x03C\x13\x14\n\ - \x0b\n\x04\x04\x08\x02\x01\x12\x03D\x04\x14\n\r\n\x05\x04\x08\x02\x01\ - \x04\x12\x04D\x04C\x15\n\x0c\n\x05\x04\x08\x02\x01\x06\x12\x03D\x04\x0b\ - \n\x0c\n\x05\x04\x08\x02\x01\x01\x12\x03D\x0c\x0f\n\x0c\n\x05\x04\x08\ - \x02\x01\x03\x12\x03D\x12\x13\n\n\n\x02\x04\t\x12\x04G\0K\x01\n\n\n\x03\ - \x04\t\x01\x12\x03G\x08\x0e\n\x0b\n\x04\x04\t\x02\0\x12\x03H\x04\x19\n\r\ - \n\x05\x04\t\x02\0\x04\x12\x04H\x04G\x10\n\x0c\n\x05\x04\t\x02\0\x05\x12\ - \x03H\x04\n\n\x0c\n\x05\x04\t\x02\0\x01\x12\x03H\x0b\x14\n\x0c\n\x05\x04\ - \t\x02\0\x03\x12\x03H\x17\x18\n\x0b\n\x04\x04\t\x02\x01\x12\x03I\x04\x13\ - \n\r\n\x05\x04\t\x02\x01\x04\x12\x04I\x04H\x19\n\x0c\n\x05\x04\t\x02\x01\ - \x05\x12\x03I\x04\n\n\x0c\n\x05\x04\t\x02\x01\x01\x12\x03I\x0b\x0e\n\x0c\ - \n\x05\x04\t\x02\x01\x03\x12\x03I\x11\x12\n\x0b\n\x04\x04\t\x02\x02\x12\ - \x03J\x04\x16\n\r\n\x05\x04\t\x02\x02\x04\x12\x04J\x04I\x13\n\x0c\n\x05\ - \x04\t\x02\x02\x05\x12\x03J\x04\n\n\x0c\n\x05\x04\t\x02\x02\x01\x12\x03J\ - \x0b\x11\n\x0c\n\x05\x04\t\x02\x02\x03\x12\x03J\x14\x15\n\n\n\x02\x04\n\ - \x12\x04M\0P\x01\n\n\n\x03\x04\n\x01\x12\x03M\x08\x0f\n\x0b\n\x04\x04\n\ - \x02\0\x12\x03N\x04\x15\n\r\n\x05\x04\n\x02\0\x04\x12\x04N\x04M\x11\n\ - \x0c\n\x05\x04\n\x02\0\x05\x12\x03N\x04\n\n\x0c\n\x05\x04\n\x02\0\x01\ - \x12\x03N\x0b\x10\n\x0c\n\x05\x04\n\x02\0\x03\x12\x03N\x13\x14\n\x0b\n\ - \x04\x04\n\x02\x01\x12\x03O\x04\x14\n\r\n\x05\x04\n\x02\x01\x04\x12\x04O\ - \x04N\x15\n\x0c\n\x05\x04\n\x02\x01\x06\x12\x03O\x04\x0b\n\x0c\n\x05\x04\ - \n\x02\x01\x01\x12\x03O\x0c\x0f\n\x0c\n\x05\x04\n\x02\x01\x03\x12\x03O\ - \x12\x13\n\n\n\x02\x04\x0b\x12\x04R\0W\x01\n\n\n\x03\x04\x0b\x01\x12\x03\ - R\x08\x0e\n\x0b\n\x04\x04\x0b\x02\0\x12\x03S\x04\x19\n\r\n\x05\x04\x0b\ - \x02\0\x04\x12\x04S\x04R\x10\n\x0c\n\x05\x04\x0b\x02\0\x05\x12\x03S\x04\ - \n\n\x0c\n\x05\x04\x0b\x02\0\x01\x12\x03S\x0b\x14\n\x0c\n\x05\x04\x0b\ - \x02\0\x03\x12\x03S\x17\x18\n\x0b\n\x04\x04\x0b\x02\x01\x12\x03T\x04\x13\ - \n\r\n\x05\x04\x0b\x02\x01\x04\x12\x04T\x04S\x19\n\x0c\n\x05\x04\x0b\x02\ - \x01\x05\x12\x03T\x04\n\n\x0c\n\x05\x04\x0b\x02\x01\x01\x12\x03T\x0b\x0e\ - \n\x0c\n\x05\x04\x0b\x02\x01\x03\x12\x03T\x11\x12\n\x0b\n\x04\x04\x0b\ - \x02\x02\x12\x03U\x04\x16\n\r\n\x05\x04\x0b\x02\x02\x04\x12\x04U\x04T\ - \x13\n\x0c\n\x05\x04\x0b\x02\x02\x05\x12\x03U\x04\n\n\x0c\n\x05\x04\x0b\ - \x02\x02\x01\x12\x03U\x0b\x11\n\x0c\n\x05\x04\x0b\x02\x02\x03\x12\x03U\ - \x14\x15\n\x0b\n\x04\x04\x0b\x02\x03\x12\x03V\x04\x16\n\r\n\x05\x04\x0b\ - \x02\x03\x04\x12\x04V\x04U\x16\n\x0c\n\x05\x04\x0b\x02\x03\x05\x12\x03V\ - \x04\n\n\x0c\n\x05\x04\x0b\x02\x03\x01\x12\x03V\x0b\x11\n\x0c\n\x05\x04\ - \x0b\x02\x03\x03\x12\x03V\x14\x15\n\n\n\x02\x04\x0c\x12\x04Y\0[\x01\n\n\ - \n\x03\x04\x0c\x01\x12\x03Y\x08\x0f\n\x0b\n\x04\x04\x0c\x02\0\x12\x03Z\ - \x04\x14\n\r\n\x05\x04\x0c\x02\0\x04\x12\x04Z\x04Y\x11\n\x0c\n\x05\x04\ - \x0c\x02\0\x06\x12\x03Z\x04\x0b\n\x0c\n\x05\x04\x0c\x02\0\x01\x12\x03Z\ - \x0c\x0f\n\x0c\n\x05\x04\x0c\x02\0\x03\x12\x03Z\x12\x13\n\n\n\x02\x04\r\ - \x12\x04]\0a\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\x03_\x04\x13\n\r\n\x05\x04\r\x02\x01\x04\x12\x04_\ - \x04^\x19\n\x0c\n\x05\x04\r\x02\x01\x05\x12\x03_\x04\n\n\x0c\n\x05\x04\r\ - \x02\x01\x01\x12\x03_\x0b\x0e\n\x0c\n\x05\x04\r\x02\x01\x03\x12\x03_\x11\ - \x12\n\x0b\n\x04\x04\r\x02\x02\x12\x03`\x04\x16\n\r\n\x05\x04\r\x02\x02\ - \x04\x12\x04`\x04_\x13\n\x0c\n\x05\x04\r\x02\x02\x05\x12\x03`\x04\n\n\ - \x0c\n\x05\x04\r\x02\x02\x01\x12\x03`\x0b\x11\n\x0c\n\x05\x04\r\x02\x02\ - \x03\x12\x03`\x14\x15\n\n\n\x02\x04\x0e\x12\x04c\0e\x01\n\n\n\x03\x04\ - \x0e\x01\x12\x03c\x08\x12\n\x0b\n\x04\x04\x0e\x02\0\x12\x03d\x04\x14\n\r\ - \n\x05\x04\x0e\x02\0\x04\x12\x04d\x04c\x14\n\x0c\n\x05\x04\x0e\x02\0\x06\ - \x12\x03d\x04\x0b\n\x0c\n\x05\x04\x0e\x02\0\x01\x12\x03d\x0c\x0f\n\x0c\n\ - \x05\x04\x0e\x02\0\x03\x12\x03d\x12\x13\n\n\n\x02\x04\x0f\x12\x04g\0j\ - \x01\n\n\n\x03\x04\x0f\x01\x12\x03g\x08\x11\n\x0b\n\x04\x04\x0f\x02\0\ - \x12\x03h\x04\x19\n\r\n\x05\x04\x0f\x02\0\x04\x12\x04h\x04g\x13\n\x0c\n\ - \x05\x04\x0f\x02\0\x05\x12\x03h\x04\n\n\x0c\n\x05\x04\x0f\x02\0\x01\x12\ - \x03h\x0b\x14\n\x0c\n\x05\x04\x0f\x02\0\x03\x12\x03h\x17\x18\n\x0b\n\x04\ - \x04\x0f\x02\x01\x12\x03i\x04\x13\n\r\n\x05\x04\x0f\x02\x01\x04\x12\x04i\ - \x04h\x19\n\x0c\n\x05\x04\x0f\x02\x01\x05\x12\x03i\x04\n\n\x0c\n\x05\x04\ - \x0f\x02\x01\x01\x12\x03i\x0b\x0e\n\x0c\n\x05\x04\x0f\x02\x01\x03\x12\ - \x03i\x11\x12\n\n\n\x02\x04\x10\x12\x04l\0n\x01\n\n\n\x03\x04\x10\x01\ - \x12\x03l\x08\x12\n\x0b\n\x04\x04\x10\x02\0\x12\x03m\x04\x14\n\r\n\x05\ - \x04\x10\x02\0\x04\x12\x04m\x04l\x14\n\x0c\n\x05\x04\x10\x02\0\x06\x12\ - \x03m\x04\x0b\n\x0c\n\x05\x04\x10\x02\0\x01\x12\x03m\x0c\x0f\n\x0c\n\x05\ - \x04\x10\x02\0\x03\x12\x03m\x12\x13\n\n\n\x02\x04\x11\x12\x04p\0t\x01\n\ - \n\n\x03\x04\x11\x01\x12\x03p\x08\x11\n\x0b\n\x04\x04\x11\x02\0\x12\x03q\ - \x04\x19\n\r\n\x05\x04\x11\x02\0\x04\x12\x04q\x04p\x13\n\x0c\n\x05\x04\ - \x11\x02\0\x05\x12\x03q\x04\n\n\x0c\n\x05\x04\x11\x02\0\x01\x12\x03q\x0b\ - \x14\n\x0c\n\x05\x04\x11\x02\0\x03\x12\x03q\x17\x18\n\x0b\n\x04\x04\x11\ - \x02\x01\x12\x03r\x04\x13\n\r\n\x05\x04\x11\x02\x01\x04\x12\x04r\x04q\ - \x19\n\x0c\n\x05\x04\x11\x02\x01\x05\x12\x03r\x04\n\n\x0c\n\x05\x04\x11\ - \x02\x01\x01\x12\x03r\x0b\x0e\n\x0c\n\x05\x04\x11\x02\x01\x03\x12\x03r\ - \x11\x12\n\x0b\n\x04\x04\x11\x02\x02\x12\x03s\x04\x15\n\r\n\x05\x04\x11\ - \x02\x02\x04\x12\x04s\x04r\x13\n\x0c\n\x05\x04\x11\x02\x02\x05\x12\x03s\ - \x04\n\n\x0c\n\x05\x04\x11\x02\x02\x01\x12\x03s\x0b\x10\n\x0c\n\x05\x04\ - \x11\x02\x02\x03\x12\x03s\x13\x14\n\n\n\x02\x04\x12\x12\x04v\0y\x01\n\n\ - \n\x03\x04\x12\x01\x12\x03v\x08\x12\n\x0b\n\x04\x04\x12\x02\0\x12\x03w\ - \x04\x15\n\r\n\x05\x04\x12\x02\0\x04\x12\x04w\x04v\x14\n\x0c\n\x05\x04\ - \x12\x02\0\x05\x12\x03w\x04\n\n\x0c\n\x05\x04\x12\x02\0\x01\x12\x03w\x0b\ - \x10\n\x0c\n\x05\x04\x12\x02\0\x03\x12\x03w\x13\x14\n\x0b\n\x04\x04\x12\ - \x02\x01\x12\x03x\x04\x14\n\r\n\x05\x04\x12\x02\x01\x04\x12\x04x\x04w\ - \x15\n\x0c\n\x05\x04\x12\x02\x01\x06\x12\x03x\x04\x0b\n\x0c\n\x05\x04\ - \x12\x02\x01\x01\x12\x03x\x0c\x0f\n\x0c\n\x05\x04\x12\x02\x01\x03\x12\ - \x03x\x12\x13\n\n\n\x02\x04\x13\x12\x04{\0~\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\x0c\n\x02\ - \x04\x14\x12\x06\x80\x01\0\x83\x01\x01\n\x0b\n\x03\x04\x14\x01\x12\x04\ - \x80\x01\x08\x12\n\x0c\n\x04\x04\x14\x02\0\x12\x04\x81\x01\x04\x15\n\x0f\ - \n\x05\x04\x14\x02\0\x04\x12\x06\x81\x01\x04\x80\x01\x14\n\r\n\x05\x04\ - \x14\x02\0\x05\x12\x04\x81\x01\x04\n\n\r\n\x05\x04\x14\x02\0\x01\x12\x04\ - \x81\x01\x0b\x10\n\r\n\x05\x04\x14\x02\0\x03\x12\x04\x81\x01\x13\x14\n\ - \x0c\n\x04\x04\x14\x02\x01\x12\x04\x82\x01\x04\x14\n\x0f\n\x05\x04\x14\ - \x02\x01\x04\x12\x06\x82\x01\x04\x81\x01\x15\n\r\n\x05\x04\x14\x02\x01\ - \x06\x12\x04\x82\x01\x04\x0b\n\r\n\x05\x04\x14\x02\x01\x01\x12\x04\x82\ - \x01\x0c\x0f\n\r\n\x05\x04\x14\x02\x01\x03\x12\x04\x82\x01\x12\x13b\x06p\ - roto3\ + \x0e2\x13.indexrpcpb.RespErrR\x03err\"f\n\x06PutReq\x12\x1b\n\tclient_id\ + \x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04\ + R\x03seq\x12\x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05docId\x12\x16\n\x06f\ + ields\x18\x04\x20\x01(\tR\x06fields\"0\n\x07PutResp\x12%\n\x03err\x18\ + \x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"Q\n\tDeleteReq\x12\ + \x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clientId\x12\x10\n\x03seq\x18\ + \x02\x20\x01(\x04R\x03seq\x12\x15\n\x06doc_id\x18\x03\x20\x01(\tR\x05doc\ + Id\"3\n\nDeleteResp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.R\ + espErrR\x03err\":\n\tCommitReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04\ + R\x08clientId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"3\n\nCommit\ + Resp\x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\ + \"<\n\x0bRollbackReq\x12\x1b\n\tclient_id\x18\x01\x20\x01(\x04R\x08clien\ + tId\x12\x10\n\x03seq\x18\x02\x20\x01(\x04R\x03seq\"5\n\x0cRollbackResp\ + \x12%\n\x03err\x18\x01\x20\x01(\x0e2\x13.indexrpcpb.RespErrR\x03err\"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\ + \x01\x01\n\x0b\n\x03\x04\x15\x01\x12\x04\x86\x01\x08\x11\n\x0c\n\x04\x04\ + \x15\x02\0\x12\x04\x87\x01\x04\x19\n\x0f\n\x05\x04\x15\x02\0\x04\x12\x06\ + \x87\x01\x04\x86\x01\x13\n\r\n\x05\x04\x15\x02\0\x05\x12\x04\x87\x01\x04\ + \n\n\r\n\x05\x04\x15\x02\0\x01\x12\x04\x87\x01\x0b\x14\n\r\n\x05\x04\x15\ + \x02\0\x03\x12\x04\x87\x01\x17\x18\n\x0c\n\x04\x04\x15\x02\x01\x12\x04\ + \x88\x01\x04\x13\n\x0f\n\x05\x04\x15\x02\x01\x04\x12\x06\x88\x01\x04\x87\ + \x01\x19\n\r\n\x05\x04\x15\x02\x01\x05\x12\x04\x88\x01\x04\n\n\r\n\x05\ + \x04\x15\x02\x01\x01\x12\x04\x88\x01\x0b\x0e\n\r\n\x05\x04\x15\x02\x01\ + \x03\x12\x04\x88\x01\x11\x12\n\x0c\n\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\ "; 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 e90f1b2..1c9cdd6 100644 --- a/src/server/server.rs +++ b/src/server/server.rs @@ -21,8 +21,8 @@ use crate::client::client::{create_client, Clerk}; use crate::proto::indexpb_grpc::{self, Index as IndexService, IndexClient}; use crate::proto::indexrpcpb::{ ApplyReq, CommitResp, ConfChangeReq, DeleteResp, GetReq, GetResp, JoinReq, LeaveReq, - MetricsReq, MetricsResp, PeersReq, PeersResp, PutResp, RaftDone, ReqType, RespErr, SchemaReq, - SchemaResp, SearchReq, SearchResp, + MetricsReq, MetricsResp, PeersReq, PeersResp, PutResp, RaftDone, ReqType, RespErr, + RollbackResp, SchemaReq, SchemaResp, SearchReq, SearchResp, }; use crate::server::metrics::Metrics; use crate::server::peer::PeerMessage; @@ -346,6 +346,20 @@ impl IndexServer { } } } + ReqType::Rollback => { + metrics.lock().unwrap().inc_request_count("rollback"); + + match index_writer.lock().unwrap().rollback() { + Ok(_opstamp) => { + info!("rollback succeed"); + NotifyArgs(term, String::from(""), RespErr::OK) + } + Err(e) => { + error!("rollback failed: {}", e); + NotifyArgs(term, String::from(""), RespErr::ErrWrongLeader) + } + } + } } } } @@ -501,6 +515,16 @@ impl IndexService for IndexServer { ) } + fn rollback(&mut self, ctx: RpcContext, req: ApplyReq, sink: UnarySink) { + let (err, _) = Self::start_op(self, &req); + let mut resp = RollbackResp::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");