src/rrd/cache.rs: display/log error when RRD load fails
This commit is contained in:
		| @ -56,7 +56,12 @@ pub fn update_value(rel_path: &str, value: f64, dst: DST) -> Result<(), Error> { | ||||
|     } else { | ||||
|         let mut rrd = match RRD::load(&path) { | ||||
|             Ok(rrd) => rrd, | ||||
|             Err(_) => RRD::new(dst), | ||||
|             Err(err) => { | ||||
|                 if err.kind() != std::io::ErrorKind::NotFound { | ||||
|                     eprintln!("overwriting old RRD file, because of load error: {}", err); | ||||
|                 } | ||||
|                 RRD::new(dst) | ||||
|             }, | ||||
|         }; | ||||
|         rrd.update(now, value); | ||||
|         rrd.save(&path)?; | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| use std::io::Read; | ||||
| use std::path::Path; | ||||
|  | ||||
| use anyhow::{bail, Error}; | ||||
| use anyhow::Error; | ||||
|  | ||||
| use crate::api2::types::{RRDMode, RRDTimeFrameResolution}; | ||||
|  | ||||
| @ -275,10 +275,11 @@ impl RRD { | ||||
|         (start, reso, list.into()) | ||||
|     } | ||||
|  | ||||
|     pub fn from_raw(mut raw: &[u8]) -> Result<Self, Error> { | ||||
|     pub fn from_raw(mut raw: &[u8]) -> Result<Self, std::io::Error> { | ||||
|         let expected_len = std::mem::size_of::<RRD>(); | ||||
|         if raw.len() != expected_len { | ||||
|             bail!("RRD::from_raw failed - wrong data size ({} != {})", raw.len(), expected_len); | ||||
|             let msg = format!("wrong data size ({} != {})", raw.len(), expected_len); | ||||
|             return Err(std::io::Error::new(std::io::ErrorKind::Other, msg)); | ||||
|         } | ||||
|  | ||||
|         let mut rrd: RRD = unsafe { std::mem::zeroed() }; | ||||
| @ -288,15 +289,21 @@ impl RRD { | ||||
|         } | ||||
|  | ||||
|         if rrd.magic != PROXMOX_RRD_MAGIC_1_0 { | ||||
|             bail!("RRD::from_raw failed - wrong magic number"); | ||||
|             let msg = format!("wrong magic number"); | ||||
|             return Err(std::io::Error::new(std::io::ErrorKind::Other, msg)); | ||||
|         } | ||||
|  | ||||
|         Ok(rrd) | ||||
|     } | ||||
|  | ||||
|     pub fn load(filename: &Path) -> Result<Self, Error> { | ||||
|         let raw = proxmox::tools::fs::file_get_contents(filename)?; | ||||
|         Self::from_raw(&raw) | ||||
|     pub fn load(path: &Path) -> Result<Self, std::io::Error> { | ||||
|         proxmox::try_block!({ | ||||
|             let raw = std::fs::read(path)?; | ||||
|             Self::from_raw(&raw) | ||||
|         }).map_err(|err| { | ||||
|             let msg = format!("RRD load {:?} failed - {}", path, err); | ||||
|             std::io::Error::new(std::io::ErrorKind::Other, msg) | ||||
|         }) | ||||
|     } | ||||
|  | ||||
|     pub fn save(&self, filename: &Path) -> Result<(), Error> { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user