Skip to content

Commit 465461a

Browse files
committed
fix: avoid token bucket access if memory cache exists
1 parent 641e3bd commit 465461a

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

libs/jwst-storage/src/storage/docs/database.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,14 @@ impl DocDBStorage {
280280
#[async_trait]
281281
impl DocStorage<JwstStorageError> for DocDBStorage {
282282
async fn detect_workspace(&self, workspace_id: &str) -> JwstStorageResult<bool> {
283+
if self.workspaces.read().await.contains_key(workspace_id) {
284+
return Ok(true);
285+
}
286+
283287
trace!("check workspace exists: get lock");
284288
let _lock = self.bucket.read().await;
285289

286-
Ok(self.workspaces.read().await.contains_key(workspace_id)
287-
|| Self::workspace_count(&self.pool, workspace_id).await.map(|c| c > 0)?)
290+
Ok(Self::workspace_count(&self.pool, workspace_id).await.map(|c| c > 0)?)
288291
}
289292

290293
async fn get_or_create_workspace(&self, workspace_id: String) -> JwstStorageResult<Workspace> {
@@ -319,11 +322,11 @@ impl DocStorage<JwstStorageError> for DocDBStorage {
319322
}
320323

321324
async fn delete_workspace(&self, workspace_id: &str) -> JwstStorageResult<()> {
322-
debug!("delete workspace: get lock");
323-
let _lock = self.bucket.write().await;
324-
325325
debug!("delete workspace cache: {workspace_id}");
326326
self.workspaces.write().await.remove(workspace_id);
327+
328+
debug!("delete workspace: get lock");
329+
let _lock = self.bucket.write().await;
327330
DocDBStorage::delete_workspace(&self.pool, workspace_id).await?;
328331

329332
Ok(())
@@ -361,13 +364,12 @@ impl DocStorage<JwstStorageError> for DocDBStorage {
361364
}
362365

363366
async fn update_doc_with_guid(&self, workspace_id: String, data: &[u8]) -> JwstStorageResult<()> {
364-
debug!("write_update: get lock");
365-
let _lock = self.bucket.write().await;
366-
367367
trace!("write_update: {:?}", data);
368368
let mut decoder = RawDecoder::new(data.to_vec());
369369
let guid = decoder.read_var_string()?;
370370

371+
debug!("write_update: get lock");
372+
let _lock = self.bucket.write().await;
371373
self.update(&self.pool, &workspace_id, &guid, decoder.drain()).await?;
372374

373375
Ok(())

0 commit comments

Comments
 (0)