Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions hedera-state-validator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ plugins {
mainModuleInfo { runtimeOnly("org.junit.jupiter.engine") }

application.mainClass = "com.hedera.statevalidation.StateOperatorCommand"

tasks.shadowJar { isZip64 = true }
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ public class Constants {
public static final Path COMBINED_REPORT_FILE = Path.of("combined_report.json");
public static final String COMBINED_HTML_REPORT_TEMPLATE = "combined_report.html.template";
public static final Path COMBINED_HTML_REPORT = Path.of("combined_report.html");
public static final String VM_LABEL = "state";
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
package com.hedera.statevalidation.validators.merkledb;

import static com.hedera.statevalidation.Constants.VM_LABEL;
import static com.hedera.statevalidation.validators.Constants.VALIDATE_FILE_LAYOUT;
import static java.lang.String.format;
import static org.junit.jupiter.api.Assertions.fail;

import com.hedera.statevalidation.parameterresolver.StateResolver;
Expand Down Expand Up @@ -36,29 +34,34 @@ public class FileLayout {

// internalHashStoreDisk templates
private static final String INTERNAL_HASH_METADATA_TMPL =
".*%1$s-\\d+.internalHashStoreDisk.%1$s_internalhashes_metadata[.]pbj";
".*data.state.internalHashStoreDisk.state_internalhashes_metadata[.]pbj";
private static final String INTERNAL_HASH_STORE_TMPL =
".*data.state.internalHashStoreDisk.state_internalhashes_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}-\\d{3}[_]+\\d[.]pbj";

// objectKeyToPath templates
private static final String OBJECT_KEY_TO_PATH_BUCKET_INDEX_TMPL =
".*%1$s-\\d+.objectKeyToPath.%1$s_objectkeytopath_bucket_index[.]ll";
".*data.state.objectKeyToPath.state_objectkeytopath_bucket_index[.]ll";
private static final String OBJECT_KEY_TO_PATH_METADATA_TMPL =
".*%1$s-\\d+.objectKeyToPath.%1$s_objectkeytopath_metadata[.]pbj";
".*data.state.objectKeyToPath.state_objectkeytopath_metadata[.]pbj";
private static final String OBJECT_KEY_TO_PATH_STORE_TMPL =
".*data.state.objectKeyToPath.state_objectkeytopath_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}-\\d{3}[_]+\\d[.]pbj";
private static final String OBJECT_KEY_TO_PATH_METADATA_HDHM_TMPL =
".*%1$s-\\d+.objectKeyToPath.%1$s_objectkeytopath_metadata[.]hdhm";
".*data.state.objectKeyToPath.state_objectkeytopath_metadata[.]hdhm";

// pathToHashKeyValue templates
private static final String PATH_TO_HASH_KEY_VALUE_METADATA_TMPL =
".*%1$s-\\d+.pathToHashKeyValue.%1$s_pathtohashkeyvalue_metadata.*[.]pbj";
".*data.state.pathToHashKeyValue.state_pathtohashkeyvalue_metadata.*[.]pbj";
private static final String PATH_TO_HASH_KEY_VALUE_STORE_TMPL =
".*data.state.pathToHashKeyValue.state_pathtohashkeyvalue_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}-\\d{3}[_]+\\d[.]pbj";

// metadata
private static final String METADATA_PBJ_TMPL = ".*%1$s-\\d+.table_metadata[.]pbj";
private static final String PATH_TO_DISK_INTERNAL_TMPL = ".*%1$s-\\d+.pathToDiskLocationInternalNodes[.]ll";
private static final String PATH_TO_DISK_LEAF_TMPL = ".*%1$s-\\d+.pathToDiskLocationLeafNodes[.]ll";
private static final String METADATA_PBJ_TMPL = ".*data.state.table_metadata[.]pbj";
private static final String PATH_TO_DISK_INTERNAL_TMPL = ".*data.state.pathToDiskLocationInternalNodes[.]ll";
private static final String PATH_TO_DISK_LEAF_TMPL = ".*data.state.pathToDiskLocationLeafNodes[.]ll";

// Other files
private static final List<String> EXPECTED_FILE_PATTERNS = List.of(
".*" + VM_LABEL + ".vmap",
".*database_metadata.pbj",
".*state.vmap",
".*emergencyRecovery.yaml",
".*hashInfo.txt",
".*settingsUsed.txt",
Expand All @@ -78,7 +81,7 @@ public void validateFileLayout(DeserializedSignedState deserializedState) throws
.map(Pattern::compile)
.map(v -> new OptionalPattern(v, false))
.toList());
expectedPathPatterns.addAll(indexPathsToMatch(VM_LABEL));
expectedPathPatterns.addAll(indexPathsToMatch());

Path statePath = Path.of(Constants.STATE_DIR);
Files.walk(statePath).filter(Files::isRegularFile).forEach(path -> {
Expand Down Expand Up @@ -117,16 +120,18 @@ public void validateFileLayout(DeserializedSignedState deserializedState) throws
}
}

private List<OptionalPattern> indexPathsToMatch(String vmName) {
private List<OptionalPattern> indexPathsToMatch() {
return Stream.of(
format(INTERNAL_HASH_METADATA_TMPL, vmName),
format(OBJECT_KEY_TO_PATH_BUCKET_INDEX_TMPL, vmName),
format(OBJECT_KEY_TO_PATH_METADATA_TMPL, vmName),
format(OBJECT_KEY_TO_PATH_METADATA_HDHM_TMPL, vmName),
format(PATH_TO_HASH_KEY_VALUE_METADATA_TMPL, vmName),
format(METADATA_PBJ_TMPL, vmName),
format(PATH_TO_DISK_INTERNAL_TMPL, vmName),
format(PATH_TO_DISK_LEAF_TMPL, vmName))
INTERNAL_HASH_METADATA_TMPL,
INTERNAL_HASH_STORE_TMPL,
OBJECT_KEY_TO_PATH_BUCKET_INDEX_TMPL,
OBJECT_KEY_TO_PATH_METADATA_TMPL,
OBJECT_KEY_TO_PATH_STORE_TMPL,
OBJECT_KEY_TO_PATH_METADATA_HDHM_TMPL,
PATH_TO_HASH_KEY_VALUE_METADATA_TMPL,
METADATA_PBJ_TMPL,
PATH_TO_DISK_INTERNAL_TMPL,
PATH_TO_DISK_LEAF_TMPL)
.map(Pattern::compile)
.map(v -> new OptionalPattern(v, false))
.toList();
Expand Down
Loading