Procházet zdrojové kódy

Create project durio and a basic KV web server.

Jing Yang před 4 roky
rodič
revize
f04af3b01e
3 změnil soubory, kde provedl 59 přidání a 0 odebrání
  1. 1 0
      Cargo.toml
  2. 25 0
      durio/Cargo.toml
  3. 33 0
      durio/src/main.rs

+ 1 - 0
Cargo.toml

@@ -40,6 +40,7 @@ test_utils = { path = "test_utils" }
 
 [workspace]
 members = [
+    "durio",
     "kvraft",
     "linearizability",
     "test_configs",

+ 25 - 0
durio/Cargo.toml

@@ -0,0 +1,25 @@
+[package]
+name = "durio"
+version = "0.1.0"
+authors = ["Jing Yang <ditsing@gmail.com>"]
+edition = "2018"
+description = "KV store backed by Ruaft, targeting Raspberry Pis."
+documentation = ""
+readme = "README.md"
+homepage = "https://github.com/ditsing/ruaft/tree/master/durio"
+repository = "https://github.com/ditsing/ruaft"
+license = "MIT"
+keywords = ["raft"]
+categories = ["raft"]
+
+[dependencies]
+kvraft = { path = "../kvraft" }
+ruaft = { path = "..", features = ["integration-test"] }
+serde = "1.0"
+serde_derive = "1.0"
+serde_json = "1.0"
+tarpc = "0.27"
+tokio = { version = "1.7", features = ["macros", "rt-multi-thread", "time", "parking_lot"] }
+warp = "0.3"
+
+[dev-dependencies]

+ 33 - 0
durio/src/main.rs

@@ -0,0 +1,33 @@
+use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::Arc;
+
+use serde_derive::{Deserialize, Serialize};
+use warp::Filter;
+
+#[derive(Deserialize, Serialize)]
+struct PutAppendBody {
+    value: String,
+}
+
+#[tokio::main]
+async fn main() {
+    let counter = Arc::new(AtomicUsize::new(0));
+    let counter_clone = counter.clone();
+    let get = warp::path!("kvstore" / "get" / String).map(move |key| {
+        key + "!" + counter.fetch_add(1, Ordering::SeqCst).to_string().as_str()
+    });
+    let put = warp::post()
+        .and(warp::path!("kvstore" / "put" / String))
+        .and(warp::body::json())
+        .map(move |key, _body: PutAppendBody| {
+            counter_clone.fetch_add(1, Ordering::SeqCst);
+            warp::reply::json(&key)
+        });
+    let append = warp::post()
+        .and(warp::path!("kvstore" / "append" / String))
+        .and(warp::body::json())
+        .map(|key, _body: PutAppendBody| warp::reply::json(&key));
+
+    let routes = warp::get().and(get.or(put).or(append));
+    warp::serve(routes).run(([0, 0, 0, 0], 9090)).await;
+}