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

chungen0126 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 9eb3d1b1294 HDDS-16212. Avoid the per-group list copy in Recon 
ContainerKeyMapperHelper (#11058)
9eb3d1b1294 is described below

commit 9eb3d1b1294ed4158030a204375d6169bb9e75e8
Author: KUAN-HAO HUANG <[email protected]>
AuthorDate: Mon Aug 24 05:08:12 2026 +0800

    HDDS-16212. Avoid the per-group list copy in Recon ContainerKeyMapperHelper 
(#11058)
---
 .../recon/tasks/ContainerKeyMapperHelper.java      | 86 +++++++++++-----------
 1 file changed, 45 insertions(+), 41 deletions(-)

diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperHelper.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperHelper.java
index 488cffae93b..9da69212f03 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperHelper.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ContainerKeyMapperHelper.java
@@ -319,37 +319,39 @@ private static void handlePutOMKeyEvent(String key, 
OmKeyInfo omKeyInfo,
     long containerCountToIncrement = 0;
     for (OmKeyLocationInfoGroup omKeyLocationInfoGroup : 
omKeyInfo.getKeyLocationVersions()) {
       long keyVersion = omKeyLocationInfoGroup.getVersion();
-      for (OmKeyLocationInfo omKeyLocationInfo : 
omKeyLocationInfoGroup.createLocationList()) {
-        long containerId = omKeyLocationInfo.getContainerID();
-        ContainerKeyPrefix containerKeyPrefix = 
ContainerKeyPrefix.get(containerId, key, keyVersion);
-        if 
(reconContainerMetadataManager.getCountForContainerKeyPrefix(containerKeyPrefix)
 == 0 &&
-            !containerKeyMap.containsKey(containerKeyPrefix)) {
-          // Save on writes. No need to save same container-key prefix
-          // mapping again.
-          containerKeyMap.put(containerKeyPrefix, 1);
-          // Remove the container-key prefix from the deleted list if we
-          // previously deleted it in this batch (and now we add it again)
-          deletedContainerKeyList.remove(containerKeyPrefix);
-
-          // check if container already exists and
-          // increment the count of containers if it does not exist
-          if (!reconContainerMetadataManager.doesContainerExists(containerId) 
&&
-              !containerKeyCountMap.containsKey(containerId)) {
-            containerCountToIncrement++;
-          }
+      for (List<OmKeyLocationInfo> locationList : 
omKeyLocationInfoGroup.getLocationLists()) {
+        for (OmKeyLocationInfo omKeyLocationInfo : locationList) {
+          long containerId = omKeyLocationInfo.getContainerID();
+          ContainerKeyPrefix containerKeyPrefix = 
ContainerKeyPrefix.get(containerId, key, keyVersion);
+          if 
(reconContainerMetadataManager.getCountForContainerKeyPrefix(containerKeyPrefix)
 == 0 &&
+              !containerKeyMap.containsKey(containerKeyPrefix)) {
+            // Save on writes. No need to save same container-key prefix
+            // mapping again.
+            containerKeyMap.put(containerKeyPrefix, 1);
+            // Remove the container-key prefix from the deleted list if we
+            // previously deleted it in this batch (and now we add it again)
+            deletedContainerKeyList.remove(containerKeyPrefix);
+
+            // check if container already exists and
+            // increment the count of containers if it does not exist
+            if 
(!reconContainerMetadataManager.doesContainerExists(containerId) &&
+                !containerKeyCountMap.containsKey(containerId)) {
+              containerCountToIncrement++;
+            }
 
-          // update the count of keys for the given containerID
-          long keyCount;
-          if (containerKeyCountMap.containsKey(containerId)) {
-            keyCount = containerKeyCountMap.get(containerId);
-          } else {
-            keyCount = 
reconContainerMetadataManager.getKeyCountForContainer(containerId);
-          }
+            // update the count of keys for the given containerID
+            long keyCount;
+            if (containerKeyCountMap.containsKey(containerId)) {
+              keyCount = containerKeyCountMap.get(containerId);
+            } else {
+              keyCount = 
reconContainerMetadataManager.getKeyCountForContainer(containerId);
+            }
 
-          // increment the count and update containerKeyCount.
-          // keyCount will be 0 if containerID is not found. So, there is no
-          // need to initialize keyCount for the first time.
-          containerKeyCountMap.put(containerId, ++keyCount);
+            // increment the count and update containerKeyCount.
+            // keyCount will be 0 if containerID is not found. So, there is no
+            // need to initialize keyCount for the first time.
+            containerKeyCountMap.put(containerId, ++keyCount);
+          }
         }
       }
     }
@@ -490,18 +492,20 @@ public static void handleKeyReprocess(String key,
 
     for (OmKeyLocationInfoGroup omKeyLocationInfoGroup : 
omKeyInfo.getKeyLocationVersions()) {
       long keyVersion = omKeyLocationInfoGroup.getVersion();
-      for (OmKeyLocationInfo omKeyLocationInfo : 
omKeyLocationInfoGroup.createLocationList()) {
-        long containerId = omKeyLocationInfo.getContainerID();
-        ContainerKeyPrefix containerKeyPrefix = 
ContainerKeyPrefix.get(containerId, key, keyVersion);
-
-        // During reprocess, tables are empty so skip DB lookup - just check 
in-memory map
-        if (!localContainerKeyMap.containsKey(containerKeyPrefix)) {
-          // Save on writes. No need to save same container-key prefix mapping 
again.
-          localContainerKeyMap.put(containerKeyPrefix, 1);
-
-          // Thread-safe increment using computeIfAbsent (cross-task safe: FSO 
+ OBS)
-          sharedContainerKeyCountMap.computeIfAbsent(containerId, k -> new 
AtomicLong(0))
-              .incrementAndGet();
+      for (List<OmKeyLocationInfo> locationList : 
omKeyLocationInfoGroup.getLocationLists()) {
+        for (OmKeyLocationInfo omKeyLocationInfo : locationList) {
+          long containerId = omKeyLocationInfo.getContainerID();
+          ContainerKeyPrefix containerKeyPrefix = 
ContainerKeyPrefix.get(containerId, key, keyVersion);
+
+          // During reprocess, tables are empty so skip DB lookup - just check 
in-memory map
+          if (!localContainerKeyMap.containsKey(containerKeyPrefix)) {
+            // Save on writes. No need to save same container-key prefix 
mapping again.
+            localContainerKeyMap.put(containerKeyPrefix, 1);
+
+            // Thread-safe increment using computeIfAbsent (cross-task safe: 
FSO + OBS)
+            sharedContainerKeyCountMap.computeIfAbsent(containerId, k -> new 
AtomicLong(0))
+                .incrementAndGet();
+          }
         }
       }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to