Buffered read/writes in dht persistence

This commit is contained in:
Igor Katson 2023-07-14 00:15:38 +01:00
parent 3428de8f3d
commit 2a2a4da196
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5

View file

@ -2,6 +2,7 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::fs::OpenOptions; use std::fs::OpenOptions;
use std::io::{BufReader, BufWriter};
use std::net::SocketAddr; use std::net::SocketAddr;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::time::Duration; use std::time::Duration;
@ -30,12 +31,13 @@ pub struct PersistentDht {
} }
fn dump_dht(dht: &Dht, filename: &Path, tempfile_name: &Path) -> anyhow::Result<()> { fn dump_dht(dht: &Dht, filename: &Path, tempfile_name: &Path) -> anyhow::Result<()> {
let mut file = OpenOptions::new() let file = OpenOptions::new()
.truncate(true) .truncate(true)
.create(true) .create(true)
.write(true) .write(true)
.open(tempfile_name) .open(tempfile_name)
.with_context(|| format!("error opening {tempfile_name:?}"))?; .with_context(|| format!("error opening {tempfile_name:?}"))?;
let mut file = BufWriter::new(file);
let addr = dht.listen_addr(); let addr = dht.listen_addr();
match dht match dht
@ -76,7 +78,8 @@ impl PersistentDht {
let de = match OpenOptions::new().read(true).open(&config_filename) { let de = match OpenOptions::new().read(true).open(&config_filename) {
Ok(dht_json) => { Ok(dht_json) => {
match serde_json::from_reader::<_, DhtSerialize<RoutingTable>>(&dht_json) { let reader = BufReader::new(dht_json);
match serde_json::from_reader::<_, DhtSerialize<RoutingTable>>(reader) {
Ok(r) => { Ok(r) => {
info!("loaded DHT routing table from {:?}", &config_filename); info!("loaded DHT routing table from {:?}", &config_filename);
Some(r) Some(r)