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

avijayan pushed a commit to branch HDDS-3698-upgrade
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/HDDS-3698-upgrade by this push:
     new 81c1dee  HDDS-4219. Revisit 'static' nature of OM Layout Version 
Manager. (#1773)
81c1dee is described below

commit 81c1deef79a490a4ca40fd0a6ee7e40af87d6ff5
Author: avijayanhwx <[email protected]>
AuthorDate: Thu Jan 14 23:03:29 2021 +0530

    HDDS-4219. Revisit 'static' nature of OM Layout Version Manager. (#1773)
---
 .../hadoop/hdds/upgrade/HDDSLayoutFeature.java     | 73 ++++++++++++++++++
 .../hdds/upgrade/HDDSLayoutFeatureCatalog.java     | 87 ----------------------
 .../hdds/upgrade/HDDSLayoutVersionManager.java     | 45 +----------
 .../hadoop/ozone/upgrade/LayoutVersionManager.java | 10 +++
 .../common/statemachine/DatanodeStateMachine.java  | 12 +--
 .../states/endpoint/HeartbeatEndpointTask.java     | 13 ++--
 .../states/endpoint/RegisterEndpointTask.java      | 13 ++--
 ...pgradeAction.java => DataNodeLayoutAction.java} | 29 +++++++-
 .../upgrade/DataNodeLayoutActionCatalog.java       | 58 ---------------
 .../upgrade/DataNodeLayoutVersionManager.java      | 82 --------------------
 .../DataNodeUpgradeActionFirstUpgradeVersion.java  |  3 +-
 .../upgrade/DataNodeUpgradeFinalizer.java          |  7 +-
 .../states/endpoint/TestHeartbeatEndpointTask.java |  6 +-
 .../upgrade/TestDataNodeStartupSlvLessThanMlv.java |  5 +-
 .../hdds/scm/server/StorageContainerManager.java   |  6 +-
 ...youtActionCatalog.java => SCMLayoutAction.java} | 41 +++++-----
 .../hdds/scm/server/upgrade/SCMUpgradeAction.java  | 29 --------
 .../SCMUpgradeActionFirstUpgradeVersion.java       |  3 +-
 .../scm/server/upgrade/SCMUpgradeFinalizer.java    |  3 +-
 .../hadoop/hdds/scm/node/TestSCMNodeManager.java   |  2 +-
 .../scm/upgrade/TestScmStartupSlvLessThanMlv.java  |  4 +-
 .../ozone/container/common/TestEndPoint.java       |  6 +-
 .../org/apache/hadoop/ozone/om/OzoneManager.java   |  9 +--
 .../om/ratis/utils/OzoneManagerRatisUtils.java     |  6 +-
 .../ozone/om/upgrade/OMLayoutFeatureAspect.java    | 22 +++++-
 .../ozone/om/upgrade/OMLayoutFeatureUtil.java      | 18 +++++
 ...anagerImpl.java => OMLayoutVersionManager.java} | 51 +++----------
 .../ozone/om/upgrade/OMUpgradeFinalizer.java       |  4 +-
 .../ozone/om/upgrade/OmLayoutVersionManager.java   | 29 --------
 .../protocolPB/OzoneManagerRequestHandler.java     |  2 +-
 .../ozone/om/request/bucket/TestBucketRequest.java |  4 +-
 .../ozone/om/request/key/TestOMKeyRequest.java     |  4 +-
 .../om/request/volume/TestOMVolumeRequest.java     |  4 +-
 .../om/upgrade/TestOMLayoutFeatureAspect.java      |  2 -
 .../ozone/om/upgrade/TestOMUpgradeFinalizer.java   |  2 +-
 .../ozone/om/upgrade/TestOMVersionManager.java     | 37 +++------
 .../TestOmVersionManagerRequestFactory.java        | 10 +--
 .../scm/ReconStorageContainerManagerFacade.java    |  4 +-
 .../ozone/recon/scm/TestReconNodeManager.java      |  2 +-
 39 files changed, 253 insertions(+), 494 deletions(-)

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
new file mode 100644
index 0000000..672c3ff
--- /dev/null
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeature.java
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hdds.upgrade;
+
+import java.util.Optional;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+import org.apache.hadoop.ozone.upgrade.LayoutFeature;
+
+/**
+ * List of HDDS Features.
+ */
+public enum HDDSLayoutFeature implements LayoutFeature {
+  //////////////////////////////  //////////////////////////////
+  INITIAL_VERSION(0, "Initial Layout Version"),
+  FIRST_UPGRADE_VERSION(1, "First Layout Version After Upgrade");
+
+  //////////////////////////////  //////////////////////////////
+
+  private int layoutVersion;
+  private String description;
+  private HDDSUpgradeAction scmUpgradeAction;
+  private HDDSUpgradeAction datanodeUpgradeAction;
+
+  HDDSLayoutFeature(final int layoutVersion, String description) {
+    this.layoutVersion = layoutVersion;
+    this.description = description;
+  }
+
+  @SuppressFBWarnings("ME_ENUM_FIELD_SETTER")
+  public void setSCMUpgradeAction(HDDSUpgradeAction scmAction) {
+    this.scmUpgradeAction = scmAction;
+  }
+
+  @SuppressFBWarnings("ME_ENUM_FIELD_SETTER")
+  public void setDataNodeUpgradeAction(HDDSUpgradeAction datanodeAction) {
+    this.datanodeUpgradeAction = datanodeAction;
+  }
+
+  @Override
+  public int layoutVersion() {
+    return layoutVersion;
+  }
+
+  @Override
+  public String description() {
+    return description;
+  }
+
+  public Optional<? extends HDDSUpgradeAction> onFinalizeSCMAction() {
+    return Optional.ofNullable(scmUpgradeAction);
+  }
+
+  public Optional<? extends HDDSUpgradeAction> onFinalizeDataNodeAction() {
+    return Optional.ofNullable(datanodeUpgradeAction);
+  }
+}
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeatureCatalog.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeatureCatalog.java
deleted file mode 100644
index 2c6760e..0000000
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutFeatureCatalog.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.hdds.upgrade;
-
-import java.util.Optional;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-import org.apache.hadoop.ozone.upgrade.LayoutFeature;
-
-/**
- * Catalog of HDDS features.
- */
-public class HDDSLayoutFeatureCatalog {
-
-
-  /**
-   * List of HDDS Features.
-   */
-  public enum HDDSLayoutFeature implements LayoutFeature {
-    //////////////////////////////  //////////////////////////////
-    INITIAL_VERSION(0, "Initial Layout Version"),
-    FIRST_UPGRADE_VERSION(1, "First Layout Version After Upgrade");
-
-    //////////////////////////////  //////////////////////////////
-
-    private int layoutVersion;
-    private String description;
-
-    private Optional<? extends HDDSUpgradeAction> scmUpgradeAction =
-        Optional.empty();
-
-    private Optional<? extends HDDSUpgradeAction> datanodeUpgradeAction =
-        Optional.empty();
-
-    HDDSLayoutFeature(final int layoutVersion, String description) {
-      this.layoutVersion = layoutVersion;
-      this.description = description;
-    }
-
-    @SuppressFBWarnings("ME_ENUM_FIELD_SETTER")
-    public void setSCMUpgradeAction(Optional<? extends HDDSUpgradeAction>
-                                        scmAction) {
-      this.scmUpgradeAction = scmAction;
-    }
-
-    @SuppressFBWarnings("ME_ENUM_FIELD_SETTER")
-    public void setDataNodeUpgradeAction(Optional<? extends HDDSUpgradeAction>
-                                             datanodeAction) {
-      this.datanodeUpgradeAction = datanodeAction;
-    }
-
-    @Override
-    public int layoutVersion() {
-      return layoutVersion;
-    }
-
-    @Override
-    public String description() {
-      return description;
-    }
-
-    public Optional<? extends HDDSUpgradeAction> onFinalizeSCMAction() {
-      return scmUpgradeAction;
-    }
-
-    public Optional<? extends HDDSUpgradeAction> onFinalizeDataNodeAction() {
-      return datanodeUpgradeAction;
-    }
-  }
-}
-
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutVersionManager.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutVersionManager.java
index 8b8c250..92f230e 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutVersionManager.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/upgrade/HDDSLayoutVersionManager.java
@@ -22,11 +22,7 @@ package org.apache.hadoop.hdds.upgrade;
 import java.io.IOException;
 
 import org.apache.hadoop.ozone.common.Storage;
