This is an automated email from the ASF dual-hosted git repository.
dombizita 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 f49a2e0d84a HDDS-15622. New finalize command should check OM server
version (#10548)
f49a2e0d84a is described below
commit f49a2e0d84a563da14fc70bba890a300bedac572
Author: Stephen O'Donnell <[email protected]>
AuthorDate: Wed Jun 24 14:00:38 2026 +0100
HDDS-15622. New finalize command should check OM server version (#10548)
---
.../ozone/admin/upgrade/FinalizeSubCommand.java | 14 ++++++--
.../admin/upgrade/TestFinalizeSubCommand.java | 38 ++++++++++++++++++++--
2 files changed, 46 insertions(+), 6 deletions(-)
diff --git
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/upgrade/FinalizeSubCommand.java
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/upgrade/FinalizeSubCommand.java
index 7f36b84b93e..411955951df 100644
---
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/upgrade/FinalizeSubCommand.java
+++
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/upgrade/FinalizeSubCommand.java
@@ -20,7 +20,9 @@
import java.util.concurrent.Callable;
import org.apache.hadoop.hdds.cli.AbstractSubcommand;
import org.apache.hadoop.hdds.cli.HddsVersionProvider;
+import org.apache.hadoop.ozone.OzoneManagerVersion;
import org.apache.hadoop.ozone.admin.om.OmAddressOptions;
+import org.apache.hadoop.ozone.client.rpc.RpcClient;
import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol;
import picocli.CommandLine;
@@ -33,18 +35,24 @@
mixinStandardHelpOptions = true,
versionProvider = HddsVersionProvider.class
)
-public class FinalizeSubCommand extends AbstractSubcommand implements
Callable<Void> {
+public class FinalizeSubCommand extends AbstractSubcommand implements
Callable<Integer> {
@CommandLine.Mixin
private OmAddressOptions.OptionalServiceIdOrHostMixin omAddressOptions;
@Override
- public Void call() throws Exception {
+ public Integer call() throws Exception {
try (OzoneManagerProtocol client = getClient()) {
+ OzoneManagerVersion omVersion =
RpcClient.getOmVersion(client.getServiceInfo());
+ if (!OzoneManagerVersion.ZDU.isSupportedBy(omVersion)) {
+ err().println("OM does not support zero downtime upgrade. The cluster
should be finalized with " +
+ "`ozone admin om finalizeupgrade`");
+ return 1;
+ }
client.finalizeUpgrade();
out().println("Cluster finalization has been started. Monitor progress
with `ozone admin upgrade status`");
}
- return null;
+ return 0;
}
protected OzoneManagerProtocol getClient() throws Exception {
diff --git
a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/ozone/admin/upgrade/TestFinalizeSubCommand.java
b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/ozone/admin/upgrade/TestFinalizeSubCommand.java
index 0f7e9f2116a..a21dca44184 100644
---
a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/ozone/admin/upgrade/TestFinalizeSubCommand.java
+++
b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/ozone/admin/upgrade/TestFinalizeSubCommand.java
@@ -17,17 +17,25 @@
package org.apache.hadoop.ozone.admin.upgrade;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
+import org.apache.hadoop.ozone.OzoneManagerVersion;
+import org.apache.hadoop.ozone.om.helpers.ServiceInfo;
+import org.apache.hadoop.ozone.om.helpers.ServiceInfoEx;
import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -42,16 +50,17 @@ public class TestFinalizeSubCommand {
private static final String DEFAULT_ENCODING = StandardCharsets.UTF_8.name();
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+ private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
private final PrintStream originalOut = System.out;
+ private final PrintStream originalErr = System.err;
private FinalizeSubCommand cmd;
private OzoneManagerProtocol omClient;
@BeforeEach
public void setup() throws IOException {
omClient = mock(OzoneManagerProtocol.class);
-
- // Mock close() to do nothing - needed for try-with-resources
doNothing().when(omClient).close();
+
when(omClient.getServiceInfo()).thenReturn(serviceInfoWithVersion(OzoneManagerVersion.ZDU));
cmd = new FinalizeSubCommand() {
@Override
@@ -60,17 +69,19 @@ protected OzoneManagerProtocol getClient() throws Exception
{
}
};
System.setOut(new PrintStream(outContent, false, DEFAULT_ENCODING));
+ System.setErr(new PrintStream(errContent, false, DEFAULT_ENCODING));
}
@AfterEach
public void tearDown() {
System.setOut(originalOut);
+ System.setErr(originalErr);
}
@Test
public void testCommandRunsAndPrintsOutput() throws Exception {
new CommandLine(cmd).parseArgs();
- cmd.call();
+ assertEquals(0, cmd.call());
String output = outContent.toString(DEFAULT_ENCODING);
assertTrue(output.contains("Cluster finalization has been started"));
@@ -95,4 +106,25 @@ public void testExceptionFromServerIsPropagated() throws
Exception {
// Client must still be closed even when finalizeUpgrade() throws.
verify(omClient).close();
}
+
+ @Test
+ public void testNonZduServerPrintsErrorAndReturnsNonZero() throws Exception {
+
when(omClient.getServiceInfo()).thenReturn(serviceInfoWithVersion(OzoneManagerVersion.DEFAULT_VERSION));
+
+ new CommandLine(cmd).parseArgs();
+ assertEquals(1, cmd.call());
+
+ String errOutput = errContent.toString(DEFAULT_ENCODING);
+ assertTrue(errOutput.contains("OM does not support zero downtime
upgrade"));
+ verify(omClient, never()).finalizeUpgrade();
+ }
+
+ private ServiceInfoEx serviceInfoWithVersion(OzoneManagerVersion version) {
+ ServiceInfo serviceInfo = new ServiceInfo.Builder()
+ .setNodeType(HddsProtos.NodeType.OM)
+ .setHostname("localhost")
+ .setOmVersion(version)
+ .build();
+ return new ServiceInfoEx(Collections.singletonList(serviceInfo), "",
Collections.emptyList());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]