1717package org .hyperledger .besu .cli .options .stable ;
1818
1919import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .DEFAULT_BONSAI_MAX_LAYERS_TO_LOAD ;
20- import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .DEFAULT_BONSAI_TRIE_LOG_PRUNING_ENABLED ;
21- import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .DEFAULT_BONSAI_TRIE_LOG_PRUNING_LIMIT ;
22- import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .DEFAULT_BONSAI_TRIE_LOG_RETENTION_THRESHOLD ;
23- import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .MINIMUM_BONSAI_TRIE_LOG_RETENTION_THRESHOLD ;
20+ import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .DEFAULT_BONSAI_LIMIT_TRIE_LOGS_ENABLED ;
21+ import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .DEFAULT_BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE ;
22+ import static org .hyperledger .besu .ethereum .worldstate .DataStorageConfiguration .Unstable .MINIMUM_BONSAI_TRIE_LOG_RETENTION_LIMIT ;
2423
2524import org .hyperledger .besu .cli .options .CLIOptions ;
2625import org .hyperledger .besu .cli .util .CommandLineUtils ;
@@ -39,7 +38,8 @@ public class DataStorageOptions implements CLIOptions<DataStorageConfiguration>
3938
4039 private static final String DATA_STORAGE_FORMAT = "--data-storage-format" ;
4140
42- private static final String BONSAI_STORAGE_FORMAT_MAX_LAYERS_TO_LOAD =
41+ /** The maximum number of historical layers to load. */
42+ public static final String BONSAI_STORAGE_FORMAT_MAX_LAYERS_TO_LOAD =
4343 "--bonsai-historical-block-limit" ;
4444
4545 // Use Bonsai DB
@@ -54,39 +54,37 @@ public class DataStorageOptions implements CLIOptions<DataStorageConfiguration>
5454 names = {BONSAI_STORAGE_FORMAT_MAX_LAYERS_TO_LOAD , "--bonsai-maximum-back-layers-to-load" },
5555 paramLabel = "<LONG>" ,
5656 description =
57- "Limit of historical layers that can be loaded with BONSAI (default: ${DEFAULT-VALUE})." ,
57+ "Limit of historical layers that can be loaded with BONSAI (default: ${DEFAULT-VALUE}). When using "
58+ + Unstable .BONSAI_LIMIT_TRIE_LOGS_ENABLED
59+ + " it will also be used as the number of layers of trie logs to retain." ,
5860 arity = "1" )
5961 private Long bonsaiMaxLayersToLoad = DEFAULT_BONSAI_MAX_LAYERS_TO_LOAD ;
6062
6163 @ CommandLine .ArgGroup (validate = false )
6264 private final DataStorageOptions .Unstable unstableOptions = new Unstable ();
6365
64- static class Unstable {
66+ /** The unstable options for data storage. */
67+ public static class Unstable {
6568 private static final String BONSAI_LIMIT_TRIE_LOGS_ENABLED =
6669 "--Xbonsai-limit-trie-logs-enabled" ;
67- private static final String BONSAI_TRIE_LOGS_RETENTION_THRESHOLD =
68- "--Xbonsai-trie-logs-retention-threshold" ;
69- private static final String BONSAI_TRIE_LOG_PRUNING_LIMIT = "--Xbonsai-trie-logs-pruning-limit" ;
7070
71- @ CommandLine .Option (
72- hidden = true ,
73- names = {BONSAI_LIMIT_TRIE_LOGS_ENABLED },
74- description = "Enable trie log pruning. (default: ${DEFAULT-VALUE})" )
75- private boolean bonsaiTrieLogPruningEnabled = DEFAULT_BONSAI_TRIE_LOG_PRUNING_ENABLED ;
71+ /** The bonsai trie logs pruning window size. */
72+ public static final String BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE =
73+ "--Xbonsai-trie-logs-pruning-window-size" ;
7674
7775 @ CommandLine .Option (
7876 hidden = true ,
79- names = {BONSAI_TRIE_LOGS_RETENTION_THRESHOLD },
77+ names = {BONSAI_LIMIT_TRIE_LOGS_ENABLED },
8078 description =
81- "The number of blocks for which to retain trie logs . (default: ${DEFAULT-VALUE})" )
82- private long bonsaiTrieLogRetentionThreshold = DEFAULT_BONSAI_TRIE_LOG_RETENTION_THRESHOLD ;
79+ "Limit the number of trie logs that are retained . (default: ${DEFAULT-VALUE})" )
80+ private boolean bonsaiLimitTrieLogsEnabled = DEFAULT_BONSAI_LIMIT_TRIE_LOGS_ENABLED ;
8381
8482 @ CommandLine .Option (
8583 hidden = true ,
86- names = {BONSAI_TRIE_LOG_PRUNING_LIMIT },
84+ names = {BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE },
8785 description =
8886 "The max number of blocks to load and prune trie logs for at startup. (default: ${DEFAULT-VALUE})" )
89- private int bonsaiTrieLogPruningLimit = DEFAULT_BONSAI_TRIE_LOG_PRUNING_LIMIT ;
87+ private int bonsaiTrieLogPruningWindowSize = DEFAULT_BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE ;
9088 }
9189 /**
9290 * Create data storage options.
@@ -103,21 +101,31 @@ public static DataStorageOptions create() {
103101 * @param commandLine the full commandLine to check all the options specified by the user
104102 */
105103 public void validate (final CommandLine commandLine ) {
106- if (unstableOptions .bonsaiTrieLogPruningEnabled ) {
107- if (unstableOptions .bonsaiTrieLogRetentionThreshold
108- < MINIMUM_BONSAI_TRIE_LOG_RETENTION_THRESHOLD ) {
104+ if (unstableOptions .bonsaiLimitTrieLogsEnabled ) {
105+ if (bonsaiMaxLayersToLoad < MINIMUM_BONSAI_TRIE_LOG_RETENTION_LIMIT ) {
106+ throw new CommandLine .ParameterException (
107+ commandLine ,
108+ String .format (
109+ BONSAI_STORAGE_FORMAT_MAX_LAYERS_TO_LOAD + " minimum value is %d" ,
110+ MINIMUM_BONSAI_TRIE_LOG_RETENTION_LIMIT ));
111+ }
112+ if (unstableOptions .bonsaiTrieLogPruningWindowSize <= 0 ) {
109113 throw new CommandLine .ParameterException (
110114 commandLine ,
111115 String .format (
112- "--Xbonsai-trie-log-retention-threshold minimum value is %d " ,
113- MINIMUM_BONSAI_TRIE_LOG_RETENTION_THRESHOLD ));
116+ Unstable . BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE + "=%d must be greater than 0 " ,
117+ unstableOptions . bonsaiTrieLogPruningWindowSize ));
114118 }
115- if (unstableOptions .bonsaiTrieLogPruningLimit <= 0 ) {
119+ if (unstableOptions .bonsaiTrieLogPruningWindowSize <= bonsaiMaxLayersToLoad ) {
116120 throw new CommandLine .ParameterException (
117121 commandLine ,
118122 String .format (
119- "--Xbonsai-trie-log-pruning-limit=%d must be greater than 0" ,
120- unstableOptions .bonsaiTrieLogPruningLimit ));
123+ Unstable .BONSAI_TRIE_LOG_PRUNING_WINDOW_SIZE
124+ + "=%d must be greater than "
125+ + BONSAI_STORAGE_FORMAT_MAX_LAYERS_TO_LOAD
126+ + "=%d" ,
127+ unstableOptions .bonsaiTrieLogPruningWindowSize ,
128+ bonsaiMaxLayersToLoad ));
121129 }
122130 }
123131 }
@@ -126,12 +134,10 @@ static DataStorageOptions fromConfig(final DataStorageConfiguration domainObject
126134 final DataStorageOptions dataStorageOptions = DataStorageOptions .create ();
127135 dataStorageOptions .dataStorageFormat = domainObject .getDataStorageFormat ();
128136 dataStorageOptions .bonsaiMaxLayersToLoad = domainObject .getBonsaiMaxLayersToLoad ();
129- dataStorageOptions .unstableOptions .bonsaiTrieLogPruningEnabled =
130- domainObject .getUnstable ().getBonsaiTrieLogPruningEnabled ();
131- dataStorageOptions .unstableOptions .bonsaiTrieLogRetentionThreshold =
132- domainObject .getUnstable ().getBonsaiTrieLogRetentionThreshold ();
133- dataStorageOptions .unstableOptions .bonsaiTrieLogPruningLimit =
134- domainObject .getUnstable ().getBonsaiTrieLogPruningLimit ();
137+ dataStorageOptions .unstableOptions .bonsaiLimitTrieLogsEnabled =
138+ domainObject .getUnstable ().getBonsaiLimitTrieLogsEnabled ();
139+ dataStorageOptions .unstableOptions .bonsaiTrieLogPruningWindowSize =
140+ domainObject .getUnstable ().getBonsaiTrieLogPruningWindowSize ();
135141
136142 return dataStorageOptions ;
137143 }
@@ -143,9 +149,8 @@ public DataStorageConfiguration toDomainObject() {
143149 .bonsaiMaxLayersToLoad (bonsaiMaxLayersToLoad )
144150 .unstable (
145151 ImmutableDataStorageConfiguration .Unstable .builder ()
146- .bonsaiTrieLogPruningEnabled (unstableOptions .bonsaiTrieLogPruningEnabled )
147- .bonsaiTrieLogRetentionThreshold (unstableOptions .bonsaiTrieLogRetentionThreshold )
148- .bonsaiTrieLogPruningLimit (unstableOptions .bonsaiTrieLogPruningLimit )
152+ .bonsaiLimitTrieLogsEnabled (unstableOptions .bonsaiLimitTrieLogsEnabled )
153+ .bonsaiTrieLogPruningWindowSize (unstableOptions .bonsaiTrieLogPruningWindowSize )
149154 .build ())
150155 .build ();
151156 }
0 commit comments