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 99be3179a4 HDDS-10946. Test combinations of rename and rewrite (#6823)
99be3179a4 is described below

commit 99be3179a4e891a2e8b3fbb66857e9d3ba931202
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Jun 21 07:27:33 2024 +0200

    HDDS-10946. Test combinations of rename and rewrite (#6823)
---
 .../client/rpc/TestOzoneRpcClientAbstract.java     | 49 ++++++++++++++++++++++
 1 file changed, 49 insertions(+)

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 94ce66dbf9..f53fad3bdc 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
@@ -1133,6 +1133,43 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
     assertEquals(overwriteDetails.getGeneration(), 
actualKeyDetails.getGeneration());
   }
 
+  @ParameterizedTest
+  @EnumSource
+  void rewriteAfterRename(BucketLayout layout) throws IOException {
+    OzoneBucket bucket = createBucket(layout);
+    OzoneKeyDetails keyDetails = createTestKey(bucket);
+    String newKeyName = "rewriteAfterRename-" + layout;
+
+    bucket.renameKey(keyDetails.getName(), newKeyName);
+    OzoneKeyDetails renamedKeyDetails = bucket.getKey(newKeyName);
+    OmKeyArgs keyArgs = toOmKeyArgs(renamedKeyDetails);
+    OmKeyInfo keyInfo = ozoneManager.lookupKey(keyArgs);
+
+    final byte[] rewriteContent = "rewrite".getBytes(UTF_8);
+    rewriteKey(bucket, renamedKeyDetails, rewriteContent);
+
+    OzoneKeyDetails actualKeyDetails = assertKeyContent(bucket, newKeyName, 
rewriteContent);
+    assertMetadataUnchanged(keyDetails, actualKeyDetails);
+    assertMetadataAfterRewrite(keyInfo, ozoneManager.lookupKey(keyArgs));
+  }
+
+  @ParameterizedTest
+  @EnumSource
+  void renameAfterRewrite(BucketLayout layout) throws IOException {
+    OzoneBucket bucket = createBucket(layout);
+    OzoneKeyDetails keyDetails = createTestKey(bucket);
+    final byte[] rewriteContent = "rewrite".getBytes(UTF_8);
+    rewriteKey(bucket, keyDetails, rewriteContent);
+    OmKeyInfo keyInfo = ozoneManager.lookupKey(toOmKeyArgs(keyDetails));
+
+    String newKeyName = "renameAfterRewrite-" + layout;
+    bucket.renameKey(keyDetails.getName(), newKeyName);
+
+    OzoneKeyDetails actualKeyDetails = assertKeyContent(bucket, newKeyName, 
rewriteContent);
+    assertMetadataUnchanged(keyDetails, actualKeyDetails);
+    assertMetadataAfterRewrite(keyInfo, 
ozoneManager.lookupKey(toOmKeyArgs(actualKeyDetails)));
+  }
+
   @ParameterizedTest
   @EnumSource
   void rewriteFailsDueToOutdatedGeneration(BucketLayout layout) throws 
IOException {
@@ -1202,6 +1239,18 @@ public abstract class TestOzoneRpcClientAbstract extends 
OzoneTestBase {
     assertThat(e).hasMessageContaining("not found");
   }
 
+  @ParameterizedTest
+  @EnumSource
+  void cannotRewriteRenamedKey(BucketLayout layout) throws IOException {
+    OzoneBucket bucket = createBucket(layout);
+    OzoneKeyDetails keyDetails = createTestKey(bucket);
+    bucket.renameKey(keyDetails.getName(), "newKeyName-" + layout.name());
+
+    OMException e = assertThrows(OMException.class, () -> rewriteKey(bucket, 
keyDetails, "rewrite".getBytes(UTF_8)));
+    assertEquals(KEY_NOT_FOUND, e.getResult());
+    assertThat(e).hasMessageContaining("not found");
+  }
+
   private static void rewriteKey(
       OzoneBucket bucket, OzoneKeyDetails keyDetails, byte[] newContent
   ) throws IOException {


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

Reply via email to