-import 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature;
 import org.apache.hadoop.ozone.upgrade.AbstractLayoutVersionManager;
-import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
-
-import com.google.common.annotations.VisibleForTesting;
 
 /**
  * Class to manage layout versions and features for Storage Container Manager
@@ -36,44 +32,7 @@ import com.google.common.annotations.VisibleForTesting;
 public class HDDSLayoutVersionManager extends
     AbstractLayoutVersionManager<HDDSLayoutFeature> {
 
-  private static HDDSLayoutVersionManager hddsLayoutVersionManager;
-
-  private HDDSLayoutVersionManager() {
-  }
-
-  /**
-   * Read only instance to HDDS Version Manager.
-   * @return version manager instance.
-   */
-  public static synchronized LayoutVersionManager getInstance() {
-    if (hddsLayoutVersionManager == null) {
-      throw new RuntimeException("HDDS Layout Version Manager not yet " +
-          "initialized.");
-    }
-    return hddsLayoutVersionManager;
-  }
-
-
-  /**
-   * Initialize HDDS version manager from scmstorage.
-   * @return version manager instance.
-   */
-  public static synchronized HDDSLayoutVersionManager initialize(
-      Storage hddsStorage)
-      throws IOException {
-    if (hddsLayoutVersionManager == null) {
-      hddsLayoutVersionManager = new HDDSLayoutVersionManager();
-      hddsLayoutVersionManager.init(hddsStorage.getLayoutVersion(),
-          HDDSLayoutFeature.values());
-    }
-    return hddsLayoutVersionManager;
-  }
-
-  @VisibleForTesting
-  protected synchronized static void resetLayoutVersionManager() {
-    if (hddsLayoutVersionManager != null) {
-      hddsLayoutVersionManager.reset();
-      hddsLayoutVersionManager = null;
-    }
+  public HDDSLayoutVersionManager(Storage hddsStorage) throws IOException {
+    init(hddsStorage.getLayoutVersion(), HDDSLayoutFeature.values());
   }
 }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
index 7714e80..dc7dffe 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/upgrade/LayoutVersionManager.java
@@ -63,4 +63,14 @@ public interface LayoutVersionManager {
   LayoutFeature getFeature(String name);
 
   Iterable<? extends LayoutFeature> unfinalizedFeatures();
+
+  /**
+   * Generic API for returning a registered handler for a given type.
+   * @param type String type
+   * @return
+   */
+  default Object getHandler(String type) {
+    return null;
+  }
+
 }
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
index 28e34c7..98786a5 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
@@ -37,6 +37,7 @@ import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolPro
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.NodeReportProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.PipelineReportsProto;
 import 
org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import org.apache.hadoop.hdds.utils.LegacyHadoopConfigurationSource;
 import org.apache.hadoop.ozone.HddsDatanodeStopService;
 import org.apache.hadoop.ozone.container.common.DataNodeStorageConfig;
@@ -56,8 +57,7 @@ import 
org.apache.hadoop.ozone.container.replication.ContainerReplicator;
 import 
org.apache.hadoop.ozone.container.replication.DownloadAndImportReplicator;
 import org.apache.hadoop.ozone.container.replication.ReplicationSupervisor;
 import org.apache.hadoop.ozone.container.replication.SimpleContainerDownloader;
-import 
org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutActionCatalog.DataNodeLayoutAction;
-import org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutVersionManager;
+import org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutAction;
 import org.apache.hadoop.ozone.container.upgrade.DataNodeUpgradeFinalizer;
 import org.apache.hadoop.ozone.protocol.commands.SCMCommand;
 import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer.StatusAndMessages;
