Skip to content

Commit 40fc412

Browse files
committed
fix(tauri): fix the wrong keys-scanned-count for the 'refresh-scan' command
1 parent fd52c3a commit 40fc412

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

src-tauri/app/command/client.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,7 @@ pub async fn refresh_scanned_all_keys(
135135
let redis_each_scan_count: u32 = settings_lock.get_de("redisEachScanCount").unwrap();
136136

137137
let scan_result = manager
138-
.refresh_scan(
139-
pattern,
140-
redis_each_scan_count,
141-
redis_each_scan_count + offset.unwrap_or_default(),
142-
None,
143-
)
138+
.refresh_scan(pattern, redis_each_scan_count, offset, None)
144139
.await?;
145140

146141
let result = scan_result

src-tauri/app/features/client.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -290,20 +290,18 @@ impl RedisClient {
290290
let can_continue = value.has_more();
291291
let mut scanned_keys = value.take_results().unwrap_or_default();
292292

293-
// Record scanned count.
294-
let scanned_keys_len = scanned_keys.len() as u32;
295-
scanned_count.fetch_add(scanned_keys_len, Ordering::Relaxed);
296-
297293
// Append
298294
keys.append(&mut scanned_keys);
299295

296+
// Record scanned count.
297+
// Use keys.len() to use the `.with_capacity` related functionality.
298+
scanned_count.fetch_add(keys.len() as u32, Ordering::Relaxed);
299+
300300
// If we scanned enough items
301301
// or cannot scan anymore.
302302
let scanned_count_raw = scanned_count.load(Ordering::Relaxed);
303303
let scanned_enough = scanned_count_raw >= needed_count || !can_continue;
304304
if scanned_enough {
305-
scanned_count.fetch_and(keys.len() as u32, Ordering::Relaxed);
306-
307305
sx.send(Ok(RedisScannerResult { keys, can_continue }))
308306
.unwrap();
309307
sent = true;
@@ -373,11 +371,27 @@ impl RedisClient {
373371
&mut self,
374372
pattern: String,
375373
iter_count: u32,
376-
needed_count: u32,
374+
offset: Option<u32>,
377375
r#type: Option<ScanType>,
378376
) -> Result<RedisScannerResult> {
379-
self._invoke_new_scan(pattern, iter_count.max(needed_count), needed_count, r#type)
380-
.await?;
377+
let needed_count = if self.scanner.is_some() {
378+
self.scanner
379+
.as_ref()
380+
.unwrap()
381+
.scanned_count
382+
.load(Ordering::Relaxed)
383+
} else {
384+
iter_count
385+
};
386+
387+
self._invoke_new_scan(
388+
pattern,
389+
iter_count,
390+
// Add offset until reaching the maximum num.
391+
needed_count.saturating_add(offset.unwrap_or_default()),
392+
r#type,
393+
)
394+
.await?;
381395

382396
// Continue scan.
383397
let scanner = self.scanner.as_mut().unwrap();

0 commit comments

Comments
 (0)