From 0c1ee68e638afa63d17f273a3d85097e85321949 Mon Sep 17 00:00:00 2001 From: ricky han Date: Fri, 6 Oct 2017 11:47:40 -0400 Subject: [PATCH] autoflushing is now working --- src/bin/server/server.rs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/bin/server/server.rs b/src/bin/server/server.rs index 15a7dd9d..b7aa56f3 100644 --- a/src/bin/server/server.rs +++ b/src/bin/server/server.rs @@ -66,6 +66,7 @@ impl Store { /// TODO: Need to figure out how to specify symbol (and exchange name). fn flush(&self) -> Option { let fname = format!("{}/{}.dtf", self.folder, self.name); + create_dir_if_not_exist(&self.folder); if Path::new(&fname).exists() { dtf::append(&fname, &self.v); return Some(true); @@ -87,7 +88,7 @@ impl Store { /// load size from file fn load_size_from_file(&mut self) { - let header_size = dtf::get_size(&format!("{}/{}", self.folder, self.name)); + let header_size = dtf::get_size(&format!("{}/{}.dtf", self.folder, self.name)); self.size = header_size; } @@ -107,6 +108,23 @@ struct State { current_store_name: String, settings: Settings } +impl State { + + fn add (&mut self, up: dtf::Update) { + let current_store = self.store.get_mut(&self.current_store_name).expect("KEY IS NOT IN HASHMAP"); + current_store.add(up); + } + + fn autoflush(&mut self) { + let current_store = self.store.get_mut(&self.current_store_name).expect("KEY IS NOT IN HASHMAP"); + if self.settings.autoflush && current_store.size % self.settings.flush_interval as u64 == 0 { + println!("(AUTO) FLUSHING!"); + current_store.flush(); + current_store.load_size_from_file(); + } + } + +} /// Parses a line that looks like /// @@ -157,7 +175,6 @@ fn gen_response(string : &str, state: &mut State) -> (Option, Option (Some("PONG.\n".to_owned()), None), "HELP" => (Some(HELP_STR.to_owned()), None), "INFO" => { - println!("{:?}", state.store.values()); let info_vec : Vec = state.store.values().map(|store| { format!(r#"{{"name": "{}", "in_memory": {}, "count": {}}}"#, store.name, store.in_memory, store.size) }).collect(); @@ -206,12 +223,8 @@ fn gen_response(string : &str, state: &mut State) -> (Option, Option { - let current_store = state.store.get_mut(&state.current_store_name).expect("KEY IS NOT IN HASHMAP"); - current_store.add(up); - if state.settings.autoflush && current_store.size % state.settings.flush_interval as u64 == 0 { - println!("(AUTO) FLUSHING!"); - current_store.flush(); - } + state.add(up); + state.autoflush(); } None => return (None, None) } @@ -222,8 +235,8 @@ fn gen_response(string : &str, state: &mut State) -> (Option, Option { - let current_store = state.store.get_mut(&state.current_store_name).expect("KEY IS NOT IN HASHMAP"); - current_store.add(up); + state.add(up); + state.autoflush(); (Some("1\n".to_owned()), None) } None => return (None, None)