Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add logic for counter fix. #87

Merged
merged 22 commits into from
Dec 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 23 additions & 38 deletions client/benches/benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,46 +9,11 @@ use riker::actors::*;

use futures::executor::block_on;

fn init_stronghold_system_write_create() -> Stronghold {
let system = ActorSystem::new().unwrap();
Stronghold::init_stronghold_system(system, b"path".to_vec(), vec![])
}

fn init_stronghold_system_write_init() -> Stronghold {
fn bench_stronghold_write_create(c: &mut Criterion) {
let system = ActorSystem::new().unwrap();
let stronghold = Stronghold::init_stronghold_system(system, b"path".to_vec(), vec![]);

for i in 0..5 {
block_on(stronghold.write_data(
Location::counter::<_, usize>("test", Some(i)),
format!("test data {}", i).as_bytes().to_vec(),
RecordHint::new(b"test").unwrap(),
vec![],
));
}

stronghold
}

fn init_stronghold_system_read() -> Stronghold {
let system = ActorSystem::new().unwrap();
let stronghold = Stronghold::init_stronghold_system(system, b"path".to_vec(), vec![]);

for i in 0..10 {
block_on(stronghold.write_data(
Location::generic("test", format!("some_record {}", i)),
format!("test data {}", i).as_bytes().to_vec(),
RecordHint::new(b"test").unwrap(),
vec![],
));
}

stronghold
}

fn bench_stronghold_write_create(c: &mut Criterion) {
let stronghold = init_stronghold_system_write_create();

c.bench_function("write to stronghold while creating vaults", |b| {
b.iter(|| {
block_on(stronghold.write_data(
Expand All @@ -62,7 +27,17 @@ fn bench_stronghold_write_create(c: &mut Criterion) {
}

fn bench_stronghold_write_init(c: &mut Criterion) {
let stronghold = init_stronghold_system_write_init();
let system = ActorSystem::new().unwrap();
let stronghold = Stronghold::init_stronghold_system(system, b"path".to_vec(), vec![]);

for i in 0..5 {
block_on(stronghold.write_data(
Location::counter::<_, usize>("test", Some(i)),
format!("test data {}", i).as_bytes().to_vec(),
RecordHint::new(b"test").unwrap(),
vec![],
));
}

c.bench_function("write to stronghold while initializing records", |b| {
b.iter(|| {
Expand All @@ -77,7 +52,17 @@ fn bench_stronghold_write_init(c: &mut Criterion) {
}

fn bench_stronghold_read(c: &mut Criterion) {
let stronghold = init_stronghold_system_read();
let system = ActorSystem::new().unwrap();
let stronghold = Stronghold::init_stronghold_system(system, b"path".to_vec(), vec![]);

for i in 0..10 {
block_on(stronghold.write_data(
Location::generic("test", format!("some_record {}", i)),
format!("test data {}", i).as_bytes().to_vec(),
RecordHint::new(b"test").unwrap(),
vec![],
));
}

c.bench_function("read from stronghold", |b| {
b.iter(|| {
Expand Down
87 changes: 61 additions & 26 deletions client/src/actors/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

use crate::{
actors::{InternalMsg, InternalResults},
client::{Client, ClientMsg},
client::{Client, ClientMsg, ReadWrite},
line_error,
utils::{hd, ClientId, ResultMessage, StatusMessage},
Location,
Expand Down Expand Up @@ -84,7 +84,7 @@ pub enum SHRequest {
},

// Creates a new Vault.
CreateNewVault(Vec<u8>),
CreateNewVault(Location),

WriteData {
location: Location,
Expand Down Expand Up @@ -205,7 +205,7 @@ impl Receive<SHRequest> for Client {
.expect(line_error!());
}
SHRequest::CheckRecord { location } => {
let (vid, rid) = self.resolve_location(location);
let (vid, rid) = self.resolve_location(location, ReadWrite::Write);

let res = self.record_exists_in_vault(vid, rid);
sender
Expand All @@ -214,12 +214,12 @@ impl Receive<SHRequest> for Client {
.try_tell(SHResults::ReturnExistsRecord(res), None)
.expect(line_error!());
}
SHRequest::CreateNewVault(vpath) => {
let vid = self.derive_vault_id(&vpath);
let rid = self.derive_record_id(vpath, None);
SHRequest::CreateNewVault(location) => {
let (vid, rid) = self.resolve_location(location, ReadWrite::Write);
let client_str = self.get_client_str();

self.add_vault_insert_record(vid, rid);
self.add_new_vault(vid);
self.add_record_to_vault(vid, rid);

let internal = ctx
.select(&format!("/user/internal-{}/", client_str))
Expand All @@ -232,22 +232,24 @@ impl Receive<SHRequest> for Client {
payload,
hint,
} => {
let (vid, rid) = self.resolve_location(location);
let (vid, rid) = self.resolve_location(location, ReadWrite::Write);

let client_str = self.get_client_str();

self.increment_counter(vid);

let internal = ctx
.select(&format!("/user/internal-{}/", client_str))
.expect(line_error!());

internal.try_tell(InternalMsg::WriteData(vid, rid, payload, hint), sender);
}
SHRequest::InitRecord { location } => {
let (vid, rid) = self.resolve_location(location);
let (vid, rid) = self.resolve_location(location, ReadWrite::Write);

let client_str = self.get_client_str();

self.add_vault_insert_record(vid, rid);
self.add_record_to_vault(vid, rid);

let internal = ctx
.select(&format!("/user/internal-{}/", client_str))
Expand All @@ -256,7 +258,7 @@ impl Receive<SHRequest> for Client {
internal.try_tell(InternalMsg::InitRecord(vid, rid), sender);
}
SHRequest::ReadData { location } => {
let (vid, rid) = self.resolve_location(location);
let (vid, rid) = self.resolve_location(location, ReadWrite::Read);

let client_str = self.get_client_str();

Expand All @@ -267,7 +269,7 @@ impl Receive<SHRequest> for Client {
internal.try_tell(InternalMsg::ReadData(vid, rid), sender);
}
SHRequest::RevokeData { location } => {
let (vid, rid) = self.resolve_location(location);
let (vid, rid) = self.resolve_location(location, ReadWrite::Read);

let client_str = self.get_client_str();

Expand Down Expand Up @@ -341,10 +343,15 @@ impl Receive<SHRequest> for Client {

match procedure {
Procedure::SLIP10Generate { output, hint } => {
let (vid, rid) = self.resolve_location(output);
let (vid, rid) = self.resolve_location(output, ReadWrite::Write);

if !self.vault_exist(vid) {
self.add_vault_insert_record(vid, rid);
self.add_new_vault(vid);
self.add_record_to_vault(vid, rid);
self.increment_counter(vid);
} else {
self.add_record_to_vault(vid, rid);
self.increment_counter(vid);
}

internal.try_tell(
Expand All @@ -362,12 +369,21 @@ impl Receive<SHRequest> for Client {
output,
hint,
} => {
let (seed_vault_id, seed_record_id) = self.resolve_location(seed);
let (seed_vault_id, seed_record_id) = self.resolve_location(seed, ReadWrite::Write);
ensure_vault_exists!(seed_vault_id, SLIP10Derive, "seed");

let (key_vault_id, key_record_id) = self.resolve_location(output);
let (key_vault_id, key_record_id) = self.resolve_location(output, ReadWrite::Write);
ensure_vault_exists!(key_vault_id, SLIP10Derive, "key");

if !self.vault_exist(key_vault_id) {
self.add_new_vault(key_vault_id);
self.add_record_to_vault(key_vault_id, key_record_id);
self.increment_counter(key_vault_id);
} else {
self.add_record_to_vault(key_vault_id, key_record_id);
self.increment_counter(key_vault_id);
}

internal.try_tell(
InternalMsg::SLIP10DeriveFromSeed {
chain,
Expand All @@ -386,12 +402,21 @@ impl Receive<SHRequest> for Client {
output,
hint,
} => {
let (parent_vault_id, parent_record_id) = self.resolve_location(parent);
let (parent_vault_id, parent_record_id) = self.resolve_location(parent, ReadWrite::Read);
ensure_vault_exists!(parent_vault_id, SLIP10Derive, "parent key");

let (child_vault_id, child_record_id) = self.resolve_location(output);
let (child_vault_id, child_record_id) = self.resolve_location(output, ReadWrite::Write);
ensure_vault_exists!(child_vault_id, SLIP10Derive, "child key");

if !self.vault_exist(child_vault_id) {
self.add_new_vault(child_vault_id);
self.add_record_to_vault(child_vault_id, child_record_id);
self.increment_counter(child_vault_id);
} else {
self.add_record_to_vault(child_vault_id, child_record_id);
self.increment_counter(child_vault_id);
}

internal.try_tell(
InternalMsg::SLIP10DeriveFromKey {
chain,
Expand All @@ -409,10 +434,15 @@ impl Receive<SHRequest> for Client {
output,
hint,
} => {
let (vault_id, record_id) = self.resolve_location(output);
let (vault_id, record_id) = self.resolve_location(output, ReadWrite::Read);

if !self.vault_exist(vault_id) {
self.add_vault_insert_record(vault_id, record_id);
self.add_new_vault(vault_id);
self.add_record_to_vault(vault_id, record_id);
self.increment_counter(vault_id);
} else {
self.add_record_to_vault(vault_id, record_id);
self.increment_counter(vault_id);
}

internal.try_tell(
Expand All @@ -431,10 +461,15 @@ impl Receive<SHRequest> for Client {
output,
hint,
} => {
let (vault_id, record_id) = self.resolve_location(output);
let (vault_id, record_id) = self.resolve_location(output, ReadWrite::Write);

if !self.vault_exist(vault_id) {
self.add_vault_insert_record(vault_id, record_id);
self.add_new_vault(vault_id);
self.add_record_to_vault(vault_id, record_id);
self.increment_counter(vault_id);
} else {
self.add_record_to_vault(vault_id, record_id);
self.increment_counter(vault_id);
}

internal.try_tell(
Expand All @@ -450,11 +485,11 @@ impl Receive<SHRequest> for Client {
}
Procedure::BIP39MnemonicSentence { .. } => todo!(),
Procedure::Ed25519PublicKey { key } => {
let (vault_id, record_id) = self.resolve_location(key);
let (vault_id, record_id) = self.resolve_location(key, ReadWrite::Read);
internal.try_tell(InternalMsg::Ed25519PublicKey { vault_id, record_id }, sender)
}
Procedure::Ed25519Sign { key, msg } => {
let (vault_id, record_id) = self.resolve_location(key);
let (vault_id, record_id) = self.resolve_location(key, ReadWrite::Read);
internal.try_tell(
InternalMsg::Ed25519Sign {
vault_id,
Expand Down Expand Up @@ -522,11 +557,11 @@ impl Receive<InternalResults> for Client {
.try_tell(SHResults::ReturnReadSnap(status), None)
.expect(line_error!());
}
InternalResults::ReturnWriteData(_status) => {
InternalResults::ReturnWriteData(status) => {
sender
.as_ref()
.expect(line_error!())
.try_tell(SHResults::ReturnCreateVault(StatusMessage::OK), None)
.try_tell(SHResults::ReturnWriteData(status), None)
.expect(line_error!());
}
InternalResults::ReturnRevoke(status) => {
Expand Down
10 changes: 5 additions & 5 deletions client/src/bucket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ impl<P: BoxProvider + Send + Sync + Clone + Ord + PartialOrd + PartialEq + Eq +

/// Creates and initializes a new Vault given a `Key<P>`. Returns a tuple of `(Key<P>, RecordId)`. The returned
/// `Key<P>` is the Key associated with the Vault and the `RecordId` is the ID for its first record.
pub fn create_and_init_vault(&mut self, key: Key<P>, rid: RecordId) -> (Key<P>, RecordId) {
self.take(key.clone(), |view, mut reads| {
pub fn create_and_init_vault(&mut self, key: Key<P>, rid: RecordId) -> RecordId {
self.take(key, |view, mut reads| {
let mut writer = view.writer(rid);

let truncate = writer.truncate().expect(line_error!());
Expand All @@ -54,7 +54,7 @@ impl<P: BoxProvider + Send + Sync + Clone + Ord + PartialOrd + PartialEq + Eq +
reads
});

(key, rid)
rid
}

/// Reads data from a Record in the Vault given a `RecordId`. Returns the data as a `Vec<u8>` of utf8 bytes.
Expand Down Expand Up @@ -241,8 +241,8 @@ mod tests {

let mut bucket = Bucket::<Provider>::new();

let (key1, rid1) = bucket.create_and_init_vault(key1, rid1);
let (key2, rid2) = bucket.create_and_init_vault(key2, rid2);
let rid1 = bucket.create_and_init_vault(key1.clone(), rid1);
let rid2 = bucket.create_and_init_vault(key2.clone(), rid2);
println!("vault1 id1: {:?}", rid1);
println!("vault2 id1: {:?}", rid2);

Expand Down
Loading