@@ -95,7 +95,7 @@ public class DatanodeStateMachine implements Closeable {
   private CertificateClient dnCertClient;
   private final HddsDatanodeStopService hddsDatanodeStopService;
 
-  private DataNodeLayoutVersionManager dataNodeVersionManager;
+  private HDDSLayoutVersionManager dataNodeVersionManager;
   private DataNodeStorageConfig dataNodeStorageConfig;
   private DataNodeUpgradeFinalizer upgradeFinalizer;
 
@@ -130,8 +130,8 @@ public class DatanodeStateMachine implements Closeable {
     if (dataNodeStorageConfig.getState() != INITIALIZED) {
       dataNodeStorageConfig.initialize();
     }
-    dataNodeVersionManager = DataNodeLayoutVersionManager
-        .initialize(dataNodeStorageConfig);
+    dataNodeVersionManager =
+        new HDDSLayoutVersionManager(dataNodeStorageConfig);
     upgradeFinalizer = new DataNodeUpgradeFinalizer(dataNodeVersionManager);
 
     executorService = Executors.newFixedThreadPool(
@@ -582,7 +582,7 @@ public class DatanodeStateMachine implements Closeable {
   }
 
   @VisibleForTesting
-  public DataNodeLayoutVersionManager getDataNodeVersionManager() {
+  public HDDSLayoutVersionManager getDataNodeVersionManager() {
     return dataNodeVersionManager;
   }
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/HeartbeatEndpointTask.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/HeartbeatEndpointTask.java
index 63ccff6..4a40496 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/HeartbeatEndpointTask.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/HeartbeatEndpointTask.java
@@ -40,6 +40,7 @@ import org.apache.hadoop.hdds.protocol.proto
     .StorageContainerDatanodeProtocolProtos.SCMCommandProto;
 import org.apache.hadoop.hdds.protocol.proto
     .StorageContainerDatanodeProtocolProtos.SCMHeartbeatResponseProto;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import org.apache.hadoop.ozone.container.common.helpers
     .DeletedContainerBlocksSummary;
 import org.apache.hadoop.ozone.container.common.statemachine
@@ -47,7 +48,6 @@ import org.apache.hadoop.ozone.container.common.statemachine
 import org.apache.hadoop.ozone.container.common.statemachine
     .EndpointStateMachine.EndPointStates;
 import org.apache.hadoop.ozone.container.common.statemachine.StateContext;
-import org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutVersionManager;
 import org.apache.hadoop.ozone.protocol.commands.CloseContainerCommand;
 import org.apache.hadoop.ozone.protocol.commands.ClosePipelineCommand;
 import org.apache.hadoop.ozone.protocol.commands.CreatePipelineCommand;
@@ -87,7 +87,7 @@ public class HeartbeatEndpointTask
   private StateContext context;
   private int maxContainerActionsPerHB;
   private int maxPipelineActionsPerHB;
-  private DataNodeLayoutVersionManager layoutVersionManager;
+  private HDDSLayoutVersionManager layoutVersionManager;
 
   /**
    * Constructs a SCM heart beat.
@@ -112,7 +112,7 @@ public class HeartbeatEndpointTask
    */
   public HeartbeatEndpointTask(EndpointStateMachine rpcEndpoint,
                                ConfigurationSource conf, StateContext context,
-                               DataNodeLayoutVersionManager versionManager) {
+                               HDDSLayoutVersionManager versionManager) {
     this.rpcEndpoint = rpcEndpoint;
     this.conf = conf;
     this.context = context;
@@ -392,7 +392,7 @@ public class HeartbeatEndpointTask
     private ConfigurationSource conf;
     private DatanodeDetails datanodeDetails;
     private StateContext context;
-    private DataNodeLayoutVersionManager versionManager;
+    private HDDSLayoutVersionManager versionManager;
 
     /**
      * Constructs the builder class.
@@ -417,9 +417,8 @@ public class HeartbeatEndpointTask
      * @param versionMgr - config
      * @return Builder
      */
-    public Builder setLayoutVersionManager(
-        DataNodeLayoutVersionManager versionMgr) {
-      this.versionManager = versionMgr;
+    public Builder setLayoutVersionManager(HDDSLayoutVersionManager lvm) {
+      this.versionManager = lvm;
       return this;
     }
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/RegisterEndpointTask.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/RegisterEndpointTask.java
index 9f2476e..331ef0f 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/RegisterEndpointTask.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/states/endpoint/RegisterEndpointTask.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto
     .StorageContainerDatanodeProtocolProtos.PipelineReportsProto;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import org.apache.hadoop.ozone.container.common.statemachine
     .EndpointStateMachine;
 import org.apache.hadoop.hdds.protocol.proto
@@ -37,7 +38,6 @@ import org.apache.hadoop.hdds.protocol.proto
     .StorageContainerDatanodeProtocolProtos.LayoutVersionProto;
 import org.apache.hadoop.ozone.container.common.statemachine.StateContext;
 import org.apache.hadoop.ozone.container.ozoneimpl.OzoneContainer;
-import org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutVersionManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +59,7 @@ public final class RegisterEndpointTask implements
   private DatanodeDetails datanodeDetails;
   private final OzoneContainer datanodeContainerManager;
   private StateContext stateContext;
-  private DataNodeLayoutVersionManager layoutVersionManager;
+  private HDDSLayoutVersionManager layoutVersionManager;
 
   /**
    * Creates a register endpoint task.
@@ -90,7 +90,7 @@ public final class RegisterEndpointTask implements
   @VisibleForTesting
   public RegisterEndpointTask(EndpointStateMachine rpcEndPoint,
       ConfigurationSource conf, OzoneContainer ozoneContainer,
-      StateContext context, DataNodeLayoutVersionManager versionManager) {
+      StateContext context, HDDSLayoutVersionManager versionManager) {
     this.rpcEndPoint = rpcEndPoint;
     this.conf = conf;
     this.datanodeContainerManager = ozoneContainer;
@@ -205,7 +205,7 @@ public final class RegisterEndpointTask implements
     private DatanodeDetails datanodeDetails;
     private OzoneContainer container;
     private StateContext context;
-    private DataNodeLayoutVersionManager versionManager;
+    private HDDSLayoutVersionManager versionManager;
 
     /**
      * Constructs the builder class.
@@ -241,9 +241,8 @@ public final class RegisterEndpointTask implements
      * @param versionMgr - config
      * @return Builder.
      */
-    public Builder setLayoutVersionManager(
-        DataNodeLayoutVersionManager versionMgr) {
-      this.versionManager = versionMgr;
+    public Builder setLayoutVersionManager(HDDSLayoutVersionManager lvm) {
+      this.versionManager = lvm;
       return this;
     }
 
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeAction.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutAction.java
similarity index 51%
rename from 
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeAction.java
rename to 
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutAction.java
index 9097043..f46b434 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeAction.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutAction.java
@@ -18,12 +18,35 @@
 
 package org.apache.hadoop.ozone.container.upgrade;
 
+import static 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature.FIRST_UPGRADE_VERSION;
+
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
 import org.apache.hadoop.hdds.upgrade.HDDSUpgradeAction;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
 
 /**
- * Upgrade Action for DataNode which takes in a 'DataNodeStateMachine' 
instance.
+ * Catalog of HDDS features and their corresponding DataNode action.
+ * It is OK to skip HDDS features from the catalog that do not have
+ * any specific DataNodeActions.
  */
-public interface DataNodeUpgradeAction extends
-    HDDSUpgradeAction<DatanodeStateMachine> {
+public enum DataNodeLayoutAction {
+  DataNodeUpgradeFirstAction(FIRST_UPGRADE_VERSION,
+      new DataNodeUpgradeActionFirstUpgradeVersion());
+
+  //////////////////////////////  //////////////////////////////
+
+  private HDDSLayoutFeature hddsFeature;
+  private HDDSUpgradeAction<DatanodeStateMachine> action;
+
+  DataNodeLayoutAction(HDDSLayoutFeature feature,
+                       HDDSUpgradeAction<DatanodeStateMachine> action) {
+    this.hddsFeature = feature;
+    this.action = action;
+    this.hddsFeature.setDataNodeUpgradeAction(action);
+  }
+
+  public HDDSLayoutFeature getHddsFeature() {
+    return hddsFeature;
+  }
 }
+
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutActionCatalog.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutActionCatalog.java
deleted file mode 100644
index 48bfec2..0000000
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutActionCatalog.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.ozone.container.upgrade;
-
-import static 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature.FIRST_UPGRADE_VERSION;
-
-import java.util.Optional;
-
-import 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature;
-
-/**
- * Catalog of HDDS features and their corresponding DataNode action.
- * It is OK to skip HDDS features from the catalog that do not have
- * any specific DataNodeActions.
- */
-public class DataNodeLayoutActionCatalog {
-
-  /**
-   * List of HDDS Features and corresponding DataNode actions.
-   */
-  public enum DataNodeLayoutAction {
-    DataNodeAction1(FIRST_UPGRADE_VERSION,
-        new DataNodeUpgradeActionFirstUpgradeVersion());
-
-    //////////////////////////////  //////////////////////////////
-
-    private HDDSLayoutFeature hddsFeature;
-    private DataNodeUpgradeAction dataNodeAction;
-
-    DataNodeLayoutAction(HDDSLayoutFeature feature,
-                         DataNodeUpgradeAction action) {
-      this.hddsFeature = feature;
-      this.dataNodeAction = action;
-      this.hddsFeature.setDataNodeUpgradeAction(Optional.of(dataNodeAction));
-    }
-
-    public HDDSLayoutFeature getHddsFeature() {
-      return hddsFeature;
-    }
-  }
-}
-
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutVersionManager.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutVersionManager.java
deleted file mode 100644
index 1f33a81..0000000
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeLayoutVersionManager.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.ozone.container.upgrade;
-
-import java.io.IOException;
-
-import 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature;
-import org.apache.hadoop.ozone.common.Storage;
-import org.apache.hadoop.ozone.upgrade.AbstractLayoutVersionManager;
-import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Class to manage layout versions and features for Storage Container Manager
- * and DataNodes.
- */
-@SuppressWarnings("FinalClass")
-public class DataNodeLayoutVersionManager extends
-    AbstractLayoutVersionManager<HDDSLayoutFeature> {
-  private static final Logger LOG = LoggerFactory.getLogger(
-      DataNodeLayoutVersionManager.class);
-  private static DataNodeLayoutVersionManager dataNodeLayoutVersionManager;
-
-  private DataNodeLayoutVersionManager() {
-  }
-
-  /**
-   * Read only instance to DataNode Version Manager.
-   * @return version manager instance.
-   */
-  public static synchronized LayoutVersionManager getInstance() {
-    if (dataNodeLayoutVersionManager == null) {
-      throw new RuntimeException("DataNode Layout Version Manager not yet " +
-          "initialized.");
-    }
-    return dataNodeLayoutVersionManager;
-  }
-
-  /**
-   * Initialize DataNode version manager from version file stored on the
-   * DataNode.
-   * @param dataNodeStorage - DataNode storage config
-   * @return version manager instance.
-   */
-
-  public static synchronized DataNodeLayoutVersionManager initialize(
-      Storage dataNodeStorage) throws IOException {
-    if (dataNodeLayoutVersionManager == null) {
-      dataNodeLayoutVersionManager = new DataNodeLayoutVersionManager();
-      dataNodeLayoutVersionManager.init(dataNodeStorage.getLayoutVersion(),
-          HDDSLayoutFeature.values());
-    }
-    return dataNodeLayoutVersionManager;
-  }
-
-  @VisibleForTesting
-  protected synchronized static void resetLayoutVersionManager() {
-    if (dataNodeLayoutVersionManager != null) {
-      dataNodeLayoutVersionManager.reset();
-      dataNodeLayoutVersionManager = null;
-    }
-  }
-}
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeActionFirstUpgradeVersion.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeActionFirstUpgradeVersion.java
index 267af05..7e601f2 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeActionFirstUpgradeVersion.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeActionFirstUpgradeVersion.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.ozone.container.upgrade;
 
+import org.apache.hadoop.hdds.upgrade.HDDSUpgradeAction;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory;
  * Upgrade Action for DataNode for the very first first Upgrade Version.
  */
 public class DataNodeUpgradeActionFirstUpgradeVersion
-    implements DataNodeUpgradeAction {
+    implements HDDSUpgradeAction<DatanodeStateMachine> {
 
   public static final Logger LOG =
       LoggerFactory.getLogger(DataNodeUpgradeActionFirstUpgradeVersion.class);
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeFinalizer.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeFinalizer.java
index 6081f00..9b55fc5 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeFinalizer.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DataNodeUpgradeFinalizer.java
@@ -26,7 +26,8 @@ import java.io.IOException;
 import java.util.Optional;
 import java.util.concurrent.Callable;
 
-import 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
 import org.apache.hadoop.ozone.upgrade.BasicUpgradeFinalizer;
 import org.apache.hadoop.ozone.upgrade.LayoutFeature;
@@ -35,9 +36,9 @@ import org.apache.hadoop.ozone.upgrade.LayoutFeature;
  * UpgradeFinalizer for the DataNode.
  */
 public class DataNodeUpgradeFinalizer extends
-    BasicUpgradeFinalizer<DatanodeStateMachine, DataNodeLayoutVersionManager> {
+    BasicUpgradeFinalizer<DatanodeStateMachine, HDDSLayoutVersionManager> {
 
-  public DataNodeUpgradeFinalizer(DataNodeLayoutVersionManager versionManager) 
{
+  public DataNodeUpgradeFinalizer(HDDSLayoutVersionManager versionManager) {
     super(versionManager);
   }
 
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/states/endpoint/TestHeartbeatEndpointTask.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/states/endpoint/TestHeartbeatEndpointTask.java
index 29d5ce3..2058c8e 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/states/endpoint/TestHeartbeatEndpointTask.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/states/endpoint/TestHeartbeatEndpointTask.java
@@ -30,11 +30,11 @@ import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolPro
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.NodeReportProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMHeartbeatRequestProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMHeartbeatResponseProto;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine.DatanodeStates;
 import 
org.apache.hadoop.ozone.container.common.statemachine.EndpointStateMachine;
 import org.apache.hadoop.ozone.container.common.statemachine.StateContext;
-import org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutVersionManager;
 import 
org.apache.hadoop.ozone.protocolPB.StorageContainerDatanodeProtocolClientSideTranslatorPB;
 
 import org.junit.Assert;
@@ -280,8 +280,8 @@ public class TestHeartbeatEndpointTask {
     Mockito.when(endpointStateMachine.getEndPoint()).thenReturn(proxy);
     Mockito.when(endpointStateMachine.getAddress())
         .thenReturn(TEST_SCM_ENDPOINT);
-    DataNodeLayoutVersionManager layoutVersionManager =
-        Mockito.mock(DataNodeLayoutVersionManager.class);
+    HDDSLayoutVersionManager layoutVersionManager =
+        Mockito.mock(HDDSLayoutVersionManager.class);
     Mockito.when(layoutVersionManager.getSoftwareLayoutVersion())
         .thenReturn(TEST_SOFTWARE_LAYOUT_VERSION);
     Mockito.when(layoutVersionManager.getMetadataLayoutVersion())
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDataNodeStartupSlvLessThanMlv.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDataNodeStartupSlvLessThanMlv.java
index 35e7985..e075b13 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDataNodeStartupSlvLessThanMlv.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDataNodeStartupSlvLessThanMlv.java
@@ -25,7 +25,7 @@ import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
-import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
 import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.ozone.upgrade.TestUpgradeUtils;
@@ -57,8 +57,7 @@ public class TestDataNodeStartupSlvLessThanMlv {
 
     // Set metadata layout version larger then software layout version.
     int largestSlv = 0;
-    for (LayoutFeature f :
-        HDDSLayoutFeatureCatalog.HDDSLayoutFeature.values()) {
+    for (LayoutFeature f : HDDSLayoutFeature.values()) {
       largestSlv = Math.max(largestSlv, f.layoutVersion());
     }
     int mlv = largestSlv + 1;
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index 770b4db..d77524b 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -90,7 +90,7 @@ import 
org.apache.hadoop.hdds.scm.pipeline.PipelineReportHandler;
 import org.apache.hadoop.hdds.scm.pipeline.SCMPipelineManager;
 import 
org.apache.hadoop.hdds.scm.pipeline.choose.algorithms.PipelineChoosePolicyFactory;
 import org.apache.hadoop.hdds.scm.safemode.SCMSafeModeManager;
-import 
org.apache.hadoop.hdds.scm.server.upgrade.SCMLayoutActionCatalog.SCMLayoutAction;
+import org.apache.hadoop.hdds.scm.server.upgrade.SCMLayoutAction;
 import org.apache.hadoop.hdds.scm.server.upgrade.SCMUpgradeFinalizer;
 import org.apache.hadoop.hdds.security.exception.SCMSecurityException;
 import org.apache.hadoop.hdds.security.x509.SecurityConfig;
@@ -264,9 +264,7 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
     }
 
     loadSCMUpgradeActions();
-    scmLayoutVersionManager =
-        HDDSLayoutVersionManager.initialize(scmStorageConfig);
-
+    scmLayoutVersionManager = new HDDSLayoutVersionManager(scmStorageConfig);
     upgradeFinalizer = new SCMUpgradeFinalizer(scmLayoutVersionManager);
 
     /**
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMLayoutActionCatalog.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMLayoutAction.java
similarity index 53%
rename from 
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMLayoutActionCatalog.java
rename to 
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMLayoutAction.java
index d8c9765..155c947 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMLayoutActionCatalog.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMLayoutAction.java
@@ -18,38 +18,35 @@
 
 package org.apache.hadoop.hdds.scm.server.upgrade;
 
-import static 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature.FIRST_UPGRADE_VERSION;
-import java.util.Optional;
-import 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature;
+import static 
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature.FIRST_UPGRADE_VERSION;
+
+import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.upgrade.HDDSUpgradeAction;
 
 /**
  * Catalog of HDDS features and their corresponding SCM action.
  * It is OK to skip HDDS features from the catalog that do not have
  * any specific SCMActions.
  */
-public class SCMLayoutActionCatalog {
-
-  /**
-   * List of HDDS Features and corresponding SCM actions.
-   */
-  public enum SCMLayoutAction {
-    SCMAction1(FIRST_UPGRADE_VERSION,
-        new SCMUpgradeActionFirstUpgradeVersion());
+public enum SCMLayoutAction {
+  SCMUpgradeFirstAction(FIRST_UPGRADE_VERSION,
+      new SCMUpgradeActionFirstUpgradeVersion());
 
-    //////////////////////////////  //////////////////////////////
+  //////////////////////////////  //////////////////////////////
 
-    private HDDSLayoutFeature hddsFeature;
-    private SCMUpgradeAction scmAction;
+  private HDDSLayoutFeature hddsFeature;
+  private HDDSUpgradeAction<StorageContainerManager> action;
 
-    SCMLayoutAction(HDDSLayoutFeature feature, SCMUpgradeAction action) {
-      this.hddsFeature = feature;
-      this.scmAction = action;
-      hddsFeature.setSCMUpgradeAction(Optional.of(scmAction));
-    }
+  SCMLayoutAction(HDDSLayoutFeature feature,
+                  HDDSUpgradeAction<StorageContainerManager> action) {
+    this.hddsFeature = feature;
+    this.action = action;
+    hddsFeature.setSCMUpgradeAction(action);
+  }
 
-    public HDDSLayoutFeature getHddsFeature() {
-      return hddsFeature;
-    }
+  public HDDSLayoutFeature getHddsFeature() {
+    return hddsFeature;
   }
 }
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeAction.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeAction.java
deleted file mode 100644
index b3f31a2..0000000
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeAction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.hdds.scm.server.upgrade; 
-
-import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
-import org.apache.hadoop.hdds.upgrade.HDDSUpgradeAction;
-
-/**
- * Upgrade Action for StorageContainerManager which takes in an 'SCM' instance.
- */
-public interface SCMUpgradeAction extends
-    HDDSUpgradeAction<StorageContainerManager> {
-}
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeActionFirstUpgradeVersion.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeActionFirstUpgradeVersion.java
index 8e3f54c..01f54f5 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeActionFirstUpgradeVersion.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeActionFirstUpgradeVersion.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hdds.scm.server.upgrade; 
 
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
+import org.apache.hadoop.hdds.upgrade.HDDSUpgradeAction;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory;
  * SCM Upgrade Action for the very first Upgrade Version.
  */
 public class SCMUpgradeActionFirstUpgradeVersion implements
-    SCMUpgradeAction {
+    HDDSUpgradeAction<StorageContainerManager> {
   public static final Logger LOG =
       LoggerFactory.getLogger(SCMUpgradeActionFirstUpgradeVersion.class);
   @Override
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeFinalizer.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeFinalizer.java
index f8c3f41..b220b18 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeFinalizer.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/SCMUpgradeFinalizer.java
@@ -27,8 +27,7 @@ import java.util.Optional;
 import java.util.concurrent.Callable;
 
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
-import org.apache.hadoop.hdds
-    .upgrade.HDDSLayoutFeatureCatalog.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
 import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import org.apache.hadoop.ozone.upgrade.BasicUpgradeFinalizer;
 import org.apache.hadoop.ozone.upgrade.LayoutFeature;
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
index 9f5a988..b3f1e8f 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java
@@ -556,7 +556,7 @@ public class TestSCMNodeManager {
     when(scmStorageConfig.getClusterID()).thenReturn("xyz111");
     EventPublisher eventPublisher = mock(EventPublisher.class);
     HDDSLayoutVersionManager lvm  =
-        HDDSLayoutVersionManager.initialize(scmStorageConfig);
+        new HDDSLayoutVersionManager(scmStorageConfig);
     SCMNodeManager nodeManager  = new SCMNodeManager(conf,
         scmStorageConfig, eventPublisher, new NetworkTopologyImpl(conf), lvm);
     DatanodeDetails node1 =
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestScmStartupSlvLessThanMlv.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestScmStartupSlvLessThanMlv.java
index 73dc612..18df61d 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestScmStartupSlvLessThanMlv.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestScmStartupSlvLessThanMlv.java
@@ -21,7 +21,7 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
-import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeatureCatalog;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
 import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.ozone.upgrade.TestUpgradeUtils;
 import org.apache.hadoop.test.GenericTestUtils;
@@ -54,7 +54,7 @@ public class TestScmStartupSlvLessThanMlv {
 
     // Set metadata layout version larger then software layout version.
     int largestSlv = 0;
-    for (LayoutFeature f: HDDSLayoutFeatureCatalog.HDDSLayoutFeature.values()) 
{
+    for (LayoutFeature f: HDDSLayoutFeature.values()) {
       largestSlv = Math.max(largestSlv, f.layoutVersion());
     }
     int mlv = largestSlv + 1;
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/common/TestEndPoint.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/common/TestEndPoint.java
index 0b2720d..a322d41 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/common/TestEndPoint.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/ozone/container/common/TestEndPoint.java
@@ -44,6 +44,7 @@ import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolPro
 import org.apache.hadoop.hdds.scm.TestUtils;
 import org.apache.hadoop.hdds.scm.VersionInfo;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
+import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
 import org.apache.hadoop.ipc.RPC;
 import org.apache.hadoop.ozone.OzoneConfigKeys;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
@@ -55,7 +56,6 @@ import 
org.apache.hadoop.ozone.container.common.states.endpoint.VersionEndpointT
 import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
 import org.apache.hadoop.ozone.container.ozoneimpl.ContainerController;
 import org.apache.hadoop.ozone.container.ozoneimpl.OzoneContainer;
-import org.apache.hadoop.ozone.container.upgrade.DataNodeLayoutVersionManager;
 import org.apache.hadoop.ozone.protocol.commands.CommandStatus;
 import org.apache.hadoop.test.GenericTestUtils;
 import org.apache.hadoop.test.PathUtils;
@@ -314,8 +314,8 @@ public class TestEndPoint {
     when(ozoneContainer.getController()).thenReturn(controller);
     when(ozoneContainer.getPipelineReport()).thenReturn(
             TestUtils.getRandomPipelineReports());
-    DataNodeLayoutVersionManager versionManager =
-        Mockito.mock(DataNodeLayoutVersionManager.class);
+    HDDSLayoutVersionManager versionManager =
+        Mockito.mock(HDDSLayoutVersionManager.class);
     when(versionManager.getMetadataLayoutVersion())
         .thenReturn(TEST_METADATA_LAYOUT_VERSION);
     when(versionManager.getSoftwareLayoutVersion())
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index 5f8f8aa..498d302 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -145,8 +145,7 @@ import 
org.apache.hadoop.ozone.om.ratis.OzoneManagerRatisServer;
 import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
 import org.apache.hadoop.ozone.om.request.OMClientRequest;
 import org.apache.hadoop.ozone.om.snapshot.OzoneManagerSnapshotProvider;
-import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManagerImpl;
-import org.apache.hadoop.ozone.om.upgrade.OmLayoutVersionManager;
+import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager;
 import org.apache.hadoop.ozone.om.upgrade.OMUpgradeFinalizer;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.DBUpdatesRequest;
@@ -324,7 +323,7 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
   private KeyProviderCryptoExtension kmsProvider = null;
   private static String keyProviderUriKeyName =
       CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH;
-  private final OMLayoutVersionManagerImpl versionManager;
+  private final OMLayoutVersionManager versionManager;
 
   private boolean allowListAllVolumes;
   // Adding parameters needed for VolumeRequests here, so that during request
@@ -369,7 +368,7 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
     omStorage = new OMStorage(conf);
     omId = omStorage.getOmId();
 
-    versionManager = OMLayoutVersionManagerImpl.initialize(omStorage);
+    versionManager = new OMLayoutVersionManager(omStorage);
     upgradeFinalizer = new OMUpgradeFinalizer(versionManager);
 
     // In case of single OM Node Service there will be no OM Node ID
@@ -3827,7 +3826,7 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
     return omVolumeArgs.build();
   }
 
-  public OmLayoutVersionManager getVersionManager() {
+  public OMLayoutVersionManager getVersionManager() {
     return versionManager;
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
index f0117b5..8ea0a74 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
@@ -81,7 +81,7 @@ public final class OzoneManagerRatisUtils {
     default:
       Class<? extends OMClientRequest> requestClass =
           om.getVersionManager()
-              .getRequestHandler(omRequest.getCmdType().name());
+              .getHandler(omRequest.getCmdType().name());
       return getClientRequest(requestClass, omRequest);
     }
   }
@@ -141,7 +141,7 @@ public final class OzoneManagerRatisUtils {
       }
     }
     Class<? extends OMClientRequest> requestClass =
-        om.getVersionManager().getRequestHandler(requestType);
+        om.getVersionManager().getHandler(requestType);
     return getClientRequest(requestClass, omRequest);
   }
 
@@ -161,7 +161,7 @@ public final class OzoneManagerRatisUtils {
     String requestType = hasQuota ? OMVolumeSetQuotaRequest.getRequestType() :
         OMVolumeSetOwnerRequest.getRequestType();
     Class<? extends OMClientRequest> requestClass =
-        om.getVersionManager().getRequestHandler(requestType);
+        om.getVersionManager().getHandler(requestType);
     return getClientRequest(requestClass, omRequest);
   }
 
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 dbc0259..ad0af55 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
@@ -20,7 +20,11 @@ package org.apache.hadoop.ozone.om.upgrade;
 
 import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.NOT_SUPPORTED_OPERATION;
 
+import java.lang.reflect.Method;
+
+import org.apache.hadoop.ozone.om.OzoneManager;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
+import org.apache.hadoop.ozone.protocolPB.OzoneManagerRequestHandler;
 import org.apache.hadoop.ozone.upgrade.LayoutFeature;
 import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
 import org.aspectj.lang.JoinPoint;
@@ -37,12 +41,28 @@ import org.aspectj.lang.reflect.MethodSignature;
 @Aspect
 public class OMLayoutFeatureAspect {
 
+  public static final String GET_VERSION_MANAGER_METHOD_NAME =
+      "getOmVersionManager";
+
   @Before("@annotation(DisallowedUntilLayoutVersion) && execution(* *(..))")
   public void checkLayoutFeature(JoinPoint joinPoint) throws Throwable {
     String featureName = ((MethodSignature) joinPoint.getSignature())
         .getMethod().getAnnotation(DisallowedUntilLayoutVersion.class)
         .value().name();
-    LayoutVersionManager lvm = OMLayoutVersionManagerImpl.getInstance();
+    LayoutVersionManager lvm = null;
+    if (joinPoint.getTarget() instanceof OzoneManagerRequestHandler) {
+      OzoneManager ozoneManager = ((OzoneManagerRequestHandler)
+          joinPoint.getTarget()).getOzoneManager();
+      lvm = ozoneManager.getVersionManager();
+    } else {
+      try {
+        Method method = joinPoint.getTarget().getClass()
+            .getMethod(GET_VERSION_MANAGER_METHOD_NAME);
+        lvm = (LayoutVersionManager) method.invoke(joinPoint.getTarget());
+      } catch (Exception ex) {
+        lvm = new OMLayoutVersionManager();
+      }
+    }
     if (!lvm.isAllowed(featureName)) {
       LayoutFeature layoutFeature = lvm.getFeature(featureName);
       throw new OMException(String.format("Operation %s cannot be invoked " +
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
index 18e69cd..1f6d470 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutFeatureUtil.java
@@ -20,6 +20,14 @@ package org.apache.hadoop.ozone.om.upgrade;
 
 import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutFeature.ERASURE_CODING;
 
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.ozone.om.OMStorage;
+import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
+
 /**
  * Test util class. To be removed.
  */
@@ -45,5 +53,15 @@ public class OMLayoutFeatureUtil {
     // Blah Blah Basic Blah....
     return "basic";
   }
+
+  // Needed for the Aspect.
+  public LayoutVersionManager getOmVersionManager() throws IOException {
+    OzoneConfiguration configuration = new OzoneConfiguration();
+    Path tempDirWithPrefix = Files.createTempDirectory("TestAspect");
+    configuration.set("ozone.metadata.dirs",
+        tempDirWithPrefix.toAbsolutePath().toString());
+    return new OMLayoutVersionManager(new OMStorage(configuration));
+  }
+
 }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutVersionManagerImpl.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutVersionManager.java
similarity index 80%
rename from 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutVersionManagerImpl.java
rename to 
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutVersionManager.java
index 4a25d50..e62c629 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutVersionManagerImpl.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMLayoutVersionManager.java
@@ -33,7 +33,6 @@ import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.request.OMClientRequest;
 import org.apache.hadoop.ozone.upgrade.AbstractLayoutVersionManager;
 import org.apache.hadoop.ozone.upgrade.LayoutVersionInstanceFactory;
-import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
 import org.apache.hadoop.ozone.upgrade.VersionFactoryKey;
 import org.reflections.Reflections;
 import org.reflections.scanners.SubTypesScanner;
@@ -47,48 +46,26 @@ import com.google.common.annotations.VisibleForTesting;
 /**
  * Class to manage layout versions and features for Ozone Manager.
  */
-public final class OMLayoutVersionManagerImpl
-    extends AbstractLayoutVersionManager<OMLayoutFeature>
-    implements OmLayoutVersionManager {
+public final class OMLayoutVersionManager
+    extends AbstractLayoutVersionManager<OMLayoutFeature> {
 
   private static final Logger LOG =
-      LoggerFactory.getLogger(OMLayoutVersionManagerImpl.class);
+      LoggerFactory.getLogger(OMLayoutVersionManager.class);
 
   private static final String OM_REQUEST_CLASS_PACKAGE =
       "org.apache.hadoop.ozone.om.request";
-  private static OMLayoutVersionManagerImpl omVersionManager;
   private LayoutVersionInstanceFactory<Class<? extends OMClientRequest>>
       requestFactory;
 
-  private OMLayoutVersionManagerImpl() {
+  public OMLayoutVersionManager(OMStorage omStorage) throws OMException {
     requestFactory = new LayoutVersionInstanceFactory<>();
+    init(omStorage);
   }
 
-  /**
-   * Read only instance to OM Version Manager.
-   * @return version manager instance.
-   */
-  public static synchronized LayoutVersionManager getInstance() {
-    if (omVersionManager == null) {
-      throw new RuntimeException("OM Layout Version Manager not yet " +
-          "initialized.");
-    }
-    return omVersionManager;
-  }
-
-
-  /**
-   * Initialize OM version manager from storage.
-   * @return version manager instance.
-   */
-  public static synchronized OMLayoutVersionManagerImpl initialize(
-      OMStorage omStorage)
-      throws OMException {
-    if (omVersionManager == null) {
-      omVersionManager = new OMLayoutVersionManagerImpl();
-      omVersionManager.init(omStorage);
-    }
-    return omVersionManager;
+  public OMLayoutVersionManager() throws IOException {
+    requestFactory = new LayoutVersionInstanceFactory<>();
+    OMLayoutFeature[] features = OMLayoutFeature.values();
+    init(features[features.length - 1].layoutVersion(), features);
   }
 
   /**
@@ -110,14 +87,6 @@ public final class OMLayoutVersionManagerImpl
     registerOzoneManagerRequests();
   }
 
-  @VisibleForTesting
-  protected synchronized static void resetLayoutVersionManager() {
-    if (omVersionManager != null) {
-      omVersionManager.reset();
-      omVersionManager = null;
-    }
-  }
-
   public void reset() {
     requestFactory = null;
     super.reset();
@@ -182,7 +151,7 @@ public final class OMLayoutVersionManagerImpl
    * @return class type.
    */
   @Override
-  public Class<? extends OMClientRequest> getRequestHandler(String type) {
+  public Class<? extends OMClientRequest> getHandler(String type) {
     VersionFactoryKey versionFactoryKey = new VersionFactoryKey.Builder()
         .key(type).build();
     return requestFactory.get(this, versionFactoryKey);
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeFinalizer.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeFinalizer.java
index 0850cf1..2e634fd 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeFinalizer.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeFinalizer.java
@@ -32,10 +32,10 @@ import 
org.apache.hadoop.ozone.upgrade.BasicUpgradeFinalizer;
  * UpgradeFinalizer implementation for the Ozone Manager service.
  */
 public class OMUpgradeFinalizer extends BasicUpgradeFinalizer<OzoneManager,
-    OMLayoutVersionManagerImpl> {
+    OMLayoutVersionManager> {
   private  static final OmUpgradeAction NOOP = a -> {};
 
-  public OMUpgradeFinalizer(OMLayoutVersionManagerImpl versionManager) {
+  public OMUpgradeFinalizer(OMLayoutVersionManager versionManager) {
     super(versionManager);
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmLayoutVersionManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmLayoutVersionManager.java
deleted file mode 100644
index 51b5c6c..0000000
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmLayoutVersionManager.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.ozone.om.upgrade;
-
-import org.apache.hadoop.ozone.om.request.OMClientRequest;
-import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
-
-/**
- * Read only Interface for OM Layout Version Management.
- */
-public interface OmLayoutVersionManager extends LayoutVersionManager {
-  Class<? extends OMClientRequest> getRequestHandler(String requestType);
-}
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
index eb5c1c7..10e23ed 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
@@ -637,7 +637,7 @@ public class OzoneManagerRequestHandler implements 
RequestHandler {
         .setCurrentTxnIndex(prepareState.getIndex()).build();
   }
 
-  protected OzoneManager getOzoneManager() {
+  public OzoneManager getOzoneManager() {
     return impl;
   }
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
index 012f2c9..c4b1923 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
@@ -19,7 +19,7 @@
 
 package org.apache.hadoop.ozone.om.request.bucket;
 
-import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManagerImpl;
+import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -73,7 +73,7 @@ public class TestBucketRequest {
     when(ozoneManager.getMetrics()).thenReturn(omMetrics);
     when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
     when(ozoneManager.isRatisEnabled()).thenReturn(true);
-    OMLayoutVersionManagerImpl lvm = mock(OMLayoutVersionManagerImpl.class);
+    OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
     auditLogger = Mockito.mock(AuditLogger.class);
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 9c2ad92..a099e3e 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
@@ -30,7 +30,7 @@ import org.apache.hadoop.ozone.om.KeyManager;
 import org.apache.hadoop.ozone.om.KeyManagerImpl;
 import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
 import org.apache.hadoop.ozone.om.request.OMClientRequest;
-import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManagerImpl;
+import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
 import org.junit.After;
 import org.junit.Before;
@@ -115,7 +115,7 @@ public class TestOMKeyRequest {
     when(ozoneManager.getMetrics()).thenReturn(omMetrics);
     when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
     when(ozoneManager.getConfiguration()).thenReturn(ozoneConfiguration);
-    OMLayoutVersionManagerImpl lvm = mock(OMLayoutVersionManagerImpl.class);
+    OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
     when(ozoneManager.isRatisEnabled()).thenReturn(true);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java
index c2486db..bdec623 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java
@@ -29,7 +29,7 @@ import org.apache.hadoop.ozone.om.OMMetrics;
 import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
 import org.apache.hadoop.ozone.om.OzoneManager;
 import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
-import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManagerImpl;
+import org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
     .CreateVolumeRequest;
@@ -78,7 +78,7 @@ public class TestOMVolumeRequest {
     when(ozoneManager.getMetrics()).thenReturn(omMetrics);
     when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
     when(ozoneManager.getMaxUserVolumeCount()).thenReturn(10L);
-    OMLayoutVersionManagerImpl lvm = mock(OMLayoutVersionManagerImpl.class);
+    OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
     when(ozoneManager.isRatisEnabled()).thenReturn(true);
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 d37d0e7..eedb896 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
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertEquals;
 import java.io.IOException;
 
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.om.OMStorage;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.junit.Assert;
 import org.junit.Before;
@@ -56,7 +55,6 @@ public class TestOMLayoutFeatureAspect {
    */
   @Test
   public void testCheckLayoutFeature() throws Exception {
-    OMLayoutVersionManagerImpl.initialize(new OMStorage(configuration));
     OMLayoutFeatureUtil testObj = new OMLayoutFeatureUtil();
     try {
       testObj.ecMethod();
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 f185f8c..2a33004 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
@@ -67,7 +67,7 @@ public class TestOMUpgradeFinalizer {
   private static final String OTHER_CLIENT_ID = "otherClientID";
 
   @Mock
-  private OMLayoutVersionManagerImpl versionManager;
+  private OMLayoutVersionManager versionManager;
 
   @Rule
   public ExpectedException exception = ExpectedException.none();
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMVersionManager.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMVersionManager.java
index 3829ead..1411caf 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMVersionManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOMVersionManager.java
@@ -21,7 +21,7 @@ package org.apache.hadoop.ozone.om.upgrade;
 import static 
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.NOT_SUPPORTED_OPERATION;
 import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutFeature.ERASURE_CODING;
 import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutFeature.INITIAL_VERSION;
-import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManagerImpl.getRequestClasses;
+import static 
org.apache.hadoop.ozone.om.upgrade.OMLayoutVersionManager.getRequestClasses;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -40,7 +40,6 @@ import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.request.OMClientRequest;
 import org.apache.hadoop.ozone.om.request.UnsupportedMockNewOMRequest;
 import org.apache.hadoop.test.GenericTestUtils;
-import org.junit.After;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -49,17 +48,12 @@ import org.junit.Test;
  */
 public class TestOMVersionManager {
 
-  @After
-  public void cleanup() {
-    OMLayoutVersionManagerImpl.resetLayoutVersionManager();
-  }
-
   @Test
   public void testOMLayoutVersionManager() throws IOException {
     OMStorage omStorage = mock(OMStorage.class);
     when(omStorage.getLayoutVersion()).thenReturn(0);
-    OMLayoutVersionManagerImpl omVersionManager =
-        OMLayoutVersionManagerImpl.initialize(omStorage);
+    OMLayoutVersionManager omVersionManager =
+        new OMLayoutVersionManager(omStorage);
     OzoneManager om = mock(OzoneManager.class);
     when(om.getOmStorage()).thenReturn(omStorage);
 
@@ -82,7 +76,8 @@ public class TestOMVersionManager {
         OMLayoutFeature.values()[OMLayoutFeature.values().length - 1]
             .layoutVersion() + 1);
     try {
-      OMLayoutVersionManagerImpl.initialize(omStorage);
+      OMLayoutVersionManager omVersionManager =
+          new OMLayoutVersionManager(omStorage);
       Assert.fail();
     } catch (OMException ex) {
       assertEquals(NOT_SUPPORTED_OPERATION, ex.getResult());
@@ -90,20 +85,6 @@ public class TestOMVersionManager {
   }
 
   @Test
-  public void testOMLayoutVersionManagerReset() throws IOException {
-    OMStorage omStorage = mock(OMStorage.class);
-    when(omStorage.getLayoutVersion()).thenReturn(0);
-    OMLayoutVersionManagerImpl omVersionManager =
-        OMLayoutVersionManagerImpl.initialize(omStorage);
-    int numLayoutVersions = OMLayoutFeature.values().length;
-    assertEquals(
-        OMLayoutFeature.values()[numLayoutVersions - 1].layoutVersion(),
-        omVersionManager.getSoftwareLayoutVersion());
-    OMLayoutVersionManagerImpl.resetLayoutVersionManager();
-    assertEquals(0, omVersionManager.getSoftwareLayoutVersion());
-  }
-
-  @Test
   public void testOMLayoutFeatureCatalog() {
     OMLayoutFeature[] values = OMLayoutFeature.values();
     int currVersion = Integer.MIN_VALUE;
@@ -148,14 +129,14 @@ public class TestOMVersionManager {
   public void testCannotGetUnsupportedOmRequest() throws OMException {
     OMStorage omStorage = mock(OMStorage.class);
     when(omStorage.getLayoutVersion()).thenReturn(0);
-    OMLayoutVersionManagerImpl omVersionManager =
-        OMLayoutVersionManagerImpl.initialize(omStorage);
+    OMLayoutVersionManager omVersionManager =
+        new OMLayoutVersionManager(omStorage);
     OzoneManager om = mock(OzoneManager.class);
     when(om.getOmStorage()).thenReturn(omStorage);
 
     Class<? extends OMClientRequest> requestHandler;
     try {
-      requestHandler = omVersionManager.getRequestHandler(
+      requestHandler = omVersionManager.getHandler(
               UnsupportedMockNewOMRequest.class.getSimpleName());
       Assert.fail();
     } catch (IllegalArgumentException ex) {
@@ -164,7 +145,7 @@ public class TestOMVersionManager {
     }
 
     
omVersionManager.unfinalizedFeatures().forEach(omVersionManager::finalized);
-    requestHandler = omVersionManager.getRequestHandler(
+    requestHandler = omVersionManager.getHandler(
         UnsupportedMockNewOMRequest.class.getSimpleName());
     Assert.assertNotNull(requestHandler);
   }
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOmVersionManagerRequestFactory.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOmVersionManagerRequestFactory.java
index 5117a4c..40d14d7 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOmVersionManagerRequestFactory.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/TestOmVersionManagerRequestFactory.java
@@ -47,14 +47,14 @@ import org.reflections.Reflections;
  */
 public class TestOmVersionManagerRequestFactory {
 
-  private static OMLayoutVersionManagerImpl omVersionManager;
+  private static OMLayoutVersionManager omVersionManager;
   private static OzoneManager om;
 
   @BeforeClass
   public static void setup() throws OMException {
     OMStorage omStorage = mock(OMStorage.class);
     when(omStorage.getLayoutVersion()).thenReturn(0);
-    omVersionManager = OMLayoutVersionManagerImpl.initialize(omStorage);
+    omVersionManager = new OMLayoutVersionManager(omStorage);
     om = mock(OzoneManager.class);
     when(om.getOmStorage()).thenReturn(omStorage);
   }
@@ -64,7 +64,7 @@ public class TestOmVersionManagerRequestFactory {
 
     // Try getting v1 of 'CreateKey'.
     Class<? extends OMClientRequest> requestType =
-        omVersionManager.getRequestHandler(CreateKey.name());
+        omVersionManager.getHandler(CreateKey.name());
     Assert.assertEquals(requestType, OMKeyCreateRequest.class);
 
     // Finalize the version manager.
@@ -72,7 +72,7 @@ public class TestOmVersionManagerRequestFactory {
     f.finalize("random", om);
 
     // Try getting 'CreateKey' again. Should return CreateECKey.
-    requestType = omVersionManager.getRequestHandler(CreateKey.name());
+    requestType = omVersionManager.getHandler(CreateKey.name());
     Assert.assertEquals(requestType, OMMockECKeyCreateRequest.class);
   }
 
@@ -102,7 +102,7 @@ public class TestOmVersionManagerRequestFactory {
       }
       String type = (String) getRequestTypeMethod.invoke(null);
       Assert.assertNotNull(String.format("Cannot get handler for %s", type),
-          omVersionManager.getRequestHandler(type));
+          omVersionManager.getHandler(type));
     }
   }
 
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
index 15ac8e6..f413ec3 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageContainerManagerFacade.java
@@ -104,8 +104,8 @@ public class ReconStorageContainerManagerFacade
     dbStore = DBStoreBuilder
         .createDBStore(ozoneConfiguration, new ReconSCMDBDefinition());
 
-    this.scmLayoutVersionManager = HDDSLayoutVersionManager
-        .initialize(this.scmStorageConfig);
+    this.scmLayoutVersionManager =
+        new HDDSLayoutVersionManager(scmStorageConfig);
     this.nodeManager =
         new ReconNodeManager(conf, scmStorageConfig, eventQueue, clusterMap,
             ReconSCMDBDefinition.NODES.getTable(dbStore),
diff --git 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconNodeManager.java
 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconNodeManager.java
index c0c973b..c39b714 100644
--- 
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconNodeManager.java
+++ 
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/scm/TestReconNodeManager.java
@@ -63,7 +63,7 @@ public class TestReconNodeManager {
         temporaryFolder.newFolder().getAbsolutePath());
     conf.set(OZONE_SCM_NAMES, "localhost");
     reconStorageConfig = new ReconStorageConfig(conf);
-    versionManager = HDDSLayoutVersionManager.initialize(reconStorageConfig);
+    versionManager = new HDDSLayoutVersionManager(reconStorageConfig);
     store = DBStoreBuilder.createDBStore(conf, new ReconSCMDBDefinition());
   }
 


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

Reply via email to