jojochuang commented on code in PR #9815:
URL: https://github.com/apache/ozone/pull/9815#discussion_r2898576271
##########
hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java:
##########
@@ -267,13 +267,17 @@ public enum ResultCodes {
UNAUTHORIZED,
S3_SECRET_ALREADY_EXISTS,
-
+
Review Comment:
please do not commit changes that unrelated.
##########
hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java:
##########
@@ -1428,6 +1428,68 @@ public OzoneOutputStream rewriteKey(String volumeName,
String bucketName, String
return createOutputStream(openKey);
}
+ @Override
+ 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) {
+ throw new IOException(
+ "OzoneManager does not support atomic key creation.");
+ }
+
+ createKeyPreChecks(volumeName, bucketName, keyName, replicationConfig);
+
+ OmKeyArgs.Builder builder = new OmKeyArgs.Builder()
+ .setVolumeName(volumeName)
+ .setBucketName(bucketName)
+ .setKeyName(keyName)
+ .setDataSize(size)
+ .setReplicationConfig(replicationConfig)
+ .addAllMetadataGdpr(metadata)
+ .addAllTags(tags)
+ .setLatestVersionLocation(getLatestVersionLocation)
+ .setExpectedDataGeneration(
+ OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS);
+
+ OpenKeySession openKey = ozoneManagerClient.openKey(builder.build());
+ if (isS3GRequest.get() && size == 0) {
+ openKey.getKeyInfo().setDataSize(0);
+ }
+ return createOutputStream(openKey);
+ }
+
+ @Override
+ @SuppressWarnings("checkstyle:parameternumber")
+ 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) {
+ throw new IOException(
+ "OzoneManager does not support conditional key rewrite.");
+ }
+
+ createKeyPreChecks(volumeName, bucketName, keyName, replicationConfig);
+
+ OmKeyArgs.Builder builder = new OmKeyArgs.Builder()
+ .setVolumeName(volumeName)
+ .setBucketName(bucketName)
+ .setKeyName(keyName)
+ .setDataSize(size)
+ .setReplicationConfig(replicationConfig)
+ .addAllMetadataGdpr(metadata)
+ .addAllTags(tags)
+ .setLatestVersionLocation(getLatestVersionLocation)
+ .setExpectedETag(expectedETag);
Review Comment:
does it set setExpectedDataGeneration here?
##########
hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java:
##########
@@ -187,8 +188,18 @@ public Response put(
throw newError(S3ErrorTable.NO_SUCH_BUCKET, bucketName, ex);
} else if (ex.getResult() == ResultCodes.FILE_ALREADY_EXISTS) {
throw newError(S3ErrorTable.NO_OVERWRITE, keyPath, ex);
+ } else if (ex.getResult() == ResultCodes.KEY_ALREADY_EXISTS) {
+ throw newError(PRECOND_FAILED, keyPath, ex);
Review Comment:
would you like to consider having different error messages for different
cases?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]