From 5a8ff61218fca36357d051da2045aad9fa31d8ea Mon Sep 17 00:00:00 2001 From: arafat Date: Mon, 26 Feb 2024 13:53:18 +0530 Subject: [PATCH 1/5] HDDS-10324. Metadata are not updated when keys are overwritten. --- .../ozone/om/request/key/OMKeyRequest.java | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java index 100c2d842f22..dd7306ecf85d 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java @@ -23,14 +23,7 @@ import java.io.IOException; import java.security.GeneralSecurityException; import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; import com.google.common.annotations.VisibleForTesting; @@ -39,6 +32,7 @@ import org.apache.hadoop.hdds.client.ContainerBlockID; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationConfig; +import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos; import org.apache.hadoop.hdds.utils.db.cache.CacheKey; import org.apache.hadoop.hdds.utils.db.cache.CacheValue; import org.apache.hadoop.ozone.OmUtils; @@ -68,6 +62,7 @@ import org.apache.hadoop.ozone.security.acl.OzoneObj; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.hadoop.hdds.protocol.proto.HddsProtos.KeyValue; import org.apache.hadoop.crypto.key.KeyProviderCryptoExtension .EncryptedKeyVersion; @@ -775,6 +770,16 @@ protected OmKeyInfo prepareFileInfo( dbKeyInfo.setModificationTime(keyArgs.getModificationTime()); dbKeyInfo.setUpdateID(transactionLogIndex, isRatisEnabled); dbKeyInfo.setReplicationConfig(replicationConfig); + + // Construct new metadata map from KeyArgs + List keyValueList = keyArgs.getMetadataList(); + Map newMetadata = new HashMap<>(); + for (KeyValue keyValue : keyValueList) { + newMetadata.put(keyValue.getKey(), keyValue.getValue()); + } + + updateMetadata(dbKeyInfo, newMetadata); + return dbKeyInfo; } @@ -953,6 +958,27 @@ protected OmKeyInfo wrapUncommittedBlocksAsPseudoKey( return pseudoKeyInfo; } + /** + * Updates the metadata of an OmKeyInfo object with new metadata. + * + * @param dbKeyInfo The existing OmKeyInfo object whose metadata is to be updated. + * @param newMetadata The new metadata map to update the existing metadata with. + */ + protected void updateMetadata(OmKeyInfo dbKeyInfo, + Map newMetadata) { + if (dbKeyInfo == null || newMetadata == null || newMetadata.isEmpty()) { + return; + } + Map existingMetadata = dbKeyInfo.getMetadata(); + // Update existing metadata with new entries or values from newMetadata + for (Map.Entry entry : newMetadata.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + // Update or add new metadata entry + existingMetadata.put(key, value); + } + } + /** * Remove blocks in-place from keysToBeFiltered that exist in referenceKey. *

From dcb2ded68d075675d60d82ca5de87b3efd1c5145 Mon Sep 17 00:00:00 2001 From: arafat Date: Tue, 27 Feb 2024 02:25:04 +0530 Subject: [PATCH 2/5] Added unit tests --- .../ozone/om/request/key/OMKeyRequest.java | 11 +- .../request/key/TestOMKeyCreateRequest.java | 193 +++++++++++++++++- 2 files changed, 194 insertions(+), 10 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java index dd7306ecf85d..7ccd3d523dd6 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java @@ -23,7 +23,15 @@ import java.io.IOException; import java.security.GeneralSecurityException; import java.security.PrivilegedExceptionAction; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.HashMap; import java.util.stream.Collectors; import com.google.common.annotations.VisibleForTesting; @@ -32,7 +40,6 @@ import org.apache.hadoop.hdds.client.ContainerBlockID; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationConfig; -import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos; import org.apache.hadoop.hdds.utils.db.cache.CacheKey; import org.apache.hadoop.hdds.utils.db.cache.CacheValue; import org.apache.hadoop.ozone.OmUtils; diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java index 5d79e7771520..abd945f90695 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java @@ -25,10 +25,11 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; import java.util.Map; +import java.util.Collections; import java.util.HashMap; +import java.util.UUID; +import java.util.stream.Collectors; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.hdds.client.RatisReplicationConfig; @@ -41,14 +42,16 @@ import org.apache.hadoop.ozone.om.exceptions.OMException; import org.apache.hadoop.ozone.om.helpers.BucketLayout; import org.apache.hadoop.ozone.om.helpers.OmBucketInfo; + +import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; +import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo; import org.apache.hadoop.ozone.om.lock.OzoneLockProvider; import org.apache.hadoop.ozone.om.request.OMRequestTestUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.apache.hadoop.hdds.protocol.proto.HddsProtos.KeyValue; -import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; -import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo; import org.apache.hadoop.ozone.om.response.OMClientResponse; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos @@ -66,6 +69,7 @@ import static org.apache.hadoop.ozone.OzoneConsts.OM_SNAPSHOT_INDICATOR; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM_PATHS; import static org.apache.hadoop.ozone.om.request.OMRequestTestUtils.addVolumeAndBucketToDB; +import static org.apache.hadoop.ozone.om.request.OMRequestTestUtils.createOmKeyInfo; import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.NOT_A_FILE; import static org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.OK; import static org.assertj.core.api.Assertions.assertThat; @@ -464,6 +468,149 @@ public void testValidateAndUpdateCacheWithInvalidPath( assertNull(omKeyInfo); } + + @ParameterizedTest + @MethodSource("data") + public void testOverwritingExistingMetadata( + boolean setKeyPathLock, boolean setFileSystemPaths) throws Exception { + when(ozoneManager.getOzoneLockProvider()).thenReturn( + new OzoneLockProvider(setKeyPathLock, setFileSystemPaths)); + + addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager, + getBucketLayout()); + + Map initialMetadata = + Collections.singletonMap("initialKey", "initialValue"); + OMRequest initialRequest = + createKeyRequest(false, 0, keyName, initialMetadata); + OMKeyCreateRequest initialOmKeyCreateRequest = + new OMKeyCreateRequest(initialRequest, BucketLayout.OBJECT_STORE); + OMClientResponse initialResponse = + initialOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L); + verifyMetadataInResponse(initialResponse, initialMetadata); + + // We have to add the key to the key table, as validateAndUpdateCache only + // updates the cache and not the DB. + OmKeyInfo keyInfo = createOmKeyInfo(volumeName, bucketName, keyName, + replicationConfig).build(); + keyInfo.setMetadata(initialMetadata); + omMetadataManager.getKeyTable(initialOmKeyCreateRequest.getBucketLayout()) + .put(getOzoneKey(), keyInfo); + + Map updatedMetadata = + Collections.singletonMap("initialKey", "updatedValue"); + OMRequest updatedRequest = + createKeyRequest(false, 0, keyName, updatedMetadata); + OMKeyCreateRequest updatedOmKeyCreateRequest = + new OMKeyCreateRequest(updatedRequest, BucketLayout.OBJECT_STORE); + + OMClientResponse updatedResponse = + updatedOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 101L); + verifyMetadataInResponse(updatedResponse, updatedMetadata); + } + + @ParameterizedTest + @MethodSource("data") + public void testAddingNewMetadataEntries( + boolean setKeyPathLock, boolean setFileSystemPaths) throws Exception { + when(ozoneManager.getOzoneLockProvider()).thenReturn( + new OzoneLockProvider(setKeyPathLock, setFileSystemPaths)); + + addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager, + getBucketLayout()); + + Map initialMetadata = + Collections.singletonMap("initialKey", "initialValue"); + OMRequest initialRequest = + createKeyRequest(false, 0, keyName, initialMetadata); + OMKeyCreateRequest initialOmKeyCreateRequest = + new OMKeyCreateRequest(initialRequest, BucketLayout.OBJECT_STORE); + + // Building the OmKeyInfo object with initial metadata and adding to table + // as validateAndUpdateCache only updates the cache and not the DB. + OmKeyInfo keyInfo = createOmKeyInfo(volumeName, bucketName, keyName, + replicationConfig).build(); + keyInfo.setMetadata(initialMetadata); + omMetadataManager.getKeyTable(initialOmKeyCreateRequest.getBucketLayout()) + .put(getOzoneKey(), keyInfo); + + Map newMetadata = new HashMap<>(); + newMetadata.put("newKey", "newValue"); // Add new metadata + + OMRequest newRequest = createKeyRequest(false, 0, keyName, newMetadata); + OMKeyCreateRequest newOmKeyCreateRequest = + new OMKeyCreateRequest(newRequest, BucketLayout.OBJECT_STORE); + + OMClientResponse newResponse = + newOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 102L); + // The previous metadata should be present in the response + newMetadata.put("initialKey", "initialValue"); + verifyMetadataInResponse(newResponse, newMetadata); + } + + @ParameterizedTest + @MethodSource("data") + public void testCreationWithoutMetadataFollowedByOverwriteWithMetadata( + boolean setKeyPathLock, boolean setFileSystemPaths) throws Exception { + when(ozoneManager.getOzoneLockProvider()).thenReturn( + new OzoneLockProvider(setKeyPathLock, setFileSystemPaths)); + addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager, + getBucketLayout()); + + // Create the key request without any initial metadata + OMRequest createRequestWithoutMetadata = createKeyRequest(false, 0, keyName, + null); // Passing 'null' for metadata + OMKeyCreateRequest createOmKeyCreateRequest = + new OMKeyCreateRequest(createRequestWithoutMetadata, + BucketLayout.OBJECT_STORE); + + // Perform the create operation without any metadata + OMClientResponse createResponse = + createOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L); + // Verify that no metadata exists in the response + assertTrue( + createResponse.getOMResponse().getCreateKeyResponse().getKeyInfo() + .getMetadataList().isEmpty()); + + OmKeyInfo keyInfo = createOmKeyInfo(volumeName, bucketName, keyName, + replicationConfig).build(); + omMetadataManager.getKeyTable(createOmKeyCreateRequest.getBucketLayout()) + .put(getOzoneKey(), keyInfo); + + // Define new metadata for the overwrite operation + Map overwriteMetadata = new HashMap<>(); + overwriteMetadata.put("newKey", "newValue"); + + // Overwrite the previously created key with new metadata + OMRequest overwriteRequestWithMetadata = + createKeyRequest(false, 0, keyName, overwriteMetadata); + OMKeyCreateRequest overwriteOmKeyCreateRequest = + new OMKeyCreateRequest(overwriteRequestWithMetadata, + BucketLayout.OBJECT_STORE); + + // Perform the overwrite operation and capture the response + OMClientResponse overwriteResponse = + overwriteOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 101L); + // Verify the new metadata is correctly applied in the response + verifyMetadataInResponse(overwriteResponse, overwriteMetadata); + } + + + private void verifyMetadataInResponse(OMClientResponse response, + Map expectedMetadata) { + // Extract metadata from the response + List metadataList = + response.getOMResponse().getCreateKeyResponse().getKeyInfo() + .getMetadataList(); + assertEquals(expectedMetadata.size(), metadataList.size(), + "Metadata size mismatch."); + metadataList.forEach(kv -> { + String expectedValue = expectedMetadata.get(kv.getKey()); + assertEquals(expectedValue, kv.getValue(), + "Metadata value mismatch for key: " + kv.getKey()); + }); + } + /** * This method calls preExecute and verify the modified request. * @param originalOMRequest @@ -543,25 +690,55 @@ protected OMRequest createKeyRequest(boolean isMultipartKey, int partNumber) { private OMRequest createKeyRequest(boolean isMultipartKey, int partNumber, String keyName) { + return createKeyRequest(isMultipartKey, partNumber, keyName, null); + } + /** + * Create OMRequest which encapsulates a CreateKeyRequest, optionally + * with metadata. + * + * @param isMultipartKey Indicates if the key is part of a multipart upload. + * @param partNumber The part number for multipart uploads, ignored if + * isMultipartKey is false. + * @param keyName The name of the key to create or update. + * @param metadata Optional metadata for the key. Pass null or an empty + * map if no metadata is to be set. + * @return OMRequest configured with the provided parameters. + */ + protected OMRequest createKeyRequest(boolean isMultipartKey, int partNumber, + String keyName, + Map metadata) { KeyArgs.Builder keyArgs = KeyArgs.newBuilder() - .setVolumeName(volumeName).setBucketName(bucketName) - .setKeyName(keyName).setIsMultipartKey(isMultipartKey) - .setFactor(((RatisReplicationConfig) replicationConfig).getReplicationFactor()) + .setVolumeName(volumeName) + .setBucketName(bucketName) + .setKeyName(keyName) + .setIsMultipartKey(isMultipartKey) + .setFactor( + ((RatisReplicationConfig) replicationConfig).getReplicationFactor()) .setType(replicationConfig.getReplicationType()) .setLatestVersionLocation(true); + // Configure for multipart upload, if applicable if (isMultipartKey) { keyArgs.setDataSize(dataSize).setMultipartNumber(partNumber); } + // Include metadata, if provided + if (metadata != null && !metadata.isEmpty()) { + metadata.forEach((key, value) -> keyArgs.addMetadata(KeyValue.newBuilder() + .setKey(key) + .setValue(value) + .build())); + } + OzoneManagerProtocolProtos.CreateKeyRequest createKeyRequest = CreateKeyRequest.newBuilder().setKeyArgs(keyArgs).build(); return OMRequest.newBuilder() .setCmdType(OzoneManagerProtocolProtos.Type.CreateKey) .setClientId(UUID.randomUUID().toString()) - .setCreateKeyRequest(createKeyRequest).build(); + .setCreateKeyRequest(createKeyRequest) + .build(); } private OMRequest createKeyRequest( From f80c5c07ed70d2bf1abb2294ed0d83b19dc6148f Mon Sep 17 00:00:00 2001 From: arafat Date: Tue, 27 Feb 2024 12:57:56 +0530 Subject: [PATCH 3/5] Added review changes and also fixed failing unit tests --- .../ozone/om/request/key/OMKeyRequest.java | 16 ++---- .../request/key/TestOMKeyCreateRequest.java | 49 ++----------------- 2 files changed, 9 insertions(+), 56 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java index 7ccd3d523dd6..34613c3d474f 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java @@ -31,7 +31,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.HashMap; import java.util.stream.Collectors; import com.google.common.annotations.VisibleForTesting; @@ -69,7 +68,6 @@ import org.apache.hadoop.ozone.security.acl.OzoneObj; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.hadoop.hdds.protocol.proto.HddsProtos.KeyValue; import org.apache.hadoop.crypto.key.KeyProviderCryptoExtension .EncryptedKeyVersion; @@ -778,15 +776,11 @@ protected OmKeyInfo prepareFileInfo( dbKeyInfo.setUpdateID(transactionLogIndex, isRatisEnabled); dbKeyInfo.setReplicationConfig(replicationConfig); - // Construct new metadata map from KeyArgs - List keyValueList = keyArgs.getMetadataList(); - Map newMetadata = new HashMap<>(); - for (KeyValue keyValue : keyValueList) { - newMetadata.put(keyValue.getKey(), keyValue.getValue()); - } - - updateMetadata(dbKeyInfo, newMetadata); - + // Construct a new metadata map from KeyArgs. + // Clear the old one when the key is overwritten. + dbKeyInfo.getMetadata().clear(); + dbKeyInfo.getMetadata().putAll(KeyValueUtil.getFromProtobuf( + keyArgs.getMetadataList())); return dbKeyInfo; } diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java index abd945f90695..72409cc3a8de 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java @@ -484,7 +484,7 @@ public void testOverwritingExistingMetadata( OMRequest initialRequest = createKeyRequest(false, 0, keyName, initialMetadata); OMKeyCreateRequest initialOmKeyCreateRequest = - new OMKeyCreateRequest(initialRequest, BucketLayout.OBJECT_STORE); + new OMKeyCreateRequest(initialRequest, getBucketLayout()); OMClientResponse initialResponse = initialOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L); verifyMetadataInResponse(initialResponse, initialMetadata); @@ -502,52 +502,13 @@ public void testOverwritingExistingMetadata( OMRequest updatedRequest = createKeyRequest(false, 0, keyName, updatedMetadata); OMKeyCreateRequest updatedOmKeyCreateRequest = - new OMKeyCreateRequest(updatedRequest, BucketLayout.OBJECT_STORE); + new OMKeyCreateRequest(updatedRequest, getBucketLayout()); OMClientResponse updatedResponse = updatedOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 101L); verifyMetadataInResponse(updatedResponse, updatedMetadata); } - @ParameterizedTest - @MethodSource("data") - public void testAddingNewMetadataEntries( - boolean setKeyPathLock, boolean setFileSystemPaths) throws Exception { - when(ozoneManager.getOzoneLockProvider()).thenReturn( - new OzoneLockProvider(setKeyPathLock, setFileSystemPaths)); - - addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager, - getBucketLayout()); - - Map initialMetadata = - Collections.singletonMap("initialKey", "initialValue"); - OMRequest initialRequest = - createKeyRequest(false, 0, keyName, initialMetadata); - OMKeyCreateRequest initialOmKeyCreateRequest = - new OMKeyCreateRequest(initialRequest, BucketLayout.OBJECT_STORE); - - // Building the OmKeyInfo object with initial metadata and adding to table - // as validateAndUpdateCache only updates the cache and not the DB. - OmKeyInfo keyInfo = createOmKeyInfo(volumeName, bucketName, keyName, - replicationConfig).build(); - keyInfo.setMetadata(initialMetadata); - omMetadataManager.getKeyTable(initialOmKeyCreateRequest.getBucketLayout()) - .put(getOzoneKey(), keyInfo); - - Map newMetadata = new HashMap<>(); - newMetadata.put("newKey", "newValue"); // Add new metadata - - OMRequest newRequest = createKeyRequest(false, 0, keyName, newMetadata); - OMKeyCreateRequest newOmKeyCreateRequest = - new OMKeyCreateRequest(newRequest, BucketLayout.OBJECT_STORE); - - OMClientResponse newResponse = - newOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 102L); - // The previous metadata should be present in the response - newMetadata.put("initialKey", "initialValue"); - verifyMetadataInResponse(newResponse, newMetadata); - } - @ParameterizedTest @MethodSource("data") public void testCreationWithoutMetadataFollowedByOverwriteWithMetadata( @@ -561,8 +522,7 @@ public void testCreationWithoutMetadataFollowedByOverwriteWithMetadata( OMRequest createRequestWithoutMetadata = createKeyRequest(false, 0, keyName, null); // Passing 'null' for metadata OMKeyCreateRequest createOmKeyCreateRequest = - new OMKeyCreateRequest(createRequestWithoutMetadata, - BucketLayout.OBJECT_STORE); + new OMKeyCreateRequest(createRequestWithoutMetadata, getBucketLayout()); // Perform the create operation without any metadata OMClientResponse createResponse = @@ -585,8 +545,7 @@ public void testCreationWithoutMetadataFollowedByOverwriteWithMetadata( OMRequest overwriteRequestWithMetadata = createKeyRequest(false, 0, keyName, overwriteMetadata); OMKeyCreateRequest overwriteOmKeyCreateRequest = - new OMKeyCreateRequest(overwriteRequestWithMetadata, - BucketLayout.OBJECT_STORE); + new OMKeyCreateRequest(overwriteRequestWithMetadata, getBucketLayout()); // Perform the overwrite operation and capture the response OMClientResponse overwriteResponse = From d2ab46dd6e8b8bea9a6dd3070e90be246cc31578 Mon Sep 17 00:00:00 2001 From: arafat Date: Wed, 28 Feb 2024 13:38:48 +0530 Subject: [PATCH 4/5] Fixed review comments --- .../ozone/om/request/key/OMKeyRequest.java | 21 ------------------- .../request/key/TestOMKeyCreateRequest.java | 5 ++--- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java index 34613c3d474f..7e4e30316b85 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java @@ -959,27 +959,6 @@ protected OmKeyInfo wrapUncommittedBlocksAsPseudoKey( return pseudoKeyInfo; } - /** - * Updates the metadata of an OmKeyInfo object with new metadata. - * - * @param dbKeyInfo The existing OmKeyInfo object whose metadata is to be updated. - * @param newMetadata The new metadata map to update the existing metadata with. - */ - protected void updateMetadata(OmKeyInfo dbKeyInfo, - Map newMetadata) { - if (dbKeyInfo == null || newMetadata == null || newMetadata.isEmpty()) { - return; - } - Map existingMetadata = dbKeyInfo.getMetadata(); - // Update existing metadata with new entries or values from newMetadata - for (Map.Entry entry : newMetadata.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - // Update or add new metadata entry - existingMetadata.put(key, value); - } - } - /** * Remove blocks in-place from keysToBeFiltered that exist in referenceKey. *

diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java index 72409cc3a8de..9f5d17b2b306 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java @@ -528,7 +528,7 @@ public void testCreationWithoutMetadataFollowedByOverwriteWithMetadata( OMClientResponse createResponse = createOmKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L); // Verify that no metadata exists in the response - assertTrue( + assertThat( createResponse.getOMResponse().getCreateKeyResponse().getKeyInfo() .getMetadataList().isEmpty()); @@ -561,8 +561,7 @@ private void verifyMetadataInResponse(OMClientResponse response, List metadataList = response.getOMResponse().getCreateKeyResponse().getKeyInfo() .getMetadataList(); - assertEquals(expectedMetadata.size(), metadataList.size(), - "Metadata size mismatch."); + assertEquals(expectedMetadata.size(), metadataList.size()); metadataList.forEach(kv -> { String expectedValue = expectedMetadata.get(kv.getKey()); assertEquals(expectedValue, kv.getValue(), From 5d8d06f06719b93f27966c468b2ac2d8b9c54c44 Mon Sep 17 00:00:00 2001 From: arafat Date: Wed, 28 Feb 2024 13:58:11 +0530 Subject: [PATCH 5/5] Made final review changes --- .../hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java index 9f5d17b2b306..f61e947d2b1e 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java @@ -530,7 +530,7 @@ public void testCreationWithoutMetadataFollowedByOverwriteWithMetadata( // Verify that no metadata exists in the response assertThat( createResponse.getOMResponse().getCreateKeyResponse().getKeyInfo() - .getMetadataList().isEmpty()); + .getMetadataList()).isEmpty(); OmKeyInfo keyInfo = createOmKeyInfo(volumeName, bucketName, keyName, replicationConfig).build();