1use {
2 crate::{accounts_index::AccountsIndexRootsStats, append_vec::APPEND_VEC_STATS},
3 solana_sdk::timing::AtomicInterval,
4 std::{
5 num::Saturating,
6 sync::atomic::{AtomicU64, AtomicUsize, Ordering},
7 },
8};
9
10#[derive(Debug, Default)]
11pub struct AccountsStats {
12 pub delta_hash_scan_time_total_us: AtomicU64,
13 pub delta_hash_accumulate_time_total_us: AtomicU64,
14 pub delta_hash_num: AtomicU64,
15 pub skipped_rewrites_num: AtomicUsize,
16
17 pub last_store_report: AtomicInterval,
18 pub store_hash_accounts: AtomicU64,
19 pub calc_stored_meta: AtomicU64,
20 pub store_accounts: AtomicU64,
21 pub store_update_index: AtomicU64,
22 pub store_handle_reclaims: AtomicU64,
23 pub store_append_accounts: AtomicU64,
24 pub stakes_cache_check_and_store_us: AtomicU64,
25 pub store_num_accounts: AtomicU64,
26 pub store_total_data: AtomicU64,
27 pub create_store_count: AtomicU64,
28 pub store_get_slot_store: AtomicU64,
29 pub store_find_existing: AtomicU64,
30 pub dropped_stores: AtomicU64,
31 pub handle_dead_keys_us: AtomicU64,
32 pub purge_exact_us: AtomicU64,
33 pub purge_exact_count: AtomicU64,
34}
35
36#[derive(Debug, Default)]
37pub struct PurgeStats {
38 pub last_report: AtomicInterval,
39 pub safety_checks_elapsed: AtomicU64,
40 pub remove_cache_elapsed: AtomicU64,
41 pub remove_storage_entries_elapsed: AtomicU64,
42 pub drop_storage_entries_elapsed: AtomicU64,
43 pub num_cached_slots_removed: AtomicUsize,
44 pub num_stored_slots_removed: AtomicUsize,
45 pub total_removed_storage_entries: AtomicUsize,
46 pub total_removed_cached_bytes: AtomicU64,
47 pub total_removed_stored_bytes: AtomicU64,
48 pub scan_storages_elapsed: AtomicU64,
49 pub purge_accounts_index_elapsed: AtomicU64,
50 pub handle_reclaims_elapsed: AtomicU64,
51}
52
53impl PurgeStats {
54 pub fn report(&self, metric_name: &'static str, report_interval_ms: Option<u64>) {
55 let should_report = report_interval_ms
56 .map(|report_interval_ms| self.last_report.should_update(report_interval_ms))
57 .unwrap_or(true);
58
59 if should_report {
60 datapoint_info!(
61 metric_name,
62 (
63 "safety_checks_elapsed",
64 self.safety_checks_elapsed.swap(0, Ordering::Relaxed),
65 i64
66 ),
67 (
68 "remove_cache_elapsed",
69 self.remove_cache_elapsed.swap(0, Ordering::Relaxed),
70 i64
71 ),
72 (
73 "remove_storage_entries_elapsed",
74 self.remove_storage_entries_elapsed
75 .swap(0, Ordering::Relaxed),
76 i64
77 ),
78 (
79 "drop_storage_entries_elapsed",
80 self.drop_storage_entries_elapsed.swap(0, Ordering::Relaxed),
81 i64
82 ),
83 (
84 "num_cached_slots_removed",
85 self.num_cached_slots_removed.swap(0, Ordering::Relaxed),
86 i64
87 ),
88 (
89 "num_stored_slots_removed",
90 self.num_stored_slots_removed.swap(0, Ordering::Relaxed),
91 i64
92 ),
93 (
94 "total_removed_storage_entries",
95 self.total_removed_storage_entries
96 .swap(0, Ordering::Relaxed),
97 i64
98 ),
99 (
100 "total_removed_cached_bytes",
101 self.total_removed_cached_bytes.swap(0, Ordering::Relaxed),
102 i64
103 ),
104 (
105 "total_removed_stored_bytes",
106 self.total_removed_stored_bytes.swap(0, Ordering::Relaxed),
107 i64
108 ),
109 (
110 "scan_storages_elapsed",
111 self.scan_storages_elapsed.swap(0, Ordering::Relaxed),
112 i64
113 ),
114 (
115 "purge_accounts_index_elapsed",
116 self.purge_accounts_index_elapsed.swap(0, Ordering::Relaxed),
117 i64
118 ),
119 (
120 "handle_reclaims_elapsed",
121 self.handle_reclaims_elapsed.swap(0, Ordering::Relaxed),
122 i64
123 ),
124 );
125 }
126 }
127}
128
129#[derive(Default, Debug)]
130pub struct StoreAccountsTiming {
131 pub store_accounts_elapsed: u64,
132 pub update_index_elapsed: u64,
133 pub handle_reclaims_elapsed: u64,
134}
135
136impl StoreAccountsTiming {
137 pub fn accumulate(&mut self, other: &Self) {
138 self.store_accounts_elapsed += other.store_accounts_elapsed;
139 self.update_index_elapsed += other.update_index_elapsed;
140 self.handle_reclaims_elapsed += other.handle_reclaims_elapsed;
141 }
142}
143
144#[derive(Debug, Default)]
145pub struct FlushStats {
146 pub num_flushed: Saturating<usize>,
147 pub num_purged: Saturating<usize>,
148 pub total_size: Saturating<u64>,
149 pub store_accounts_timing: StoreAccountsTiming,
150 pub store_accounts_total_us: Saturating<u64>,
151}
152
153impl FlushStats {
154 pub fn accumulate(&mut self, other: &Self) {
155 self.num_flushed += other.num_flushed;
156 self.num_purged += other.num_purged;
157 self.total_size += other.total_size;
158 self.store_accounts_timing
159 .accumulate(&other.store_accounts_timing);
160 self.store_accounts_total_us += other.store_accounts_total_us;
161 }
162}
163
164#[derive(Debug, Default)]
165pub struct LatestAccountsIndexRootsStats {
166 pub roots_len: AtomicUsize,
167 pub uncleaned_roots_len: AtomicUsize,
168 pub roots_range: AtomicU64,
169 pub rooted_cleaned_count: AtomicUsize,
170 pub unrooted_cleaned_count: AtomicUsize,
171 pub clean_unref_from_storage_us: AtomicU64,
172 pub clean_dead_slot_us: AtomicU64,
173}
174
175impl LatestAccountsIndexRootsStats {
176 pub fn update(&self, accounts_index_roots_stats: &AccountsIndexRootsStats) {
177 if let Some(value) = accounts_index_roots_stats.roots_len {
178 self.roots_len.store(value, Ordering::Relaxed);
179 }
180 if let Some(value) = accounts_index_roots_stats.uncleaned_roots_len {
181 self.uncleaned_roots_len.store(value, Ordering::Relaxed);
182 }
183 if let Some(value) = accounts_index_roots_stats.roots_range {
184 self.roots_range.store(value, Ordering::Relaxed);
185 }
186 self.rooted_cleaned_count.fetch_add(
187 accounts_index_roots_stats.rooted_cleaned_count,
188 Ordering::Relaxed,
189 );
190 self.unrooted_cleaned_count.fetch_add(
191 accounts_index_roots_stats.unrooted_cleaned_count,
192 Ordering::Relaxed,
193 );
194 self.clean_unref_from_storage_us.fetch_add(
195 accounts_index_roots_stats.clean_unref_from_storage_us,
196 Ordering::Relaxed,
197 );
198 self.clean_dead_slot_us.fetch_add(
199 accounts_index_roots_stats.clean_dead_slot_us,
200 Ordering::Relaxed,
201 );
202 }
203
204 pub fn report(&self) {
205 datapoint_info!(
206 "accounts_index_roots_len",
207 ("roots_len", self.roots_len.load(Ordering::Relaxed), i64),
208 (
209 "uncleaned_roots_len",
210 self.uncleaned_roots_len.load(Ordering::Relaxed),
211 i64
212 ),
213 (
214 "roots_range_width",
215 self.roots_range.load(Ordering::Relaxed),
216 i64
217 ),
218 (
219 "unrooted_cleaned_count",
220 self.unrooted_cleaned_count.swap(0, Ordering::Relaxed),
221 i64
222 ),
223 (
224 "rooted_cleaned_count",
225 self.rooted_cleaned_count.swap(0, Ordering::Relaxed),
226 i64
227 ),
228 (
229 "clean_unref_from_storage_us",
230 self.clean_unref_from_storage_us.swap(0, Ordering::Relaxed),
231 i64
232 ),
233 (
234 "clean_dead_slot_us",
235 self.clean_dead_slot_us.swap(0, Ordering::Relaxed),
236 i64
237 ),
238 (
239 "append_vecs_open",
240 APPEND_VEC_STATS.mmap_files_open.load(Ordering::Relaxed),
241 i64
242 ),
243 (
244 "append_vecs_dirty",
245 APPEND_VEC_STATS.mmap_files_dirty.load(Ordering::Relaxed),
246 i64
247 ),
248 (
249 "append_vecs_open_as_file_io",
250 APPEND_VEC_STATS.open_as_file_io.load(Ordering::Relaxed),
251 i64
252 )
253 );
254
255 }
257}
258
259#[derive(Debug, Default)]
260pub struct CleanAccountsStats {
261 pub purge_stats: PurgeStats,
262 pub latest_accounts_index_roots_stats: LatestAccountsIndexRootsStats,
263
264 pub clean_old_root_us: AtomicU64,
266 pub clean_old_root_reclaim_us: AtomicU64,
267 pub remove_dead_accounts_remove_us: AtomicU64,
268 pub remove_dead_accounts_shrink_us: AtomicU64,
269 pub clean_stored_dead_slots_us: AtomicU64,
270 pub get_account_sizes_us: AtomicU64,
271 pub slots_cleaned: AtomicU64,
272}
273
274impl CleanAccountsStats {
275 pub fn report(&self) {
276 self.purge_stats.report("clean_purge_slots_stats", None);
277 self.latest_accounts_index_roots_stats.report();
278 }
279}
280
281#[derive(Debug, Default)]
282pub struct ShrinkAncientStats {
283 pub shrink_stats: ShrinkStats,
284 pub ancient_append_vecs_shrunk: AtomicU64,
285 pub total_us: AtomicU64,
286 pub random_shrink: AtomicU64,
287 pub slots_considered: AtomicU64,
288 pub ancient_scanned: AtomicU64,
289 pub bytes_ancient_created: AtomicU64,
290 pub bytes_from_must_shrink: AtomicU64,
291 pub bytes_from_smallest_storages: AtomicU64,
292 pub bytes_from_newest_storages: AtomicU64,
293 pub many_ref_slots_skipped: AtomicU64,
294 pub slots_cannot_move_count: AtomicU64,
295 pub many_refs_old_alive: AtomicU64,
296 pub slots_eligible_to_shrink: AtomicU64,
297 pub total_dead_bytes: AtomicU64,
298 pub total_alive_bytes: AtomicU64,
299 pub slot: AtomicU64,
300 pub ideal_storage_size: AtomicU64,
301}
302
303#[derive(Debug, Default)]
304pub struct ShrinkStatsSub {
305 pub store_accounts_timing: StoreAccountsTiming,
306 pub rewrite_elapsed_us: Saturating<u64>,
307 pub create_and_insert_store_elapsed_us: Saturating<u64>,
308 pub unpackable_slots_count: Saturating<usize>,
309 pub newest_alive_packed_count: Saturating<usize>,
310}
311
312impl ShrinkStatsSub {
313 pub fn accumulate(&mut self, other: &Self) {
314 self.store_accounts_timing
315 .accumulate(&other.store_accounts_timing);
316 self.rewrite_elapsed_us += other.rewrite_elapsed_us;
317 self.create_and_insert_store_elapsed_us += other.create_and_insert_store_elapsed_us;
318 self.unpackable_slots_count += other.unpackable_slots_count;
319 self.newest_alive_packed_count += other.newest_alive_packed_count;
320 }
321}
322#[derive(Debug, Default)]
323pub struct ShrinkStats {
324 pub last_report: AtomicInterval,
325 pub num_slots_shrunk: AtomicUsize,
326 pub storage_read_elapsed: AtomicU64,
327 pub num_duplicated_accounts: AtomicU64,
328 pub index_read_elapsed: AtomicU64,
329 pub create_and_insert_store_elapsed: AtomicU64,
330 pub store_accounts_elapsed: AtomicU64,
331 pub update_index_elapsed: AtomicU64,
332 pub handle_reclaims_elapsed: AtomicU64,
333 pub remove_old_stores_shrink_us: AtomicU64,
334 pub rewrite_elapsed: AtomicU64,
335 pub unpackable_slots_count: AtomicU64,
336 pub newest_alive_packed_count: AtomicU64,
337 pub drop_storage_entries_elapsed: AtomicU64,
338 pub accounts_removed: AtomicUsize,
339 pub bytes_removed: AtomicU64,
340 pub bytes_written: AtomicU64,
341 pub skipped_shrink: AtomicU64,
342 pub dead_accounts: AtomicU64,
343 pub alive_accounts: AtomicU64,
344 pub index_scan_returned_none: AtomicU64,
345 pub index_scan_returned_some: AtomicU64,
346 pub accounts_loaded: AtomicU64,
347 pub initial_candidates_count: AtomicU64,
348 pub purged_zero_lamports: AtomicU64,
349 pub accounts_not_found_in_index: AtomicU64,
350 pub num_ancient_slots_shrunk: AtomicU64,
351 pub ancient_slots_added_to_shrink: AtomicU64,
352 pub ancient_bytes_added_to_shrink: AtomicU64,
353 pub num_dead_slots_added_to_clean: AtomicU64,
354 pub num_slots_with_zero_lamport_accounts_added_to_shrink: AtomicU64,
355 pub marking_zero_dead_accounts_in_non_shrinkable_store: AtomicU64,
356 pub num_zero_lamport_single_ref_accounts_found: AtomicU64,
357}
358
359impl ShrinkStats {
360 pub fn report(&self) {
361 if self.last_report.should_update(1000) {
362 datapoint_info!(
363 "shrink_stats",
364 (
365 "ancient_slots_added_to_shrink",
366 self.ancient_slots_added_to_shrink
367 .swap(0, Ordering::Relaxed),
368 i64
369 ),
370 (
371 "ancient_bytes_added_to_shrink",
372 self.ancient_bytes_added_to_shrink
373 .swap(0, Ordering::Relaxed),
374 i64
375 ),
376 (
377 "num_slots_shrunk",
378 self.num_slots_shrunk.swap(0, Ordering::Relaxed),
379 i64
380 ),
381 (
382 "index_scan_returned_none",
383 self.index_scan_returned_none.swap(0, Ordering::Relaxed),
384 i64
385 ),
386 (
387 "index_scan_returned_some",
388 self.index_scan_returned_some.swap(0, Ordering::Relaxed),
389 i64
390 ),
391 (
392 "storage_read_elapsed",
393 self.storage_read_elapsed.swap(0, Ordering::Relaxed),
394 i64
395 ),
396 (
397 "num_duplicated_accounts",
398 self.num_duplicated_accounts.swap(0, Ordering::Relaxed),
399 i64
400 ),
401 (
402 "index_read_elapsed",
403 self.index_read_elapsed.swap(0, Ordering::Relaxed),
404 i64
405 ),
406 (
407 "create_and_insert_store_elapsed",
408 self.create_and_insert_store_elapsed
409 .swap(0, Ordering::Relaxed),
410 i64
411 ),
412 (
413 "store_accounts_elapsed",
414 self.store_accounts_elapsed.swap(0, Ordering::Relaxed),
415 i64
416 ),
417 (
418 "update_index_elapsed",
419 self.update_index_elapsed.swap(0, Ordering::Relaxed),
420 i64
421 ),
422 (
423 "handle_reclaims_elapsed",
424 self.handle_reclaims_elapsed.swap(0, Ordering::Relaxed),
425 i64
426 ),
427 (
428 "remove_old_stores_shrink_us",
429 self.remove_old_stores_shrink_us.swap(0, Ordering::Relaxed),
430 i64
431 ),
432 (
433 "rewrite_elapsed",
434 self.rewrite_elapsed.swap(0, Ordering::Relaxed),
435 i64
436 ),
437 (
438 "drop_storage_entries_elapsed",
439 self.drop_storage_entries_elapsed.swap(0, Ordering::Relaxed),
440 i64
441 ),
442 (
443 "accounts_removed",
444 self.accounts_removed.swap(0, Ordering::Relaxed),
445 i64
446 ),
447 (
448 "bytes_removed",
449 self.bytes_removed.swap(0, Ordering::Relaxed),
450 i64
451 ),
452 (
453 "bytes_written",
454 self.bytes_written.swap(0, Ordering::Relaxed),
455 i64
456 ),
457 (
458 "skipped_shrink",
459 self.skipped_shrink.swap(0, Ordering::Relaxed),
460 i64
461 ),
462 (
463 "alive_accounts",
464 self.alive_accounts.swap(0, Ordering::Relaxed),
465 i64
466 ),
467 (
468 "dead_accounts",
469 self.dead_accounts.swap(0, Ordering::Relaxed),
470 i64
471 ),
472 (
473 "accounts_loaded",
474 self.accounts_loaded.swap(0, Ordering::Relaxed),
475 i64
476 ),
477 (
478 "purged_zero_lamports_count",
479 self.purged_zero_lamports.swap(0, Ordering::Relaxed),
480 i64
481 ),
482 (
483 "num_ancient_slots_shrunk",
484 self.num_ancient_slots_shrunk.swap(0, Ordering::Relaxed),
485 i64
486 ),
487 (
488 "accounts_not_found_in_index",
489 self.accounts_not_found_in_index.swap(0, Ordering::Relaxed),
490 i64
491 ),
492 (
493 "initial_candidates_count",
494 self.initial_candidates_count.swap(0, Ordering::Relaxed),
495 i64
496 ),
497 (
498 "num_dead_slots_added_to_clean",
499 self.num_dead_slots_added_to_clean
500 .swap(0, Ordering::Relaxed),
501 i64
502 ),
503 (
504 "num_slots_with_zero_lamport_accounts_added_to_shrink",
505 self.num_slots_with_zero_lamport_accounts_added_to_shrink
506 .swap(0, Ordering::Relaxed),
507 i64
508 ),
509 (
510 "marking_zero_dead_accounts_in_non_shrinkable_store",
511 self.marking_zero_dead_accounts_in_non_shrinkable_store
512 .swap(0, Ordering::Relaxed),
513 i64
514 ),
515 (
516 "num_zero_lamport_single_ref_accounts_found",
517 self.num_zero_lamport_single_ref_accounts_found
518 .swap(0, Ordering::Relaxed),
519 i64
520 ),
521 );
522 }
523 }
524}
525
526impl ShrinkAncientStats {
527 pub fn report(&self) {
528 datapoint_info!(
529 "shrink_ancient_stats",
530 (
531 "num_slots_shrunk",
532 self.shrink_stats
533 .num_slots_shrunk
534 .swap(0, Ordering::Relaxed),
535 i64
536 ),
537 (
538 "index_scan_returned_none",
539 self.shrink_stats
540 .index_scan_returned_none
541 .swap(0, Ordering::Relaxed),
542 i64
543 ),
544 (
545 "index_scan_returned_some",
546 self.shrink_stats
547 .index_scan_returned_some
548 .swap(0, Ordering::Relaxed),
549 i64
550 ),
551 (
552 "storage_read_elapsed",
553 self.shrink_stats
554 .storage_read_elapsed
555 .swap(0, Ordering::Relaxed),
556 i64
557 ),
558 (
559 "num_duplicated_accounts",
560 self.shrink_stats
561 .num_duplicated_accounts
562 .swap(0, Ordering::Relaxed),
563 i64
564 ),
565 (
566 "index_read_elapsed",
567 self.shrink_stats
568 .index_read_elapsed
569 .swap(0, Ordering::Relaxed),
570 i64
571 ),
572 (
573 "create_and_insert_store_elapsed",
574 self.shrink_stats
575 .create_and_insert_store_elapsed
576 .swap(0, Ordering::Relaxed),
577 i64
578 ),
579 (
580 "store_accounts_elapsed",
581 self.shrink_stats
582 .store_accounts_elapsed
583 .swap(0, Ordering::Relaxed),
584 i64
585 ),
586 (
587 "update_index_elapsed",
588 self.shrink_stats
589 .update_index_elapsed
590 .swap(0, Ordering::Relaxed),
591 i64
592 ),
593 (
594 "handle_reclaims_elapsed",
595 self.shrink_stats
596 .handle_reclaims_elapsed
597 .swap(0, Ordering::Relaxed),
598 i64
599 ),
600 (
601 "remove_old_stores_shrink_us",
602 self.shrink_stats
603 .remove_old_stores_shrink_us
604 .swap(0, Ordering::Relaxed),
605 i64
606 ),
607 (
608 "rewrite_elapsed",
609 self.shrink_stats.rewrite_elapsed.swap(0, Ordering::Relaxed),
610 i64
611 ),
612 (
613 "unpackable_slots_count",
614 self.shrink_stats
615 .unpackable_slots_count
616 .swap(0, Ordering::Relaxed),
617 i64
618 ),
619 (
620 "newest_alive_packed_count",
621 self.shrink_stats
622 .newest_alive_packed_count
623 .swap(0, Ordering::Relaxed),
624 i64
625 ),
626 (
627 "drop_storage_entries_elapsed",
628 self.shrink_stats
629 .drop_storage_entries_elapsed
630 .swap(0, Ordering::Relaxed),
631 i64
632 ),
633 (
634 "accounts_removed",
635 self.shrink_stats
636 .accounts_removed
637 .swap(0, Ordering::Relaxed),
638 i64
639 ),
640 (
641 "bytes_removed",
642 self.shrink_stats.bytes_removed.swap(0, Ordering::Relaxed),
643 i64
644 ),
645 (
646 "bytes_written",
647 self.shrink_stats.bytes_written.swap(0, Ordering::Relaxed),
648 i64
649 ),
650 (
651 "alive_accounts",
652 self.shrink_stats.alive_accounts.swap(0, Ordering::Relaxed),
653 i64
654 ),
655 (
656 "dead_accounts",
657 self.shrink_stats.dead_accounts.swap(0, Ordering::Relaxed),
658 i64
659 ),
660 (
661 "accounts_loaded",
662 self.shrink_stats.accounts_loaded.swap(0, Ordering::Relaxed),
663 i64
664 ),
665 (
666 "ancient_append_vecs_shrunk",
667 self.ancient_append_vecs_shrunk.swap(0, Ordering::Relaxed),
668 i64
669 ),
670 ("random", self.random_shrink.swap(0, Ordering::Relaxed), i64),
671 (
672 "slots_eligible_to_shrink",
673 self.slots_eligible_to_shrink.swap(0, Ordering::Relaxed),
674 i64
675 ),
676 (
677 "total_dead_bytes",
678 self.total_dead_bytes.swap(0, Ordering::Relaxed),
679 i64
680 ),
681 (
682 "total_alive_bytes",
683 self.total_alive_bytes.swap(0, Ordering::Relaxed),
684 i64
685 ),
686 (
687 "slots_considered",
688 self.slots_considered.swap(0, Ordering::Relaxed),
689 i64
690 ),
691 (
692 "ancient_scanned",
693 self.ancient_scanned.swap(0, Ordering::Relaxed),
694 i64
695 ),
696 ("total_us", self.total_us.swap(0, Ordering::Relaxed), i64),
697 (
698 "bytes_ancient_created",
699 self.bytes_ancient_created.swap(0, Ordering::Relaxed),
700 i64
701 ),
702 (
703 "bytes_from_must_shrink",
704 self.bytes_from_must_shrink.swap(0, Ordering::Relaxed),
705 i64
706 ),
707 (
708 "bytes_from_smallest_storages",
709 self.bytes_from_smallest_storages.swap(0, Ordering::Relaxed),
710 i64
711 ),
712 (
713 "bytes_from_newest_storages",
714 self.bytes_from_newest_storages.swap(0, Ordering::Relaxed),
715 i64
716 ),
717 (
718 "many_ref_slots_skipped",
719 self.many_ref_slots_skipped.swap(0, Ordering::Relaxed),
720 i64
721 ),
722 (
723 "slots_cannot_move_count",
724 self.slots_cannot_move_count.swap(0, Ordering::Relaxed),
725 i64
726 ),
727 (
728 "many_refs_old_alive",
729 self.many_refs_old_alive.swap(0, Ordering::Relaxed),
730 i64
731 ),
732 (
733 "purged_zero_lamports_count",
734 self.shrink_stats
735 .purged_zero_lamports
736 .swap(0, Ordering::Relaxed),
737 i64
738 ),
739 (
740 "accounts_not_found_in_index",
741 self.shrink_stats
742 .accounts_not_found_in_index
743 .swap(0, Ordering::Relaxed),
744 i64
745 ),
746 ("slot", self.slot.load(Ordering::Relaxed), i64),
747 (
748 "ideal_storage_size",
749 self.ideal_storage_size.swap(0, Ordering::Relaxed),
750 i64
751 ),
752 );
753 }
754}