Skip to content

Commit

Permalink
✨ Add custom impl Debug for MmapStats
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurlm committed Sep 18, 2023
1 parent a9dd3c2 commit 20efa67
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 14 deletions.
18 changes: 16 additions & 2 deletions src/stats.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use std::sync::atomic::{AtomicU64, Ordering};
use std::{
fmt,
sync::atomic::{AtomicU64, Ordering},
};

pub(crate) static COUNT_ACTIVE_SEGMENT: AtomicU64 = AtomicU64::new(0);
pub(crate) static COUNT_FTRUNCATE_FAILED: AtomicU64 = AtomicU64::new(0);
Expand All @@ -9,9 +12,20 @@ pub(crate) static COUNT_MUNMAP_FAILED: AtomicU64 = AtomicU64::new(0);
///
/// This stats can be useful to debug or to export in various monitoring
/// systems.
#[derive(Debug, Default)]
#[derive(Default)]
pub struct MmapStats;

impl fmt::Debug for MmapStats {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("MmapStats")
.field("active", &self.active_segment())
.field("ftruncate_failed", &self.ftruncate_failed())
.field("map_failed", &self.map_failed())
.field("unmap_failed", &self.unmap_failed())
.finish()
}
}

impl MmapStats {
/// Get number of current segment mounted by this library.
///
Expand Down
38 changes: 26 additions & 12 deletions tests/test_stats.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,34 @@ use mmap_vec::{MmapStats, MmapVec};

#[test]
fn test_stats() {
assert_eq!(MmapStats.active_segment(), 0);
assert_eq!(MmapStats.ftruncate_failed(), 0);
assert_eq!(MmapStats.map_failed(), 0);
assert_eq!(MmapStats.unmap_failed(), 0);
let stats = MmapStats::default();

assert_eq!(stats.active_segment(), 0);
assert_eq!(stats.ftruncate_failed(), 0);
assert_eq!(stats.map_failed(), 0);
assert_eq!(stats.unmap_failed(), 0);
assert_eq!(
format!("{stats:?}"),
"MmapStats { active: 0, ftruncate_failed: 0, map_failed: 0, unmap_failed: 0 }"
);

let v = MmapVec::<u8>::with_capacity(500).unwrap();
assert_eq!(MmapStats.active_segment(), 1);
assert_eq!(MmapStats.ftruncate_failed(), 0);
assert_eq!(MmapStats.map_failed(), 0);
assert_eq!(MmapStats.unmap_failed(), 0);
assert_eq!(stats.active_segment(), 1);
assert_eq!(stats.ftruncate_failed(), 0);
assert_eq!(stats.map_failed(), 0);
assert_eq!(stats.unmap_failed(), 0);
assert_eq!(
format!("{stats:?}"),
"MmapStats { active: 1, ftruncate_failed: 0, map_failed: 0, unmap_failed: 0 }"
);

drop(v);
assert_eq!(MmapStats.active_segment(), 0);
assert_eq!(MmapStats.ftruncate_failed(), 0);
assert_eq!(MmapStats.map_failed(), 0);
assert_eq!(MmapStats.unmap_failed(), 0);
assert_eq!(stats.active_segment(), 0);
assert_eq!(stats.ftruncate_failed(), 0);
assert_eq!(stats.map_failed(), 0);
assert_eq!(stats.unmap_failed(), 0);
assert_eq!(
format!("{stats:?}"),
"MmapStats { active: 0, ftruncate_failed: 0, map_failed: 0, unmap_failed: 0 }"
);
}

0 comments on commit 20efa67

Please sign in to comment.