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