This is an automated email from the ASF dual-hosted git repository.
errose28 pushed a commit to branch HDDS-14496-zdu
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-14496-zdu by this push:
new 98c55fe4905 HDDS-15848. Add new upgrade action annotations for
component versions (#10744)
98c55fe4905 is described below
commit 98c55fe4905fdaa6347818945a342fba22f2353d
Author: Ethan Rose <[email protected]>
AuthorDate: Thu Jul 16 12:33:08 2026 -0400
HDDS-15848. Add new upgrade action annotations for component versions
(#10744)
---
.../upgrade/DatanodeUpgradeActionProvider.java | 18 +++++--
.../ContainerTableSchemaFinalizeAction.java | 4 +-
.../upgrade/DatanodeSchemaV2FinalizeAction.java | 4 +-
.../upgrade/DatanodeSchemaV3FinalizeAction.java | 4 +-
.../upgrade/DatanodeUpgradeActionProvider.java | 41 ---------------
.../ScmHAFinalizeUpgradeActionDatanode.java | 4 +-
... => DatanodeUpgradeActionForLayoutFeature.java} | 4 +-
.../upgrade/DatanodeUpgradeActionForVersion.java} | 8 +--
.../upgrade/TestDatanodeVersionManager.java | 4 ++
.../upgrade/ZduDatanodeUpgradeActionForTest.java} | 23 +++------
.../upgrade/AbstractUpgradeActionProvider.java | 21 +++++---
.../ScmOnFinalizeActionForDatanodeSchemaV2.java | 4 +-
.../hdds/upgrade/ScmUpgradeActionProvider.java | 17 +++++--
....java => ScmUpgradeActionForLayoutFeature.java} | 4 +-
...ionScm.java => ScmUpgradeActionForVersion.java} | 8 +--
.../scm/server/upgrade/TestScmVersionManager.java | 4 ++
.../upgrade/ZduScmUpgradeActionForTest.java} | 19 +++----
.../ozone/om/upgrade/OMUpgradeActionProvider.java | 17 ++++---
...m.java => OmUpgradeActionForLayoutFeature.java} | 2 +-
...ctionOm.java => OmUpgradeActionForVersion.java} | 5 +-
.../ozone/om/upgrade/QuotaRepairUpgradeAction.java | 2 +-
.../ozone/om/upgrade/TestOMVersionManager.java | 4 ++
.../om/upgrade/ZduOmUpgradeActionForTest.java} | 19 +++----
.../upgrade/InitialConstraintUpgradeAction.java | 2 +-
.../upgrade/NSSummaryAggregatedTotalsUpgrade.java | 2 +-
.../upgrade/ReconTaskStatusTableUpgradeAction.java | 2 +-
.../upgrade/ReconUpgradeActionForVersion.java | 10 ++--
.../recon/upgrade/ReconUpgradeActionProvider.java | 8 +--
.../ReplicatedSizeOfFilesUpgradeAction.java | 2 +-
.../UnhealthyContainerReplicaMismatchAction.java | 2 +-
...ntainersStateContainerIdIndexUpgradeAction.java | 2 +-
.../ozone/recon/upgrade/UpgradeActionRecon.java | 59 ----------------------
32 files changed, 129 insertions(+), 200 deletions(-)
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 a2e9ca8a925..34874e9439c 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<DatanodeUpgradeAction> {
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 281c68e6641..116715e6616 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 20005ff9c48..ad11bf87ce8 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 e4d97ad5ae4..9152e7cd664 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/DatanodeUpgradeActionProvider.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeUpgradeActionProvider.java
deleted file mode 100644
index 5f280b2887f..00000000000
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeUpgradeActionProvider.java
+++ /dev/null
@@ -1,41 +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 org.apache.hadoop.hdds.ComponentVersion;
-import org.apache.hadoop.hdds.upgrade.DatanodeUpgradeAction;
-import org.apache.hadoop.ozone.upgrade.AbstractUpgradeActionProvider;
-import org.apache.hadoop.ozone.upgrade.UpgradeActionDatanode;
-
-/**
- * Loads {@link DatanodeUpgradeAction} implementations annotated with {@link
UpgradeActionDatanode}.
- */
-public final class DatanodeUpgradeActionProvider extends
AbstractUpgradeActionProvider<DatanodeUpgradeAction> {
-
- public static final String DATANODE_UPGRADE_CLASS_PACKAGE =
"org.apache.hadoop.ozone.container";
-
- public DatanodeUpgradeActionProvider() {
- super(UpgradeActionDatanode.class, DatanodeUpgradeAction.class,
DATANODE_UPGRADE_CLASS_PACKAGE);
- }
-
- @Override
- protected ComponentVersion extractVersion(Class<?> clazz) {
- UpgradeActionDatanode annotation =
clazz.getAnnotation(UpgradeActionDatanode.class);
- return annotation.feature();
- }
-}
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 c8c7ca6d1da..8bba11e81a0 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/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForLayoutFeature.java
similarity index 89%
rename from
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.java
rename to
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForLayoutFeature.java
index f6419085f3b..42fdbd8f12a 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionDatanode.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 a Datanode upgrade action.
+ * Annotation to specify a Datanode upgrade action tied to an HDDS layout
feature.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
-public @interface UpgradeActionDatanode {
+public @interface DatanodeUpgradeActionForLayoutFeature {
HDDSLayoutFeature feature();
}
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/DatanodeUpgradeActionForVersion.java
similarity index 83%
copy from
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
copy to
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/upgrade/DatanodeUpgradeActionForVersion.java
index 4cbbcd4e987..28c2bc0bd51 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/DatanodeUpgradeActionForVersion.java
@@ -21,13 +21,13 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.HDDSVersion;
/**
- * Annotation to specify an SCM upgrade action.
+ * Annotation to specify a Datanode upgrade action tied to an HDDS component
version.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
-public @interface UpgradeActionScm {
- HDDSLayoutFeature feature();
+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 d3c9f7802d3..572b7baa679 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/DatanodeSchemaV2FinalizeAction.java
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java
similarity index 56%
copy from
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV2FinalizeAction.java
copy to
hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java
index 20005ff9c48..f6f8c36c603 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/upgrade/DatanodeSchemaV2FinalizeAction.java
+++
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/ZduDatanodeUpgradeActionForTest.java
@@ -17,28 +17,19 @@
package org.apache.hadoop.ozone.container.upgrade;
-import static
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature.DATANODE_SCHEMA_V2;
+import static org.apache.hadoop.hdds.HDDSVersion.ZDU;
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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.hadoop.ozone.upgrade.DatanodeUpgradeActionForVersion;
/**
- * Upgrade Action for DataNode for the very first first Upgrade Version.
+ * No-op upgrade action used only to verify that {@link
DatanodeUpgradeActionForVersion} is scanned by
+ * {@link org.apache.hadoop.hdds.upgrade.DatanodeUpgradeActionProvider} in
tests.
*/
-@UpgradeActionDatanode(feature = DATANODE_SCHEMA_V2)
-public class DatanodeSchemaV2FinalizeAction
- implements DatanodeUpgradeAction {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(DatanodeSchemaV2FinalizeAction.class);
-
+@DatanodeUpgradeActionForVersion(version = ZDU)
+public class ZduDatanodeUpgradeActionForTest implements DatanodeUpgradeAction {
@Override
- public void execute(DatanodeStateMachine arg) throws Exception {
- LOG.info("Executing datanode 'onFinalize' action for the first " +
- "version with upgrade support. New containers will be " +
- "created with Schema Version 2 henceforth.");
+ 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 8932422f0f3..f80514ec5e9 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<T
extends UpgradeAction<?>>
private static final Logger LOG =
LoggerFactory.getLogger(AbstractUpgradeActionProvider.class);
- private final Class<? extends Annotation> annotationClass;
+ private final Set<Class<? extends Annotation>> annotationClasses;
private final Class<T> actionClass;
private final String[] packagesToScan;
- protected AbstractUpgradeActionProvider(Class<? extends Annotation>
annotationClass,
+ protected AbstractUpgradeActionProvider(Set<Class<? extends Annotation>>
annotationClasses,
Class<T> actionClass,
String... packagesToScan) {
- this.annotationClass = annotationClass;
+ this.annotationClasses = annotationClasses;
this.actionClass = actionClass;
this.packagesToScan = packagesToScan;
}
@@ -60,16 +61,24 @@ public Map<ComponentVersion, T> load() {
.setScanners(new TypeAnnotationsScanner(), new SubTypesScanner())
.setExpandSuperTypes(false)
.setParallel(true));
- Set<Class<?>> typesAnnotatedWith =
reflections.getTypesAnnotatedWith(annotationClass);
+ Set<Class<?>> typesAnnotatedWith = new HashSet<>();
+ for (Class<? extends Annotation> 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 d6b3cef1ce3..44f298018ae 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 63d8dec0b15..21a7c7b5373 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<ScmUpgradeAction> {
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/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForLayoutFeature.java
similarity index 89%
copy from
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
copy to
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForLayoutFeature.java
index 4cbbcd4e987..d0845143ce7 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.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 an SCM upgrade action.
+ * Annotation to specify an SCM upgrade action tied to an HDDS layout feature.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
-public @interface UpgradeActionScm {
+public @interface ScmUpgradeActionForLayoutFeature {
HDDSLayoutFeature feature();
}
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java
similarity index 84%
copy from
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
copy to
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java
index 4cbbcd4e987..ff48b93e300 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/ScmUpgradeActionForVersion.java
@@ -21,13 +21,13 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.HDDSVersion;
/**
- * Annotation to specify an SCM upgrade action.
+ * Annotation to specify an SCM upgrade action tied to an HDDS component
version.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
-public @interface UpgradeActionScm {
- HDDSLayoutFeature feature();
+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 0801ac1a01d..61dcae5826d 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/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java
similarity index 60%
copy from
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java
copy to
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java
index d6b3cef1ce3..aa12c999292 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/ScmOnFinalizeActionForDatanodeSchemaV2.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/upgrade/ZduScmUpgradeActionForTest.java
@@ -17,24 +17,19 @@
package org.apache.hadoop.hdds.scm.server.upgrade;
-import static
org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature.DATANODE_SCHEMA_V2;
+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.UpgradeActionScm;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.hadoop.ozone.upgrade.ScmUpgradeActionForVersion;
/**
- * SCM Upgrade Action for the very first Upgrade Version.
+ * No-op upgrade action used only to verify that {@link
ScmUpgradeActionForVersion} is scanned by
+ * {@link org.apache.hadoop.hdds.upgrade.ScmUpgradeActionProvider} in tests.
*/
-@UpgradeActionScm(feature = DATANODE_SCHEMA_V2)
-public class ScmOnFinalizeActionForDatanodeSchemaV2 implements
ScmUpgradeAction {
- private static final Logger LOG =
LoggerFactory.getLogger(ScmOnFinalizeActionForDatanodeSchemaV2.class);
-
+@ScmUpgradeActionForVersion(version = ZDU)
+public class ZduScmUpgradeActionForTest implements ScmUpgradeAction {
@Override
- public void execute(OzoneStorageContainerManager context) throws Exception {
- LOG.info("Executing SCM On Finalize action for layout feature {}",
- DATANODE_SCHEMA_V2);
+ 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 68b0362d1f5..c0a81ffcf71 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<OmUpgradeAction> {
/**
- * 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%
copy from
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java
copy to
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForLayoutFeature.java
index 4d0d6b5c017..8b86b6c7ae4 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/UpgradeActionOm.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForVersion.java
similarity index 89%
copy from
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java
copy to
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/OmUpgradeActionForVersion.java
index 4d0d6b5c017..af05132568d 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/OmUpgradeActionForVersion.java
@@ -21,12 +21,13 @@
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 UpgradeActionOm {
- OMLayoutFeature feature();
+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 eef1c710252..5064f877b7f 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 b1df2fc62fb..009ff9f2020 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/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java
similarity index 67%
rename from
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java
rename to
hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java
index 4d0d6b5c017..b4609992651 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/upgrade/UpgradeActionOm.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/upgrade/ZduOmUpgradeActionForTest.java
@@ -17,16 +17,17 @@
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 static org.apache.hadoop.ozone.OzoneManagerVersion.ZDU;
+
+import org.apache.hadoop.ozone.om.OzoneManager;
/**
- * Annotation to specify upgrade action run during Ozone Manager finalization.
+ * No-op upgrade action used only to verify that {@link
OmUpgradeActionForVersion} is scanned by
+ * {@link OMUpgradeActionProvider} in tests.
*/
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface UpgradeActionOm {
- OMLayoutFeature feature();
+@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 3adadafe222..ffcf89768f2 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 b806e29fd61..45b91b233ff 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 91509598c4f..f8a5a98a695 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 @@
* <code>last_task_run_status</code> and <code>current_task_run_status</code>
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-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java
similarity index 77%
rename from
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
rename to
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java
index 4cbbcd4e987..6de014cc46c 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/ozone/upgrade/UpgradeActionScm.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/upgrade/ReconUpgradeActionForVersion.java
@@ -15,19 +15,19 @@
* limitations under the License.
*/
-package org.apache.hadoop.ozone.upgrade;
+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;
-import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
/**
- * Annotation to specify an SCM upgrade action.
+ * 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 UpgradeActionScm {
- HDDSLayoutFeature feature();
+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 76fb392d3bb..8ae3c13307a 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<ReconUpgradeAction> {
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 d1e5889d599..66131e7d36b 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 3753ad244ab..f9a42d59791 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 c64a6e33ca1..df021e5f5d5 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 010af79851f..00000000000
---
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.
- *
- * <p>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.
- *
- * <p>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:
- *
- * <pre>
- * @UpgradeActionRecon(feature = FEATURE_NAME)
- * public class FeatureNameUpgradeAction implements ReconUpgradeAction {
- * @Override
- * public void execute(DataSource source) throws Exception {
- * // Custom upgrade logic for FEATURE_NAME
- * }
- * }
- * </pre>
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-public @interface UpgradeActionRecon {
-
- /**
- * Defines the component version this upgrade action is associated with.
- */
- ReconVersion feature();
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]