aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2020-04-24 10:10:01 +0000
committerAlex Auvolat <alex@adnab.me>2020-04-24 10:10:01 +0000
commitd8f5e643bcee95969b59c309809710a38b0661e3 (patch)
tree9bb179f351f60fc0396db731cb8ca0fe25dde17e /src/rpc
parent51fb3799a153a0db990fc74a37563ec612e20fc2 (diff)
downloadgarage-d8f5e643bcee95969b59c309809710a38b0661e3.tar.gz
garage-d8f5e643bcee95969b59c309809710a38b0661e3.zip
Split code for modular compilation
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/Cargo.toml37
-rw-r--r--src/rpc/lib.rs (renamed from src/rpc/mod.rs)3
-rw-r--r--src/rpc/membership.rs10
-rw-r--r--src/rpc/rpc_client.rs34
-rw-r--r--src/rpc/rpc_server.rs8
-rw-r--r--src/rpc/tls_util.rs2
6 files changed, 57 insertions, 37 deletions
diff --git a/src/rpc/Cargo.toml b/src/rpc/Cargo.toml
new file mode 100644
index 00000000..d7a09255
--- /dev/null
+++ b/src/rpc/Cargo.toml
@@ -0,0 +1,37 @@
+[package]
+name = "garage_rpc"
+version = "0.1.0"
+authors = ["Alex Auvolat <alex@adnab.me>"]
+edition = "2018"
+
+[lib]
+path = "lib.rs"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+garage_util = { path = "../util" }
+
+bytes = "0.4"
+rand = "0.7"
+hex = "0.3"
+sha2 = "0.8"
+arc-swap = "0.4"
+gethostname = "0.2"
+log = "0.4"
+
+rmp-serde = "0.14.3"
+serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
+
+futures = "0.3"
+futures-util = "0.3"
+tokio = { version = "0.2", default-features = false, features = ["rt-core", "rt-threaded", "io-driver", "net", "tcp", "time", "macros", "sync", "signal", "fs"] }
+
+http = "0.2"
+hyper = "0.13"
+rustls = "0.17"
+tokio-rustls = "0.13"
+hyper-rustls = { version = "0.20", default-features = false }
+webpki = "0.21"
+
+
diff --git a/src/rpc/mod.rs b/src/rpc/lib.rs
index 83fd0aac..3fae6c3e 100644
--- a/src/rpc/mod.rs
+++ b/src/rpc/lib.rs
@@ -1,3 +1,6 @@
+#[macro_use]
+extern crate log;
+
pub mod membership;
pub mod rpc_client;
pub mod rpc_server;
diff --git a/src/rpc/membership.rs b/src/rpc/membership.rs
index e0509536..dcda2c40 100644
--- a/src/rpc/membership.rs
+++ b/src/rpc/membership.rs
@@ -17,12 +17,12 @@ use tokio::prelude::*;
use tokio::sync::watch;
use tokio::sync::Mutex;
-use crate::background::BackgroundRunner;
-use crate::data::*;
-use crate::error::Error;
+use garage_util::background::BackgroundRunner;
+use garage_util::data::*;
+use garage_util::error::Error;
-use crate::rpc::rpc_client::*;
-use crate::rpc::rpc_server::*;
+use crate::rpc_client::*;
+use crate::rpc_server::*;
const PING_INTERVAL: Duration = Duration::from_secs(10);
const PING_TIMEOUT: Duration = Duration::from_secs(2);
diff --git a/src/rpc/rpc_client.rs b/src/rpc/rpc_client.rs
index 027a3cde..3f943dcc 100644
--- a/src/rpc/rpc_client.rs
+++ b/src/rpc/rpc_client.rs
@@ -8,7 +8,6 @@ use std::time::Duration;
use arc_swap::ArcSwapOption;
use bytes::IntoBuf;
-use err_derive::Error;
use futures::future::Future;
use futures::stream::futures_unordered::FuturesUnordered;
use futures::stream::StreamExt;
@@ -17,36 +16,17 @@ use hyper::client::{Client, HttpConnector};
use hyper::{Body, Method, Request};
use tokio::sync::{watch, Semaphore};
-use crate::background::BackgroundRunner;
-use crate::data::*;
-use crate::error::Error;
+use garage_util::background::BackgroundRunner;
+use garage_util::config::TlsConfig;
+use garage_util::data::*;
+use garage_util::error::{Error, RPCError};
-use crate::rpc::membership::Status;
-use crate::rpc::rpc_server::RpcMessage;
-use crate::rpc::tls_util;
-
-use crate::config::TlsConfig;
+use crate::membership::Status;
+use crate::rpc_server::RpcMessage;
+use crate::tls_util;
const DEFAULT_TIMEOUT: Duration = Duration::from_secs(10);
-#[derive(Debug, Error)]
-pub enum RPCError {
- #[error(display = "Node is down: {:?}.", _0)]
- NodeDown(UUID),
- #[error(display = "Timeout: {}", _0)]
- Timeout(#[error(source)] tokio::time::Elapsed),
- #[error(display = "HTTP error: {}", _0)]
- HTTP(#[error(source)] http::Error),
- #[error(display = "Hyper error: {}", _0)]
- Hyper(#[error(source)] hyper::Error),
- #[error(display = "Messagepack encode error: {}", _0)]
- RMPEncode(#[error(source)] rmp_serde::encode::Error),
- #[error(display = "Messagepack decode error: {}", _0)]
- RMPDecode(#[error(source)] rmp_serde::decode::Error),
- #[error(display = "Too many errors: {:?}", _0)]
- TooManyErrors(Vec<String>),
-}
-
#[derive(Copy, Clone)]
pub struct RequestStrategy {
pub rs_timeout: Duration,
diff --git a/src/rpc/rpc_server.rs b/src/rpc/rpc_server.rs
index 4ee53909..4386d733 100644
--- a/src/rpc/rpc_server.rs
+++ b/src/rpc/rpc_server.rs
@@ -16,11 +16,11 @@ use tokio::net::{TcpListener, TcpStream};
use tokio_rustls::server::TlsStream;
use tokio_rustls::TlsAcceptor;
-use crate::config::TlsConfig;
-use crate::data::*;
-use crate::error::Error;
+use garage_util::config::TlsConfig;
+use garage_util::data::*;
+use garage_util::error::Error;
-use crate::rpc::tls_util;
+use crate::tls_util;
pub trait RpcMessage: Serialize + for<'de> Deserialize<'de> + Send + Sync {}
diff --git a/src/rpc/tls_util.rs b/src/rpc/tls_util.rs
index 52c52110..36ea7bf3 100644
--- a/src/rpc/tls_util.rs
+++ b/src/rpc/tls_util.rs
@@ -15,7 +15,7 @@ use tokio::io::{AsyncRead, AsyncWrite};
use tokio_rustls::TlsConnector;
use webpki::DNSNameRef;
-use crate::error::Error;
+use garage_util::error::Error;
pub fn load_certs(filename: &str) -> Result<Vec<rustls::Certificate>, Error> {
let certfile = fs::File::open(&filename)?;