This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new d51f0e4e7a3 HDDS-16557. Enums with per-constant impl may not be
reproducible (#11311)
d51f0e4e7a3 is described below
commit d51f0e4e7a3770a6acf870ee838f1f5e4608baea
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Thu Sep 24 10:52:20 2026 +0200
HDDS-16557. Enums with per-constant impl may not be reproducible (#11311)
---
.../common/impl/ContainerLayoutVersion.java | 22 ++----
.../keyvalue/ContainerLayoutTestInfo.java | 90 ++++++++--------------
.../om/request/validation/ValidationCondition.java | 21 ++---
.../om/request/validation/VersionExtractor.java | 45 +++++------
.../hadoop/ozone/recon/api/types/EntityType.java | 87 +++++----------------
5 files changed, 83 insertions(+), 182 deletions(-)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerLayoutVersion.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerLayoutVersion.java
index 44d1d5bf6c8..f90707924f0 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerLayoutVersion.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerLayoutVersion.java
@@ -32,18 +32,8 @@
public enum ContainerLayoutVersion {
@Deprecated /* Use FILE_PER_BLOCK instead */
- FILE_PER_CHUNK(1, "One file per chunk") {
- @Override
- public File getChunkFile(File chunkDir, BlockID blockID, String chunkName)
{
- return new File(chunkDir, chunkName);
- }
- },
- FILE_PER_BLOCK(2, "One file per block") {
- @Override
- public File getChunkFile(File chunkDir, BlockID blockID, String chunkName)
{
- return new File(chunkDir, blockID.getLocalID() + ".block");
- }
- };
+ FILE_PER_CHUNK(1, "One file per chunk"),
+ FILE_PER_BLOCK(2, "One file per block");
public static final ContainerLayoutVersion
DEFAULT_LAYOUT = ContainerLayoutVersion.FILE_PER_BLOCK;
@@ -107,8 +97,12 @@ public String getDescription() {
return description;
}
- public abstract File getChunkFile(File chunkDir,
- BlockID blockID, String chunkName);
+ public File getChunkFile(File chunkDir, BlockID blockID, String chunkName) {
+ return switch (this) {
+ case FILE_PER_CHUNK -> new File(chunkDir, chunkName);
+ case FILE_PER_BLOCK -> new File(chunkDir, blockID.getLocalID() + ".block");
+ };
+ }
public File getChunkFile(ContainerData containerData, BlockID blockID,
String chunkName) throws StorageContainerException {
diff --git
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
index 4d635e67fc2..f08e2492d5f 100644
---
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
+++
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/ContainerLayoutTestInfo.java
@@ -43,72 +43,42 @@
*/
public enum ContainerLayoutTestInfo {
- DUMMY {
- @Override
- public ChunkManager createChunkManager(boolean sync, BlockManager manager)
{
- return new ChunkManagerDummyImpl();
- }
+ DUMMY,
+ FILE_PER_CHUNK,
+ FILE_PER_BLOCK;
+
+ public ChunkManager createChunkManager(boolean sync, BlockManager manager) {
+ return switch (this) {
+ case DUMMY -> new ChunkManagerDummyImpl();
+ case FILE_PER_CHUNK -> new FilePerChunkStrategy(sync, manager);
+ case FILE_PER_BLOCK -> new FilePerBlockStrategy(sync, null);
+ };
+ }
- @Override
- public void validateFileCount(File dir, long blockCount, long chunkCount) {
- assertFileCount(dir, 0);
+ public void validateFileCount(File dir, long blockCount, long chunkCount) {
+ switch (this) {
+ case DUMMY -> assertFileCount(dir, 0);
+ case FILE_PER_CHUNK -> assertFileCount(dir, chunkCount);
+ case FILE_PER_BLOCK -> assertFileCount(dir, blockCount);
+ default -> throw new IllegalStateException();
}
+ }
- @Override
- public ContainerLayoutVersion getLayout() {
- return null;
- }
+ public ContainerLayoutVersion getLayout() {
+ return switch (this) {
+ case DUMMY -> null;
+ case FILE_PER_CHUNK -> ContainerLayoutVersion.FILE_PER_CHUNK;
+ case FILE_PER_BLOCK -> ContainerLayoutVersion.FILE_PER_BLOCK;
+ };
+ }
- @Override
- public void updateConfig(OzoneConfiguration config) {
+ public void updateConfig(OzoneConfiguration config) {
+ ContainerLayoutVersion layout = getLayout();
+ if (layout == null) {
config.setBoolean(HDDS_CONTAINER_PERSISTDATA, false);
+ } else {
+ config.set(OZONE_SCM_CONTAINER_LAYOUT_KEY, layout.name());
}
- },
-
- FILE_PER_CHUNK {
- @Override
- public ChunkManager createChunkManager(boolean sync, BlockManager manager)
{
- return new FilePerChunkStrategy(sync, manager);
- }
-
- @Override
- public void validateFileCount(File dir, long blockCount, long chunkCount) {
- assertFileCount(dir, chunkCount);
- }
-
- @Override
- public ContainerLayoutVersion getLayout() {
- return ContainerLayoutVersion.FILE_PER_CHUNK;
- }
- },
-
- FILE_PER_BLOCK {
- @Override
- public ChunkManager createChunkManager(boolean sync, BlockManager manager)
{
- return new FilePerBlockStrategy(sync, null);
- }
-
- @Override
- public void validateFileCount(File dir, long blockCount, long chunkCount) {
- assertFileCount(dir, blockCount);
- }
-
- @Override
- public ContainerLayoutVersion getLayout() {
- return ContainerLayoutVersion.FILE_PER_BLOCK;
- }
- };
-
- public abstract ChunkManager createChunkManager(boolean sync,
- BlockManager manager);
-
- public abstract void validateFileCount(File dir, long blockCount,
- long chunkCount);
-
- public abstract ContainerLayoutVersion getLayout();
-
- public void updateConfig(OzoneConfiguration config) {
- config.set(OZONE_SCM_CONTAINER_LAYOUT_KEY, getLayout().name());
}
private static void assertFileCount(File dir, long count) {
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationCondition.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationCondition.java
index 87f2188ea1e..b4219eac239 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationCondition.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/ValidationCondition.java
@@ -34,23 +34,18 @@ public enum ValidationCondition {
* Classifies validations that has to run after an upgrade until the cluster
* is in a pre-finalized state.
*/
- CLUSTER_NEEDS_FINALIZATION {
- @Override
- public boolean shouldApply(OMRequest req, ValidationContext ctx) {
- return ctx.versionManager().needsFinalization();
- }
- },
+ CLUSTER_NEEDS_FINALIZATION,
/**
* Classifies validations that has to run, when the client uses an older
* protocol version than the server.
*/
- OLDER_CLIENT_REQUESTS {
- @Override
- public boolean shouldApply(OMRequest req, ValidationContext ctx) {
- return req.getVersion() < ClientVersion.CURRENT_VERSION;
- }
- };
+ OLDER_CLIENT_REQUESTS;
- public abstract boolean shouldApply(OMRequest req, ValidationContext ctx);
+ public boolean shouldApply(OMRequest req, ValidationContext ctx) {
+ return switch (this) {
+ case CLUSTER_NEEDS_FINALIZATION ->
ctx.versionManager().needsFinalization();
+ case OLDER_CLIENT_REQUESTS -> req.getVersion() <
ClientVersion.CURRENT_VERSION;
+ };
+ }
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/VersionExtractor.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/VersionExtractor.java
index cf04ceaecd0..5b8f1118865 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/VersionExtractor.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/VersionExtractor.java
@@ -30,36 +30,29 @@ public enum VersionExtractor {
/**
* Extracts current metadata layout version.
*/
- LAYOUT_VERSION_EXTRACTOR {
- @Override
- public Versioned extractVersion(OMRequest req, ValidationContext ctx) {
- LayoutVersionManager layoutVersionManager = ctx.versionManager();
- return
ctx.versionManager().getFeature(layoutVersionManager.getMetadataLayoutVersion());
- }
-
- @Override
- public Class<? extends Annotation> getValidatorClass() {
- return OMLayoutVersionValidator.class;
- }
- },
+ LAYOUT_VERSION_EXTRACTOR,
/**
* Extracts client version from the OMRequests.
*/
- CLIENT_VERSION_EXTRACTOR {
- @Override
- public Versioned extractVersion(OMRequest req, ValidationContext ctx) {
- return req.getVersion() > ClientVersion.CURRENT_VERSION ?
- ClientVersion.FUTURE_VERSION :
ClientVersion.fromProtoValue(req.getVersion());
- }
+ CLIENT_VERSION_EXTRACTOR;
- @Override
- public Class<? extends Annotation> getValidatorClass() {
- return OMClientVersionValidator.class;
+ public Versioned extractVersion(OMRequest req, ValidationContext ctx) {
+ return switch (this) {
+ case LAYOUT_VERSION_EXTRACTOR -> {
+ LayoutVersionManager versionManager = ctx.versionManager();
+ yield
versionManager.getFeature(versionManager.getMetadataLayoutVersion());
}
- };
-
- public abstract Versioned extractVersion(OMRequest req, ValidationContext
ctx);
-
- public abstract Class<? extends Annotation> getValidatorClass();
+ case CLIENT_VERSION_EXTRACTOR -> req.getVersion() >
ClientVersion.CURRENT_VERSION
+ ? ClientVersion.FUTURE_VERSION
+ : ClientVersion.fromProtoValue(req.getVersion());
+ };
+ }
+
+ public Class<? extends Annotation> getValidatorClass() {
+ return switch (this) {
+ case LAYOUT_VERSION_EXTRACTOR -> OMLayoutVersionValidator.class;
+ case CLIENT_VERSION_EXTRACTOR -> OMClientVersionValidator.class;
+ };
+ }
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/EntityType.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/EntityType.java
index 129b38ca526..483b7bc95ae 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/EntityType.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/EntityType.java
@@ -33,76 +33,25 @@
* Enum class for namespace type.
*/
public enum EntityType {
- ROOT {
- @Override
- public EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
- ReconOMMetadataManager omMetadataManager,
- OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path) {
- return new RootEntityHandler(reconNamespaceSummaryManager,
- omMetadataManager, reconSCM, path);
- }
- },
- VOLUME {
- @Override
- public EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
- ReconOMMetadataManager omMetadataManager,
- OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path) {
- return new VolumeEntityHandler(reconNamespaceSummaryManager,
- omMetadataManager, reconSCM, path);
- }
- },
- BUCKET {
- @Override
- public EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
- ReconOMMetadataManager omMetadataManager,
- OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path) {
- return new BucketEntityHandler(reconNamespaceSummaryManager,
- omMetadataManager, reconSCM, bucketHandler, path);
- }
- },
- DIRECTORY {
- @Override
- public EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
- ReconOMMetadataManager omMetadataManager,
- OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path) {
- return new DirectoryEntityHandler(reconNamespaceSummaryManager,
- omMetadataManager, reconSCM, bucketHandler, path);
- }
- },
- KEY {
- @Override
- public EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
- ReconOMMetadataManager omMetadataManager,
- OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path) {
- return new KeyEntityHandler(reconNamespaceSummaryManager,
- omMetadataManager, reconSCM, bucketHandler, path);
- }
- },
- UNKNOWN { // if path is invalid
- @Override
- public EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
- ReconOMMetadataManager omMetadataManager,
- OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path) {
- return new UnknownEntityHandler(reconNamespaceSummaryManager,
- omMetadataManager, reconSCM);
- }
- };
+ ROOT,
+ VOLUME,
+ BUCKET,
+ DIRECTORY,
+ KEY,
+ UNKNOWN; // if path is invalid
- public abstract EntityHandler create(
- ReconNamespaceSummaryManager reconNamespaceSummaryManager,
+ public EntityHandler create(
+ ReconNamespaceSummaryManager nsSummaryManager,
ReconOMMetadataManager omMetadataManager,
OzoneStorageContainerManager reconSCM,
- BucketHandler bucketHandler, String path);
+ BucketHandler bucketHandler, String path) {
+ return switch (this) {
+ case ROOT -> new RootEntityHandler(nsSummaryManager, omMetadataManager,
reconSCM, path);
+ case VOLUME -> new VolumeEntityHandler(nsSummaryManager,
omMetadataManager, reconSCM, path);
+ case BUCKET -> new BucketEntityHandler(nsSummaryManager,
omMetadataManager, reconSCM, bucketHandler, path);
+ case DIRECTORY -> new DirectoryEntityHandler(nsSummaryManager,
omMetadataManager, reconSCM, bucketHandler, path);
+ case KEY -> new KeyEntityHandler(nsSummaryManager, omMetadataManager,
reconSCM, bucketHandler, path);
+ case UNKNOWN -> new UnknownEntityHandler(nsSummaryManager,
omMetadataManager, reconSCM);
+ };
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]