You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ad...@apache.org on 2026/10/08 11:03:10 UTC

(ozone) branch master updated: HDDS-16779. FSO rename of a file to itself should be a no-op (#11440)

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

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 1d35834a4de HDDS-16779. FSO rename of a file to itself should be a no-op (#11440)
1d35834a4de is described below

commit 1d35834a4de2201dc679746a02952f662443a2e0
Author: Siyao Meng <50...@users.noreply.github.com>
AuthorDate: Thu Oct 8 04:03:01 2026 -0700

    HDDS-16779. FSO rename of a file to itself should be a no-op (#11440)
    
    Co-authored-by: Claude Opus 5.5 <no...@anthropic.com>
---
 .../om/request/key/OMKeyRenameRequestWithFSO.java  |  5 +++-
 .../request/key/TestOMKeyRenameRequestWithFSO.java | 29 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
index 028fbf60509..39d3dc0af4c 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequestWithFSO.java
@@ -44,6 +44,7 @@
 import org.apache.hadoop.ozone.om.helpers.OzoneFileStatus;
 import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
 import org.apache.hadoop.ozone.om.request.util.OmResponseUtil;
+import org.apache.hadoop.ozone.om.response.DummyOMClientResponse;
 import org.apache.hadoop.ozone.om.response.OMClientResponse;
 import org.apache.hadoop.ozone.om.response.key.OMKeyRenameResponseWithFSO;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
@@ -156,8 +157,10 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
           // case-3) If src == destin then check source and destin of same type
           // (a) If dst is a file then return true.
           // (b) Otherwise throws exception.
-          // TODO: Discuss do we need to throw exception for file as well.
           if (toKeyFileStatus.isFile()) {
+            // Nothing to rename, so reply with a response that changes no table.
+            omClientResponse = new DummyOMClientResponse(
+                omResponse.setRenameKeyResponse(RenameKeyResponse.newBuilder()).build());
             result = Result.SUCCESS;
           } else {
             throw new OMException("Key already exists " + toKeyName,
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
index e79f55a53dd..89814aacecd 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequestWithFSO.java
@@ -27,6 +27,7 @@
 import java.util.UUID;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.utils.db.BatchOperation;
 import org.apache.hadoop.ozone.OmUtils;
 import org.apache.hadoop.ozone.OzoneConsts;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
@@ -97,6 +98,34 @@ public void testRenameOpenFile() throws Exception {
         response.getOMResponse().getStatus());
   }
 
+  @Test
+  public void testRenameFileToItself() throws Exception {
+    String dbFromKey = OMRequestTestUtils.addFileToKeyTable(false, false, fromKeyInfo.getFileName(), fromKeyInfo,
+        clientID, txnLogId, omMetadataManager);
+    OMRequest omRequest = doPreExecute(createRenameKeyRequest(volumeName, bucketName, fromKeyName, fromKeyName));
+
+    OMClientResponse response = getOMKeyRenameRequest(omRequest).validateAndUpdateCache(ozoneManager, 100L);
+
+    assertEquals(OzoneManagerProtocolProtos.Status.OK, response.getOMResponse().getStatus());
+    // The response must be safe to flush and must leave the file as it was.
+    try (BatchOperation batchOperation = omMetadataManager.getStore().initBatchOperation()) {
+      response.checkAndUpdateDB(omMetadataManager, batchOperation);
+      omMetadataManager.getStore().commitBatchOperation(batchOperation);
+    }
+    assertThat(omMetadataManager.getKeyTable(getBucketLayout()).get(dbFromKey).getUpdateID())
+        .isEqualTo(fromKeyInfo.getUpdateID());
+  }
+
+  @Test
+  public void testRenameDirectoryToItself() throws Exception {
+    String dirName = fromKeyParentInfo.getKeyName();
+    OMRequest omRequest = doPreExecute(createRenameKeyRequest(volumeName, bucketName, dirName, dirName));
+
+    OMClientResponse response = getOMKeyRenameRequest(omRequest).validateAndUpdateCache(ozoneManager, 100L);
+
+    assertEquals(OzoneManagerProtocolProtos.Status.KEY_ALREADY_EXISTS, response.getOMResponse().getStatus());
+  }
+
   @Override
   @Test
   public void testValidateAndUpdateCacheWithToKeyInvalid() throws Exception {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org