From 1381149590c1deea3869f9aed1ba7028456f5789 Mon Sep 17 00:00:00 2001 From: Ethan Rose Date: Mon, 13 Jul 2026 14:34:19 -0400 Subject: [PATCH] Add new annotations, tests, and renames (cherry picked from commit 3541c6c5b956e04c598665939ae6bf7620502ef5) --- .../DatanodeUpgradeActionProvider.java | 18 ++++-- .../ContainerTableSchemaFinalizeAction.java | 4 +- .../DatanodeSchemaV2FinalizeAction.java | 4 +- .../DatanodeSchemaV3FinalizeAction.java | 4 +- .../ScmHAFinalizeUpgradeActionDatanode.java | 4 +- ...atanodeUpgradeActionForLayoutFeature.java} | 4 +- .../DatanodeUpgradeActionForVersion.java | 33 +++++++++++ .../upgrade/TestDatanodeVersionManager.java | 4 ++ .../ZduDatanodeUpgradeActionForTest.java} | 24 +++----- .../AbstractUpgradeActionProvider.java | 21 +++++-- ...cmOnFinalizeActionForDatanodeSchemaV2.java | 4 +- .../upgrade/ScmUpgradeActionProvider.java | 17 ++++-- .../ScmUpgradeActionForLayoutFeature.java} | 4 +- .../upgrade/ScmUpgradeActionForVersion.java | 33 +++++++++++ .../server/upgrade/TestScmVersionManager.java | 4 ++ .../upgrade/ZduScmUpgradeActionForTest.java | 35 +++++++++++ .../om/upgrade/OMUpgradeActionProvider.java | 17 ++++-- ...a => OmUpgradeActionForLayoutFeature.java} | 2 +- .../om/upgrade/OmUpgradeActionForVersion.java | 33 +++++++++++ .../om/upgrade/QuotaRepairUpgradeAction.java | 2 +- .../om/upgrade/TestOMVersionManager.java | 4 ++ .../om/upgrade/ZduOmUpgradeActionForTest.java | 33 +++++++++++ .../InitialConstraintUpgradeAction.java | 2 +- .../NSSummaryAggregatedTotalsUpgrade.java | 2 +- .../ReconTaskStatusTableUpgradeAction.java | 2 +- .../upgrade/ReconUpgradeActionForVersion.java | 33 +++++++++++ .../upgrade/ReconUpgradeActionProvider.java | 8 +-- .../ReplicatedSizeOfFilesUpgradeAction.java | 2 +- ...healthyContainerReplicaMismatchAction.java | 2 +- ...ersStateContainerIdIndexUpgradeAction.java | 2 +- .../recon/upgrade/UpgradeActionRecon.java | 59 ------------------- 31 files changed, 298 insertions(+), 122 deletions(-) rename hadoop-hdds/{server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java => container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForLayoutFeature.java} (89%) create mode 100644 hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForVersion.java rename hadoop-hdds/container-service/src/{main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeUpgradeActionProvider.java => test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java} (53%) rename hadoop-hdds/{container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.java => server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForLayoutFeature.java} (89%) create mode 100644 hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java create mode 100644 hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java rename hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/{UpgradeActionOm.java => OmUpgradeActionForLayoutFeature.java} (95%) create mode 100644 hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForVersion.java create mode 100644 hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java create mode 100644 hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java delete mode 100644 hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UpgradeActionRecon.java diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/upgrade/DatanodeUpgradeActionProvider.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/upgrade/DatanodeUpgradeActionProvider.java index a2e9ca8a925b..34874e9439cc 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/upgrade/DatanodeUpgradeActionProvider.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/hdds/upgrade/DatanodeUpgradeActionProvider.java @@ -17,24 +17,32 @@ package org.apache.hadoop.hdds.upgrade; +import com.google.common.collect.ImmutableSet; import org.apache.hadoop.hdds.ComponentVersion; import org.apache.hadoop.ozone.upgrade.AbstractUpgradeActionProvider; -import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForLayoutFeature; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForVersion; /** - * Loads {@link DatanodeUpgradeAction} implementations annotated with {@link UpgradeActionDatanode}. + * Loads {@link DatanodeUpgradeAction} implementations annotated with {@link DatanodeUpgradeActionForLayoutFeature} or + * {@link DatanodeUpgradeActionForVersion}. */ public final class DatanodeUpgradeActionProvider extends AbstractUpgradeActionProvider { public static final String DATANODE_UPGRADE_CLASS_PACKAGE = "org.apache.hadoop.ozone.container"; public DatanodeUpgradeActionProvider() { - super(UpgradeActionDatanode.class, DatanodeUpgradeAction.class, DATANODE_UPGRADE_CLASS_PACKAGE); + super(ImmutableSet.of(DatanodeUpgradeActionForLayoutFeature.class, DatanodeUpgradeActionForVersion.class), + DatanodeUpgradeAction.class, DATANODE_UPGRADE_CLASS_PACKAGE); } @Override protected ComponentVersion extractVersion(Class clazz) { - UpgradeActionDatanode annotation = clazz.getAnnotation(UpgradeActionDatanode.class); - return annotation.feature(); + DatanodeUpgradeActionForLayoutFeature layoutAnnotation = + clazz.getAnnotation(DatanodeUpgradeActionForLayoutFeature.class); + if (layoutAnnotation != null) { + return layoutAnnotation.feature(); + } + return clazz.getAnnotation(DatanodeUpgradeActionForVersion.class).version(); } } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ContainerTableSchemaFinalizeAction.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ContainerTableSchemaFinalizeAction.java index 281c68e66417..116715e66161 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ContainerTableSchemaFinalizeAction.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ContainerTableSchemaFinalizeAction.java @@ -31,14 +31,14 @@ import org.apache.hadoop.ozone.container.metadata.WitnessedContainerDBDefinition; import org.apache.hadoop.ozone.container.metadata.WitnessedContainerMetadataStore; import org.apache.hadoop.ozone.container.metadata.WitnessedContainerMetadataStoreImpl; -import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForLayoutFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Upgrade Action for DataNode for update the table schema data of containerIds Table. */ -@UpgradeActionDatanode(feature = WITNESSED_CONTAINER_DB_PROTO_VALUE) +@DatanodeUpgradeActionForLayoutFeature(feature = WITNESSED_CONTAINER_DB_PROTO_VALUE) public class ContainerTableSchemaFinalizeAction implements DatanodeUpgradeAction { diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV2FinalizeAction.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV2FinalizeAction.java index 20005ff9c481..ad11bf87ce82 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV2FinalizeAction.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV2FinalizeAction.java @@ -21,14 +21,14 @@ import org.apache.hadoop.hdds.upgrade.DatanodeUpgradeAction; import org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine; -import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForLayoutFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Upgrade Action for DataNode for the very first first Upgrade Version. */ -@UpgradeActionDatanode(feature = DATANODE_SCHEMA_V2) +@DatanodeUpgradeActionForLayoutFeature(feature = DATANODE_SCHEMA_V2) public class DatanodeSchemaV2FinalizeAction implements DatanodeUpgradeAction { diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV3FinalizeAction.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV3FinalizeAction.java index e4d97ad5ae42..9152e7cd6649 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV3FinalizeAction.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV3FinalizeAction.java @@ -26,7 +26,7 @@ import org.apache.hadoop.ozone.container.common.volume.HddsVolume; import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet; import org.apache.hadoop.ozone.container.common.volume.StorageVolume; -import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForLayoutFeature; import org.apache.ratis.util.Preconditions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +34,7 @@ /** * Upgrade Action for DataNode for SCHEMA V3. */ -@UpgradeActionDatanode(feature = DATANODE_SCHEMA_V3) +@DatanodeUpgradeActionForLayoutFeature(feature = DATANODE_SCHEMA_V3) public class DatanodeSchemaV3FinalizeAction implements DatanodeUpgradeAction { diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ScmHAFinalizeUpgradeActionDatanode.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ScmHAFinalizeUpgradeActionDatanode.java index c8c7ca6d1da1..8bba11e81a0e 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ScmHAFinalizeUpgradeActionDatanode.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/ScmHAFinalizeUpgradeActionDatanode.java @@ -29,14 +29,14 @@ import org.apache.hadoop.ozone.container.common.volume.HddsVolume; import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet; import org.apache.hadoop.ozone.container.common.volume.StorageVolume; -import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForLayoutFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Action to run upgrade flow for SCM HA exactly once. */ -@UpgradeActionDatanode(feature = SCM_HA) +@DatanodeUpgradeActionForLayoutFeature(feature = SCM_HA) public class ScmHAFinalizeUpgradeActionDatanode implements DatanodeUpgradeAction { private static final Logger LOG = diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForLayoutFeature.java similarity index 89% rename from hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java rename to hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForLayoutFeature.java index 4cbbcd4e9879..42fdbd8f12aa 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForLayoutFeature.java @@ -24,10 +24,10 @@ import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature; /** - * Annotation to specify an SCM upgrade action. + * Annotation to specify a Datanode upgrade action tied to an HDDS layout feature. */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -public @interface UpgradeActionScm { +public @interface DatanodeUpgradeActionForLayoutFeature { HDDSLayoutFeature feature(); } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForVersion.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForVersion.java new file mode 100644 index 000000000000..28c2bc0bd519 --- /dev/null +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForVersion.java @@ -0,0 +1,33 @@ +/* + * 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.upgrade; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.apache.hadoop.hdds.HDDSVersion; + +/** + * Annotation to specify a Datanode upgrade action tied to an HDDS component version. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface DatanodeUpgradeActionForVersion { + HDDSVersion version(); +} diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeVersionManager.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeVersionManager.java index d3c9f7802d38..572b7baa6794 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeVersionManager.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeVersionManager.java @@ -141,6 +141,8 @@ public void testClasspathScanDiscoversUpgradeActions() throws Exception { assertTrue(versionManager.needsFinalization()); DatanodeUpgradeAction quotaAction = versionManager.getUpgradeActionsForTesting().get(DATANODE_SCHEMA_V3); assertInstanceOf(DatanodeSchemaV3FinalizeAction.class, quotaAction); + DatanodeUpgradeAction zduAction = versionManager.getUpgradeActionsForTesting().get(HDDSVersion.ZDU); + assertInstanceOf(ZduDatanodeUpgradeActionForTest.class, zduAction); } try (DatanodeVersionManager versionManager = @@ -148,6 +150,8 @@ public void testClasspathScanDiscoversUpgradeActions() throws Exception { assertFalse(versionManager.needsFinalization()); DatanodeUpgradeAction quotaAction = versionManager.getUpgradeActionsForTesting().get(DATANODE_SCHEMA_V3); assertInstanceOf(DatanodeSchemaV3FinalizeAction.class, quotaAction); + DatanodeUpgradeAction zduAction = versionManager.getUpgradeActionsForTesting().get(HDDSVersion.ZDU); + assertInstanceOf(ZduDatanodeUpgradeActionForTest.class, zduAction); } } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeUpgradeActionProvider.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java similarity index 53% rename from hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeUpgradeActionProvider.java rename to hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java index 5f280b2887f8..f6f8c36c6031 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeUpgradeActionProvider.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java @@ -17,25 +17,19 @@ package org.apache.hadoop.ozone.container.upgrade; -import org.apache.hadoop.hdds.ComponentVersion; +import static org.apache.hadoop.hdds.HDDSVersion.ZDU; + import org.apache.hadoop.hdds.upgrade.DatanodeUpgradeAction; -import org.apache.hadoop.ozone.upgrade.AbstractUpgradeActionProvider; -import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode; +import org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine; +import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForVersion; /** - * Loads {@link DatanodeUpgradeAction} implementations annotated with {@link UpgradeActionDatanode}. + * No-op upgrade action used only to verify that {@link DatanodeUpgradeActionForVersion} is scanned by + * {@link org.apache.hadoop.hdds.upgrade.DatanodeUpgradeActionProvider} in tests. */ -public final class DatanodeUpgradeActionProvider extends AbstractUpgradeActionProvider { - - public static final String DATANODE_UPGRADE_CLASS_PACKAGE = "org.apache.hadoop.ozone.container"; - - public DatanodeUpgradeActionProvider() { - super(UpgradeActionDatanode.class, DatanodeUpgradeAction.class, DATANODE_UPGRADE_CLASS_PACKAGE); - } - +@DatanodeUpgradeActionForVersion(version = ZDU) +public class ZduDatanodeUpgradeActionForTest implements DatanodeUpgradeAction { @Override - protected ComponentVersion extractVersion(Class clazz) { - UpgradeActionDatanode annotation = clazz.getAnnotation(UpgradeActionDatanode.class); - return annotation.feature(); + public void execute(DatanodeStateMachine arg) { } } diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractUpgradeActionProvider.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractUpgradeActionProvider.java index 8932422f0f3a..f80514ec5e90 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractUpgradeActionProvider.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/upgrade/AbstractUpgradeActionProvider.java @@ -19,6 +19,7 @@ import java.lang.annotation.Annotation; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.hadoop.hdds.ComponentVersion; @@ -39,14 +40,14 @@ public abstract class AbstractUpgradeActionProvider> private static final Logger LOG = LoggerFactory.getLogger(AbstractUpgradeActionProvider.class); - private final Class annotationClass; + private final Set> annotationClasses; private final Class actionClass; private final String[] packagesToScan; - protected AbstractUpgradeActionProvider(Class annotationClass, + protected AbstractUpgradeActionProvider(Set> annotationClasses, Class actionClass, String... packagesToScan) { - this.annotationClass = annotationClass; + this.annotationClasses = annotationClasses; this.actionClass = actionClass; this.packagesToScan = packagesToScan; } @@ -60,16 +61,24 @@ public Map load() { .setScanners(new TypeAnnotationsScanner(), new SubTypesScanner()) .setExpandSuperTypes(false) .setParallel(true)); - Set> typesAnnotatedWith = reflections.getTypesAnnotatedWith(annotationClass); + Set> typesAnnotatedWith = new HashSet<>(); + for (Class annotationClass : annotationClasses) { + typesAnnotatedWith.addAll(reflections.getTypesAnnotatedWith(annotationClass)); + } typesAnnotatedWith.forEach(clazz -> { + long annotationCount = annotationClasses.stream().filter(clazz::isAnnotationPresent).count(); + if (annotationCount > 1) { + throw new IllegalStateException("Upgrade action class " + clazz.getName() + + " has more than one upgrade action annotation. Only one is allowed."); + } if (actionClass.isAssignableFrom(clazz)) { try { @SuppressWarnings("unchecked") T action = (T) clazz.getDeclaredConstructor().newInstance(); - ComponentVersion feature = extractVersion(clazz); + ComponentVersion version = extractVersion(clazz); LOG.info("Registering Upgrade Action : {}", action.name()); - upgradeActions.put(feature, action); + upgradeActions.put(version, action); } catch (Exception e) { LOG.error("Cannot instantiate Upgrade Action class {}", clazz.getSimpleName(), e); diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java index d6b3cef1ce3d..44f298018aeb 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java @@ -21,14 +21,14 @@ import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.hdds.upgrade.ScmUpgradeAction; -import org.apache.hadoop.ozone.upgrade.UpgradeActionScm; +import org.apache.hadoop.ozone.upgrade.ScmUpgradeActionForLayoutFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * SCM Upgrade Action for the very first Upgrade Version. */ -@UpgradeActionScm(feature = DATANODE_SCHEMA_V2) +@ScmUpgradeActionForLayoutFeature(feature = DATANODE_SCHEMA_V2) public class ScmOnFinalizeActionForDatanodeSchemaV2 implements ScmUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(ScmOnFinalizeActionForDatanodeSchemaV2.class); diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/upgrade/ScmUpgradeActionProvider.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/upgrade/ScmUpgradeActionProvider.java index 63d8dec0b15d..21a7c7b5373d 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/upgrade/ScmUpgradeActionProvider.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/upgrade/ScmUpgradeActionProvider.java @@ -17,24 +17,31 @@ package org.apache.hadoop.hdds.upgrade; +import com.google.common.collect.ImmutableSet; import org.apache.hadoop.hdds.ComponentVersion; import org.apache.hadoop.ozone.upgrade.AbstractUpgradeActionProvider; -import org.apache.hadoop.ozone.upgrade.UpgradeActionScm; +import org.apache.hadoop.ozone.upgrade.ScmUpgradeActionForLayoutFeature; +import org.apache.hadoop.ozone.upgrade.ScmUpgradeActionForVersion; /** - * Loads {@link ScmUpgradeAction} implementations annotated with {@link UpgradeActionScm}. + * Loads {@link ScmUpgradeAction} implementations annotated with {@link ScmUpgradeActionForLayoutFeature} or + * {@link ScmUpgradeActionForVersion}. */ public final class ScmUpgradeActionProvider extends AbstractUpgradeActionProvider { public static final String SCM_UPGRADE_CLASS_PACKAGE = "org.apache.hadoop.hdds.scm.server"; public ScmUpgradeActionProvider() { - super(UpgradeActionScm.class, ScmUpgradeAction.class, SCM_UPGRADE_CLASS_PACKAGE); + super(ImmutableSet.of(ScmUpgradeActionForLayoutFeature.class, ScmUpgradeActionForVersion.class), + ScmUpgradeAction.class, SCM_UPGRADE_CLASS_PACKAGE); } @Override protected ComponentVersion extractVersion(Class clazz) { - UpgradeActionScm annotation = clazz.getAnnotation(UpgradeActionScm.class); - return annotation.feature(); + ScmUpgradeActionForLayoutFeature layoutAnnotation = clazz.getAnnotation(ScmUpgradeActionForLayoutFeature.class); + if (layoutAnnotation != null) { + return layoutAnnotation.feature(); + } + return clazz.getAnnotation(ScmUpgradeActionForVersion.class).version(); } } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForLayoutFeature.java similarity index 89% rename from hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.java rename to hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForLayoutFeature.java index f6419085f3b5..d0845143ce7b 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForLayoutFeature.java @@ -24,10 +24,10 @@ import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature; /** - * Annotation to specify a Datanode upgrade action. + * Annotation to specify an SCM upgrade action tied to an HDDS layout feature. */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -public @interface UpgradeActionDatanode { +public @interface ScmUpgradeActionForLayoutFeature { HDDSLayoutFeature feature(); } diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java new file mode 100644 index 000000000000..ff48b93e300c --- /dev/null +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java @@ -0,0 +1,33 @@ +/* + * 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.upgrade; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.apache.hadoop.hdds.HDDSVersion; + +/** + * Annotation to specify an SCM upgrade action tied to an HDDS component version. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ScmUpgradeActionForVersion { + HDDSVersion version(); +} diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/TestScmVersionManager.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/TestScmVersionManager.java index 0801ac1a01da..61dcae5826d6 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/TestScmVersionManager.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/TestScmVersionManager.java @@ -139,6 +139,8 @@ public void testClasspathScanDiscoversUpgradeActions() throws Exception { assertTrue(versionManager.needsFinalization()); ScmUpgradeAction upgradeAction = versionManager.getUpgradeActionsForTesting().get(DATANODE_SCHEMA_V2); assertInstanceOf(ScmOnFinalizeActionForDatanodeSchemaV2.class, upgradeAction); + ScmUpgradeAction zduAction = versionManager.getUpgradeActionsForTesting().get(HDDSVersion.ZDU); + assertInstanceOf(ZduScmUpgradeActionForTest.class, zduAction); } try (ScmVersionManager versionManager = createManager(HDDSVersion.SOFTWARE_VERSION.serialize(), @@ -146,6 +148,8 @@ public void testClasspathScanDiscoversUpgradeActions() throws Exception { assertFalse(versionManager.needsFinalization()); ScmUpgradeAction upgradeAction = versionManager.getUpgradeActionsForTesting().get(DATANODE_SCHEMA_V2); assertInstanceOf(ScmOnFinalizeActionForDatanodeSchemaV2.class, upgradeAction); + ScmUpgradeAction zduAction = versionManager.getUpgradeActionsForTesting().get(HDDSVersion.ZDU); + assertInstanceOf(ZduScmUpgradeActionForTest.class, zduAction); } } diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java new file mode 100644 index 000000000000..aa12c999292b --- /dev/null +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java @@ -0,0 +1,35 @@ +/* + * 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 static org.apache.hadoop.hdds.HDDSVersion.ZDU; + +import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; +import org.apache.hadoop.hdds.upgrade.ScmUpgradeAction; +import org.apache.hadoop.ozone.upgrade.ScmUpgradeActionForVersion; + +/** + * No-op upgrade action used only to verify that {@link ScmUpgradeActionForVersion} is scanned by + * {@link org.apache.hadoop.hdds.upgrade.ScmUpgradeActionProvider} in tests. + */ +@ScmUpgradeActionForVersion(version = ZDU) +public class ZduScmUpgradeActionForTest implements ScmUpgradeAction { + @Override + public void execute(OzoneStorageContainerManager arg) { + } +} diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeActionProvider.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeActionProvider.java index 68b0362d1f51..c0a81ffcf71b 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeActionProvider.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OMUpgradeActionProvider.java @@ -17,27 +17,32 @@ package org.apache.hadoop.ozone.om.upgrade; +import com.google.common.collect.ImmutableSet; import org.apache.hadoop.hdds.ComponentVersion; import org.apache.hadoop.ozone.upgrade.AbstractUpgradeActionProvider; /** - * Loads {@link OmUpgradeAction} implementations annotated with {@link UpgradeActionOm} from - * {@link #OM_UPGRADE_CLASS_PACKAGE} only. + * Loads {@link OmUpgradeAction} implementations annotated with {@link OmUpgradeActionForLayoutFeature} or + * {@link OmUpgradeActionForVersion} from {@link #OM_UPGRADE_CLASS_PACKAGE}. */ public final class OMUpgradeActionProvider extends AbstractUpgradeActionProvider { /** - * Package scanned for {@link UpgradeActionOm}-annotated classes (production OM upgrade actions). + * Package scanned for upgrade-action-annotated classes. */ public static final String OM_UPGRADE_CLASS_PACKAGE = "org.apache.hadoop.ozone.om.upgrade"; public OMUpgradeActionProvider() { - super(UpgradeActionOm.class, OmUpgradeAction.class, OM_UPGRADE_CLASS_PACKAGE); + super(ImmutableSet.of(OmUpgradeActionForLayoutFeature.class, OmUpgradeActionForVersion.class), + OmUpgradeAction.class, OM_UPGRADE_CLASS_PACKAGE); } @Override protected ComponentVersion extractVersion(Class clazz) { - UpgradeActionOm annotation = clazz.getAnnotation(UpgradeActionOm.class); - return annotation.feature(); + OmUpgradeActionForLayoutFeature layoutAnnotation = clazz.getAnnotation(OmUpgradeActionForLayoutFeature.class); + if (layoutAnnotation != null) { + return layoutAnnotation.feature(); + } + return clazz.getAnnotation(OmUpgradeActionForVersion.class).version(); } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForLayoutFeature.java similarity index 95% rename from hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java rename to hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForLayoutFeature.java index 4d0d6b5c0171..8b86b6c7ae4d 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForLayoutFeature.java @@ -27,6 +27,6 @@ */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -public @interface UpgradeActionOm { +public @interface OmUpgradeActionForLayoutFeature { OMLayoutFeature feature(); } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForVersion.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForVersion.java new file mode 100644 index 000000000000..af05132568d4 --- /dev/null +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForVersion.java @@ -0,0 +1,33 @@ +/* + * 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 java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import org.apache.hadoop.ozone.OzoneManagerVersion; + +/** + * Annotation to specify upgrade action run during Ozone Manager finalization. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface OmUpgradeActionForVersion { + OzoneManagerVersion version(); +} diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/QuotaRepairUpgradeAction.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/QuotaRepairUpgradeAction.java index eef1c7102520..5064f877b7f7 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/QuotaRepairUpgradeAction.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/QuotaRepairUpgradeAction.java @@ -30,7 +30,7 @@ /** * Quota repair for usages action to be triggered after upgrade. */ -@UpgradeActionOm(feature = QUOTA) +@OmUpgradeActionForLayoutFeature(feature = QUOTA) public class QuotaRepairUpgradeAction implements OmUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(QuotaRepairUpgradeAction.class); 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 b1df2fc62fbf..009ff9f2020d 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 @@ -132,12 +132,16 @@ public void testClasspathScanDiscoversUpgradeActions() throws Exception { assertTrue(versionManager.needsFinalization()); OmUpgradeAction quotaAction = versionManager.getUpgradeActionsForTesting().get(QUOTA); assertInstanceOf(QuotaRepairUpgradeAction.class, quotaAction); + OmUpgradeAction zduAction = versionManager.getUpgradeActionsForTesting().get(ZDU); + assertInstanceOf(ZduOmUpgradeActionForTest.class, zduAction); } try (OMVersionManager versionManager = createManager(SOFTWARE_VERSION.serialize(), new OMUpgradeActionProvider())) { assertFalse(versionManager.needsFinalization()); OmUpgradeAction quotaAction = versionManager.getUpgradeActionsForTesting().get(QUOTA); assertInstanceOf(QuotaRepairUpgradeAction.class, quotaAction); + OmUpgradeAction zduAction = versionManager.getUpgradeActionsForTesting().get(ZDU); + assertInstanceOf(ZduOmUpgradeActionForTest.class, zduAction); } } diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java new file mode 100644 index 000000000000..b46099926512 --- /dev/null +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java @@ -0,0 +1,33 @@ +/* + * 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 static org.apache.hadoop.ozone.OzoneManagerVersion.ZDU; + +import org.apache.hadoop.ozone.om.OzoneManager; + +/** + * No-op upgrade action used only to verify that {@link OmUpgradeActionForVersion} is scanned by + * {@link OMUpgradeActionProvider} in tests. + */ +@OmUpgradeActionForVersion(version = ZDU) +public class ZduOmUpgradeActionForTest implements OmUpgradeAction { + @Override + public void execute(OzoneManager arg) { + } +} diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/InitialConstraintUpgradeAction.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/InitialConstraintUpgradeAction.java index 3adadafe2224..ffcf89768f21 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/InitialConstraintUpgradeAction.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/InitialConstraintUpgradeAction.java @@ -28,7 +28,7 @@ * Upgrade action for the INITIAL schema version, which manages constraints * for the UNHEALTHY_CONTAINERS table. */ -@UpgradeActionRecon(feature = INITIAL_VERSION) +@ReconUpgradeActionForVersion(version = INITIAL_VERSION) public class InitialConstraintUpgradeAction implements ReconUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(InitialConstraintUpgradeAction.class); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/NSSummaryAggregatedTotalsUpgrade.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/NSSummaryAggregatedTotalsUpgrade.java index b806e29fd615..45b91b233fff 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/NSSummaryAggregatedTotalsUpgrade.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/NSSummaryAggregatedTotalsUpgrade.java @@ -29,7 +29,7 @@ * Recon startup is not blocked. During rebuild, APIs that depend on * the tree may return initializing responses as designed. */ -@UpgradeActionRecon(feature = ReconVersion.NSSUMMARY_AGGREGATED_TOTALS) +@ReconUpgradeActionForVersion(version = ReconVersion.NSSUMMARY_AGGREGATED_TOTALS) public class NSSummaryAggregatedTotalsUpgrade implements ReconUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(NSSummaryAggregatedTotalsUpgrade.class); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconTaskStatusTableUpgradeAction.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconTaskStatusTableUpgradeAction.java index 91509598c4f8..f8a5a98a695e 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconTaskStatusTableUpgradeAction.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconTaskStatusTableUpgradeAction.java @@ -38,7 +38,7 @@ * last_task_run_status and current_task_run_status columns to * {@link ReconTaskSchemaDefinition} in case it is missing . */ -@UpgradeActionRecon(feature = ReconVersion.TASK_STATUS_STATISTICS) +@ReconUpgradeActionForVersion(version = ReconVersion.TASK_STATUS_STATISTICS) public class ReconTaskStatusTableUpgradeAction implements ReconUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(ReconTaskStatusTableUpgradeAction.class); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java new file mode 100644 index 000000000000..6de014cc46ce --- /dev/null +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java @@ -0,0 +1,33 @@ +/* + * 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.recon.upgrade; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotation to specify a Recon upgrade action tied to a {@link ReconVersion}. + * The framework discovers annotated classes via reflection and executes them during finalization. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface ReconUpgradeActionForVersion { + ReconVersion version(); +} diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionProvider.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionProvider.java index 76fb392d3bbb..8ae3c13307aa 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionProvider.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionProvider.java @@ -17,23 +17,23 @@ package org.apache.hadoop.ozone.recon.upgrade; +import com.google.common.collect.ImmutableSet; import org.apache.hadoop.hdds.ComponentVersion; import org.apache.hadoop.ozone.upgrade.AbstractUpgradeActionProvider; /** - * Loads {@link ReconUpgradeAction} implementations annotated with {@link UpgradeActionRecon}. + * Loads {@link ReconUpgradeAction} implementations annotated with {@link ReconUpgradeActionForVersion}. */ public final class ReconUpgradeActionProvider extends AbstractUpgradeActionProvider { public static final String RECON_UPGRADE_CLASS_PACKAGE = "org.apache.hadoop.ozone.recon.upgrade"; public ReconUpgradeActionProvider() { - super(UpgradeActionRecon.class, ReconUpgradeAction.class, RECON_UPGRADE_CLASS_PACKAGE); + super(ImmutableSet.of(ReconUpgradeActionForVersion.class), ReconUpgradeAction.class, RECON_UPGRADE_CLASS_PACKAGE); } @Override protected ComponentVersion extractVersion(Class clazz) { - UpgradeActionRecon annotation = clazz.getAnnotation(UpgradeActionRecon.class); - return annotation.feature(); + return clazz.getAnnotation(ReconUpgradeActionForVersion.class).version(); } } diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReplicatedSizeOfFilesUpgradeAction.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReplicatedSizeOfFilesUpgradeAction.java index d1e5889d5990..66131e7d36bb 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReplicatedSizeOfFilesUpgradeAction.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReplicatedSizeOfFilesUpgradeAction.java @@ -26,7 +26,7 @@ * The action triggers a full rebuild of the NSSummary ensuring that the new field: replicatedSizeOfFiles is correctly * populated for all objects. */ -@UpgradeActionRecon(feature = ReconVersion.REPLICATED_SIZE_OF_FILES) +@ReconUpgradeActionForVersion(version = ReconVersion.REPLICATED_SIZE_OF_FILES) public class ReplicatedSizeOfFilesUpgradeAction implements ReconUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(ReplicatedSizeOfFilesUpgradeAction.class); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainerReplicaMismatchAction.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainerReplicaMismatchAction.java index 3753ad244abc..f9a42d59791a 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainerReplicaMismatchAction.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainerReplicaMismatchAction.java @@ -27,7 +27,7 @@ * Upgrade action for handling the addition of a new unhealthy container state in Recon, which will be for containers, * that have replicas with different data checksums. */ -@UpgradeActionRecon(feature = UNHEALTHY_CONTAINER_REPLICA_MISMATCH) +@ReconUpgradeActionForVersion(version = UNHEALTHY_CONTAINER_REPLICA_MISMATCH) public class UnhealthyContainerReplicaMismatchAction implements ReconUpgradeAction { private static final Logger LOG = LoggerFactory.getLogger(UnhealthyContainerReplicaMismatchAction.class); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainersStateContainerIdIndexUpgradeAction.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainersStateContainerIdIndexUpgradeAction.java index c64a6e33ca17..df021e5f5d51 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainersStateContainerIdIndexUpgradeAction.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UnhealthyContainersStateContainerIdIndexUpgradeAction.java @@ -32,7 +32,7 @@ /** * Upgrade action to ensure idx_state_container_id exists on UNHEALTHY_CONTAINERS. */ -@UpgradeActionRecon(feature = ReconVersion.UNHEALTHY_CONTAINERS_STATE_CONTAINER_ID_INDEX) +@ReconUpgradeActionForVersion(version = ReconVersion.UNHEALTHY_CONTAINERS_STATE_CONTAINER_ID_INDEX) public class UnhealthyContainersStateContainerIdIndexUpgradeAction implements ReconUpgradeAction { diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UpgradeActionRecon.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UpgradeActionRecon.java deleted file mode 100644 index 010af79851fc..000000000000 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/UpgradeActionRecon.java +++ /dev/null @@ -1,59 +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.recon.upgrade; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * The {@code UpgradeActionRecon} annotation is used to specify - * upgrade actions that should be executed during finalization - * of the Recon service layout upgrade process. - * - *

This annotation can be used to associate an upgrade action - * class with a specific layout feature. The framework will - * dynamically discover these annotated upgrade actions and execute - * them based on the feature's version during finalization. - * - *

The annotation is retained at runtime, allowing the reflection-based - * mechanism to scan for annotated classes, register the associated actions, - * and execute them as necessary during the layout upgrade process. - * - * Example usage: - * - *

- * @UpgradeActionRecon(feature = FEATURE_NAME)
- * public class FeatureNameUpgradeAction implements ReconUpgradeAction {
- *   @Override
- *   public void execute(DataSource source) throws Exception {
- *     // Custom upgrade logic for FEATURE_NAME
- *   }
- * }
- * 
- */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface UpgradeActionRecon { - - /** - * Defines the component version this upgrade action is associated with. - */ - ReconVersion feature(); -}