This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch HDDS-10656-atomic-key-overwrite
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to 
refs/heads/HDDS-10656-atomic-key-overwrite by this push:
     new 3ec065d11b HDDS-10843. Enhance rewrite test to cover all key 
attributes (#6799)
3ec065d11b is described below

commit 3ec065d11b423ada4d8dec11ae209475704052ee
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Tue Jun 11 20:30:35 2024 +0200

    HDDS-10843. Enhance rewrite test to cover all key attributes (#6799)
---
 .../client/rpc/TestOzoneRpcClientAbstract.java     | 52 ++++++++++++++++++++--
 1 file changed, 48 insertions(+), 4 deletions(-)

diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
index e7e24b17ac..94ce66dbf9 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
@@ -134,6 +134,8 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.RandomUtils;
+
+import static java.util.Collections.singletonMap;
 import static org.apache.hadoop.hdds.StringUtils.string2Bytes;
 import static org.apache.hadoop.hdds.client.ReplicationFactor.ONE;
 import static org.apache.hadoop.hdds.client.ReplicationFactor.THREE;
@@ -1105,13 +1107,16 @@ public abstract class TestOzoneRpcClientAbstract 
extends OzoneTestBase {
   void rewriteKey(BucketLayout layout) throws IOException {
     OzoneBucket bucket = createBucket(layout);
     OzoneKeyDetails keyDetails = createTestKey(bucket);
+    OmKeyArgs keyArgs = toOmKeyArgs(keyDetails);
+    OmKeyInfo keyInfo = ozoneManager.lookupKey(keyArgs);
 
     final byte[] newContent = "rewrite value".getBytes(UTF_8);
     rewriteKey(bucket, keyDetails, newContent);
 
     OzoneKeyDetails actualKeyDetails = assertKeyContent(bucket, 
keyDetails.getName(), newContent);
     
assertThat(actualKeyDetails.getGeneration()).isGreaterThan(keyDetails.getGeneration());
-    assertEquals(keyDetails.getOwner(), actualKeyDetails.getOwner());
+    assertMetadataUnchanged(keyDetails, actualKeyDetails);
+    assertMetadataAfterRewrite(keyInfo, ozoneManager.lookupKey(keyArgs));
   }
 
   @ParameterizedTest
@@ -1126,7 +1131,6 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
 
     OzoneKeyDetails actualKeyDetails = assertKeyContent(bucket, 
keyDetails.getName(), overwriteContent);
     assertEquals(overwriteDetails.getGeneration(), 
actualKeyDetails.getGeneration());
-    assertEquals(keyDetails.getOwner(), actualKeyDetails.getOwner());
   }
 
   @ParameterizedTest
@@ -1134,16 +1138,22 @@ public abstract class TestOzoneRpcClientAbstract 
extends OzoneTestBase {
   void rewriteFailsDueToOutdatedGeneration(BucketLayout layout) throws 
IOException {
     OzoneBucket bucket = createBucket(layout);
     OzoneKeyDetails keyDetails = createTestKey(bucket);
+    OmKeyArgs keyArgs = toOmKeyArgs(keyDetails);
+
+    // overwrite to get new generation
     final byte[] overwriteContent = "overwrite".getBytes(UTF_8);
     OzoneKeyDetails overwriteDetails = createTestKey(bucket, 
keyDetails.getName(), overwriteContent);
+    OmKeyInfo keyInfo = ozoneManager.lookupKey(keyArgs);
 
+    // try to rewrite previous generation
     OMException e = assertThrows(OMException.class, () -> rewriteKey(bucket, 
keyDetails, "rewrite".getBytes(UTF_8)));
     assertEquals(KEY_NOT_FOUND, e.getResult());
     assertThat(e).hasMessageContaining("Generation mismatch");
 
     OzoneKeyDetails actualKeyDetails = assertKeyContent(bucket, 
keyDetails.getName(), overwriteContent);
     assertEquals(overwriteDetails.getGeneration(), 
actualKeyDetails.getGeneration());
-    assertEquals(keyDetails.getOwner(), actualKeyDetails.getOwner());
+    assertMetadataUnchanged(overwriteDetails, actualKeyDetails);
+    assertUnchanged(keyInfo, ozoneManager.lookupKey(keyArgs));
   }
 
   @ParameterizedTest
@@ -1152,6 +1162,8 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
     OzoneBucket bucket = createBucket(layout);
     OzoneKeyDetails keyDetails = createTestKey(bucket);
     final byte[] overwriteContent = "overwrite".getBytes(UTF_8);
+    OmKeyArgs keyArgs = toOmKeyArgs(keyDetails);
+    OmKeyInfo keyInfo;
 
     OzoneOutputStream out = null;
     final OzoneKeyDetails overwriteDetails;
@@ -1162,6 +1174,7 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
       out.write("rewrite".getBytes(UTF_8));
 
       overwriteDetails = createTestKey(bucket, keyDetails.getName(), 
overwriteContent);
+      keyInfo = ozoneManager.lookupKey(keyArgs);
 
       OMException e = assertThrows(OMException.class, out::close);
       assertEquals(KEY_NOT_FOUND, e.getResult());
@@ -1174,6 +1187,7 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
 
     OzoneKeyDetails actualKeyDetails = assertKeyContent(bucket, 
keyDetails.getName(), overwriteContent);
     assertEquals(overwriteDetails.getGeneration(), 
actualKeyDetails.getGeneration());
+    assertUnchanged(keyInfo, ozoneManager.lookupKey(keyArgs));
   }
 
   @ParameterizedTest
@@ -1227,6 +1241,35 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
     return volume.getBucket(bucketName);
   }
 
+  private static OmKeyArgs toOmKeyArgs(OzoneKeyDetails keyDetails) {
+    return new OmKeyArgs.Builder()
+        .setVolumeName(keyDetails.getVolumeName())
+        .setBucketName(keyDetails.getBucketName())
+        .setKeyName(keyDetails.getName())
+        .build();
+  }
+
+  private static void assertUnchanged(OmKeyInfo original, OmKeyInfo current) {
+    assertEquals(original.getAcls(), current.getAcls());
+    assertEquals(original.getMetadata(), current.getMetadata());
+    assertEquals(original.getCreationTime(), current.getCreationTime());
+    assertEquals(original.getUpdateID(), current.getUpdateID());
+    assertEquals(original.getModificationTime(), 
current.getModificationTime());
+  }
+
+  private static void assertMetadataAfterRewrite(OmKeyInfo original, OmKeyInfo 
updated) {
+    assertEquals(original.getAcls(), updated.getAcls());
+    assertEquals(original.getMetadata(), updated.getMetadata());
+    assertEquals(original.getCreationTime(), updated.getCreationTime());
+    assertThat(updated.getUpdateID()).isGreaterThan(original.getUpdateID());
+    
assertThat(updated.getModificationTime()).isGreaterThanOrEqualTo(original.getModificationTime());
+  }
+
+  private static void assertMetadataUnchanged(OzoneKeyDetails original, 
OzoneKeyDetails rewritten) {
+    assertEquals(original.getOwner(), rewritten.getOwner());
+    assertEquals(original.getMetadata(), rewritten.getMetadata());
+  }
+
   @Test
   public void testCheckUsedBytesQuota() throws IOException {
     String volumeName = UUID.randomUUID().toString();
@@ -4030,7 +4073,8 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
       OzoneBucket bucket, String keyName, byte[] bytes
   ) throws IOException {
     RatisReplicationConfig replication = 
RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.ONE);
-    try (OzoneOutputStream out = bucket.createKey(keyName, bytes.length, 
replication, new HashMap<>())) {
+    Map<String, String> metadata = singletonMap("key", 
RandomStringUtils.randomAscii(10));
+    try (OzoneOutputStream out = bucket.createKey(keyName, bytes.length, 
replication, metadata)) {
       out.write(bytes);
     }
     OzoneKeyDetails key = bucket.getKey(keyName);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to