This is an automated email from the ASF dual-hosted git repository.

erose pushed a commit to branch HDDS-14496-zdu
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/HDDS-14496-zdu by this push:
     new c74df5f4129 HDDS-14723. Create one common interface for LayoutFeature 
and ComponentVersion (#9832)
c74df5f4129 is described below

commit c74df5f412992abddbe931534f336d1cd4e3dff8
Author: Ethan Rose <[email protected]>
AuthorDate: Fri Feb 27 14:48:59 2026 -0500

    HDDS-14723. Create one common interface for LayoutFeature and 
ComponentVersion (#9832)
---
 .../annotations/RegisterValidatorProcessor.java    |  2 +-
 .../apache/hadoop/hdds/scm/XceiverClientGrpc.java  |  6 +--
 .../hadoop/hdds/scm/storage/BlockOutputStream.java |  2 +-
 .../client/io/BlockInputStreamFactoryImpl.java     |  2 +-
 .../storage/TestBlockOutputStreamCorrectness.java  |  2 +-
 .../org/apache/hadoop/hdds/ComponentVersion.java   | 19 +++----
 .../java/org/apache/hadoop/hdds/HDDSVersion.java   |  9 +++-
 .../hadoop/hdds/protocol/DatanodeDetails.java      |  2 +-
 .../hdds/ratis/ContainerCommandRequestMessage.java |  2 +-
 .../hadoop/hdds/upgrade/HDDSLayoutFeature.java     |  9 +++-
 .../hadoop/hdds/upgrade/HDDSUpgradeAction.java     |  2 +-
 .../org/apache/hadoop/ozone/ClientVersion.java     | 11 ++--
 .../apache/hadoop/ozone/OzoneManagerVersion.java   |  9 +++-
 .../apache/hadoop/ozone/upgrade/LayoutFeature.java | 29 ++---------
 .../{Versioned.java => upgrade/UpgradeAction.java} | 15 ++++--
 .../hdds/TestComponentVersionInvariants.java       |  8 +--
 .../hadoop/hdds/protocol/TestDatanodeDetails.java  | 12 ++---
 .../ratis/TestContainerCommandRequestMessage.java  |  4 +-
 .../hadoop/hdds/scm/pipeline/TestPipeline.java     |  4 +-
 .../ozone/container/ContainerTestHelper.java       |  2 +-
 .../impl/TestKeyValueStreamDataChannel.java        |  2 +-
 .../upgrade/AbstractLayoutVersionManager.java      | 17 -------
 .../ozone/upgrade/BasicUpgradeFinalizer.java       |  5 +-
 .../hadoop/ozone/upgrade/LayoutVersionManager.java | 14 ------
 .../hadoop/ozone/upgrade/UpgradeFinalizer.java     |  4 +-
 .../upgrade/TestAbstractLayoutVersionManager.java  | 14 ------
 .../ozone/upgrade/TestUpgradeFinalizerActions.java |  5 ++
 ...inerLocationProtocolServerSideTranslatorPB.java |  2 +-
 .../apache/hadoop/ozone/debug/VersionDebug.java    |  2 +-
 .../schemaupgrade/UpgradeContainerSchema.java      |  4 +-
 .../hadoop/ozone/om/helpers/ServiceInfo.java       |  2 +-
 .../request/validation/RegisterValidator.java      |  4 +-
 .../ozone/request/validation/package-info.java     |  2 +-
 .../client/rpc/TestBlockDataStreamOutput.java      |  4 +-
 .../ozone/om/TestBucketLayoutWithOlderClient.java  |  2 +-
 .../hadoop/ozone/UniformDatanodesFactory.java      |  4 +-
 .../validation/OMClientVersionValidator.java       |  2 +-
 .../validation/OMLayoutVersionValidator.java       |  2 +-
 .../om/request/validation/VersionExtractor.java    |  8 +--
 .../hadoop/ozone/om/upgrade/OMLayoutFeature.java   |  9 +++-
 .../ozone/om/upgrade/OMLayoutFeatureAspect.java    | 15 +++---
 .../hadoop/ozone/om/upgrade/OmUpgradeAction.java   |  2 +-
 .../request/file/TestOMDirectoryCreateRequest.java |  4 +-
 .../file/TestOMDirectoryCreateRequestWithFSO.java  |  4 +-
 .../ozone/om/request/key/TestOMKeyRequest.java     |  3 +-
 .../s3/tenant/TestOMTenantCreateRequest.java       |  4 +-
 .../s3/tenant/TestOMTenantDeleteRequest.java       |  3 +-
 .../validation/TestOMValidatorProcessor.java       | 58 +++++++++++-----------
 .../request/validation/TestVersionExtractor.java   | 15 +++---
 .../snapshot/TestSnapshotRequestAndResponse.java   |  4 +-
 .../ozone/om/upgrade/OMLayoutFeatureUtil.java      |  8 +--
 .../om/upgrade/TestOMLayoutFeatureAspect.java      |  7 ++-
 .../ozone/om/upgrade/TestOMUpgradeFinalizer.java   |  4 +-
 53 files changed, 179 insertions(+), 211 deletions(-)

diff --git 
a/hadoop-hdds/annotations/src/main/java/org/apache/ozone/annotations/RegisterValidatorProcessor.java
 
b/hadoop-hdds/annotations/src/main/java/org/apache/ozone/annotations/RegisterValidatorProcessor.java
index c5639e11e54..6b26043efb2 100644
--- 
a/hadoop-hdds/annotations/src/main/java/org/apache/ozone/annotations/RegisterValidatorProcessor.java
+++ 
b/hadoop-hdds/annotations/src/main/java/org/apache/ozone/annotations/RegisterValidatorProcessor.java
@@ -54,7 +54,7 @@
 public class RegisterValidatorProcessor extends AbstractProcessor {
 
   public static final String ANNOTATION_SIMPLE_NAME = "RegisterValidator";
-  public static final String VERSION_CLASS_NAME = 
"org.apache.hadoop.ozone.Version";
+  public static final String VERSION_CLASS_NAME = 
"org.apache.hadoop.hdds.ComponentVersion";
   public static final String REQUEST_PROCESSING_PHASE_CLASS_NAME = 
"org.apache.hadoop.ozone.om.request.validation" +
       ".RequestProcessingPhase";
   public static final String APPLY_BEFORE_METHOD_NAME = "applyBefore";
diff --git 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
index 6cd258c5ba3..8a14fdb9b87 100644
--- 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
+++ 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientGrpc.java
@@ -288,7 +288,7 @@ public ContainerCommandResponseProto sendCommand(
             futureHashMap = new HashMap<>();
     if (!request.hasVersion()) {
       ContainerCommandRequestProto.Builder builder = 
ContainerCommandRequestProto.newBuilder(request);
-      builder.setVersion(ClientVersion.CURRENT.toProtoValue());
+      builder.setVersion(ClientVersion.CURRENT.serialize());
       request = builder.build();
     }
     for (DatanodeDetails dn : datanodeList) {
@@ -380,7 +380,7 @@ private XceiverClientReply sendCommandWithTraceIDAndRetry(
               ContainerCommandRequestProto.newBuilder(request)
                   .setTraceID(TracingUtil.exportCurrentSpan());
           if (!request.hasVersion()) {
-            builder.setVersion(ClientVersion.CURRENT.toProtoValue());
+            builder.setVersion(ClientVersion.CURRENT.serialize());
           }
           return sendCommandWithRetry(builder.build(), validators);
         });
@@ -611,7 +611,7 @@ public XceiverClientReply sendCommandAsync(
           ContainerCommandRequestProto.newBuilder(request)
               .setTraceID(TracingUtil.exportCurrentSpan());
       if (!request.hasVersion()) {
-        builder.setVersion(ClientVersion.CURRENT.toProtoValue());
+        builder.setVersion(ClientVersion.CURRENT.serialize());
       }
       XceiverClientReply asyncReply =
           sendCommandAsync(builder.build(), pipeline.getFirstNode());
diff --git 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
index e6b76b77742..31d6d794d07 100644
--- 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
+++ 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/storage/BlockOutputStream.java
@@ -286,7 +286,7 @@ private boolean allDataNodesSupportPiggybacking() {
     for (DatanodeDetails dn : pipeline.getNodes()) {
       LOG.debug("dn = {}, version = {}", dn, dn.getCurrentVersion());
       if (dn.getCurrentVersion() <
-              COMBINED_PUTBLOCK_WRITECHUNK_RPC.toProtoValue()) {
+              COMBINED_PUTBLOCK_WRITECHUNK_RPC.serialize()) {
         return false;
       }
     }
diff --git 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockInputStreamFactoryImpl.java
 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockInputStreamFactoryImpl.java
index e6122541ef2..99fb8b89806 100644
--- 
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockInputStreamFactoryImpl.java
+++ 
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/ozone/client/io/BlockInputStreamFactoryImpl.java
@@ -103,7 +103,7 @@ private boolean allDataNodesSupportStreamBlock(Pipeline 
pipeline) {
     // return true only if all DataNodes in the pipeline are on a version
     // that supports for reading a block by streaming chunks..
     for (DatanodeDetails dn : pipeline.getNodes()) {
-      if (dn.getCurrentVersion() < STREAM_BLOCK_SUPPORT.toProtoValue()) {
+      if (dn.getCurrentVersion() < STREAM_BLOCK_SUPPORT.serialize()) {
         return false;
       }
     }
diff --git 
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
 
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
index 440b5b3d4d5..1c38be0d996 100644
--- 
a/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
+++ 
b/hadoop-hdds/client/src/test/java/org/apache/hadoop/hdds/scm/storage/TestBlockOutputStreamCorrectness.java
@@ -231,7 +231,7 @@ public XceiverClientReply 
sendCommandAsync(ContainerCommandRequestProto request)
 
       if (!request.hasVersion()) {
         request = ContainerCommandRequestProto.newBuilder(request)
-            .setVersion(ClientVersion.CURRENT.toProtoValue()).build();
+            .setVersion(ClientVersion.CURRENT.serialize()).build();
       }
       final ContainerCommandResponseProto.Builder builder =
           ContainerCommandResponseProto.newBuilder()
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ComponentVersion.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ComponentVersion.java
index f486d5096bc..b3e8c77572b 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ComponentVersion.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ComponentVersion.java
@@ -17,28 +17,21 @@
 
 package org.apache.hadoop.hdds;
 
-import org.apache.hadoop.ozone.Versioned;
+import java.util.Optional;
+import org.apache.hadoop.ozone.upgrade.UpgradeAction;
 
 /**
  * Base type for component version enums.
  */
-public interface ComponentVersion extends Versioned {
+public interface ComponentVersion {
+  int serialize();
 
   /**
-   * Returns the description of the version enum value.
    * @return the description of the version enum value.
    */
   String description();
 
-  /**
-   * Returns the value that represents the enum in a protocol message
-   * transferred over the wire.
-   * @return the version associated with the enum value.
-   */
-  int toProtoValue();
-
-  @Override
-  default int version() {
-    return toProtoValue();
+  default Optional<? extends UpgradeAction> action() {
+    return Optional.empty();
   }
 }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HDDSVersion.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HDDSVersion.java
index c6cf9af4069..655083a41d9 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HDDSVersion.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/HDDSVersion.java
@@ -44,7 +44,7 @@ public enum HDDSVersion implements ComponentVersion {
 
   private static final Map<Integer, HDDSVersion> BY_PROTO_VALUE =
       Arrays.stream(values())
-          .collect(toMap(HDDSVersion::toProtoValue, identity()));
+          .collect(toMap(HDDSVersion::serialize, identity()));
 
   private final int version;
   private final String description;
@@ -60,10 +60,15 @@ public String description() {
   }
 
   @Override
-  public int toProtoValue() {
+  public int serialize() {
     return version;
   }
 
+  @Override
+  public String toString() {
+    return name() + " (" + serialize() + ")";
+  }
+
   public static HDDSVersion fromProtoValue(int value) {
     return BY_PROTO_VALUE.getOrDefault(value, FUTURE_VERSION);
   }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/protocol/DatanodeDetails.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/protocol/DatanodeDetails.java
index 6a11dc1b74e..d1ebc130505 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/protocol/DatanodeDetails.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/protocol/DatanodeDetails.java
@@ -469,7 +469,7 @@ public static DatanodeDetails.Builder newBuilder(
       builder.setCurrentVersion(datanodeDetailsProto.getCurrentVersion());
     } else {
       // fallback to version 1 if not present
-      
builder.setCurrentVersion(HDDSVersion.SEPARATE_RATIS_PORTS_AVAILABLE.toProtoValue());
+      
builder.setCurrentVersion(HDDSVersion.SEPARATE_RATIS_PORTS_AVAILABLE.serialize());
     }
     return builder;
   }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
index ea9877255c2..c09001e580a 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/ratis/ContainerCommandRequestMessage.java
@@ -49,7 +49,7 @@ public static ContainerCommandRequestMessage toMessage(
       b.setTraceID(traceId);
     }
     if (!request.hasVersion()) {
-      b.setVersion(ClientVersion.CURRENT.toProtoValue());
+      b.setVersion(ClientVersion.CURRENT.serialize());
     }
 
     ByteString data = ByteString.EMPTY;
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeature.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeature.java
index 0d45298da8b..e78e1dcbffe 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeature.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeature.java
@@ -46,8 +46,8 @@ public enum HDDSLayoutFeature implements LayoutFeature {
 
   //////////////////////////////  //////////////////////////////
 
-  private int layoutVersion;
-  private String description;
+  private final int layoutVersion;
+  private final String description;
   private HDDSUpgradeAction scmAction;
   private HDDSUpgradeAction datanodeAction;
 
@@ -90,6 +90,11 @@ public String description() {
     return description;
   }
 
+  @Override
+  public String toString() {
+    return name() + " (" + serialize() + ")";
+  }
+
   public Optional<HDDSUpgradeAction> scmAction() {
     return Optional.ofNullable(scmAction);
   }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSUpgradeAction.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSUpgradeAction.java
index d3bdfac81c3..81e1ade3700 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSUpgradeAction.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSUpgradeAction.java
@@ -17,7 +17,7 @@
 
 package org.apache.hadoop.hdds.upgrade;
 
-import org.apache.hadoop.ozone.upgrade.LayoutFeature.UpgradeAction;
+import org.apache.hadoop.ozone.upgrade.UpgradeAction;
 
 /**
  * Upgrade Action for SCM and DataNodes.
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ClientVersion.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ClientVersion.java
index b8451353163..8c4c1a2e10d 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ClientVersion.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/ClientVersion.java
@@ -50,7 +50,7 @@ public enum ClientVersion implements ComponentVersion {
 
   private static final Map<Integer, ClientVersion> BY_PROTO_VALUE =
       Arrays.stream(values())
-          .collect(toMap(ClientVersion::toProtoValue, identity()));
+          .collect(toMap(ClientVersion::serialize, identity()));
 
   private final int version;
   private final String description;
@@ -66,17 +66,22 @@ public String description() {
   }
 
   @Override
-  public int toProtoValue() {
+  public int serialize() {
     return version;
   }
 
+  @Override
+  public String toString() {
+    return name() + " (" + serialize() + ")";
+  }
+
   public static ClientVersion fromProtoValue(int value) {
     return BY_PROTO_VALUE.getOrDefault(value, FUTURE_VERSION);
   }
 
   private static ClientVersion latest() {
     return Arrays.stream(ClientVersion.values())
-        
.max(Comparator.comparingInt(ComponentVersion::toProtoValue)).orElse(null);
+        
.max(Comparator.comparingInt(ComponentVersion::serialize)).orElse(null);
   }
 
 }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneManagerVersion.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneManagerVersion.java
index 41cf8ab2856..e2946ce8e19 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneManagerVersion.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneManagerVersion.java
@@ -62,7 +62,7 @@ public enum OzoneManagerVersion implements ComponentVersion {
 
   private static final Map<Integer, OzoneManagerVersion> BY_PROTO_VALUE =
       Arrays.stream(values())
-          .collect(toMap(OzoneManagerVersion::toProtoValue, identity()));
+          .collect(toMap(OzoneManagerVersion::serialize, identity()));
 
   private final int version;
   private final String description;
@@ -78,10 +78,15 @@ public String description() {
   }
 
   @Override
-  public int toProtoValue() {
+  public int serialize() {
     return version;
   }
 
+  @Override
+  public String toString() {
+    return name() + " (" + serialize() + ")";
+  }
+
   public static OzoneManagerVersion fromProtoValue(int value) {
     return BY_PROTO_VALUE.getOrDefault(value, FUTURE_VERSION);
   }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutFeature.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutFeature.java
index 07bf2cb6dcb..7f7374c8137 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutFeature.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutFeature.java
@@ -17,39 +17,16 @@
 
 package org.apache.hadoop.ozone.upgrade;
 
-import java.util.Optional;
-import org.apache.hadoop.ozone.Versioned;
+import org.apache.hadoop.hdds.ComponentVersion;
 
 /**
  * Generic Layout feature interface for Ozone.
  */
-public interface LayoutFeature extends Versioned {
-  String name();
-
+public interface LayoutFeature extends ComponentVersion {
   int layoutVersion();
 
-  String description();
-
-  default Optional<? extends UpgradeAction> action() {
-    return Optional.empty();
-  }
-
-  /**
-   * Generic UpgradeAction interface. An upgrade action is an operation that
-   * is run at least once as a pre-requisite to finalizing a layout feature.
-   * @param <T>
-   */
-  interface UpgradeAction<T> {
-
-    default String name() {
-      return getClass().getSimpleName();
-    }
-
-    void execute(T arg) throws Exception;
-  }
-
   @Override
-  default int version() {
+  default int serialize() {
     return this.layoutVersion();
   }
 }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/Versioned.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeAction.java
similarity index 68%
rename from 
hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/Versioned.java
rename to 
hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeAction.java
index 136edeaf2a0..44765802e2c 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/Versioned.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeAction.java
@@ -15,11 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.hadoop.ozone;
+package org.apache.hadoop.ozone.upgrade;
 
 /**
- * Base class defining the version in the entire system.
+ * Generic UpgradeAction interface. An upgrade action is an operation that
+ * is run at least once as a pre-requisite to finalizing a layout feature.
+ * @param <T> action argument type
  */
-public interface Versioned {
-  int version();
+public interface UpgradeAction<T> {
+
+  default String name() {
+    return getClass().getSimpleName();
+  }
+
+  void execute(T arg) throws Exception;
 }
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestComponentVersionInvariants.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestComponentVersionInvariants.java
index 10129a781e8..f0b1df91940 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestComponentVersionInvariants.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/TestComponentVersionInvariants.java
@@ -66,7 +66,7 @@ public void testFutureVersionHasTheHighestOrdinal(
   public void testFuturVersionHasMinusOneAsProtoRepresentation(
       ComponentVersion[] values, ComponentVersion defaultValue,
       ComponentVersion futureValue) {
-    assertEquals(-1, futureValue.toProtoValue());
+    assertEquals(-1, futureValue.serialize());
 
   }
 
@@ -76,7 +76,7 @@ public void testFuturVersionHasMinusOneAsProtoRepresentation(
   public void testDefaultVersionHasZeroAsProtoRepresentation(
       ComponentVersion[] values, ComponentVersion defaultValue,
       ComponentVersion futureValue) {
-    assertEquals(0, defaultValue.toProtoValue());
+    assertEquals(0, defaultValue.serialize());
   }
 
   // versions are increasing monotonically by one
@@ -85,10 +85,10 @@ public void testDefaultVersionHasZeroAsProtoRepresentation(
   public void testAssignedProtoRepresentations(
       ComponentVersion[] values, ComponentVersion defaultValue,
       ComponentVersion futureValue) {
-    int startValue = defaultValue.toProtoValue();
+    int startValue = defaultValue.serialize();
     // we skip the future version at the last position
     for (int i = 0; i < values.length - 1; i++) {
-      assertEquals(values[i].toProtoValue(), startValue++);
+      assertEquals(values[i].serialize(), startValue++);
     }
     assertEquals(values.length, ++startValue);
   }
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/protocol/TestDatanodeDetails.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/protocol/TestDatanodeDetails.java
index 86ed63c7f1d..f3a091c46d6 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/protocol/TestDatanodeDetails.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/protocol/TestDatanodeDetails.java
@@ -44,11 +44,11 @@ void protoIncludesNewPortsOnlyForV1() {
     DatanodeDetails subject = MockDatanodeDetails.randomDatanodeDetails();
 
     HddsProtos.DatanodeDetailsProto proto =
-        subject.toProto(DEFAULT_VERSION.toProtoValue());
+        subject.toProto(DEFAULT_VERSION.serialize());
     assertPorts(proto, V0_PORTS);
 
     HddsProtos.DatanodeDetailsProto protoV1 =
-        subject.toProto(VERSION_HANDLES_UNKNOWN_DN_PORTS.toProtoValue());
+        subject.toProto(VERSION_HANDLES_UNKNOWN_DN_PORTS.serialize());
     assertPorts(protoV1, ALL_PORTS);
   }
 
@@ -74,16 +74,16 @@ public void testNewBuilderCurrentVersion() {
     Set<Port.Name> requiredPorts = Stream.of(Port.Name.STANDALONE, 
Port.Name.RATIS)
         .collect(Collectors.toSet());
     HddsProtos.DatanodeDetailsProto.Builder protoBuilder =
-        dn.toProtoBuilder(DEFAULT_VERSION.toProtoValue(), requiredPorts);
+        dn.toProtoBuilder(DEFAULT_VERSION.serialize(), requiredPorts);
     protoBuilder.clearCurrentVersion();
     DatanodeDetails dn2 = 
DatanodeDetails.newBuilder(protoBuilder.build()).build();
-    assertEquals(HDDSVersion.SEPARATE_RATIS_PORTS_AVAILABLE.toProtoValue(), 
dn2.getCurrentVersion());
+    assertEquals(HDDSVersion.SEPARATE_RATIS_PORTS_AVAILABLE.serialize(), 
dn2.getCurrentVersion());
 
     // test that if the current version is set, it is used
     protoBuilder =
-        dn.toProtoBuilder(DEFAULT_VERSION.toProtoValue(), requiredPorts);
+        dn.toProtoBuilder(DEFAULT_VERSION.serialize(), requiredPorts);
     DatanodeDetails dn3 = 
DatanodeDetails.newBuilder(protoBuilder.build()).build();
-    assertEquals(HDDSVersion.CURRENT.toProtoValue(), dn3.getCurrentVersion());
+    assertEquals(HDDSVersion.CURRENT.serialize(), dn3.getCurrentVersion());
   }
 
   public static void assertPorts(HddsProtos.DatanodeDetailsProto dn,
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
index 5c5b62e6d72..76e0e995ab2 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/ratis/TestContainerCommandRequestMessage.java
@@ -90,7 +90,7 @@ static ContainerCommandRequestProto newPutSmallFile(
         .setContainerID(blockID.getContainerID())
         .setDatanodeUuid(UUID.randomUUID().toString())
         .setPutSmallFile(putSmallFileRequest)
-        .setVersion(ClientVersion.CURRENT.toProtoValue())
+        .setVersion(ClientVersion.CURRENT.serialize())
         .build();
   }
 
@@ -113,7 +113,7 @@ static ContainerCommandRequestProto newWriteChunk(
         .setContainerID(blockID.getContainerID())
         .setDatanodeUuid(UUID.randomUUID().toString())
         .setWriteChunk(writeChunkRequest)
-        .setVersion(ClientVersion.CURRENT.toProtoValue())
+        .setVersion(ClientVersion.CURRENT.serialize())
         .build();
   }
 
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
index c6ab6678e8b..c9318a9ef58 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipeline.java
@@ -47,13 +47,13 @@ public void protoIncludesNewPortsOnlyForV1() throws 
IOException {
     Pipeline subject = MockPipeline.createPipeline(3);
 
     HddsProtos.Pipeline proto =
-        subject.getProtobufMessage(DEFAULT_VERSION.toProtoValue());
+        subject.getProtobufMessage(DEFAULT_VERSION.serialize());
     for (HddsProtos.DatanodeDetailsProto dn : proto.getMembersList()) {
       assertPorts(dn, V0_PORTS);
     }
 
     HddsProtos.Pipeline protoV1 = subject.getProtobufMessage(
-        VERSION_HANDLES_UNKNOWN_DN_PORTS.toProtoValue());
+        VERSION_HANDLES_UNKNOWN_DN_PORTS.serialize());
     for (HddsProtos.DatanodeDetailsProto dn : protoV1.getMembersList()) {
       assertPorts(dn, ALL_PORTS);
     }
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
index 47a3b6a5042..46548cf2baf 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/container/ContainerTestHelper.java
@@ -621,7 +621,7 @@ public static ContainerCommandRequestProto 
getDummyCommandRequestProto(
       ClientVersion clientVersion, ContainerProtos.Type cmdType, int 
replicaIndex) {
     final Builder builder =
         ContainerCommandRequestProto.newBuilder()
-            .setVersion(clientVersion.toProtoValue())
+            .setVersion(clientVersion.serialize())
             .setCmdType(cmdType)
             .setContainerID(DUMMY_CONTAINER_ID)
             .setDatanodeUuid(DATANODE_UUID);
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
index 3c2992f36f4..226ff39f997 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/impl/TestKeyValueStreamDataChannel.java
@@ -87,7 +87,7 @@ public class TestKeyValueStreamDataChannel {
               .setContainerID(222).setLocalID(333).build()).build()))
       .setDatanodeUuid("datanodeId")
       .setContainerID(111L)
-      .setVersion(ClientVersion.CURRENT.toProtoValue())
+      .setVersion(ClientVersion.CURRENT.serialize())
       .build();
   static final int PUT_BLOCK_PROTO_SIZE = 
PUT_BLOCK_PROTO.toByteString().size();
 
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractLayoutVersionManager.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractLayoutVersionManager.java
index 5aa553b30d5..73aa6c07723 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractLayoutVersionManager.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractLayoutVersionManager.java
@@ -25,8 +25,6 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.TreeMap;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import javax.management.ObjectName;
@@ -49,8 +47,6 @@ public abstract class AbstractLayoutVersionManager<T extends 
LayoutFeature>
   private volatile int softwareLayoutVersion; // SLV.
   @VisibleForTesting
   protected final TreeMap<Integer, LayoutFeature> features = new TreeMap<>();
-  @VisibleForTesting
-  protected final Map<String, LayoutFeature> featureMap = new HashMap<>();
   private volatile Status currentUpgradeState;
   // Allows querying upgrade state while an upgrade is in progress.
   // Note that MLV may have been incremented during the upgrade
@@ -109,10 +105,8 @@ public void setUpgradeState(Status status) {
 
   private void initializeFeatures(T[] lfs) {
     Arrays.stream(lfs).forEach(f -> {
-      Preconditions.checkArgument(!featureMap.containsKey(f.name()));
       Preconditions.checkArgument(!features.containsKey(f.layoutVersion()));
       features.put(f.layoutVersion(), f);
-      featureMap.put(f.name(), f);
     });
   }
 
@@ -190,17 +184,6 @@ public boolean isAllowed(LayoutFeature layoutFeature) {
     }
   }
 
-  @Override
-  public boolean isAllowed(String featureName) {
-    return featureMap.containsKey(featureName) &&
-        isAllowed(featureMap.get(featureName));
-  }
-
-  @Override
-  public LayoutFeature getFeature(String name) {
-    return featureMap.get(name);
-  }
-
   @Override
   public LayoutFeature getFeature(int layoutVersion) {
     return features.get(layoutVersion);
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/BasicUpgradeFinalizer.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/BasicUpgradeFinalizer.java
index 2c5be227f85..4d75e88cdf8 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/BasicUpgradeFinalizer.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/BasicUpgradeFinalizer.java
@@ -40,7 +40,6 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import org.apache.hadoop.ozone.common.Storage;
-import org.apache.hadoop.ozone.upgrade.LayoutFeature.UpgradeAction;
 import org.apache.hadoop.ozone.upgrade.UpgradeException.ResultCodes;
 import org.apache.hadoop.ozone.upgrade.UpgradeFinalization.Status;
 import org.apache.hadoop.ozone.upgrade.UpgradeFinalization.StatusAndMessages;
@@ -259,13 +258,13 @@ protected void runFinalizationAction(LayoutFeature 
feature,
       Optional<? extends UpgradeAction> action) throws UpgradeException {
 
     if (!action.isPresent()) {
-      emitNOOPMsg(feature.name());
+      emitNOOPMsg(feature.toString());
     } else {
       LOG.info("Running finalization actions for layout feature: {}", feature);
       try {
         action.get().execute(component);
       } catch (Exception e) {
-        logFinalizationFailureAndThrow(e, feature.name());
+        logFinalizationFailureAndThrow(e, feature.toString());
       }
     }
   }
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
index e4ba6d7823a..ee2d145071c 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
@@ -47,20 +47,6 @@ public interface LayoutVersionManager {
    */
   boolean isAllowed(LayoutFeature layoutFeature);
 
-  /**
-   * Is allowed feature?
-   * @param featureName feature name
-   * @return true/false.
-   */
-  boolean isAllowed(String featureName);
-
-  /**
-   * Get Feature given feature name.
-   * @param name Feature name.
-   * @return LayoutFeature instance.
-   */
-  LayoutFeature getFeature(String name);
-
   /**
    * Get Feature given its layout version.
    * @param layoutVersion Version number of the feature.
diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeFinalizer.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeFinalizer.java
index cdebb0183f2..3109e787c6a 100644
--- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeFinalizer.java
+++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeFinalizer.java
@@ -34,7 +34,7 @@
  * in tandem with the corresponding version manager, and Storage.
  * @param <T> The service type which the implementation is bound to, this
  *           defines the type that is provided to {@link LayoutFeature}'s
- *           {@link 
org.apache.hadoop.ozone.upgrade.LayoutFeature.UpgradeAction}
+ *           {@link org.apache.hadoop.ozone.upgrade.UpgradeAction}
  */
 @InterfaceAudience.Private
 @InterfaceStability.Evolving
@@ -46,7 +46,7 @@ public interface UpgradeFinalizer<T> {
    * Finalize the metadata upgrade.
    * The provided client ID will be eligible to get the status messages,
    * the service provided will be provided to the
-   * {@link org.apache.hadoop.ozone.upgrade.LayoutFeature.UpgradeAction}s of
+ * {@link org.apache.hadoop.ozone.upgrade.UpgradeAction}s of
    * the {@link LayoutFeature}s being finalized.
    * @param upgradeClientID the initiating client's identifier.
    * @param service the service on which we run finalization.
diff --git 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestAbstractLayoutVersionManager.java
 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestAbstractLayoutVersionManager.java
index 9b0c9578f63..f006698518a 100644
--- 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestAbstractLayoutVersionManager.java
+++ 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestAbstractLayoutVersionManager.java
@@ -58,7 +58,6 @@ public void testInitializationWithFeaturesToBeFinalized() 
throws  Exception {
     versionManager.init(1, getTestLayoutFeatures(3));
 
     assertEquals(3, versionManager.features.size());
-    assertEquals(3, versionManager.featureMap.size());
 
     assertEquals(1, versionManager.getMetadataLayoutVersion());
     assertEquals(3, versionManager.getSoftwareLayoutVersion());
@@ -76,7 +75,6 @@ public void testInitializationWithUpToDateMetadataVersion() 
throws Exception {
     versionManager.init(2, getTestLayoutFeatures(2));
 
     assertEquals(2, versionManager.features.size());
-    assertEquals(2, versionManager.featureMap.size());
 
     assertEquals(2, versionManager.getMetadataLayoutVersion());
     assertEquals(2, versionManager.getSoftwareLayoutVersion());
@@ -101,7 +99,6 @@ public void testFeatureFinalization() throws Exception {
     versionManager.finalized(lfs[1]);
 
     assertEquals(3, versionManager.features.size());
-    assertEquals(3, versionManager.featureMap.size());
 
     assertEquals(2, versionManager.getMetadataLayoutVersion());
     assertEquals(3, versionManager.getSoftwareLayoutVersion());
@@ -145,22 +142,16 @@ public void testUnfinalizedFeaturesAreNotAllowed() throws 
Exception {
     LayoutFeature[] lfs = getTestLayoutFeatures(3);
     versionManager.init(1, lfs);
 
-    assertTrue(versionManager.isAllowed(lfs[0].name()));
     assertTrue(versionManager.isAllowed(lfs[0]));
 
-    assertFalse(versionManager.isAllowed(lfs[1].name()));
     assertFalse(versionManager.isAllowed(lfs[1]));
-    assertFalse(versionManager.isAllowed(lfs[2].name()));
     assertFalse(versionManager.isAllowed(lfs[2]));
 
     versionManager.finalized(lfs[1]);
 
-    assertTrue(versionManager.isAllowed(lfs[0].name()));
     assertTrue(versionManager.isAllowed(lfs[0]));
-    assertTrue(versionManager.isAllowed(lfs[1].name()));
     assertTrue(versionManager.isAllowed(lfs[1]));
 
-    assertFalse(versionManager.isAllowed(lfs[2].name()));
     assertFalse(versionManager.isAllowed(lfs[2]));
   }
 
@@ -188,11 +179,6 @@ private LayoutFeature[] getTestLayoutFeatures(int num) {
     for (int i = 1; i <= num; i++) {
       int finalI = i;
       lfs[k++] = new LayoutFeature() {
-        @Override
-        public String name() {
-          return "LF-" + finalI;
-        }
-
         @Override
         public int layoutVersion() {
           return finalI;
diff --git 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestUpgradeFinalizerActions.java
 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestUpgradeFinalizerActions.java
index 02589de7d71..ade86b488b9 100644
--- 
a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestUpgradeFinalizerActions.java
+++ 
b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/ozone/upgrade/TestUpgradeFinalizerActions.java
@@ -86,6 +86,11 @@ public String description() {
       return null;
     }
 
+    @Override
+    public String toString() {
+      return name() + " (" + serialize() + ")";
+    }
+
     public void addAction(UpgradeAction upgradeAction) {
       this.action = upgradeAction;
     }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
index 62f06079bf0..acb7dc7d252 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocolServerSideTranslatorPB.java
@@ -221,7 +221,7 @@ public ScmContainerLocationResponse 
submitRequest(RpcController controller,
     // annotated interceptors.
     boolean checkResponseForECRepConfig = false;
     if (request.getVersion() <
-        ClientVersion.ERASURE_CODING_SUPPORT.toProtoValue()) {
+        ClientVersion.ERASURE_CODING_SUPPORT.serialize()) {
       if (request.getCmdType() == GetContainer
           || request.getCmdType() == ListContainer
           || request.getCmdType() == GetContainerWithPipeline
diff --git 
a/hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java
 
b/hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java
index 79a7e5c7bf0..20cf91d0872 100644
--- 
a/hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java
+++ 
b/hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/VersionDebug.java
@@ -63,7 +63,7 @@ private static <T extends Enum<T> & ComponentVersion> 
Map<String, Object> asMap(
     return ImmutableSortedMap.of(
         "componentVersion", ImmutableSortedMap.of(
             "name", version.name(),
-            "protoValue", version.toProtoValue()
+            "protoValue", version.serialize()
         )
     );
   }
diff --git 
a/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java
 
b/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java
index 97f2e215ebf..7add67421fa 100644
--- 
a/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java
+++ 
b/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java
@@ -144,8 +144,8 @@ public void execute() throws Exception {
           "Please upgrade your software version, no less than %s," +
               " current metadata layout version is %s," +
               " software layout version is %s",
-          HDDSLayoutFeature.DATANODE_SCHEMA_V3.name(),
-          metadataLayoutFeature.name(), softwareLayoutFeature.name());
+          HDDSLayoutFeature.DATANODE_SCHEMA_V3.toString(),
+          metadataLayoutFeature.toString(), softwareLayoutFeature.toString());
       return;
     }
 
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
index a94e0025401..f5d8f24e3fd 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/ServiceInfo.java
@@ -190,7 +190,7 @@ public OzoneManagerProtocolProtos.ServiceInfo getProtobuf() 
{
         .setHostname(hostname)
         .addAllServicePorts(servicePorts);
     if (omVersion != null) {
-      builder.setOMVersion(omVersion.toProtoValue());
+      builder.setOMVersion(omVersion.serialize());
     }
     if (nodeType == NodeType.OM && omRoleInfo != null) {
       builder.setOmRole(omRoleInfo);
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/RegisterValidator.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/RegisterValidator.java
index 396bffe4438..16384dbe125 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/RegisterValidator.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/RegisterValidator.java
@@ -21,12 +21,12 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-import org.apache.hadoop.ozone.Versioned;
+import org.apache.hadoop.hdds.ComponentVersion;
 
 /**
  * Annotations to register a validator. {@code 
org.apache.ozone.annotations.RegisterValidatorProcessor}
  * enforces other annotation to have the following methods:
- * applyBefore : Returns an enum which implement {@link Versioned}
+ * applyBefore : Returns an enum which implement {@link ComponentVersion}
  * requestType: Returns an Enum value.
  * processingPhase: Returns {@link RequestProcessingPhase}
  */
diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/package-info.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/package-info.java
index 4365baa77e9..abad2f82079 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/package-info.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/request/validation/package-info.java
@@ -23,7 +23,7 @@
  * code for any server.
  * {@link org.apache.hadoop.ozone.request.validation.RegisterValidator}
  * is used to register any validator which has the following methods:
- * - applyBefore : Returns an enum which implement {@link 
org.apache.hadoop.ozone.Versioned}
+ * - applyBefore : Returns an enum which implement {@link 
org.apache.hadoop.hdds.ComponentVersion}
  * - requestType: Returns an Enum value.
  * - processingPhase: Returns {@link 
org.apache.hadoop.ozone.request.validation.RequestProcessingPhase}
  *
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestBlockDataStreamOutput.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestBlockDataStreamOutput.java
index ab71288a8dc..d90bf3ea803 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestBlockDataStreamOutput.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestBlockDataStreamOutput.java
@@ -341,7 +341,7 @@ public void testDatanodeVersion(boolean flushDelay) throws 
Exception {
       List<HddsDatanodeService> dns = cluster.getHddsDatanodes();
       for (HddsDatanodeService dn : dns) {
         DatanodeDetails details = dn.getDatanodeDetails();
-        assertEquals(DN_OLD_VERSION.toProtoValue(), 
details.getCurrentVersion());
+        assertEquals(DN_OLD_VERSION.serialize(), details.getCurrentVersion());
       }
 
       String keyName = getKeyName();
@@ -352,7 +352,7 @@ public void testDatanodeVersion(boolean flushDelay) throws 
Exception {
       // Now check 3 DNs in a random pipeline returns the correct DN versions
       List<DatanodeDetails> streamDnDetails = stream.getPipeline().getNodes();
       for (DatanodeDetails details : streamDnDetails) {
-        assertEquals(DN_OLD_VERSION.toProtoValue(), 
details.getCurrentVersion());
+        assertEquals(DN_OLD_VERSION.serialize(), details.getCurrentVersion());
       }
     }
   }
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestBucketLayoutWithOlderClient.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestBucketLayoutWithOlderClient.java
index 08961fc4773..2275664de40 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestBucketLayoutWithOlderClient.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestBucketLayoutWithOlderClient.java
@@ -79,7 +79,7 @@ public void testCreateBucketWithOlderClient() throws 
Exception {
         OzoneManagerProtocolProtos.OMRequest
             .newBuilder()
             .setCmdType(OzoneManagerProtocolProtos.Type.CreateBucket)
-            .setVersion(ClientVersion.DEFAULT_VERSION.toProtoValue())
+            .setVersion(ClientVersion.DEFAULT_VERSION.serialize())
             .setClientId(UUID.randomUUID().toString())
             .setCreateBucketRequest(
                 OzoneManagerProtocolProtos.CreateBucketRequest.newBuilder()
diff --git 
a/hadoop-ozone/mini-cluster/src/main/java/org/apache/hadoop/ozone/UniformDatanodesFactory.java
 
b/hadoop-ozone/mini-cluster/src/main/java/org/apache/hadoop/ozone/UniformDatanodesFactory.java
index 34fa80bc446..22d7dc617bb 100644
--- 
a/hadoop-ozone/mini-cluster/src/main/java/org/apache/hadoop/ozone/UniformDatanodesFactory.java
+++ 
b/hadoop-ozone/mini-cluster/src/main/java/org/apache/hadoop/ozone/UniformDatanodesFactory.java
@@ -111,10 +111,10 @@ public OzoneConfiguration apply(OzoneConfiguration conf) 
throws IOException {
     }
 
     if (initialVersion != null) {
-      dnConf.setInt(TESTING_DATANODE_VERSION_INITIAL, 
initialVersion.toProtoValue());
+      dnConf.setInt(TESTING_DATANODE_VERSION_INITIAL, 
initialVersion.serialize());
     }
     if (currentVersion != null) {
-      dnConf.setInt(TESTING_DATANODE_VERSION_CURRENT, 
currentVersion.toProtoValue());
+      dnConf.setInt(TESTING_DATANODE_VERSION_CURRENT, 
currentVersion.serialize());
     }
     dnConf.set(HDDS_RATIS_LEADER_FIRST_ELECTION_MINIMUM_TIMEOUT_DURATION_KEY, 
"1s");
     dnConf.set(HDDS_INITIAL_HEARTBEAT_INTERVAL, "500ms");
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMClientVersionValidator.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMClientVersionValidator.java
index 015b67b47dd..e7f62a72123 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMClientVersionValidator.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMClientVersionValidator.java
@@ -35,7 +35,7 @@
  *
  * The conditions describe the specific use case in which the validator should 
be
  * applied to the request.
- * See {@link VersionExtractor} for getting all the supported different {@link 
org.apache.hadoop.ozone.Versioned}
+ * See {@link VersionExtractor} for getting all the supported different {@link 
org.apache.hadoop.hdds.ComponentVersion}
  * component's actual version.
  * The validator method will be applied to the specified request type(s).
  * To help keep these methods simple and straightforward, use one method for 
multiple requests only If
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMLayoutVersionValidator.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMLayoutVersionValidator.java
index 8dc624fe10b..5e516dfabe5 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMLayoutVersionValidator.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/validation/OMLayoutVersionValidator.java
@@ -35,7 +35,7 @@
  *
  * The conditions describe the specific use case in which the validator should 
be
  * applied to the request.
- * See {@link VersionExtractor} for getting all the supported different {@link 
org.apache.hadoop.ozone.Versioned}
+ * See {@link VersionExtractor} for getting all the supported different {@link 
org.apache.hadoop.hdds.ComponentVersion}
  * component's actual version.
  * The validator method will be applied to the specified request type(s).
  * To help keep these methods simple and straightforward use inheritance and 
annotate
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..f7b90bd060d 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
@@ -18,8 +18,8 @@
 package org.apache.hadoop.ozone.om.request.validation;
 
 import java.lang.annotation.Annotation;
+import org.apache.hadoop.hdds.ComponentVersion;
 import org.apache.hadoop.ozone.ClientVersion;
-import org.apache.hadoop.ozone.Versioned;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
 import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
 
@@ -32,7 +32,7 @@ public enum VersionExtractor {
    */
   LAYOUT_VERSION_EXTRACTOR {
     @Override
-    public Versioned extractVersion(OMRequest req, ValidationContext ctx) {
+    public ComponentVersion extractVersion(OMRequest req, ValidationContext 
ctx) {
       LayoutVersionManager layoutVersionManager = ctx.versionManager();
       return 
ctx.versionManager().getFeature(layoutVersionManager.getMetadataLayoutVersion());
     }
@@ -48,7 +48,7 @@ public Class<? extends Annotation> getValidatorClass() {
    */
   CLIENT_VERSION_EXTRACTOR {
     @Override
-    public Versioned extractVersion(OMRequest req, ValidationContext ctx) {
+    public ComponentVersion extractVersion(OMRequest req, ValidationContext 
ctx) {
       return req.getVersion() > ClientVersion.CURRENT_VERSION ?
           ClientVersion.FUTURE_VERSION : 
ClientVersion.fromProtoValue(req.getVersion());
     }
@@ -59,7 +59,7 @@ public Class<? extends Annotation> getValidatorClass() {
     }
   };
 
-  public abstract Versioned extractVersion(OMRequest req, ValidationContext 
ctx);
+  public abstract ComponentVersion extractVersion(OMRequest req, 
ValidationContext ctx);
 
   public abstract Class<? extends Annotation> getValidatorClass();
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeature.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeature.java
index ef99b453b7f..c19b720682d 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeature.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeature.java
@@ -48,8 +48,8 @@ public enum OMLayoutFeature implements LayoutFeature {
 
   ///////////////////////////////  /////////////////////////////
 
-  private int layoutVersion;
-  private String description;
+  private final int layoutVersion;
+  private final String description;
   private OmUpgradeAction action;
 
   OMLayoutFeature(final int layoutVersion, String description) {
@@ -67,6 +67,11 @@ public String description() {
     return description;
   }
 
+  @Override
+  public String toString() {
+    return name() + " (" + serialize() + ")";
+  }
+
   /**
    * Associates a given upgrade action with this feature. Only the first 
upgrade action registered will be used.
    *
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureAspect.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureAspect.java
index 70cfa1791fd..20edda53823 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureAspect.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureAspect.java
@@ -50,9 +50,9 @@ public class OMLayoutFeatureAspect {
 
   @Before("@annotation(DisallowedUntilLayoutVersion) && execution(* *(..))")
   public void checkLayoutFeature(JoinPoint joinPoint) throws IOException {
-    String featureName = ((MethodSignature) joinPoint.getSignature())
+    LayoutFeature layoutFeature = ((MethodSignature) joinPoint.getSignature())
         .getMethod().getAnnotation(DisallowedUntilLayoutVersion.class)
-        .value().name();
+        .value();
     LayoutVersionManager lvm;
     final Object[] args = joinPoint.getArgs();
     if (joinPoint.getTarget() instanceof OzoneManagerRequestHandler) {
@@ -73,19 +73,18 @@ public void checkLayoutFeature(JoinPoint joinPoint) throws 
IOException {
         lvm = new OMLayoutVersionManager();
       }
     }
-    checkIsAllowed(joinPoint.getSignature().toShortString(), lvm, featureName);
+    checkIsAllowed(joinPoint.getSignature().toShortString(), lvm, 
layoutFeature);
   }
 
   private void checkIsAllowed(String operationName,
                               LayoutVersionManager lvm,
-                              String featureName) throws OMException {
-    if (!lvm.isAllowed(featureName)) {
-      LayoutFeature layoutFeature = lvm.getFeature(featureName);
+                              LayoutFeature layoutFeature) throws OMException {
+    if (!lvm.isAllowed(layoutFeature)) {
       throw new OMException(String.format("Operation %s cannot be invoked " +
               "before finalization. It belongs to the layout feature %s, " +
               "whose layout version is %d. Current Layout version is %d",
           operationName,
-          layoutFeature.name(),
+          layoutFeature.toString(),
           layoutFeature.layoutVersion(),
           lvm.getMetadataLayoutVersion()),
           NOT_SUPPORTED_OPERATION_PRIOR_FINALIZATION);
@@ -113,7 +112,7 @@ public void beforeRequestApplyTxn(final JoinPoint joinPoint)
 
     LayoutFeature lf = annotation.value();
     checkIsAllowed(joinPoint.getTarget().getClass().getSimpleName(),
-        om.getVersionManager(), lf.name());
+        om.getVersionManager(), lf);
   }
 
   /**
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeAction.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeAction.java
index 2c3f5f154c8..1d90eac15b4 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeAction.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeAction.java
@@ -18,7 +18,7 @@
 package org.apache.hadoop.ozone.om.upgrade;
 
 import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.upgrade.LayoutFeature.UpgradeAction;
+import org.apache.hadoop.ozone.upgrade.UpgradeAction;
 
 /**
  * Upgrade Action for OzoneManager which takes in an 'OM' instance.
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
index 1b096070ea3..04351d3f829 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
@@ -29,7 +29,6 @@
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.framework;
 import static org.mockito.Mockito.mock;
@@ -69,6 +68,7 @@
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.CreateDirectoryRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -112,7 +112,7 @@ public void setup() throws Exception {
             BucketLayout.DEFAULT));
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
-    when(lvm.isAllowed(anyString())).thenReturn(true);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(true);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
index 4abeaf25d0c..fd125563825 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
@@ -27,7 +27,6 @@
 import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.framework;
 import static org.mockito.Mockito.mock;
@@ -69,6 +68,7 @@
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.CreateDirectoryRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -113,7 +113,7 @@ public void setup() throws Exception {
                     BucketLayout.DEFAULT));
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
-    when(lvm.isAllowed(anyString())).thenReturn(true);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(true);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
index b84294370c5..8643802723e 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
@@ -87,6 +87,7 @@
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
 import org.apache.hadoop.ozone.security.acl.OzoneNativeAuthorizer;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.util.Time;
 import org.apache.ozone.test.GenericTestUtils;
@@ -155,7 +156,7 @@ public void setup() throws Exception {
     when(ozoneManager.getConfiguration()).thenReturn(ozoneConfiguration);
     
when(ozoneManager.getConfig()).thenReturn(ozoneConfiguration.getObject(OmConfig.class));
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
-    when(lvm.isAllowed(anyString())).thenReturn(true);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(true);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
     when(ozoneManager.isFilesystemSnapshotEnabled()).thenReturn(true);
     auditLogger = mock(AuditLogger.class);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantCreateRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantCreateRequest.java
index 36529d01064..713bf6b621d 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantCreateRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantCreateRequest.java
@@ -22,7 +22,6 @@
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.framework;
@@ -54,6 +53,7 @@
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status;
 import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
 import org.apache.hadoop.ozone.security.acl.OzoneObj;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -83,7 +83,7 @@ public void setup() throws Exception {
     when(ozoneManager.getMaxUserVolumeCount()).thenReturn(10L);
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
-    when(lvm.isAllowed(anyString())).thenReturn(true);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(true);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
     AuditLogger auditLogger = mock(AuditLogger.class);
     when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantDeleteRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantDeleteRequest.java
index 6de4f1d8446..15a0660a686 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantDeleteRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/tenant/TestOMTenantDeleteRequest.java
@@ -49,6 +49,7 @@
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
 import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
 import org.apache.hadoop.ozone.security.acl.OzoneObj;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -80,7 +81,7 @@ public void setup() throws Exception {
 
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
-    when(lvm.isAllowed(anyString())).thenReturn(true);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(true);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
 
     AuditLogger auditLogger = mock(AuditLogger.class);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestOMValidatorProcessor.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestOMValidatorProcessor.java
index 677a722bfe1..d487cdf216e 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestOMValidatorProcessor.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestOMValidatorProcessor.java
@@ -41,7 +41,7 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import org.apache.hadoop.ozone.Versioned;
+import org.apache.hadoop.hdds.ComponentVersion;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
 import org.apache.hadoop.ozone.request.validation.RegisterValidator;
 import org.apache.hadoop.ozone.request.validation.RequestProcessingPhase;
@@ -89,7 +89,7 @@ private static Stream<Arguments> annotatedClasses() {
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testAnnotationCanOnlyBeAppliedOnMethods(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testAnnotationCanOnlyBeAppliedOnMethods(Class<?> annotationClass,
                                                                                
     V version) {
     for (Annotation a : annotationClass.getAnnotations()) {
       if (a instanceof Target) {
@@ -101,8 +101,9 @@ public <V extends Enum<V> & Versioned> void 
testAnnotationCanOnlyBeAppliedOnMeth
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testACorrectAnnotationSetupForPreProcessCompiles(Class<?> annotationClass,
-                                                                               
              V version) {
+  public <V extends Enum<V> & ComponentVersion> void
+      testACorrectAnnotationSetupForPreProcessCompiles(
+          Class<?> annotationClass, V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
         modifiers("public", "static"),
@@ -115,7 +116,7 @@ public <V extends Enum<V> & Versioned> void 
testACorrectAnnotationSetupForPrePro
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testACorrectAnnotationSetupForPostProcessCompiles(
+  public <V extends Enum<V> & ComponentVersion> void 
testACorrectAnnotationSetupForPostProcessCompiles(
       Class<?> annotationClass, V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -129,8 +130,9 @@ public <V extends Enum<V> & Versioned> void 
testACorrectAnnotationSetupForPostPr
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testValidatorDoesNotNecessarilyThrowsExceptions(Class<?> annotationClass,
-                                                                               
             V version) {
+  public <V extends Enum<V> & ComponentVersion> void
+      testValidatorDoesNotNecessarilyThrowsExceptions(
+          Class<?> annotationClass, V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
         modifiers("public", "static"),
@@ -143,7 +145,7 @@ public <V extends Enum<V> & Versioned> void 
testValidatorDoesNotNecessarilyThrow
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testNonStaticValidatorDoesNotCompile(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testNonStaticValidatorDoesNotCompile(Class<?> annotationClass,
                                                                                
  V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -158,7 +160,7 @@ public <V extends Enum<V> & Versioned> void 
testNonStaticValidatorDoesNotCompile
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBeFinal(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testValidatorMethodCanBeFinal(Class<?> annotationClass,
                                                                           V 
version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -172,7 +174,7 @@ public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBeFinal(Class<
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBePrivate(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testValidatorMethodCanBePrivate(Class<?> annotationClass,
                                                                             V 
version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -186,7 +188,7 @@ public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBePrivate(Clas
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBeDefaultVisible(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testValidatorMethodCanBeDefaultVisible(Class<?> annotationClass,
                                                                                
    V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -200,7 +202,7 @@ public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBeDefaultVisib
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBeProtected(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testValidatorMethodCanBeProtected(Class<?> annotationClass,
                                                                               
V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -214,7 +216,7 @@ public <V extends Enum<V> & Versioned> void 
testValidatorMethodCanBeProtected(Cl
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testNotEnoughParametersForPreProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testNotEnoughParametersForPreProcess(Class<?> annotationClass,
                                                                                
  V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -230,7 +232,7 @@ public <V extends Enum<V> & Versioned> void 
testNotEnoughParametersForPreProcess
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testTooManyParametersForPreProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testTooManyParametersForPreProcess(Class<?> annotationClass,
                                                                                
V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -246,7 +248,7 @@ public <V extends Enum<V> & Versioned> void 
testTooManyParametersForPreProcess(C
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testNotEnoughParametersForPostProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testNotEnoughParametersForPostProcess(Class<?> annotationClass,
                                                                                
   V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -262,7 +264,7 @@ public <V extends Enum<V> & Versioned> void 
testNotEnoughParametersForPostProces
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testTooManyParametersForPostProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testTooManyParametersForPostProcess(Class<?> annotationClass,
                                                                                
 V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -279,7 +281,7 @@ public <V extends Enum<V> & Versioned> void 
testTooManyParametersForPostProcess(
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongReturnValueForPreProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongReturnValueForPreProcess(Class<?> annotationClass,
                                                                               
V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -294,7 +296,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongReturnValueForPreProcess(Cl
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongReturnValueForPostProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongReturnValueForPostProcess(Class<?> annotationClass,
                                                                                
V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -309,7 +311,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongReturnValueForPostProcess(C
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongFirstArgumentForPreProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongFirstArgumentForPreProcess(Class<?> annotationClass,
                                                                                
 V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -324,7 +326,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongFirstArgumentForPreProcess(
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongFirstArgumentForPostProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongFirstArgumentForPostProcess(Class<?> annotationClass,
                                                                                
  V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -339,7 +341,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongFirstArgumentForPostProcess
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongSecondArgumentForPreProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongSecondArgumentForPreProcess(Class<?> annotationClass,
                                                                                
  V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(preProcess(), aReqType(), annotationClass, version),
@@ -354,7 +356,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongSecondArgumentForPreProcess
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongSecondArgumentForPostProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongSecondArgumentForPostProcess(Class<?> annotationClass,
                                                                                
   V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -369,7 +371,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongSecondArgumentForPostProces
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testWrongThirdArgumentForPostProcess(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testWrongThirdArgumentForPostProcess(Class<?> annotationClass,
                                                                                
  V version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -384,7 +386,7 @@ public <V extends Enum<V> & Versioned> void 
testWrongThirdArgumentForPostProcess
   
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testInvalidProcessingPhase(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testInvalidProcessingPhase(Class<?> annotationClass,
                                                                        V 
version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf("INVALID", aReqType(), annotationClass, version),
@@ -398,7 +400,7 @@ public <V extends Enum<V> & Versioned> void 
testInvalidProcessingPhase(Class<?>
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testInvalidClientVersion(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testInvalidClientVersion(Class<?> annotationClass,
                                                                      V 
version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(RequestProcessingPhase.PRE_PROCESS, aReqType(), 
annotationClass, null),
@@ -412,7 +414,7 @@ public <V extends Enum<V> & Versioned> void 
testInvalidClientVersion(Class<?> an
 
   @ParameterizedTest
   @MethodSource("annotatedClasses")
-  public <V extends Enum<V> & Versioned> void 
testMultipleErrorMessages(Class<?> annotationClass,
+  public <V extends Enum<V> & ComponentVersion> void 
testMultipleErrorMessages(Class<?> annotationClass,
                                                                       V 
version) {
     List<String> source = generateSourceOfValidatorMethodWith(
         annotationOf(postProcess(), aReqType(), annotationClass, version),
@@ -493,12 +495,12 @@ private List<String> generateSourceOfValidatorMethodWith(
     return lines;
   }
 
-  private <V extends Enum<V> & Versioned> String annotationOf(
+  private <V extends Enum<V> & ComponentVersion> String annotationOf(
       RequestProcessingPhase phase, Type reqType, Class<?> annotationClass, V 
applyBeforeVersion) {
     return annotationOf(phase.name(), reqType, annotationClass, 
applyBeforeVersion);
   }
 
-  private <V extends Enum<V> & Versioned> String annotationOf(
+  private <V extends Enum<V> & ComponentVersion> String annotationOf(
       String phase,
       Type reqType,
       Class<?> annotationClass,
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestVersionExtractor.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestVersionExtractor.java
index 80133cf5de8..ba971e5bea3 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestVersionExtractor.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/validation/TestVersionExtractor.java
@@ -24,8 +24,8 @@
 import com.google.common.collect.ImmutableMap;
 import java.lang.annotation.Annotation;
 import java.util.Map;
+import org.apache.hadoop.hdds.ComponentVersion;
 import org.apache.hadoop.ozone.ClientVersion;
-import org.apache.hadoop.ozone.Versioned;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.upgrade.OMLayoutFeature;
 import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager;
@@ -42,9 +42,10 @@ class TestVersionExtractor {
   @EnumSource(OMLayoutFeature.class)
   void testLayoutVersionExtractor(OMLayoutFeature layoutVersionValue) throws 
OMException {
     ValidationContext context = mock(ValidationContext.class);
-    LayoutVersionManager layoutVersionManager = new 
OMLayoutVersionManager(layoutVersionValue.version());
+    LayoutVersionManager layoutVersionManager = new 
OMLayoutVersionManager(layoutVersionValue.serialize());
     when(context.versionManager()).thenReturn(layoutVersionManager);
-    Versioned version = 
VersionExtractor.LAYOUT_VERSION_EXTRACTOR.extractVersion(null, context);
+    ComponentVersion version =
+        VersionExtractor.LAYOUT_VERSION_EXTRACTOR.extractVersion(null, 
context);
     assertEquals(layoutVersionValue, version);
   }
 
@@ -52,8 +53,9 @@ void testLayoutVersionExtractor(OMLayoutFeature 
layoutVersionValue) throws OMExc
   @EnumSource(ClientVersion.class)
   void testClientVersionExtractor(ClientVersion expectedClientVersion) {
     OMRequest request = mock(OMRequest.class);
-    when(request.getVersion()).thenReturn(expectedClientVersion.version());
-    Versioned version = 
VersionExtractor.CLIENT_VERSION_EXTRACTOR.extractVersion(request, null);
+    when(request.getVersion()).thenReturn(expectedClientVersion.serialize());
+    ComponentVersion version =
+        VersionExtractor.CLIENT_VERSION_EXTRACTOR.extractVersion(request, 
null);
     assertEquals(expectedClientVersion, version);
   }
 
@@ -62,7 +64,8 @@ void testClientVersionExtractor(ClientVersion 
expectedClientVersion) {
   void testClientVersionExtractorForFutureValues(int futureVersion) {
     OMRequest request = mock(OMRequest.class);
     when(request.getVersion()).thenReturn(ClientVersion.CURRENT_VERSION + 
futureVersion);
-    Versioned version = 
VersionExtractor.CLIENT_VERSION_EXTRACTOR.extractVersion(request, null);
+    ComponentVersion version =
+        VersionExtractor.CLIENT_VERSION_EXTRACTOR.extractVersion(request, 
null);
     assertEquals(ClientVersion.FUTURE_VERSION, version);
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotRequestAndResponse.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotRequestAndResponse.java
index 9c6f033b907..3653a324a97 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotRequestAndResponse.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestSnapshotRequestAndResponse.java
@@ -22,7 +22,6 @@
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.framework;
 import static org.mockito.Mockito.mock;
@@ -69,6 +68,7 @@
 import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.io.TempDir;
@@ -167,7 +167,7 @@ public void baseSetup() throws Exception {
     when(ozoneManager.getAccessAuthorizer()).thenReturn(accessAuthorizer);
     when(accessAuthorizer.isNative()).thenReturn(false);
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
-    when(lvm.isAllowed(anyString())).thenReturn(true);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(true);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
     AuditLogger auditLogger = mock(AuditLogger.class);
     when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
index f6e0938ec27..f9e7f364c0a 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
@@ -18,11 +18,12 @@
 package org.apache.hadoop.ozone.om.upgrade;
 
 import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutFeature.INITIAL_VERSION;
-import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
 
 /**
@@ -55,8 +56,9 @@ public String basicMethod() {
   // instance of the layout version manager.
   public LayoutVersionManager getOmVersionManager() throws IOException {
     LayoutVersionManager mockLvm = mock(LayoutVersionManager.class);
-    when(mockLvm.isAllowed(anyString())).thenReturn(false).thenReturn(true);
-    when(mockLvm.getFeature(anyString())).thenReturn(INITIAL_VERSION);
+    when(mockLvm.isAllowed(any(LayoutFeature.class)))
+        .thenReturn(false)
+        .thenReturn(true);
     return mockLvm;
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMLayoutFeatureAspect.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMLayoutFeatureAspect.java
index 457a978440f..a49df70bb0a 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMLayoutFeatureAspect.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMLayoutFeatureAspect.java
@@ -17,10 +17,9 @@
 
 package org.apache.hadoop.ozone.om.upgrade;
 
-import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutFeature.INITIAL_VERSION;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -29,6 +28,7 @@
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.ozone.om.OzoneManager;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.junit.jupiter.api.BeforeEach;
@@ -82,8 +82,7 @@ public void testPreExecuteLayoutCheck() {
 
     OzoneManager om = mock(OzoneManager.class);
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
-    when(lvm.isAllowed(anyString())).thenReturn(false);
-    when(lvm.getFeature(anyString())).thenReturn(INITIAL_VERSION);
+    when(lvm.isAllowed(any(LayoutFeature.class))).thenReturn(false);
     when(om.getVersionManager()).thenReturn(lvm);
 
     MockOmRequest mockOmRequest = new MockOmRequest();
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMUpgradeFinalizer.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMUpgradeFinalizer.java
index 6346f5c51ee..27d6c8f3a7a 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMUpgradeFinalizer.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMUpgradeFinalizer.java
@@ -194,7 +194,7 @@ public void testFinalizationWithFailingUpgradeAction() 
throws Exception {
 
     OMUpgradeFinalizer finalizer = new OMUpgradeFinalizer(versionManager);
     UpgradeException e = assertThrows(UpgradeException.class, () -> 
finalizer.finalize(CLIENT_ID, om));
-    assertThat(e.getMessage()).contains(lfs.iterator().next().name());
+    assertThat(e.getMessage()).contains(lfs.iterator().next().toString());
     assertEquals(e.getResult(), LAYOUT_FEATURE_FINALIZATION_FAILED);
     if (finalizer.isFinalizationDone()) {
       when(versionManager.getUpgradeState()).thenReturn(FINALIZATION_DONE);
@@ -232,7 +232,7 @@ private void setupVersionManagerMockToFinalize(
 
   private OMLayoutFeature mockFeature(String name, int version) {
     OMLayoutFeature f = mock(OMLayoutFeature.class);
-    lenient().when(f.name()).thenReturn(name);
+    lenient().when(f.toString()).thenReturn(name);
     when(f.layoutVersion()).thenReturn(version);
     return f;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to