Skip to content

Commit 626bd88

Browse files
committed
Protocol small improvements
1 parent eac88b8 commit 626bd88

File tree

8 files changed

+68
-58
lines changed

8 files changed

+68
-58
lines changed

README.MD

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Run Grpc-based Ope Db client implementation
4242
- [x] integration test for Database
4343
- [x] implement transport (Grpc)
4444
- [x] make integration test with real transport
45+
- [ ] support dataset for client
46+
- [ ] support dataset for server
4547
- [ ] create CI with Github actions
4648
- [x] make distribution for the server (build docker image)
4749
- [ ] make cli client

client/grpc/src/grpc/rpc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub mod get {
99

1010
pub fn db_info_msg(dataset_id: Bytes, version: usize) -> GetCallbackReply {
1111
GetCallbackReply {
12-
reply: Some(get_callback_reply::Reply::DbInfo(DbInfo {
12+
reply: Some(get_callback_reply::Reply::DatasetInfo(DatasetInfo {
1313
id: dataset_id.to_vec(),
1414
version: version as i64,
1515
})),
@@ -43,7 +43,7 @@ pub mod put {
4343

4444
pub fn db_info_msg(dataset_id: Bytes, version: usize) -> PutCallbackReply {
4545
PutCallbackReply {
46-
reply: Some(put_callback_reply::Reply::DbInfo(DbInfo {
46+
reply: Some(put_callback_reply::Reply::DatasetInfo(DatasetInfo {
4747
id: dataset_id.to_vec(),
4848
version: version as i64,
4949
})),

client/grpc/src/main.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
//! Simple client just create Db and get and put few values (for debug purpose)
22
3+
use crate::tui::Cmd;
34
use client::ope_btree::test::NoOpCrypt;
45
use client::ope_btree::OpeBTreeClient;
56
use client::ope_db::OpeDatabaseClient;
7+
use client_grpc::config_store::ConfigStore;
68
use client_grpc::grpc::rpc::db_rpc_client::DbRpcClient;
79
use client_grpc::grpc::GrpcDbRpc;
810
use common::noop_hasher::NoOpHasher;
911
use common::Hash;
1012
use dialoguer::Input;
13+
use dialoguer::{theme::ColorfulTheme, Select};
1114
use env_logger::Env;
1215
use std::error::Error;
1316
use std::path::PathBuf;
1417
use structopt::StructOpt;
15-
use crate::tui::Cmd;
16-
use client_grpc::config_store::ConfigStore;
17-
use dialoguer::{theme::ColorfulTheme, Select};
1818

1919
mod tui;
2020

client/src/ope_db/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
use crate::crypto::{Decryptor, Encryptor};
22
use crate::ope_btree::OpeBTreeClient;
3-
use crate::ope_db::errors::DatabaseClientError;
43
use crate::ope_db::config::ClientConfig;
4+
use crate::ope_db::errors::DatabaseClientError;
55
use bytes::Bytes;
66
use common::Hash;
77
use protocol::database::OpeDatabaseRpc;
88
use std::fmt::Debug;
99
use std::sync::Arc;
1010
use tokio::sync::RwLock;
1111

12-
mod errors;
1312
pub mod config;
13+
mod errors;
1414

1515
pub type Result<V> = std::result::Result<V, DatabaseClientError>;
1616

protocol/grpc/ope_btree.proto

+30-27
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ package opebtree;
55
// GET: Server requests
66
message GetCallback {
77
oneof callback {
8-
// sends found value to client
9-
GetValue value = 1;
10-
118
// ask index of search key in branch
12-
AskNextChildIndex next_child_idx = 10;
9+
AskNextChildIndex next_child_idx = 1;
1310
// ask index of search key in leaf
14-
AskSubmitLeaf submit_leaf = 11;
11+
AskSubmitLeaf submit_leaf = 2;
12+
// sends found value to client
13+
GetValue value = 3;
1514

1615
// sends server error to client
1716
Error server_error = 20;
@@ -21,70 +20,74 @@ message GetCallback {
2120
// GET: Client replies
2221
message GetCallbackReply {
2322
oneof reply {
24-
// client sends database info (id and version)
25-
DbInfo db_info = 1;
23+
// client sends dataset info (id and version)
24+
DatasetInfo dataset_info = 1;
2625

2726
// client sends results of searching a key in the leaf
28-
ReplyNextChildIndex next_child_idx = 10;
27+
ReplyNextChildIndex next_child_idx = 2;
2928
// client sends results of searching a key in the leaf
30-
ReplySubmitLeaf submit_leaf = 11;
29+
ReplySubmitLeaf submit_leaf = 3;
3130

3231
// client sends client error to server
3332
Error server_error = 20;
33+
34+
// todo add Cancel msg?
3435
}
3536

3637
}
3738

3839
// PUT: Server requests
3940
message PutCallback {
4041
oneof callback {
41-
// server sends previous stored value to client
42-
PreviousValue value = 1;
43-
4442
// server asks index of search key in branch
45-
AskNextChildIndex next_child_idx = 10;
43+
AskNextChildIndex next_child_idx = 1;
4644

4745
// server asks index of search key in leaf and other details for putting
48-
AskPutDetails put_details = 20;
46+
AskPutDetails put_details = 2;
4947
// server asks verify made changes
50-
AskVerifyChanges verify_changes = 21;
48+
AskVerifyChanges verify_changes = 3;
5149
// server confirms that all changes was persisted
52-
AskChangesStored changes_stored = 22;
50+
AskChangesStored changes_stored = 4;
51+
// server sends previous stored value to client
52+
PreviousValue value = 5;
5353

5454
// server sends server error to client
55-
Error server_error = 30;
55+
Error server_error = 20;
56+
5657
}
5758
}
5859

5960
// PUT: Client replies
6061
message PutCallbackReply {
6162
oneof reply {
6263
// Initial (first) message in a client-server round trip.
63-
// client sends database info (id and version)
64-
DbInfo db_info = 1;
64+
// client sends dataset info (id and version)
65+
DatasetInfo dataset_info = 1;
6566
// client sends value for putting
6667
PutValue value = 2;
6768

6869
// client sends index of search key in branch
69-
ReplyNextChildIndex next_child_idx = 10;
70+
ReplyNextChildIndex next_child_idx = 3;
7071

7172
// client sends index of search key in leaf and other details for putting
72-
ReplyPutDetails put_details = 20;
73+
ReplyPutDetails put_details = 4;
7374
// client confirms made changes
74-
ReplyVerifyChanges verify_changes = 21;
75+
ReplyVerifyChanges verify_changes = 5;
7576
// client confirms server confirmation
76-
ReplyChangesStored changes_stored = 22;
77+
ReplyChangesStored changes_stored = 6;
7778

7879
// client sends client error to server
79-
Error server_error = 30;
80+
Error server_error = 20;
81+
82+
// todo add Cancel msg?
8083
}
8184
}
8285

8386

84-
message DbInfo {
85-
// database id
87+
message DatasetInfo {
88+
// dataset id
8689
bytes id = 1;
87-
// expected database version
90+
// expected dataset version
8891
int64 version = 2;
8992
}
9093

server/grpc/src/grpc/mod.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use kvstore_inmemory::hashmap_store::HashMapKVStore;
55
use rpc::db_rpc_server::DbRpc;
66
use rpc::get_callback_reply::Reply as GetReply;
77
use rpc::put_callback_reply::Reply as PutReply;
8-
use rpc::DbInfo;
8+
use rpc::DatasetInfo;
99
use server::ope_btree::OpeBTreeConf;
1010
use server::ope_db::{DatasetChanged, OpeDatabase};
1111
use server::Digest;
@@ -67,8 +67,12 @@ where
6767
reply(result_in, Err(status))?;
6868
} else {
6969
match client_reply.unwrap().reply {
70-
Some(GetReply::DbInfo(DbInfo { id, version })) => {
71-
log::debug!("Server receive DbInfo({:?},{:?})", id, version);
70+
Some(GetReply::DatasetInfo(DatasetInfo { id, version })) => {
71+
log::debug!("Server receive DatasetInfo({:?},{:?})", id, version);
72+
73+
74+
75+
7276

7377
// get specified Database with required version - todo implement, only one db is supported now
7478

@@ -153,14 +157,14 @@ where
153157
// waiting first message with DnInfo
154158
let mut client_replies = request.into_inner();
155159

156-
// receive first msg: PutReply::DbInfo
160+
// receive first msg: PutReply::DatasetInfo
157161
match client_replies.try_next().await {
158162
Ok(Some(rpc::PutCallbackReply {
159-
reply: Some(PutReply::DbInfo(DbInfo { id, version })),
163+
reply: Some(PutReply::DatasetInfo(DatasetInfo { id, version })),
160164
})) => {
161-
log::debug!("Server receive DbInfo({:?},{:?})", id.bytes(), version);
165+
log::debug!("Server receive DatasetInfo({:?},{:?})", id.bytes(), version);
162166

163-
// get specified Database with required version - todo implement, only one db is supported now
167+
// get specified Dataset with required version - todo implement, only one db is supported now
164168

165169
// receive second msg: PutReply::Value
166170
match client_replies.try_next().await {
@@ -214,7 +218,7 @@ where
214218
}
215219
}
216220
Ok(unexpected) => {
217-
let status = errors::unexpected_msg_status("DbInfo", unexpected);
221+
let status = errors::unexpected_msg_status("DatasetInfo", unexpected);
218222
reply(result_in, Err(status))?;
219223
}
220224
Err(status) => {

server/grpc/src/grpc/rpc.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@ use server::ope_db::DbError;
88
pub mod get {
99
use super::*;
1010

11-
pub fn value_msg(value: Option<Bytes>) -> GetCallback {
12-
GetCallback {
13-
callback: Some(get_callback::Callback::Value(GetValue {
14-
value: value.map(|vec| vec.to_vec()),
15-
})),
16-
}
17-
}
18-
1911
pub fn next_child_idx_msg(keys: Vec<Bytes>, children_checksums: Vec<Bytes>) -> GetCallback {
2012
GetCallback {
2113
callback: Some(get_callback::Callback::NextChildIdx(AskNextChildIndex {
@@ -34,6 +26,14 @@ pub mod get {
3426
}
3527
}
3628

29+
pub fn value_msg(value: Option<Bytes>) -> GetCallback {
30+
GetCallback {
31+
callback: Some(get_callback::Callback::Value(GetValue {
32+
value: value.map(|vec| vec.to_vec()),
33+
})),
34+
}
35+
}
36+
3737
pub fn server_error_msg(err: DbError) -> GetCallback {
3838
GetCallback {
3939
callback: Some(get_callback::Callback::ServerError(Error {
@@ -48,14 +48,6 @@ pub mod put {
4848
use super::*;
4949
use protocol::btree::SearchResult;
5050

51-
pub fn value_msg(value: Option<Bytes>) -> PutCallback {
52-
PutCallback {
53-
callback: Some(put_callback::Callback::Value(PreviousValue {
54-
value: value.map(|vec| vec.to_vec()),
55-
})),
56-
}
57-
}
58-
5951
pub fn next_child_idx_msg(keys: Vec<Bytes>, children_checksums: Vec<Bytes>) -> PutCallback {
6052
PutCallback {
6153
callback: Some(put_callback::Callback::NextChildIdx(AskNextChildIndex {
@@ -89,6 +81,14 @@ pub mod put {
8981
}
9082
}
9183

84+
pub fn value_msg(value: Option<Bytes>) -> PutCallback {
85+
PutCallback {
86+
callback: Some(put_callback::Callback::Value(PreviousValue {
87+
value: value.map(|vec| vec.to_vec()),
88+
})),
89+
}
90+
}
91+
9292
pub fn server_error_msg(err: DbError) -> PutCallback {
9393
PutCallback {
9494
callback: Some(put_callback::Callback::ServerError(Error {

server/src/ope_db/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ pub enum DbError {
3939

4040
pub type Result<V> = std::result::Result<V, DbError>;
4141

42+
// todo OpeDatabase should support multiple datasets
4243
pub struct OpeDatabase<NS, VS, D>
4344
where
4445
NS: KVStore<Vec<u8>, Vec<u8>>,

0 commit comments

Comments
 (0)