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 44fce2c2506 HDDS-15677. Update client side version checks to use
`isSupportedBy`. (#10611)
44fce2c2506 is described below
commit 44fce2c2506c999ae8f09d6da7940482b6095794
Author: Ethan Rose <[email protected]>
AuthorDate: Wed Jul 15 10:05:44 2026 -0400
HDDS-15677. Update client side version checks to use `isSupportedBy`.
(#10611)
---
.../ozone/admin/om/ListOpenFilesSubCommand.java | 2 +-
.../hadoop/ozone/client/io/KeyOutputStream.java | 2 +-
.../apache/hadoop/ozone/client/rpc/RpcClient.java | 75 +++++++++---------
.../hadoop/ozone/client/rpc/TestRpcClient.java | 88 ++++++++++++++++++++++
4 files changed, 124 insertions(+), 43 deletions(-)
diff --git
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/ListOpenFilesSubCommand.java
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/ListOpenFilesSubCommand.java
index 15265b224b6..bf199a9bd54 100644
---
a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/ListOpenFilesSubCommand.java
+++
b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/ozone/admin/om/ListOpenFilesSubCommand.java
@@ -103,7 +103,7 @@ public Void call() throws Exception {
private void execute(OzoneManagerProtocol ozoneManagerClient) throws
IOException {
ServiceInfoEx serviceInfoEx = ozoneManagerClient.getServiceInfo();
final OzoneManagerVersion omVersion =
RpcClient.getOmVersion(serviceInfoEx);
- if (omVersion.compareTo(OzoneManagerVersion.HBASE_SUPPORT) < 0) {
+ if (!OzoneManagerVersion.HBASE_SUPPORT.isSupportedBy(omVersion)) {
System.err.println("Error: This command requires OzoneManager version "
+ OzoneManagerVersion.HBASE_SUPPORT.name() + " or later.");
return;
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/KeyOutputStream.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/KeyOutputStream.java
index a3a1ca28030..ac4acdcc02d 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/KeyOutputStream.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/KeyOutputStream.java
@@ -532,7 +532,7 @@ public void hsync() throws IOException {
throw new UnsupportedOperationException("The replication factor = "
+ replication.getRequiredNodes() + " <= 1");
}
- if (ozoneManagerVersion.compareTo(OzoneManagerVersion.HBASE_SUPPORT) <
0) {
+ if
(!OzoneManagerVersion.HBASE_SUPPORT.isSupportedBy(ozoneManagerVersion)) {
throw new UnsupportedOperationException("Hsync API requires OM version
"
+ OzoneManagerVersion.HBASE_SUPPORT + " or later. Current OM
version "
+ ozoneManagerVersion);
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
index 73bec4444a6..387f44f77c1 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
@@ -345,24 +345,23 @@ public XceiverClientFactory getXceiverClientManager() {
}
public static OzoneManagerVersion getOmVersion(ServiceInfoEx info) {
- OzoneManagerVersion version = OzoneManagerVersion.SOFTWARE_VERSION;
+ OzoneManagerVersion minOMVersion = OzoneManagerVersion.SOFTWARE_VERSION;
for (ServiceInfo si : info.getServiceInfoList()) {
if (si.getNodeType() == HddsProtos.NodeType.OM) {
- OzoneManagerVersion current =
- OzoneManagerVersion.deserialize(si.getProtobuf().getOMVersion());
- if (version.compareTo(current) > 0) {
- version = current;
+ OzoneManagerVersion omVersion =
OzoneManagerVersion.deserialize(si.getProtobuf().getOMVersion());
+ if (!minOMVersion.isSupportedBy(omVersion)) {
+ minOMVersion = omVersion;
}
}
}
- LOG.trace("Ozone Manager version is {}", version.name());
- return version;
+ LOG.trace("Ozone Manager version is {}", minOMVersion);
+ return minOMVersion;
}
static boolean validateOmVersion(OzoneManagerVersion minimumVersion,
List<ServiceInfo> serviceInfoList) {
if (minimumVersion == OzoneManagerVersion.UNKNOWN_VERSION) {
- throw new IllegalArgumentException("Configuration error, expected "
+ throw new IllegalArgumentException("Configuration error, minimum "
+ "OzoneManager version config evaluates to an unknown version.");
}
// if expected version is unset or is the default, then any OM would do
fine
@@ -371,13 +370,12 @@ static boolean validateOmVersion(OzoneManagerVersion
minimumVersion,
return true;
}
- boolean found = false; // At min one OM should be present.
+ // At least one OM must be present, but all OMs must meet the minimum
version requirement.
+ boolean found = false;
for (ServiceInfo s: serviceInfoList) {
if (s.getNodeType() == HddsProtos.NodeType.OM) {
- OzoneManagerVersion omv =
- OzoneManagerVersion
- .deserialize(s.getProtobuf().getOMVersion());
- if (minimumVersion.compareTo(omv) > 0) {
+ boolean meetsMinVersion =
minimumVersion.isSupportedBy(s.getProtobuf().getOMVersion());
+ if (!meetsMinVersion) {
return false;
} else {
found = true;
@@ -611,8 +609,7 @@ public void createBucket(
Objects.requireNonNull(bucketArgs, "bucketArgs == null");
verifyCountsQuota(bucketArgs.getQuotaInNamespace());
verifySpaceQuota(bucketArgs.getQuotaInBytes());
- if (omVersion
- .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
+ if
(!OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT.isSupportedBy(omVersion)) {
if (bucketArgs.getDefaultReplicationConfig() != null &&
bucketArgs.getDefaultReplicationConfig().getType()
== ReplicationType.EC) {
@@ -1280,8 +1277,7 @@ public void setReplicationConfig(
verifyVolumeName(volumeName);
verifyBucketName(bucketName);
Objects.requireNonNull(replicationConfig, "replicationConfig == null");
- if (omVersion
- .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
+ if
(!OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT.isSupportedBy(omVersion)) {
if (replicationConfig.getReplicationType()
== HddsProtos.ReplicationType.EC) {
throw new IOException("Can not set the default replication of the"
@@ -1413,7 +1409,7 @@ public OzoneOutputStream createKey(
public OzoneOutputStream rewriteKey(String volumeName, String bucketName,
String keyName,
long size, long existingKeyGeneration, ReplicationConfig
replicationConfig,
Map<String, String> metadata) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.ATOMIC_REWRITE_KEY) < 0) {
+ if (!OzoneManagerVersion.ATOMIC_REWRITE_KEY.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support atomic key
rewrite.");
}
Preconditions.checkArgument(existingKeyGeneration > 0,
@@ -1431,7 +1427,7 @@ public OzoneOutputStream createKeyIfNotExists(String
volumeName,
String bucketName, String keyName, long size,
ReplicationConfig replicationConfig, Map<String, String> metadata,
Map<String, String> tags) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.ATOMIC_REWRITE_KEY) < 0) {
+ if (!OzoneManagerVersion.ATOMIC_REWRITE_KEY.isSupportedBy(omVersion)) {
throw new IOException(
"OzoneManager does not support atomic key creation.");
}
@@ -1448,7 +1444,7 @@ public OzoneOutputStream rewriteKeyIfMatch(String
volumeName,
String bucketName, String keyName, long size, String expectedETag,
ReplicationConfig replicationConfig, Map<String, String> metadata,
Map<String, String> tags) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.ATOMIC_REWRITE_KEY) < 0) {
+ if (!OzoneManagerVersion.ATOMIC_REWRITE_KEY.isSupportedBy(omVersion)) {
throw new IOException(
"OzoneManager does not support conditional key rewrite.");
}
@@ -1477,7 +1473,7 @@ private OzoneOutputStream openOutputStream(OmKeyArgs
keyArgs, long size)
private void validateObjectTagsSupport(Map<String, String> tags)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.OBJECT_TAG) < 0) {
+ if (!OzoneManagerVersion.OBJECT_TAG.isSupportedBy(omVersion)) {
if (tags != null && !tags.isEmpty()) {
throw new IOException("OzoneManager does not support object tags");
}
@@ -1492,8 +1488,7 @@ private void createKeyPreChecks(String volumeName, String
bucketName, String key
HddsClientUtils.verifyKeyName(keyName);
}
HddsClientUtils.checkNotNull(keyName);
- if (omVersion
- .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
+ if
(!OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT.isSupportedBy(omVersion)) {
if (replicationConfig != null &&
replicationConfig.getReplicationType()
== HddsProtos.ReplicationType.EC) {
@@ -1534,7 +1529,7 @@ public OzoneDataStreamOutput
createStreamKeyIfNotExists(String volumeName,
String bucketName, String keyName, long size,
ReplicationConfig replicationConfig, Map<String, String> metadata,
Map<String, String> tags) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.ATOMIC_REWRITE_KEY) < 0) {
+ if (!OzoneManagerVersion.ATOMIC_REWRITE_KEY.isSupportedBy(omVersion)) {
throw new IOException(
"OzoneManager does not support atomic key creation.");
}
@@ -1552,7 +1547,7 @@ public OzoneDataStreamOutput
rewriteStreamKeyIfMatch(String volumeName,
String bucketName, String keyName, long size, String expectedETag,
ReplicationConfig replicationConfig, Map<String, String> metadata,
Map<String, String> tags) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.ATOMIC_REWRITE_KEY) < 0) {
+ if (!OzoneManagerVersion.ATOMIC_REWRITE_KEY.isSupportedBy(omVersion)) {
throw new IOException(
"OzoneManager does not support conditional key rewrite.");
}
@@ -1785,7 +1780,7 @@ public List<OzoneKey> listKeys(String volumeName, String
bucketName,
int maxListResult)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.LIGHTWEIGHT_LIST_KEYS) >= 0) {
+ if (OzoneManagerVersion.LIGHTWEIGHT_LIST_KEYS.isSupportedBy(omVersion)) {
List<BasicOmKeyInfo> keys = ozoneManagerClient.listKeysLight(
volumeName, bucketName, prevKey, keyPrefix, maxListResult).getKeys();
@@ -1864,7 +1859,7 @@ public OzoneKeyDetails getS3KeyDetails(String bucketName,
String keyName)
public OzoneKeyDetails getS3KeyDetails(String bucketName, String keyName,
int partNumber) throws IOException {
OmKeyInfo keyInfo;
- if (omVersion.compareTo(OzoneManagerVersion.S3_PART_AWARE_GET) >= 0) {
+ if (OzoneManagerVersion.S3_PART_AWARE_GET.isSupportedBy(omVersion)) {
keyInfo = getS3PartKeyInfo(bucketName, keyName, partNumber);
} else {
keyInfo = getS3KeyInfo(bucketName, keyName, false);
@@ -1947,7 +1942,7 @@ public OmKeyInfo getKeyInfo(
private OmKeyInfo getKeyInfo(OmKeyArgs keyArgs) throws IOException {
final OmKeyInfo keyInfo;
- if (omVersion.compareTo(OzoneManagerVersion.OPTIMIZED_GET_KEY_INFO) >= 0) {
+ if (OzoneManagerVersion.OPTIMIZED_GET_KEY_INFO.isSupportedBy(omVersion)) {
keyInfo = ozoneManagerClient.getKeyInfo(keyArgs, false)
.getKeyInfo();
} else {
@@ -2019,8 +2014,7 @@ public OmMultipartInfo initiateMultipartUpload(String
volumeName,
verifyBucketName(bucketName);
HddsClientUtils.checkNotNull(keyName);
String ownerName = getRealUserInfo().getShortUserName();
- if (omVersion
- .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
+ if
(!OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT.isSupportedBy(omVersion)) {
if (replicationConfig != null && replicationConfig.getReplicationType()
== HddsProtos.ReplicationType.EC) {
throw new IOException("Can not set the replication of the file to"
@@ -2029,7 +2023,7 @@ public OmMultipartInfo initiateMultipartUpload(String
volumeName,
}
}
- if (omVersion.compareTo(OzoneManagerVersion.OBJECT_TAG) < 0) {
+ if (!OzoneManagerVersion.OBJECT_TAG.isSupportedBy(omVersion)) {
if (tags != null && !tags.isEmpty()) {
throw new IOException("OzoneManager does not support object tags");
}
@@ -2248,7 +2242,7 @@ public OzoneMultipartUploadList
listMultipartUploads(String volumeName,
String bucketName, String prefix, String keyMarker, String
uploadIdMarker, int maxUploads) throws IOException {
OmMultipartUploadList omMultipartUploadList;
- if
(omVersion.compareTo(OzoneManagerVersion.S3_LIST_MULTIPART_UPLOADS_PAGINATION)
>= 0) {
+ if
(OzoneManagerVersion.S3_LIST_MULTIPART_UPLOADS_PAGINATION.isSupportedBy(omVersion))
{
omMultipartUploadList =
ozoneManagerClient.listMultipartUploads(volumeName, bucketName, prefix,
keyMarker,
uploadIdMarker, maxUploads, true);
} else {
@@ -2307,7 +2301,7 @@ public OzoneInputStream readFile(String volumeName,
String bucketName,
.setLatestVersionLocation(getLatestVersionLocation)
.build();
final OmKeyInfo keyInfo;
- if (omVersion.compareTo(OzoneManagerVersion.OPTIMIZED_GET_KEY_INFO) >= 0) {
+ if (OzoneManagerVersion.OPTIMIZED_GET_KEY_INFO.isSupportedBy(omVersion)) {
keyInfo = ozoneManagerClient.getKeyInfo(keyArgs, false)
.getKeyInfo();
if (!keyInfo.isFile()) {
@@ -2355,8 +2349,7 @@ private OzoneInputStream getInputStreamWithRetryFunction(
public OzoneOutputStream createFile(String volumeName, String bucketName,
String keyName, long size, ReplicationConfig replicationConfig,
boolean overWrite, boolean recursive) throws IOException {
- if (omVersion
- .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
+ if
(!OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT.isSupportedBy(omVersion)) {
if (replicationConfig.getReplicationType()
== HddsProtos.ReplicationType.EC) {
throw new IOException("Can not set the replication of the file to"
@@ -2435,7 +2428,7 @@ public List<OzoneFileStatusLight> listStatusLight(String
volumeName,
String bucketName, String keyName, boolean recursive, String startKey,
long numEntries, boolean allowPartialPrefixes) throws IOException {
OmKeyArgs keyArgs = prepareOmKeyArgs(volumeName, bucketName, keyName);
- if (omVersion.compareTo(OzoneManagerVersion.LIGHTWEIGHT_LIST_STATUS) >= 0)
{
+ if (OzoneManagerVersion.LIGHTWEIGHT_LIST_STATUS.isSupportedBy(omVersion)) {
return ozoneManagerClient.listStatusLight(keyArgs, recursive, startKey,
numEntries, allowPartialPrefixes);
} else {
@@ -2820,7 +2813,7 @@ public void setTimes(OzoneObj obj, String keyName, long
mtime, long atime)
public LeaseKeyInfo recoverLease(String volumeName, String bucketName,
String keyName, boolean force)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.HBASE_SUPPORT) < 0) {
+ if (!OzoneManagerVersion.HBASE_SUPPORT.isSupportedBy(omVersion)) {
throw new UnsupportedOperationException("Lease recovery API requires OM
version "
+ OzoneManagerVersion.HBASE_SUPPORT + " or later. Current OM version
"
+ omVersion);
@@ -2830,7 +2823,7 @@ public LeaseKeyInfo recoverLease(String volumeName,
String bucketName,
@Override
public void recoverKey(OmKeyArgs args, long clientID) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.HBASE_SUPPORT) < 0) {
+ if (!OzoneManagerVersion.HBASE_SUPPORT.isSupportedBy(omVersion)) {
throw new UnsupportedOperationException("Lease recovery API requires OM
version "
+ OzoneManagerVersion.HBASE_SUPPORT + " or later. Current OM version
"
+ omVersion);
@@ -2841,7 +2834,7 @@ public void recoverKey(OmKeyArgs args, long clientID)
throws IOException {
@Override
public Map<String, String> getObjectTagging(String volumeName, String
bucketName, String keyName)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.S3_OBJECT_TAGGING_API) < 0) {
+ if (!OzoneManagerVersion.S3_OBJECT_TAGGING_API.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support S3 object tagging
API");
}
@@ -2859,7 +2852,7 @@ public Map<String, String> getObjectTagging(String
volumeName, String bucketName
@Override
public void putObjectTagging(String volumeName, String bucketName,
String keyName, Map<String, String> tags)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.S3_OBJECT_TAGGING_API) < 0) {
+ if (!OzoneManagerVersion.S3_OBJECT_TAGGING_API.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support S3 object tagging
API");
}
@@ -2878,7 +2871,7 @@ public void putObjectTagging(String volumeName, String
bucketName,
@Override
public void deleteObjectTagging(String volumeName, String bucketName,
String keyName) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.S3_OBJECT_TAGGING_API) < 0) {
+ if (!OzoneManagerVersion.S3_OBJECT_TAGGING_API.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support S3 object tagging
API");
}
diff --git
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
index f758638ac91..ca985fc993b 100644
---
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
+++
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
@@ -17,13 +17,17 @@
package org.apache.hadoop.ozone.client.rpc;
+import static org.apache.hadoop.ozone.client.rpc.RpcClient.getOmVersion;
import static org.apache.hadoop.ozone.client.rpc.RpcClient.validateOmVersion;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -181,6 +185,33 @@ private enum ValidateOmVersionTestCases {
OzoneManagerVersion.SOFTWARE_VERSION,
OzoneManagerVersion.SOFTWARE_VERSION,
OzoneManagerVersion.UNKNOWN_VERSION,
+ true),
+
+ // An intermediate expected version is supported only by OMs at or above
that version.
+ INTERMEDIATE_EXPECTED_ONE_OLDER_OM(
+ OzoneManagerVersion.HBASE_SUPPORT,
+ OzoneManagerVersion.ATOMIC_REWRITE_KEY,
+ null,
+ false),
+ INTERMEDIATE_EXPECTED_ONE_EXACT_OM(
+ OzoneManagerVersion.HBASE_SUPPORT,
+ OzoneManagerVersion.HBASE_SUPPORT,
+ null,
+ true),
+ INTERMEDIATE_EXPECTED_ONE_NEWER_OM(
+ OzoneManagerVersion.HBASE_SUPPORT,
+ OzoneManagerVersion.LIGHTWEIGHT_LIST_STATUS,
+ null,
+ true),
+ INTERMEDIATE_EXPECTED_ONE_NEWER_ONE_OLDER_OM(
+ OzoneManagerVersion.HBASE_SUPPORT,
+ OzoneManagerVersion.LIGHTWEIGHT_LIST_STATUS,
+ OzoneManagerVersion.ATOMIC_REWRITE_KEY,
+ false),
+ INTERMEDIATE_EXPECTED_TWO_NEWER_OM(
+ OzoneManagerVersion.HBASE_SUPPORT,
+ OzoneManagerVersion.LIGHTWEIGHT_LIST_STATUS,
+ OzoneManagerVersion.S3_OBJECT_TAGGING_API,
true);
private final OzoneManagerVersion expectedVersion;
@@ -228,6 +259,51 @@ public void
testUnknownVersionShouldNotBeAnExpectedVersion() {
() -> validateOmVersion(OzoneManagerVersion.UNKNOWN_VERSION, null));
}
+ @Test
+ public void testValidateOmVersionFailsWhenNoOmPresent() {
+ // At least one OM must be present. An empty list should fail validation.
+ assertFalse(validateOmVersion(OzoneManagerVersion.SOFTWARE_VERSION,
Collections.emptyList()));
+ }
+
+ @Test
+ public void testGetOmVersionWithNoOmDefaultsToSoftwareVersion() {
+ // Default software version should be returned if OM list is empty.
+ assertEquals(OzoneManagerVersion.SOFTWARE_VERSION,
getOmVersion(serviceInfoEx()));
+ }
+
+ @Test
+ public void testGetOmVersionReturnsSingleOmVersion() {
+ assertEquals(OzoneManagerVersion.HBASE_SUPPORT,
getOmVersion(serviceInfoEx(om(OzoneManagerVersion.HBASE_SUPPORT))));
+ }
+
+ @Test
+ public void testGetOmVersionReturnsMinimumAcrossOms() {
+ // The lowest version among all OMs is returned, regardless of ordering.
+ assertEquals(OzoneManagerVersion.HBASE_SUPPORT, // version 7
+ getOmVersion(serviceInfoEx(
+ om(OzoneManagerVersion.LIGHTWEIGHT_LIST_STATUS), // version 8
+ om(OzoneManagerVersion.HBASE_SUPPORT)))); // version 7
+ assertEquals(OzoneManagerVersion.DEFAULT_VERSION, // version 0
+ getOmVersion(serviceInfoEx(
+ om(OzoneManagerVersion.DEFAULT_VERSION), // version 0
+ om(OzoneManagerVersion.SOFTWARE_VERSION)))); // largest concrete
version.
+ }
+
+ @Test
+ public void testGetOmVersionWithFutureOM() {
+ // A future (unknown) OM version must never be returned as the version to
use, even if it is the only one present.
+ // The client's latest known OM version should be used in this case, which
should still be less than the future
+ // versions.
+ assertEquals(OzoneManagerVersion.SOFTWARE_VERSION,
+ getOmVersion(serviceInfoEx(
+ om(OzoneManagerVersion.UNKNOWN_VERSION),
+ om(OzoneManagerVersion.SOFTWARE_VERSION))));
+ assertEquals(OzoneManagerVersion.SOFTWARE_VERSION,
+ getOmVersion(serviceInfoEx(
+ om(OzoneManagerVersion.UNKNOWN_VERSION),
+ om(OzoneManagerVersion.UNKNOWN_VERSION))));
+ }
+
@Test
public void testCloseTwiceDoesNotWarn() throws IOException {
RpcClient rpcClient = createRpcClient();
@@ -249,6 +325,18 @@ public void testCloseTwiceDoesNotWarn() throws IOException
{
}
}
+ private static ServiceInfo om(OzoneManagerVersion version) {
+ return new ServiceInfo.Builder()
+ .setNodeType(HddsProtos.NodeType.OM)
+ .setHostname("localhost")
+ .setOmVersion(version)
+ .build();
+ }
+
+ private static ServiceInfoEx serviceInfoEx(ServiceInfo... serviceInfos) {
+ return new ServiceInfoEx(Arrays.asList(serviceInfos), null, null);
+ }
+
private static RpcClient createRpcClient() throws IOException {
OzoneConfiguration config = new OzoneConfiguration();
return new RpcClient(config, null) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]