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 000000000000..672c3ffcc287 --- /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 onFinalizeSCMAction() { + return Optional.ofNullable(scmUpgradeAction); + } + + public Optional 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 2c6760e89f40..000000000000 --- 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 scmUpgradeAction = - Optional.empty(); - - private Optional datanodeUpgradeAction = - Optional.empty(); - - HDDSLayoutFeature(final int layoutVersion, String description) { - this.layoutVersion = layoutVersion; - this.description = description; - } - - @SuppressFBWarnings("ME_ENUM_FIELD_SETTER") - public void setSCMUpgradeAction(Optional - scmAction) { - this.scmUpgradeAction = scmAction; - } - - @SuppressFBWarnings("ME_ENUM_FIELD_SETTER") - public void setDataNodeUpgradeAction(Optional - datanodeAction) { - this.datanodeUpgradeAction = datanodeAction; - } - - @Override - public int layoutVersion() { - return layoutVersion; - } - - @Override - public String description() { - return description; - } - - public Optional onFinalizeSCMAction() { - return scmUpgradeAction; - } - - public Optional 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 8b8c25073984..92f230e1e2c7 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 @@ 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 @@ public class HDDSLayoutVersionManager extends AbstractLayoutVersionManager { - 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 7714e80024cb..dc7dffe03197 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 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 28e34c715b08..98786a55da97 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.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.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 DatanodeStateMachine(DatanodeDetails datanodeDetails, 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 ReplicationSupervisor getSupervisor() { } @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 63ccff6d9eaa..4a404966502e 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 @@ .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 .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 HeartbeatEndpointTask(EndpointStateMachine rpcEndpoint, */ 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 static class Builder { private ConfigurationSource conf; private DatanodeDetails datanodeDetails; private StateContext context; - private DataNodeLayoutVersionManager versionManager; + private HDDSLayoutVersionManager versionManager; /** * Constructs the builder class. @@ -417,9 +417,8 @@ public Builder setEndpointStateMachine(EndpointStateMachine rpcEndPoint) { * @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 9f2476eee15b..331ef0ff4764 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.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 @@ .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 RegisterEndpointTask(EndpointStateMachine rpcEndPoint, @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 static class Builder { private DatanodeDetails datanodeDetails; private OzoneContainer container; private StateContext context; - private DataNodeLayoutVersionManager versionManager; + private HDDSLayoutVersionManager versionManager; /** * Constructs the builder class. @@ -241,9 +241,8 @@ public Builder setConfig(ConfigurationSource config) { * @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 90970434f843..f46b4349f271 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 { +public enum DataNodeLayoutAction { + DataNodeUpgradeFirstAction(FIRST_UPGRADE_VERSION, + new DataNodeUpgradeActionFirstUpgradeVersion()); + + ////////////////////////////// ////////////////////////////// + + private HDDSLayoutFeature hddsFeature; + private HDDSUpgradeAction action; + + DataNodeLayoutAction(HDDSLayoutFeature feature, + HDDSUpgradeAction 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 48bfec2b1c45..000000000000 --- 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 1f33a81c651b..000000000000 --- 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 { - 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 267af05a3726..7e601f2a18a7 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 @@ * Upgrade Action for DataNode for the very first first Upgrade Version. */ public class DataNodeUpgradeActionFirstUpgradeVersion - implements DataNodeUpgradeAction { + implements HDDSUpgradeAction { 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 6081f00090cf..9b55fc5b4a68 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.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 @@ * UpgradeFinalizer for the DataNode. */ public class DataNodeUpgradeFinalizer extends - BasicUpgradeFinalizer { + BasicUpgradeFinalizer { - 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 29d5ce30a081..2058c8e1309a 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.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 @@ private HeartbeatEndpointTask getHeartbeatEndpointTask( 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 35e79851f465..e075b13ad1d4 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.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 void testStartupSlvLessThanMlv() throws Exception { // 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 770b4dba6145..d77524bbfe52 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.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 StorageContainerManager(OzoneConfiguration conf, } 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 d8c9765b24a3..155c9475e224 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 action; - SCMLayoutAction(HDDSLayoutFeature feature, SCMUpgradeAction action) { - this.hddsFeature = feature; - this.scmAction = action; - hddsFeature.setSCMUpgradeAction(Optional.of(scmAction)); - } + SCMLayoutAction(HDDSLayoutFeature feature, + HDDSUpgradeAction 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 b3f31a2f2578..000000000000 --- 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 { -} 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 8e3f54c6fbf5..01f54f586cab 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 @@ * SCM Upgrade Action for the very first Upgrade Version. */ public class SCMUpgradeActionFirstUpgradeVersion implements - SCMUpgradeAction { + HDDSUpgradeAction { 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 f8c3f41fb0b3..b220b18f9e76 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.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 9f5a98893c04..b3f1e8f044b8 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 void testProcessLayoutVersionLowerMlv() throws IOException { 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 73dc612b5bae..18df61d44a53 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.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 void testStartupSlvLessThanMlv() throws Exception { // 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 0b2720da10f1..a322d41e1047 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.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.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 @@ private EndpointStateMachine registerTaskHelper(InetSocketAddress scmAddress, 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 5f8f8aa49b77..498d302bc985 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.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 @@ private OzoneManager(OzoneConfiguration conf) 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 @@ private OmVolumeArgs createS3VolumeInfo(String s3Volume, long transactionID, 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 f0117b5e89f4..8ea0a74e7c47 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 static OMClientRequest getRequest(OzoneManager om, default: Class requestClass = om.getVersionManager() - .getRequestHandler(omRequest.getCmdType().name()); + .getHandler(omRequest.getCmdType().name()); return getClientRequest(requestClass, omRequest); } } @@ -141,7 +141,7 @@ public static OMClientRequest getOMAclRequest(OzoneManager om, } } Class requestClass = - om.getVersionManager().getRequestHandler(requestType); + om.getVersionManager().getHandler(requestType); return getClientRequest(requestClass, omRequest); } @@ -161,7 +161,7 @@ public static OMClientRequest getVolumeSetPropertyRequest( String requestType = hasQuota ? OMVolumeSetQuotaRequest.getRequestType() : OMVolumeSetOwnerRequest.getRequestType(); Class 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 dbc02596a7f7..ad0af5517fdf 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 @@ 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 @@ @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 18e69cd9f596..1f6d470e1917 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 @@ 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 String basicMethod() { // 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 4a25d508fc46..e62c6295670d 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.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 @@ /** * Class to manage layout versions and features for Ozone Manager. */ -public final class OMLayoutVersionManagerImpl - extends AbstractLayoutVersionManager - implements OmLayoutVersionManager { +public final class OMLayoutVersionManager + extends AbstractLayoutVersionManager { 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> 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 @@ private void init(Storage storage) throws OMException { 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 @@ private void registerRequestType(String type, int version, * @return class type. */ @Override - public Class getRequestHandler(String type) { + public Class 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 0850cf140b2e..2e634fdc6e8f 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 @@ * UpgradeFinalizer implementation for the Ozone Manager service. */ public class OMUpgradeFinalizer extends BasicUpgradeFinalizer { + 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 51b5c6c06282..000000000000 --- 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 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 eb5c1c7d07a5..10e23ed8a9c8 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 @@ private PrepareStatusResponse getPrepareStatus() { .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 012f2c9d85a3..c4b1923b11d8 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 void setup() throws Exception { 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 9c2ad92f70e3..a099e3ea68f8 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.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 void setup() throws Exception { 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 c2486db863c2..bdec623d17b8 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.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 void setup() throws Exception { 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 d37d0e76074d..eedb896e30aa 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 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 void setUp() throws IOException { */ @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 f185f8cd8f0e..2a33004c3d17 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 3829eadb5adf..1411cafc6f61 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 @@ 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.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 @@ */ 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,27 +76,14 @@ public void testOMLayoutVersionManagerInitError() { 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()); } } - @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(); @@ -148,14 +129,14 @@ public void testAllOMRequestClassesHaveRequestType() 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 requestHandler; try { - requestHandler = omVersionManager.getRequestHandler( + requestHandler = omVersionManager.getHandler( UnsupportedMockNewOMRequest.class.getSimpleName()); Assert.fail(); } catch (IllegalArgumentException ex) { @@ -164,7 +145,7 @@ public void testCannotGetUnsupportedOmRequest() throws OMException { } 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 5117a4ccdc7d..40d14d72b722 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 @@ */ 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 void testKeyCreateRequest() throws Exception { // Try getting v1 of 'CreateKey'. Class requestType = - omVersionManager.getRequestHandler(CreateKey.name()); + omVersionManager.getHandler(CreateKey.name()); Assert.assertEquals(requestType, OMKeyCreateRequest.class); // Finalize the version manager. @@ -72,7 +72,7 @@ public void testKeyCreateRequest() throws Exception { 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 void testAllOMRequestClassesHaveGetRequestTypeMethod() } 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 15ac8e68f386..f413ec33f7a0 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 ReconStorageContainerManagerFacade(OzoneConfiguration conf, 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 c0c973b2c9a5..c39b7140823c 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 void setUp() throws Exception { 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()); }