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 94ce66dbf9a0..f53fad3bdc27 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 @@ void overwriteAfterRewrite(BucketLayout layout) throws IOException { 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 @@ void cannotRewriteDeletedKey(BucketLayout layout) throws IOException { 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 {