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