Got PutFile working, added clean script, nodes and files handle duplicate inserts
This commit is contained in:
parent
deae4191d9
commit
817e08e89b
63
Cargo.lock
generated
63
Cargo.lock
generated
@ -6,6 +6,7 @@ dependencies = [
|
|||||||
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -13,6 +14,28 @@ name = "bitflags"
|
|||||||
version = "1.0.4"
|
version = "1.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cloudabi"
|
||||||
|
version = "0.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fuchsia-zircon"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fuchsia-zircon-sys"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
@ -66,6 +89,31 @@ dependencies = [
|
|||||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.5.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.1.40"
|
version = "0.1.40"
|
||||||
@ -137,6 +185,14 @@ name = "unicode-xid"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vcpkg"
|
name = "vcpkg"
|
||||||
version = "0.2.6"
|
version = "0.2.6"
|
||||||
@ -163,6 +219,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
|
||||||
|
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
|
||||||
|
"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
|
||||||
|
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
|
||||||
"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
|
"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
|
||||||
"checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311"
|
"checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311"
|
||||||
"checksum libsqlite3-sys 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "742b695cbfb89e549dca6960a55e6802f67d352e33e97859ee46dee835211b0f"
|
"checksum libsqlite3-sys 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "742b695cbfb89e549dca6960a55e6802f67d352e33e97859ee46dee835211b0f"
|
||||||
@ -171,6 +230,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
|
"checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
|
||||||
"checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
|
"checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
|
||||||
"checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
|
"checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
|
||||||
|
"checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"
|
||||||
|
"checksum rand_core 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1961a422c4d189dfb50ffa9320bf1f2a9bd54ecb92792fb9477f99a1045f3372"
|
||||||
|
"checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db"
|
||||||
"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
|
"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
|
||||||
"checksum rusqlite 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39bae767eb27866f5c0be918635ae54af705bc09db11be2c43a3c6b361cf3462"
|
"checksum rusqlite 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39bae767eb27866f5c0be918635ae54af705bc09db11be2c43a3c6b361cf3462"
|
||||||
"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7"
|
"checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7"
|
||||||
@ -180,6 +242,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
"checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7"
|
"checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7"
|
||||||
"checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b"
|
"checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b"
|
||||||
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
||||||
|
"checksum uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dab5c5526c5caa3d106653401a267fed923e7046f35895ffcb5ca42db64942e6"
|
||||||
"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d"
|
"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d"
|
||||||
"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
|
"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
|
||||||
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
@ -8,3 +8,4 @@ rusqlite = "0.15.0"
|
|||||||
serde = "1.0"
|
serde = "1.0"
|
||||||
serde_derive = "1.0"
|
serde_derive = "1.0"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
uuid = { version = "0.7", features = ["v4"] }
|
||||||
|
@ -13,9 +13,28 @@ use std::fs::File;
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut file = fs::read("/home/joe/Downloads/ideaIU-2018.3.tar.gz").unwrap();
|
let mut stream = TcpStream::connect("localhost:6770").unwrap();
|
||||||
let mut stream = TcpStream::connect("localhost:6771").unwrap();
|
serde_json::to_writer(
|
||||||
stream.write(&file).unwrap();
|
&mut stream,
|
||||||
|
&Packet {
|
||||||
|
p_type: PacketType::PutFile,
|
||||||
|
json: Some(serde_json::to_string(
|
||||||
|
&PutFile { name: String::from("Somefile"), size: 32 }).unwrap()),
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
println!("Sent file");
|
||||||
stream.flush().unwrap();
|
stream.flush().unwrap();
|
||||||
stream.shutdown(Shutdown::Write).unwrap();
|
stream.shutdown(Shutdown::Write).unwrap();
|
||||||
|
|
||||||
|
let files: Vec<AvailableNodes> = serde_json::from_reader(&mut stream).unwrap();
|
||||||
|
for f in files {
|
||||||
|
println!("Chunk ID: {}", f.chunk_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
// std::process::exit(0);
|
||||||
|
// let mut file = fs::read("/home/joe/Downloads/ideaIU-2018.3.tar.gz").unwrap();
|
||||||
|
// let mut stream = TcpStream::connect("localhost:6771").unwrap();
|
||||||
|
// stream.write(&file).unwrap();
|
||||||
|
// stream.flush().unwrap();
|
||||||
|
// stream.shutdown(Shutdown::Write).unwrap();
|
||||||
}
|
}
|
||||||
|
@ -14,29 +14,29 @@ use std::fs::File;
|
|||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// register_with_meta_server();
|
register_with_meta_server();
|
||||||
let listener = TcpListener::bind("localhost:6771").unwrap();
|
let listener = TcpListener::bind("localhost:6771").unwrap();
|
||||||
|
|
||||||
for stream in listener.incoming() {
|
for stream in listener.incoming() {
|
||||||
let mut stream = stream.unwrap();
|
let mut stream = stream.unwrap();
|
||||||
let mut buf = Vec::new();
|
// let mut buf = Vec::new();
|
||||||
match stream.read_to_end(&mut buf) {
|
// match stream.read_to_end(&mut buf) {
|
||||||
Ok(size) => {
|
// Ok(size) => {
|
||||||
println!("Total bytes: {}", size);
|
// println!("Total bytes: {}", size);
|
||||||
let mut copy = File::create("new_version").unwrap();
|
// let mut copy = File::create("new_version").unwrap();
|
||||||
copy.write_all(&buf[..]).unwrap();
|
// copy.write_all(&buf[..]).unwrap();
|
||||||
},
|
|
||||||
Err(e) => println!("{}", e),
|
|
||||||
}
|
|
||||||
// match serde_json::from_reader(&mut stream) {
|
|
||||||
// Ok(packet @ Packet { .. }) => match packet.p_type {
|
|
||||||
// PacketType::GetFiles => shutdown(&mut stream),
|
|
||||||
// PacketType::PutFiles => put(&mut stream, &packet.json.unwrap(), &mut Vec::new()),
|
|
||||||
// PacketType::ShutdownDataNode => shutdown(&mut stream),
|
|
||||||
// _ => (),
|
|
||||||
// },
|
// },
|
||||||
// Err(e) => println!("Error parsing json {}", e.to_string()),
|
// Err(e) => println!("{}", e),
|
||||||
// };
|
// }
|
||||||
|
match serde_json::from_reader(&mut stream) {
|
||||||
|
Ok(packet @ Packet { .. }) => match packet.p_type {
|
||||||
|
// PacketType::GetFiles => shutdown(&mut stream),
|
||||||
|
// PacketType::PutFile => put(&mut stream, &packet.json.unwrap(), &mut Vec::new()),
|
||||||
|
PacketType::ShutdownDataNode => shutdown(&mut stream),
|
||||||
|
_ => (),
|
||||||
|
},
|
||||||
|
Err(e) => println!("Error parsing json: {}", e.to_string()),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ fn register_with_meta_server() {
|
|||||||
&Packet {
|
&Packet {
|
||||||
p_type: PacketType::NodeRegistration,
|
p_type: PacketType::NodeRegistration,
|
||||||
json: Some(serde_json::to_string(
|
json: Some(serde_json::to_string(
|
||||||
&NodeRegistration { register: true, ip: String::from("localhost"), port: 6770 }).unwrap()),
|
&NodeRegistration { register: true, ip: String::from("localhost"), port: 6771 }).unwrap()),
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
println!("Registered myself");
|
println!("Registered myself");
|
||||||
@ -57,9 +57,9 @@ fn register_with_meta_server() {
|
|||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn put(stream: &mut TcpStream, json: &String, files: &mut Vec<String>) {
|
//fn put(stream: &mut TcpStream, json: &String, files: &mut Vec<String>) {
|
||||||
let files: PutFiles = serde_json::from_str(json).unwrap();
|
// let files: PutFiles = serde_json::from_str(json).unwrap();
|
||||||
}
|
//}
|
||||||
|
|
||||||
fn shutdown(stream: &mut TcpStream) {
|
fn shutdown(stream: &mut TcpStream) {
|
||||||
let mut stream = TcpStream::connect("localhost:6770").unwrap();
|
let mut stream = TcpStream::connect("localhost:6770").unwrap();
|
||||||
@ -68,7 +68,7 @@ fn shutdown(stream: &mut TcpStream) {
|
|||||||
&Packet {
|
&Packet {
|
||||||
p_type: PacketType::NodeRegistration,
|
p_type: PacketType::NodeRegistration,
|
||||||
json: Some(serde_json::to_string(
|
json: Some(serde_json::to_string(
|
||||||
&NodeRegistration { register: false, ip: String::from("localhost"), port: 6770 }).unwrap()),
|
&NodeRegistration { register: false, ip: String::from("localhost"), port: 6771 }).unwrap()),
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
println!("Unregistered myself");
|
println!("Unregistered myself");
|
||||||
|
@ -3,6 +3,7 @@ extern crate rusqlite;
|
|||||||
extern crate serde;
|
extern crate serde;
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
extern crate serde_derive;
|
extern crate serde_derive;
|
||||||
|
extern crate uuid;
|
||||||
|
|
||||||
use a03::*;
|
use a03::*;
|
||||||
use rusqlite::types::ToSql;
|
use rusqlite::types::ToSql;
|
||||||
@ -22,8 +23,9 @@ fn main() {
|
|||||||
Ok(packet @ Packet { .. }) => match packet.p_type {
|
Ok(packet @ Packet { .. }) => match packet.p_type {
|
||||||
PacketType::ListFiles => list(&mut stream, &conn),
|
PacketType::ListFiles => list(&mut stream, &conn),
|
||||||
PacketType::NodeRegistration =>
|
PacketType::NodeRegistration =>
|
||||||
node_registration(&mut stream, &packet.json.unwrap(), &conn),
|
node_registration(&mut stream, &conn, &packet.json.unwrap()),
|
||||||
// PacketType::AddFile =>
|
PacketType::PutFile =>
|
||||||
|
put_file(&mut stream, &conn, &packet.json.unwrap()),
|
||||||
_ => (),
|
_ => (),
|
||||||
},
|
},
|
||||||
Err(e) => println!("Error parsing json {}", e.to_string()),
|
Err(e) => println!("Error parsing json {}", e.to_string()),
|
||||||
@ -32,6 +34,26 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn put_file(stream: &mut TcpStream, conn: &Connection, message: &str) {
|
||||||
|
let file : PutFile = serde_json::from_str(message).unwrap();
|
||||||
|
add_file(&conn, &file.name, file.size as i32);
|
||||||
|
let mut nodes: Vec<AvailableNodes> = Vec::new();
|
||||||
|
for dn in get_data_nodes(&conn) {
|
||||||
|
nodes.push(AvailableNodes {
|
||||||
|
ip: dn.ip,
|
||||||
|
port: dn.port,
|
||||||
|
chunk_id: uuid::Uuid::new_v4().to_string(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
match serde_json::to_writer(
|
||||||
|
stream,
|
||||||
|
&nodes
|
||||||
|
) {
|
||||||
|
Ok(_) => println!("{}", "Sent nodes with chunks"),
|
||||||
|
Err(e) => println!("{}", e),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
fn list(stream: &mut TcpStream, conn: &Connection) {
|
fn list(stream: &mut TcpStream, conn: &Connection) {
|
||||||
match serde_json::to_writer(
|
match serde_json::to_writer(
|
||||||
stream,
|
stream,
|
||||||
@ -44,7 +66,7 @@ fn list(stream: &mut TcpStream, conn: &Connection) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn node_registration(stream: &mut TcpStream, json: &String, conn: &Connection) {
|
fn node_registration(stream: &mut TcpStream, conn: &Connection, json: &String) {
|
||||||
let endpoint : NodeRegistration = serde_json::from_str(json).unwrap();
|
let endpoint : NodeRegistration = serde_json::from_str(json).unwrap();
|
||||||
let message = if endpoint.register {
|
let message = if endpoint.register {
|
||||||
// TODO: We probably should check if the endpoint already exists!
|
// TODO: We probably should check if the endpoint already exists!
|
||||||
@ -74,7 +96,8 @@ fn report_success(stream: &mut TcpStream, message: &str) {
|
|||||||
|
|
||||||
fn add_data_node(conn: &Connection, address: &str, port: i32) {
|
fn add_data_node(conn: &Connection, address: &str, port: i32) {
|
||||||
match conn.execute(
|
match conn.execute(
|
||||||
"INSERT INTO dnode (address, port) VALUES (?1, ?2)",
|
"INSERT OR REPLACE INTO dnode (nid, address, port)
|
||||||
|
VALUES ((SELECT nid FROM dnode WHERE address = ?1 AND port = ?2), ?1, ?2)",
|
||||||
&[&address as &ToSql, &port],
|
&[&address as &ToSql, &port],
|
||||||
) {
|
) {
|
||||||
Ok(n) => println!("{} rows updated", n),
|
Ok(n) => println!("{} rows updated", n),
|
||||||
@ -82,14 +105,14 @@ fn add_data_node(conn: &Connection, address: &str, port: i32) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove_data_node(conn: &Connection, address: &str, port: i32) {
|
fn remove_data_node(conn: &Connection, address: &str, port: i32) -> bool {
|
||||||
match conn.execute(
|
match conn.execute(
|
||||||
"DELETE FROM dnode WHERE address=?1 AND port=?2",
|
"DELETE FROM dnode WHERE address=?1 AND port=?2",
|
||||||
&[&address as &ToSql, &port],
|
&[&address as &ToSql, &port],
|
||||||
) {
|
) {
|
||||||
Ok(n) => println!("{} rows updated", n),
|
Ok(n) => n > 0,
|
||||||
Err(e) => println!("DELETE error: {}", e),
|
Err(_) => false,
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_data_node(conn: &Connection, address: &str, port: i32) -> Option<DataNode> {
|
fn get_data_node(conn: &Connection, address: &str, port: i32) -> Option<DataNode> {
|
||||||
@ -120,7 +143,8 @@ fn get_data_nodes(conn: &Connection) -> Vec<DataNode> {
|
|||||||
|
|
||||||
fn add_file(conn: &Connection, fname: &String, fsize: i32) {
|
fn add_file(conn: &Connection, fname: &String, fsize: i32) {
|
||||||
conn.execute(
|
conn.execute(
|
||||||
"INSERT INTO inode (fname, fsize) VALUES (?1, ?2)",
|
"INSERT OR REPLACE INTO inode (fid, fname, fsize)
|
||||||
|
VALUES ((SELECT fid FROM inode WHERE fname = ?1), ?1, ?2)",
|
||||||
&[&fname as &ToSql, &fsize])
|
&[&fname as &ToSql, &fsize])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
@ -249,6 +273,13 @@ cid TEXT NOT NULL DEFAULT \"0\")",
|
|||||||
assert_eq!(dnode.is_none(), true);
|
assert_eq!(dnode.is_none(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn returns_false_dnode_if_it_doesnt_exist() {
|
||||||
|
let conn = get_test_db();
|
||||||
|
let removed = remove_data_node(&conn, "127.0.0.1", 65533);
|
||||||
|
assert_eq!(removed, false);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn gets_all_data_nodes() {
|
fn gets_all_data_nodes() {
|
||||||
let conn = get_test_db();
|
let conn = get_test_db();
|
||||||
@ -270,6 +301,22 @@ cid TEXT NOT NULL DEFAULT \"0\")",
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn adds_node_multiple_times_but_id_doesnt_change() {
|
||||||
|
let conn = get_test_db();
|
||||||
|
let ip = "127.0.0.1";
|
||||||
|
let port = 65533;
|
||||||
|
add_data_node(&conn, &ip, port);
|
||||||
|
add_data_node(&conn, &ip, port);
|
||||||
|
add_data_node(&conn, &ip, port);
|
||||||
|
let ds = get_data_nodes(&conn);
|
||||||
|
assert_eq!(ds.len(), 1);
|
||||||
|
let dn = get_data_node(&conn, ip, port).unwrap();
|
||||||
|
assert_eq!(dn.id, 1);
|
||||||
|
assert_eq!(dn.ip, ip);
|
||||||
|
assert_eq!(dn.port, port as u32);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn adds_file() {
|
fn adds_file() {
|
||||||
let conn = get_test_db();
|
let conn = get_test_db();
|
||||||
@ -279,6 +326,22 @@ cid TEXT NOT NULL DEFAULT \"0\")",
|
|||||||
assert_eq!(files[0], "my_1337_virus 32 bytes");
|
assert_eq!(files[0], "my_1337_virus 32 bytes");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn adds_file_multiple_times_but_id_doesnt_change() {
|
||||||
|
let conn = get_test_db();
|
||||||
|
let fname = String::from("my_1337_virus");
|
||||||
|
add_file(&conn, &fname, 32);
|
||||||
|
add_file(&conn, &fname, 32);
|
||||||
|
add_file(&conn, &fname, 32);
|
||||||
|
add_file(&conn, &fname, 32);
|
||||||
|
let files = get_files(&conn);
|
||||||
|
assert_eq!(files.len(), 1);
|
||||||
|
let file = get_file_info(&conn, &fname);
|
||||||
|
assert_eq!(file.id, 1);
|
||||||
|
assert_eq!(file.name, "my_1337_virus");
|
||||||
|
assert_eq!(file.size, 32);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn removes_file() {
|
fn removes_file() {
|
||||||
let conn = get_test_db();
|
let conn = get_test_db();
|
||||||
|
16
src/lib.rs
16
src/lib.rs
@ -10,10 +10,10 @@ use std::net::Ipv4Addr;
|
|||||||
pub enum PacketType {
|
pub enum PacketType {
|
||||||
NodeRegistration,
|
NodeRegistration,
|
||||||
ListFiles,
|
ListFiles,
|
||||||
AddFile,
|
PutFile,
|
||||||
PutFiles,
|
|
||||||
GetFiles,
|
GetFiles,
|
||||||
AddDataBlocks,
|
AddDataBlocks,
|
||||||
|
ShutdownDataNode,
|
||||||
Success,
|
Success,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,8 +36,16 @@ pub struct NodeRegistration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
pub struct PutFiles {
|
pub struct PutFile {
|
||||||
pub files: Vec<String>
|
pub name: String,
|
||||||
|
pub size: u32
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
pub struct AvailableNodes {
|
||||||
|
pub ip: String,
|
||||||
|
pub port: u32,
|
||||||
|
pub chunk_id: String
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user