diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConsts.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConsts.java index 151022823a12..bce241f0ded4 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConsts.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConsts.java @@ -319,7 +319,7 @@ public final class OzoneConsts { public static final String USER_PREFIX = "userPrefix"; public static final String REWRITE_GENERATION = "rewriteGeneration"; /** Sentinel generation used to request atomic create-if-not-exists(put if absent) semantics. */ - public static final long EXPECTED_GEN_CREATE_IF_NOT_EXISTS = -1L; + public static final long EXPECTED_GEN_CREATE_IF_ABSENT = 0L; public static final String FROM_SNAPSHOT = "fromSnapshot"; public static final String TO_SNAPSHOT = "toSnapshot"; public static final String TOKEN = "token"; diff --git a/hadoop-hdds/docs/content/design/s3-conditional-requests.md b/hadoop-hdds/docs/content/design/s3-conditional-requests.md index 6e2d1d0eca0e..df827ad4d024 100644 --- a/hadoop-hdds/docs/content/design/s3-conditional-requests.md +++ b/hadoop-hdds/docs/content/design/s3-conditional-requests.md @@ -253,7 +253,7 @@ sequenceDiagram User->>GW: PUT object with If-None-Match:* or If-Match:etag alt If-None-Match: * - GW->>OM: createKey(expectedDataGeneration = -1) + GW->>OM: createKey(expectedDataGeneration = 0) OM->>OM: Reject if key already exists OM-->>GW: Open key or KEY_ALREADY_EXISTS opt Open key created 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 6fe64a263765..0b058362a30f 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 @@ -1439,7 +1439,7 @@ public OzoneOutputStream createKeyIfNotExists(String volumeName, OmKeyArgs.Builder builder = createWriteKeyArgsBuilder(volumeName, bucketName, keyName, size, replicationConfig, metadata, tags); builder.setExpectedDataGeneration( - OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS); + OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT); return openOutputStream(builder.build(), size); } @@ -1550,7 +1550,7 @@ public OzoneDataStreamOutput createStreamKeyIfNotExists(String volumeName, volumeName, bucketName, keyName, size, replicationConfig, metadata, tags); builder.setExpectedDataGeneration( - OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS); + OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT); return openDataStreamOutput(builder.build()); } diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java index d9e04e5eed3a..494ec2473cdb 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java @@ -36,7 +36,7 @@ import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SNAPSHOT_DELETING_SERVICE_INTERVAL; import static org.apache.hadoop.ozone.OzoneConsts.DEFAULT_OM_UPDATE_ID; import static org.apache.hadoop.ozone.OzoneConsts.ETAG; -import static org.apache.hadoop.ozone.OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS; +import static org.apache.hadoop.ozone.OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT; import static org.apache.hadoop.ozone.OzoneConsts.GB; import static org.apache.hadoop.ozone.OzoneConsts.MD5_HASH; import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER; @@ -1450,7 +1450,7 @@ void rewriteRejectsNonPositiveGeneration(BucketLayout layout) () -> { bucket.rewriteKey("key2", 1024, - EXPECTED_GEN_CREATE_IF_NOT_EXISTS, + EXPECTED_GEN_CREATE_IF_ABSENT, RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.ONE), singletonMap("key", "value")); }); @@ -3957,7 +3957,7 @@ public void testConditionalCompleteMultipartUploadIfNoneMatch() throws Exception // Complete with If-None-Match semantics (key doesn't exist, should succeed) OmMultipartUploadCompleteInfo result = bucket.completeMultipartUpload( keyName, uploadID, partsMap, - EXPECTED_GEN_CREATE_IF_NOT_EXISTS, null); + EXPECTED_GEN_CREATE_IF_ABSENT, null); assertNotNull(result); assertEquals(keyName, result.getKey()); @@ -3993,7 +3993,7 @@ public void testConditionalCompleteMultipartUploadIfNoneMatchFail() throws Excep // Complete with If-None-Match semantics (key exists, should fail) OMException omEx = assertThrows(OMException.class, () -> bucket.completeMultipartUpload(keyName, uploadID, partsMap, - EXPECTED_GEN_CREATE_IF_NOT_EXISTS, null)); + EXPECTED_GEN_CREATE_IF_ABSENT, null)); assertEquals(KEY_ALREADY_EXISTS, omEx.getResult()); } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java index 752397efc7d2..4e1d3603d734 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java @@ -95,7 +95,7 @@ public OMRequest preExecute(OzoneManager ozoneManager) throws IOException { if (keyArgs.hasExpectedDataGeneration()) { if (keyArgs.getExpectedDataGeneration() - == OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS) { + == OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT) { ozoneManager.checkFeatureEnabled( OzoneManagerVersion.ATOMIC_CREATE_IF_NOT_EXISTS); } else { @@ -625,7 +625,7 @@ protected void validateAtomicRewrite(OmKeyInfo existing, OmKeyInfo toCommit, Map Long expectedGen = toCommit.getExpectedDataGeneration(); auditMap.put(OzoneConsts.REWRITE_GENERATION, String.valueOf(expectedGen)); - if (expectedGen == OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS) { + if (expectedGen == OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT) { if (existing != null) { throw new OMException("Atomic create-if-not-exists conflicted with an existing key", OMException.ResultCodes.ATOMIC_WRITE_CONFLICT); diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java index b82541791b75..d7b14455369f 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java @@ -97,7 +97,7 @@ public OMRequest preExecute(OzoneManager ozoneManager) throws IOException { if (keyArgs.hasExpectedDataGeneration()) { if (keyArgs.getExpectedDataGeneration() - == OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS) { + == OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT) { ozoneManager.checkFeatureEnabled( OzoneManagerVersion.ATOMIC_CREATE_IF_NOT_EXISTS); } else { diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java index 5bab4de3a4f3..7967007263e7 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java @@ -1324,7 +1324,7 @@ protected void validateAtomicRewrite(OmKeyInfo dbKeyInfo, KeyArgs keyArgs) if (keyArgs.hasExpectedDataGeneration()) { long expectedGen = keyArgs.getExpectedDataGeneration(); // If expectedGen is EXPECTED_GEN_CREATE_IF_NOT_EXISTS, it means the key MUST NOT exist (If-None-Match) - if (expectedGen == OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS) { + if (expectedGen == OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT) { if (dbKeyInfo != null) { throw new OMException("Key already exists", OMException.ResultCodes.KEY_ALREADY_EXISTS); diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java index 41b81471ff96..61852561ac91 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java @@ -300,7 +300,7 @@ public void testAtomicCreateIfNotExistsCommitKeyAbsent() throws Exception { OmKeyInfo.Builder omKeyInfoBuilder = OMRequestTestUtils.createOmKeyInfo( volumeName, bucketName, keyName, replicationConfig, new OmKeyLocationInfoGroup(version, new ArrayList<>())); - omKeyInfoBuilder.setExpectedDataGeneration(OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS); + omKeyInfoBuilder.setExpectedDataGeneration(OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT); String openKey = addKeyToOpenKeyTable(allocatedLocationList, omKeyInfoBuilder); assertNotNull(openKeyTable.get(openKey)); @@ -335,7 +335,7 @@ public void testAtomicCreateIfNotExistsCommitKeyAlreadyExists() throws Exception OmKeyInfo.Builder omKeyInfoBuilder = OMRequestTestUtils.createOmKeyInfo( volumeName, bucketName, keyName, replicationConfig, new OmKeyLocationInfoGroup(version, new ArrayList<>())); - omKeyInfoBuilder.setExpectedDataGeneration(OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS); + omKeyInfoBuilder.setExpectedDataGeneration(OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT); String openKey = addKeyToOpenKeyTable(allocatedLocationList, omKeyInfoBuilder); assertNotNull(openKeyTable.get(openKey)); diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java index ff5691a5612b..aec1c720a051 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java @@ -156,7 +156,7 @@ public void testCreateKeyExpectedGenCreateIfNotExistsKeyMissing( OMRequest modifiedOmRequest = doPreExecute(createKeyRequest( false, 0, 100L, replicationConfig, - OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS)); + OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT)); OMKeyCreateRequest omKeyCreateRequest = getOMKeyCreateRequest(modifiedOmRequest); addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager, getBucketLayout()); @@ -170,7 +170,7 @@ public void testCreateKeyExpectedGenCreateIfNotExistsKeyMissing( OmKeyInfo openKeyInfo = omMetadataManager.getOpenKeyTable(getBucketLayout()) .get(getOpenKey(id)); assertNotNull(openKeyInfo); - assertEquals(OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS, + assertEquals(OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT, openKeyInfo.getExpectedDataGeneration()); } @@ -183,7 +183,7 @@ public void testCreateKeyExpectedGenCreateIfNotExistsKeyAlreadyExists( OMRequest modifiedOmRequest = doPreExecute(createKeyRequest( false, 0, 100L, replicationConfig, - OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS)); + OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT)); OMKeyCreateRequest omKeyCreateRequest = getOMKeyCreateRequest(modifiedOmRequest); addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager, getBucketLayout()); diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java index b74a7d52186d..5e301950465e 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java @@ -744,7 +744,7 @@ public Response completeMultipartUpload( Long expectedDataGeneration = null; String expectedETag = null; if (writeConditions.hasIfNoneMatch()) { - expectedDataGeneration = OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS; + expectedDataGeneration = OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT; } else if (writeConditions.hasIfMatch()) { expectedETag = writeConditions.getExpectedETag(); } diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java index f9b86f1cd672..8a8864c398bf 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java @@ -18,7 +18,7 @@ package org.apache.hadoop.ozone.client; import static org.apache.hadoop.ozone.OzoneConsts.ETAG; -import static org.apache.hadoop.ozone.OzoneConsts.EXPECTED_GEN_CREATE_IF_NOT_EXISTS; +import static org.apache.hadoop.ozone.OzoneConsts.EXPECTED_GEN_CREATE_IF_ABSENT; import static org.apache.hadoop.ozone.OzoneConsts.MD5_HASH; import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER; @@ -587,9 +587,9 @@ public OmMultipartUploadCompleteInfo completeMultipartUpload(String key, public OmMultipartUploadCompleteInfo completeMultipartUpload(String key, String uploadID, Map partsMap, Long expectedDataGeneration, String expectedETag) throws IOException { - // Handle If-None-Match: * (expectedDataGeneration == -1 means create-if-absent) + // Handle If-None-Match: * (expectedDataGeneration == 0 means create-if-absent) if (expectedDataGeneration != null && - expectedDataGeneration == EXPECTED_GEN_CREATE_IF_NOT_EXISTS) { + expectedDataGeneration == EXPECTED_GEN_CREATE_IF_ABSENT) { if (keyContents.containsKey(key)) { throw new OMException("Key already exists", ResultCodes.KEY_ALREADY_EXISTS); }