Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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,
Expand All @@ -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.");
}
Expand All @@ -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.");
}
Expand Down Expand Up @@ -1484,7 +1480,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");
}
Expand All @@ -1499,8 +1495,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) {
Expand Down Expand Up @@ -1541,7 +1536,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.");
}
Expand All @@ -1559,7 +1554,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.");
}
Expand Down Expand Up @@ -1783,7 +1778,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();

Expand Down Expand Up @@ -1862,7 +1857,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);
Expand Down Expand Up @@ -1945,7 +1940,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 {
Expand Down Expand Up @@ -2010,8 +2005,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"
Expand All @@ -2020,7 +2014,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");
}
Expand Down Expand Up @@ -2206,7 +2200,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 {
Expand Down Expand Up @@ -2265,7 +2259,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()) {
Expand Down Expand Up @@ -2313,8 +2307,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"
Expand Down Expand Up @@ -2393,7 +2386,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 {
Expand Down Expand Up @@ -2787,7 +2780,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);
Expand All @@ -2797,7 +2790,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);
Expand All @@ -2808,7 +2801,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");
}

Expand All @@ -2826,7 +2819,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");
}

Expand All @@ -2845,7 +2838,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");
}

Expand Down
Loading
Loading