Skip to content

Commit ad618cd

Browse files
committed
Add Project 4 - Part 3, Adding multithreading
1 parent e11bbc2 commit ad618cd

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

kvs-2/src/kv.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ impl KvStore {
4141
let log = Self::new_log_file(&path)?;
4242

4343
let mut store = KvStore {
44-
path: path,
45-
log: log,
44+
path,
45+
log,
4646
map: BTreeMap::new(),
4747
};
4848

kvs-client-server/src/server.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::network::{GetResponse, RemoveResponse, Request, SetResponse};
2-
use crate::{KvsEngine, Result};
2+
use crate::{KvsEngine, NaiveThreadPool, Result, ThreadPool};
33
use log::{debug, error, info};
44
use serde_json::Deserializer;
55
use std::io::{BufReader, BufWriter, Write};
@@ -24,21 +24,23 @@ impl<E: KvsEngine> Server<E> {
2424

2525
pub fn serve(&self) -> Result<()> {
2626
debug!("Waiting for connections...");
27+
let thread_pool = NaiveThreadPool::new(1)?;
2728
let listnr = self.listener.try_clone().unwrap();
2829
for stream in listnr.incoming() {
29-
match stream {
30+
let engine = self.engine.clone();
31+
thread_pool.spawn(move || match stream {
3032
Ok(stream) => {
31-
if let Err(e) = self.handle_client(stream) {
33+
if let Err(e) = Self::handle_client(engine, stream) {
3234
error!("Error on serving client: {}", e);
3335
}
3436
}
3537
Err(e) => error!("Connection failed, reason: {:?}", e),
36-
}
38+
})
3739
}
3840
Ok(())
3941
}
4042

41-
fn handle_client(&self, stream: TcpStream) -> Result<()> {
43+
fn handle_client(engine: E, stream: TcpStream) -> Result<()> {
4244
debug!(
4345
"Connection established from {}, waiting for data...",
4446
stream.peer_addr()?
@@ -64,21 +66,21 @@ impl<E: KvsEngine> Server<E> {
6466
debug!("Received request from {}: {:?}", peer_addr, req);
6567
match req {
6668
Request::Get { key } => {
67-
let engine_response = match self.engine.get(key) {
69+
let engine_response = match engine.get(key) {
6870
Ok(value) => GetResponse::Ok(value),
6971
Err(err) => GetResponse::Err(format!("{}", err)),
7072
};
7173
send_response!(engine_response);
7274
}
7375
Request::Set { key, value } => {
74-
let engine_response = match self.engine.set(key, value) {
76+
let engine_response = match engine.set(key, value) {
7577
Ok(_) => SetResponse::Ok(()),
7678
Err(err) => SetResponse::Err(format!("{}", err)),
7779
};
7880
send_response!(engine_response);
7981
}
8082
Request::Remove { key } => {
81-
let engine_response = match self.engine.remove(key) {
83+
let engine_response = match engine.remove(key) {
8284
Ok(_) => RemoveResponse::Ok(()),
8385
Err(err) => RemoveResponse::Err(format!("{}", err)),
8486
};

0 commit comments

Comments
 (0)