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

(ozone) branch master updated: HDDS-16993. Check UpdateID in OMKeyRenameRequest for legacy bucket (#11530)

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

ChenSammi 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 916aa1d9949 HDDS-16993. Check UpdateID in OMKeyRenameRequest for legacy bucket (#11530)
916aa1d9949 is described below

commit 916aa1d9949cbb10f2750a40c8704340893131a2
Author: Sammi Chen <sa...@apache.org>
AuthorDate: Fri Oct 16 09:57:52 2026 +0800

    HDDS-16993. Check UpdateID in OMKeyRenameRequest for legacy bucket (#11530)
---
 .../ozone/om/request/key/OMKeyRenameRequest.java   |  6 ++++++
 .../om/request/key/TestOMKeyRenameRequest.java     | 23 ++++++++++++++++++++
 .../request/key/TestOMKeyRenameRequestWithFSO.java | 25 ++++++++++++++++++++++
 3 files changed, 54 insertions(+)

diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
index 9c46eba8f46..4282181f639 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
@@ -176,6 +176,12 @@ public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager, Execut
         throw new OMException("Key not found " + fromKey, KEY_NOT_FOUND);
       }
 
+      if (renameKeyRequest.hasUpdateID() && fromKeyValue.getUpdateID() != renameKeyRequest.getUpdateID()) {
+        throw new OMException("UpdateID does not match. Key: " + fromKeyName +
+            ", Expected UpdateID: " + fromKeyValue.getUpdateID() +
+            ", Given UpdateID: " + renameKeyRequest.getUpdateID(), OMException.ResultCodes.UPDATE_ID_NOT_MATCH);
+      }
+
       fromKeyValue = fromKeyValue.toBuilder()
           .setUpdateID(trxnLogIndex)
           .build();
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java
index 8d89f2157d4..3565a2d05b6 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java
@@ -91,6 +91,29 @@ public void testValidateAndUpdateCache() throws Exception {
     assertModificationTime(keyArgs.getModificationTime());
   }
 
+  @Test
+  public void testValidateAndUpdateCacheWithUpdateID() throws Exception {
+    String dbFromKey = addKeyToTable(fromKeyInfo);
+    long updateID = fromKeyInfo.getUpdateID();
+    OMRequest omRequest = createRenameKeyRequest(volumeName, bucketName, fromKeyName, toKeyName);
+
+    OMRequest mismatchRequest = doPreExecute(omRequest.toBuilder().setRenameKeyRequest(
+        omRequest.getRenameKeyRequest().toBuilder().setUpdateID(updateID + 1)).build());
+    OMClientResponse response = getOMKeyRenameRequest(mismatchRequest).validateAndUpdateCache(ozoneManager, 100L);
+
+    assertEquals(OzoneManagerProtocolProtos.Status.UPDATE_ID_NOT_MATCH, response.getOMResponse().getStatus());
+    assertNotNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbFromKey));
+    assertNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbToKey));
+
+    OMRequest matchRequest = doPreExecute(omRequest.toBuilder().setRenameKeyRequest(
+        omRequest.getRenameKeyRequest().toBuilder().setUpdateID(updateID)).build());
+    response = getOMKeyRenameRequest(matchRequest).validateAndUpdateCache(ozoneManager, 101L);
+
+    assertEquals(OzoneManagerProtocolProtos.Status.OK, response.getOMResponse().getStatus());
+    assertNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbFromKey));
+    assertNotNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbToKey));
+  }
+
   @Test
   public void testValidateAndUpdateCacheWithKeyNotFound() throws Exception {
     OMRequest omRequest = createRenameKeyRequest(
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 7986e3ceeeb..abaf1fa1313 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
@@ -128,6 +128,31 @@ public void testRenameDirectoryToItself() throws Exception {
     assertEquals(OzoneManagerProtocolProtos.Status.KEY_ALREADY_EXISTS, response.getOMResponse().getStatus());
   }
 
+  @Override
+  @Test
+  public void testValidateAndUpdateCacheWithUpdateID() throws Exception {
+    String dbFromKey = OMRequestTestUtils.addFileToKeyTable(false, false,
+        fromKeyInfo.getFileName(), fromKeyInfo, clientID, txnLogId, omMetadataManager);
+    long updateID = fromKeyInfo.getUpdateID();
+    OMRequest omRequest = createRenameKeyRequest(volumeName, bucketName, fromKeyName, toKeyName);
+
+    OMRequest mismatchRequest = doPreExecute(omRequest.toBuilder().setRenameKeyRequest(
+        omRequest.getRenameKeyRequest().toBuilder().setUpdateID(updateID + 1)).build());
+    OMClientResponse response = getOMKeyRenameRequest(mismatchRequest).validateAndUpdateCache(ozoneManager, 100L);
+
+    assertEquals(OzoneManagerProtocolProtos.Status.UPDATE_ID_NOT_MATCH, response.getOMResponse().getStatus());
+    assertNotNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbFromKey));
+    assertNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbToKey));
+
+    OMRequest matchRequest = doPreExecute(omRequest.toBuilder().setRenameKeyRequest(
+        omRequest.getRenameKeyRequest().toBuilder().setUpdateID(updateID)).build());
+    response = getOMKeyRenameRequest(matchRequest).validateAndUpdateCache(ozoneManager, 101L);
+
+    assertEquals(OzoneManagerProtocolProtos.Status.OK, response.getOMResponse().getStatus());
+    assertNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbFromKey));
+    assertNotNull(omMetadataManager.getKeyTable(getBucketLayout()).get(dbToKey));
+  }
+
   @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