liquid_cache_storage/cache/
stats.rs1use std::path::PathBuf;
2use std::sync::atomic::{AtomicU64, Ordering};
3
4#[derive(Debug, Default)]
6pub struct RuntimeStats {
7 pub(crate) get_arrow_array_calls: AtomicU64,
9 pub(crate) get_with_selection_calls: AtomicU64,
11 pub(crate) get_with_predicate_calls: AtomicU64,
13 pub(crate) get_predicate_hybrid_success: AtomicU64,
15 pub(crate) get_predicate_hybrid_needs_io: AtomicU64,
17 pub(crate) get_predicate_hybrid_unsupported: AtomicU64,
19 pub(crate) try_read_liquid_calls: AtomicU64,
21}
22
23#[derive(Debug, Clone, Copy)]
25pub struct RuntimeStatsSnapshot {
26 pub get_arrow_array_calls: u64,
28 pub get_with_selection_calls: u64,
30 pub get_with_predicate_calls: u64,
32 pub get_predicate_hybrid_success: u64,
34 pub get_predicate_hybrid_needs_io: u64,
36 pub get_predicate_hybrid_unsupported: u64,
38 pub try_read_liquid_calls: u64,
40}
41
42impl RuntimeStats {
43 pub fn consume_snapshot(&self) -> RuntimeStatsSnapshot {
45 let v = RuntimeStatsSnapshot {
46 get_arrow_array_calls: self.get_arrow_array_calls.load(Ordering::Relaxed),
47 get_with_selection_calls: self.get_with_selection_calls.load(Ordering::Relaxed),
48 get_with_predicate_calls: self.get_with_predicate_calls.load(Ordering::Relaxed),
49 get_predicate_hybrid_success: self.get_predicate_hybrid_success.load(Ordering::Relaxed),
50 get_predicate_hybrid_needs_io: self
51 .get_predicate_hybrid_needs_io
52 .load(Ordering::Relaxed),
53 get_predicate_hybrid_unsupported: self
54 .get_predicate_hybrid_unsupported
55 .load(Ordering::Relaxed),
56 try_read_liquid_calls: self.try_read_liquid_calls.load(Ordering::Relaxed),
57 };
58 self.reset();
59 v
60 }
61
62 #[inline]
64 pub fn incr_get_arrow_array(&self) {
65 self.get_arrow_array_calls.fetch_add(1, Ordering::Relaxed);
66 }
67
68 #[inline]
70 pub fn incr_get_with_selection(&self) {
71 self.get_with_selection_calls
72 .fetch_add(1, Ordering::Relaxed);
73 }
74
75 #[inline]
77 pub fn incr_get_with_predicate(&self) {
78 self.get_with_predicate_calls
79 .fetch_add(1, Ordering::Relaxed);
80 }
81
82 #[inline]
84 pub fn incr_try_read_liquid(&self) {
85 self.try_read_liquid_calls.fetch_add(1, Ordering::Relaxed);
86 }
87
88 #[inline]
90 pub fn incr_get_predicate_hybrid_success(&self) {
91 self.get_predicate_hybrid_success
92 .fetch_add(1, Ordering::Relaxed);
93 }
94
95 #[inline]
97 pub fn incr_get_predicate_hybrid_needs_io(&self) {
98 self.get_predicate_hybrid_needs_io
99 .fetch_add(1, Ordering::Relaxed);
100 }
101
102 #[inline]
104 pub fn incr_get_predicate_hybrid_unsupported(&self) {
105 self.get_predicate_hybrid_unsupported
106 .fetch_add(1, Ordering::Relaxed);
107 }
108
109 pub fn reset(&self) {
111 self.get_arrow_array_calls.store(0, Ordering::Relaxed);
112 self.get_with_selection_calls.store(0, Ordering::Relaxed);
113 self.get_with_predicate_calls.store(0, Ordering::Relaxed);
114 self.get_predicate_hybrid_success
115 .store(0, Ordering::Relaxed);
116 self.get_predicate_hybrid_needs_io
117 .store(0, Ordering::Relaxed);
118 self.get_predicate_hybrid_unsupported
119 .store(0, Ordering::Relaxed);
120 self.try_read_liquid_calls.store(0, Ordering::Relaxed);
121 }
122}
123
124#[derive(Debug, Clone)]
126pub struct CacheStats {
127 pub total_entries: usize,
129 pub memory_arrow_entries: usize,
131 pub memory_liquid_entries: usize,
133 pub memory_hybrid_liquid_entries: usize,
135 pub disk_liquid_entries: usize,
137 pub disk_arrow_entries: usize,
139 pub memory_usage_bytes: usize,
141 pub disk_usage_bytes: usize,
143 pub max_cache_bytes: usize,
145 pub cache_root_dir: PathBuf,
147 pub runtime: RuntimeStatsSnapshot,
149}