1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Copyright 2019 Conflux Foundation. All rights reserved.
// Conflux is free software and distributed under GNU General Public License.
// See http://www.gnu.org/licenses/

/// Configuration for application cache sizes.
/// All	values are represented in MB.
use std::cmp::max;

pub const DEFAULT_LEDGER_CACHE_SIZE: usize = 512;
const MIN_LEDGER_CACHE_MB: usize = 4;

pub const DEFAULT_INVALID_BLOCK_HASH_CACHE_SIZE_IN_COUNT: usize = 32 * 1024;
pub const DEFAULT_TARGET_DIFFICULTIES_CACHE_SIZE_IN_COUNT: usize = 32 * 1024;

#[derive(Debug, PartialEq)]
pub struct CacheConfig {
    /// Size of ledger cache.
    pub ledger: usize,
    /// The maximum number of cached invalid block hashes
    pub invalid_block_hashes_cache_size_in_count: usize,
    /// The maximum number of cached target difficulty values
    pub target_difficulties_cache_size_in_count: usize,
}

impl Default for CacheConfig {
    fn default() -> Self {
        CacheConfig::new(
            DEFAULT_LEDGER_CACHE_SIZE,
            DEFAULT_INVALID_BLOCK_HASH_CACHE_SIZE_IN_COUNT,
            DEFAULT_TARGET_DIFFICULTIES_CACHE_SIZE_IN_COUNT,
        )
    }
}

impl CacheConfig {
    /// Creates new cache config with given details.
    pub fn new(
        ledger: usize, invalid_block_hashes_cache_size_in_count: usize,
        target_difficulties_cache_size_in_count: usize,
    ) -> Self {
        CacheConfig {
            ledger,
            invalid_block_hashes_cache_size_in_count,
            target_difficulties_cache_size_in_count,
        }
    }

    /// Size of the ledger cache.
    pub fn ledger_mb(&self) -> usize { max(self.ledger, MIN_LEDGER_CACHE_MB) }
}