use atomicu64 for bucket maxsize instead of lock (#29569)

This commit is contained in:
HaoranYi 2023-01-10 09:15:27 -06:00 committed by GitHub
parent cc4e134079
commit d3daea65b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 18 deletions

View File

@ -1,9 +1,12 @@
use std::sync::{atomic::AtomicU64, Arc, Mutex};
use std::sync::{
atomic::{AtomicU64, Ordering},
Arc,
};
#[derive(Debug, Default)]
pub struct BucketStats {
pub resizes: AtomicU64,
pub max_size: Mutex<u64>,
pub max_size: AtomicU64,
pub resize_us: AtomicU64,
pub new_file_us: AtomicU64,
pub flush_file_us: AtomicU64,
@ -13,8 +16,7 @@ pub struct BucketStats {
impl BucketStats {
pub fn update_max_size(&self, size: u64) {
let mut max = self.max_size.lock().unwrap();
*max = std::cmp::max(*max, size);
self.max_size.fetch_max(size, Ordering::Relaxed);
}
}

View File

@ -378,13 +378,8 @@ impl BucketMapHolderStats {
),
(
"disk_index_max_size",
disk.map(|disk| {
let mut lock = disk.stats.index.max_size.lock().unwrap();
let value = *lock;
*lock = 0;
value
})
.unwrap_or_default(),
disk.map(|disk| { disk.stats.index.max_size.swap(0, Ordering::Relaxed) })
.unwrap_or_default(),
i64
),
(
@ -429,13 +424,8 @@ impl BucketMapHolderStats {
),
(
"disk_data_max_size",
disk.map(|disk| {
let mut lock = disk.stats.data.max_size.lock().unwrap();
let value = *lock;
*lock = 0;
value
})
.unwrap_or_default(),
disk.map(|disk| { disk.stats.data.max_size.swap(0, Ordering::Relaxed) })
.unwrap_or_default(),
i64
),
(