sumitagrawl commented on code in PR #9703:
URL: https://github.com/apache/ozone/pull/9703#discussion_r2839111507


##########
hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/om/ContainerToKeyMapping.java:
##########
@@ -251,6 +272,107 @@ private void processOBSKeys(Set<Long> containerIds, 
Map<Long, List<String>> cont
     }
   }
 
+  private void processOpenFiles(Set<Long> containerIds, Map<Long, 
List<String>> containerToOpenKeysMap,
+      Map<Long, Long> unreferencedCountMap, Map<Long, Pair<Long, String>> 
bucketVolMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
fileIterator =
+             openFileTable.iterator()) {
+      while (fileIterator.hasNext()) {
+        OmKeyInfo keyInfo = fileIterator.next().getValue();
+        addOpenKeyToContainerMap(keyInfo, containerIds, 
containerToOpenKeysMap, true,
+            bucketVolMap, unreferencedCountMap);
+      }
+    } catch (Exception e) {
+      err().println("Exception occurred reading openFileTable (FSO keys), " + 
e);
+    }
+  }
+
+  private void processOpenKeys(Set<Long> containerIds, Map<Long, List<String>> 
containerToOpenKeysMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
keyIterator =
+             openKeyTable.iterator()) {
+      while (keyIterator.hasNext()) {
+        OmKeyInfo keyInfo = keyIterator.next().getValue();
+        addOpenKeyToContainerMap(keyInfo, containerIds, 
containerToOpenKeysMap, false, null, null);
+      }
+    } catch (Exception e) {
+      err().println("Exception occurred reading openKeyTable (OBS keys), " + 
e);
+    }
+  }
+
+  private void addOpenKeyToContainerMap(OmKeyInfo keyInfo, Set<Long> 
containerIds,
+      Map<Long, List<String>> containerToOpenKeysMap, boolean isFSO,
+      Map<Long, Pair<Long, String>> bucketVolMap, Map<Long, Long> 
unreferencedCountMap) throws Exception {
+    // Find which containers this key uses
+    Set<Long> keyContainers = getKeyContainers(keyInfo, containerIds);
+
+    if (!keyContainers.isEmpty()) {
+      String keyPath;
+      if (onlyFileNames) {
+        keyPath = keyInfo.getKeyName();
+      } else {
+        if (isFSO) {
+          keyPath = reconstructFullPath(keyInfo, bucketVolMap, 
unreferencedCountMap, keyContainers);
+        } else {
+          keyPath = buildFullOBSPath(keyInfo);
+        }
+      }
+
+      if (keyPath != null) {
+        for (Long containerId : keyContainers) {
+          containerToOpenKeysMap.get(containerId).add(keyPath);
+        }
+      }
+    }
+  }
+
+  private void processMultipartUpload(Set<Long> containerIds, Map<Long, 
List<String>> containerToOpenKeysMap,
+      Map<Long, Long> unreferencedCountMap, Map<Long, Pair<Long, String>> 
bucketVolMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, 
OmMultipartKeyInfo>> mpuIterator =
+             multipartInfoTable.iterator()) {
+
+      while (mpuIterator.hasNext()) {
+        Table.KeyValue<String, OmMultipartKeyInfo> entry = mpuIterator.next();
+        OmMultipartKeyInfo mpuInfo = entry.getValue();
+
+        // Iterate through all uploaded parts
+        for (PartKeyInfo partKeyInfo : mpuInfo.getPartKeyInfoMap()) {
+          OmKeyInfo partKey = 
OmKeyInfo.getFromProtobuf(partKeyInfo.getPartKeyInfo());
+          Set<Long> keyContainers = getKeyContainers(partKey, containerIds);
+
+          if (!keyContainers.isEmpty()) {
+            // Check if this is FSO or OBS based on parentObjectID
+            // FSO keys have parentObjectID > 0 pointing to parent directory
+            // OBS keys have parentObjectID = 0
+            boolean isOBS = partKey.getParentObjectID() == 0;
+
+            String keyPath;
+            if (onlyFileNames) {
+              keyPath = partKey.getKeyName();
+            } else {
+              if (isOBS) {
+                keyPath = buildFullOBSPath(partKey);
+              } else {
+                keyPath = reconstructFullPath(partKey, bucketVolMap, 
unreferencedCountMap, keyContainers);

Review Comment:
   no need handle unreferencedCountMap for open key/file/mpu



##########
hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/om/ContainerToKeyMapping.java:
##########
@@ -251,6 +272,107 @@ private void processOBSKeys(Set<Long> containerIds, 
Map<Long, List<String>> cont
     }
   }
 
+  private void processOpenFiles(Set<Long> containerIds, Map<Long, 
List<String>> containerToOpenKeysMap,
+      Map<Long, Long> unreferencedCountMap, Map<Long, Pair<Long, String>> 
bucketVolMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
fileIterator =
+             openFileTable.iterator()) {
+      while (fileIterator.hasNext()) {
+        OmKeyInfo keyInfo = fileIterator.next().getValue();
+        addOpenKeyToContainerMap(keyInfo, containerIds, 
containerToOpenKeysMap, true,
+            bucketVolMap, unreferencedCountMap);
+      }
+    } catch (Exception e) {
+      err().println("Exception occurred reading openFileTable (FSO keys), " + 
e);
+    }
+  }
+
+  private void processOpenKeys(Set<Long> containerIds, Map<Long, List<String>> 
containerToOpenKeysMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
keyIterator =
+             openKeyTable.iterator()) {
+      while (keyIterator.hasNext()) {
+        OmKeyInfo keyInfo = keyIterator.next().getValue();
+        addOpenKeyToContainerMap(keyInfo, containerIds, 
containerToOpenKeysMap, false, null, null);
+      }
+    } catch (Exception e) {
+      err().println("Exception occurred reading openKeyTable (OBS keys), " + 
e);
+    }
+  }
+
+  private void addOpenKeyToContainerMap(OmKeyInfo keyInfo, Set<Long> 
containerIds,
+      Map<Long, List<String>> containerToOpenKeysMap, boolean isFSO,
+      Map<Long, Pair<Long, String>> bucketVolMap, Map<Long, Long> 
unreferencedCountMap) throws Exception {

Review Comment:
   can remove unreferenced keys to be displayed in keylist, as delete may be in 
progress.



##########
hadoop-ozone/cli-debug/src/main/java/org/apache/hadoop/ozone/debug/om/ContainerToKeyMapping.java:
##########
@@ -251,6 +272,107 @@ private void processOBSKeys(Set<Long> containerIds, 
Map<Long, List<String>> cont
     }
   }
 
+  private void processOpenFiles(Set<Long> containerIds, Map<Long, 
List<String>> containerToOpenKeysMap,
+      Map<Long, Long> unreferencedCountMap, Map<Long, Pair<Long, String>> 
bucketVolMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
fileIterator =
+             openFileTable.iterator()) {
+      while (fileIterator.hasNext()) {
+        OmKeyInfo keyInfo = fileIterator.next().getValue();
+        addOpenKeyToContainerMap(keyInfo, containerIds, 
containerToOpenKeysMap, true,
+            bucketVolMap, unreferencedCountMap);
+      }
+    } catch (Exception e) {
+      err().println("Exception occurred reading openFileTable (FSO keys), " + 
e);
+    }
+  }
+
+  private void processOpenKeys(Set<Long> containerIds, Map<Long, List<String>> 
containerToOpenKeysMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
keyIterator =
+             openKeyTable.iterator()) {
+      while (keyIterator.hasNext()) {
+        OmKeyInfo keyInfo = keyIterator.next().getValue();
+        addOpenKeyToContainerMap(keyInfo, containerIds, 
containerToOpenKeysMap, false, null, null);
+      }
+    } catch (Exception e) {
+      err().println("Exception occurred reading openKeyTable (OBS keys), " + 
e);
+    }
+  }
+
+  private void addOpenKeyToContainerMap(OmKeyInfo keyInfo, Set<Long> 
containerIds,
+      Map<Long, List<String>> containerToOpenKeysMap, boolean isFSO,
+      Map<Long, Pair<Long, String>> bucketVolMap, Map<Long, Long> 
unreferencedCountMap) throws Exception {
+    // Find which containers this key uses
+    Set<Long> keyContainers = getKeyContainers(keyInfo, containerIds);
+
+    if (!keyContainers.isEmpty()) {
+      String keyPath;
+      if (onlyFileNames) {
+        keyPath = keyInfo.getKeyName();
+      } else {
+        if (isFSO) {
+          keyPath = reconstructFullPath(keyInfo, bucketVolMap, 
unreferencedCountMap, keyContainers);
+        } else {
+          keyPath = buildFullOBSPath(keyInfo);
+        }
+      }
+
+      if (keyPath != null) {
+        for (Long containerId : keyContainers) {
+          containerToOpenKeysMap.get(containerId).add(keyPath);
+        }
+      }
+    }
+  }
+
+  private void processMultipartUpload(Set<Long> containerIds, Map<Long, 
List<String>> containerToOpenKeysMap,
+      Map<Long, Long> unreferencedCountMap, Map<Long, Pair<Long, String>> 
bucketVolMap) {
+    try (TableIterator<String, ? extends Table.KeyValue<String, 
OmMultipartKeyInfo>> mpuIterator =
+             multipartInfoTable.iterator()) {
+
+      while (mpuIterator.hasNext()) {
+        Table.KeyValue<String, OmMultipartKeyInfo> entry = mpuIterator.next();

Review Comment:
   for open key/file/mpu, key will be the table key, as it can not be accessed 
via normal traversal.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to