diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-03-11 17:26:32 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-03-11 17:26:32 +0100 |
| commit | e1286892e59a6ca2fc44a58473ca45292e623a10 (patch) | |
| tree | 36389b06f5be667e4f13cfb1e62db4d228e75343 /kv/src/rocksdb.rs | |
| parent | 578b32c9119692fb049fa56c7d52f2fbb8d485d7 (diff) | |
| download | jellything-e1286892e59a6ca2fc44a58473ca45292e623a10.tar jellything-e1286892e59a6ca2fc44a58473ca45292e623a10.tar.bz2 jellything-e1286892e59a6ca2fc44a58473ca45292e623a10.tar.zst | |
debug info page for db kv and cache kv
Diffstat (limited to 'kv/src/rocksdb.rs')
| -rw-r--r-- | kv/src/rocksdb.rs | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/kv/src/rocksdb.rs b/kv/src/rocksdb.rs index 683e399..04d7437 100644 --- a/kv/src/rocksdb.rs +++ b/kv/src/rocksdb.rs @@ -4,11 +4,17 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ +use crate::{BlobStorage, Store, Transaction}; use anyhow::Result; +use humansize::{DECIMAL, SizeFormatter}; use rocksdb::{Direction, ErrorKind, IteratorMode, OptimisticTransactionDB}; -use std::path::Path; +use std::{ + path::Path, + sync::atomic::{AtomicU64, Ordering}, +}; -use crate::{BlobStorage, Store, Transaction}; +pub static NUM_TXN_COMMIT: AtomicU64 = AtomicU64::new(0); +pub static NUM_TXN_ATTEMPT: AtomicU64 = AtomicU64::new(0); pub fn new(path: &Path) -> Result<OptimisticTransactionDB> { Ok(OptimisticTransactionDB::open_default(path)?) @@ -18,13 +24,29 @@ impl Store for OptimisticTransactionDB { fn transaction(&self, f: &mut dyn FnMut(&mut dyn Transaction) -> Result<()>) -> Result<()> { loop { let mut txn = self.transaction(); + NUM_TXN_ATTEMPT.fetch_add(1, Ordering::Relaxed); f(&mut txn)?; match txn.commit() { - Ok(()) => break Ok(()), + Ok(()) => break, Err(e) if e.kind() == ErrorKind::Busy => continue, Err(e) => return Err(e.into()), } } + NUM_TXN_COMMIT.fetch_add(1, Ordering::Relaxed); + Ok(()) + } + fn debug_info(&self) -> Result<String> { + let size = self.get_approximate_sizes(&[rocksdb::Range::new(&[0x00], &[0xff])])[0]; + let attempts = NUM_TXN_ATTEMPT.load(Ordering::Relaxed); + let commits = NUM_TXN_COMMIT.load(Ordering::Relaxed); + let retry_factor = attempts as f64 / commits as f64; + Ok(format!( + "transactions attempted: {attempts:>12}\n\ + transactions commited: {commits:>12}\n\ + transactions retry factor: {retry_factor:>12.03}\n\ + approximate size on disk: {:>12}\n", + SizeFormatter::new(size, DECIMAL).to_string() + )) } } @@ -67,4 +89,11 @@ impl BlobStorage for OptimisticTransactionDB { fn read(&self, key: &str) -> Result<Option<Vec<u8>>> { Ok(self.get(key)?) } + fn debug_info(&self) -> Result<String> { + let size = self.get_approximate_sizes(&[rocksdb::Range::new(&[0x00], &[0xff])])[0]; + Ok(format!( + "approximate size on disk: {:>12}\n", + SizeFormatter::new(size, DECIMAL).to_string() + )) + } } |