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]

Reply via email to