Skip to content

Commit cb5ecfe

Browse files
committed
refactor: use DashMap instead of RwLock<HashMap>
1 parent fc30c3e commit cb5ecfe

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

src/mount.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use std::{
1515
};
1616

1717
use crossbeam_channel::{select, tick};
18+
use dashmap::DashMap;
1819
use derive_more::Deref;
1920
use lazy_static::lazy_static;
2021
use openssl::{
@@ -78,7 +79,7 @@ pub struct MountsRouter {
7879
pub barrier: Arc<dyn SecurityBarrier>,
7980
pub barrier_prefix: String,
8081
pub router_prefix: String,
81-
pub backends: Mutex<HashMap<String, Arc<LogicalBackendNewFunc>>>,
82+
pub backends: DashMap<String, Arc<LogicalBackendNewFunc>>,
8283
}
8384

8485
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
@@ -118,7 +119,7 @@ impl MountsRouter {
118119
barrier,
119120
barrier_prefix: barrier_prefix.to_string(),
120121
router_prefix: router_prefix.to_string(),
121-
backends: Mutex::new(HashMap::new()),
122+
backends: DashMap::new(),
122123
}
123124
}
124125

@@ -150,26 +151,25 @@ impl MountsRouter {
150151
}
151152

152153
pub fn get_backend(&self, logical_type: &str) -> Result<Arc<LogicalBackendNewFunc>, RvError> {
153-
let backends = self.backends.lock().unwrap();
154-
if let Some(backend) = backends.get(logical_type) {
154+
if let Some(backend) = self.backends.get(logical_type) {
155155
Ok(backend.clone())
156156
} else {
157157
Err(RvError::ErrCoreLogicalBackendNoExist)
158158
}
159159
}
160160

161161
pub fn add_backend(&self, logical_type: &str, backend: Arc<LogicalBackendNewFunc>) -> Result<(), RvError> {
162-
let mut backends = self.backends.lock().unwrap();
163-
if backends.contains_key(logical_type) {
162+
let result = self.backends.entry(logical_type.to_string()).or_try_insert_with(|| Ok::<_, ()>(backend));
163+
164+
if result.is_err() {
164165
return Err(RvError::ErrCoreLogicalBackendExist);
165166
}
166-
backends.insert(logical_type.to_string(), backend);
167+
167168
Ok(())
168169
}
169170

170171
pub fn delete_backend(&self, logical_type: &str) -> Result<(), RvError> {
171-
let mut backends = self.backends.lock().unwrap();
172-
backends.remove(logical_type);
172+
self.backends.remove(logical_type);
173173
Ok(())
174174
}
175175
}

0 commit comments

Comments
 (0)