sarvekshayr commented on code in PR #8248:
URL: https://github.com/apache/ozone/pull/8248#discussion_r2053452511


##########
hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/replicas/ReplicasVerify.java:
##########
@@ -88,41 +109,122 @@ void findCandidateKeys(OzoneClient ozoneClient, 
OzoneAddress address) throws IOE
     String volumeName = address.getVolumeName();
     String bucketName = address.getBucketName();
     String keyName = address.getKeyName();
+
+    ObjectNode root = JsonUtils.createObjectNode(null);
+    ArrayNode keysArray = root.putArray("keys");
+
     if (!keyName.isEmpty()) {
-      OzoneKeyDetails keyDetails = 
ozoneClient.getProxy().getKeyDetails(volumeName, bucketName, keyName);
-      processKey(keyDetails);
+      OmKeyInfo keyInfo = ((RpcClient) 
ozoneClient.getProxy()).getKeyInfo(volumeName, bucketName, keyName, false);
+      processKey(ozoneClient, keyInfo, keysArray);
     } else if (!bucketName.isEmpty()) {
       OzoneVolume volume = objectStore.getVolume(volumeName);
       OzoneBucket bucket = volume.getBucket(bucketName);
-      checkBucket(bucket);
+      checkBucket(ozoneClient, bucket, keysArray);
     } else if (!volumeName.isEmpty()) {
       OzoneVolume volume = objectStore.getVolume(volumeName);
-      checkVolume(volume);
+      checkVolume(ozoneClient, volume, keysArray);
     } else {
       for (Iterator<? extends OzoneVolume> it = objectStore.listVolumes(null); 
it.hasNext();) {
-        checkVolume(it.next());
+        checkVolume(ozoneClient, it.next(), keysArray);
       }
     }
+
+    System.out.println(JsonUtils.toJsonStringWithDefaultPrettyPrinter(root));
   }
 
-  void checkVolume(OzoneVolume volume) throws IOException {
+  void checkVolume(OzoneClient ozoneClient, OzoneVolume volume, ArrayNode 
keysArray) throws IOException {
     for (Iterator<? extends OzoneBucket> it = volume.listBuckets(null); 
it.hasNext();) {
       OzoneBucket bucket = it.next();
-      checkBucket(bucket);
+      checkBucket(ozoneClient, bucket, keysArray);
     }
   }
 
-  void checkBucket(OzoneBucket bucket) throws IOException {
+  void checkBucket(OzoneClient ozoneClient, OzoneBucket bucket, ArrayNode 
keysArray) throws IOException {
     for (Iterator<? extends OzoneKey> it = bucket.listKeys(null); 
it.hasNext();) {
       OzoneKey key = it.next();
       // TODO: Remove this check once HDDS-12094 is fixed
       if (!key.getName().endsWith("/")) {
-        processKey(bucket.getKey(key.getName()));
+        OmKeyInfo keyInfo = ((RpcClient) ozoneClient.getProxy()).getKeyInfo(
+            bucket.getVolumeName(), bucket.getName(), key.getName(), false);
+        processKey(ozoneClient, keyInfo, keysArray);
       }
     }
   }
 
-  void processKey(OzoneKeyDetails keyDetails) {
-    replicaVerifiers.forEach(verifier -> verifier.verifyKey(keyDetails));
+  void processKey(OzoneClient ozoneClient, OmKeyInfo keyInfo, ArrayNode 
keysArray) {
+    String volumeName = keyInfo.getVolumeName();
+    String bucketName = keyInfo.getBucketName();
+    String keyName = keyInfo.getKeyName();
+
+    ObjectNode keyNode = JsonUtils.createObjectNode(null);
+    keyNode.put("volumeName", volumeName);
+    keyNode.put("bucketName", bucketName);
+    keyNode.put("name", keyName);
+
+    ArrayNode blocksArray = keyNode.putArray("blocks");
+    boolean keyPass = true;
+
+    for (OmKeyLocationInfoGroup keyLocationInfoGroup : 
keyInfo.getKeyLocationVersions()) {
+      for (OmKeyLocationInfo keyLocation : 
keyLocationInfoGroup.getLocationList()) {
+        long containerID = keyLocation.getContainerID();
+        long localID = keyLocation.getLocalID();
+
+        ObjectNode blockNode = JsonUtils.createObjectNode(null);

Review Comment:
   Thanks for the suggestion! 
   We intentionally create a separate `ObjectNode keyNode = 
JsonUtils.createObjectNode(null);` so we can determine the result of the 
replica verification before deciding whether or not to include the key in the 
final output.
   
   The top level root node represents the overall result and contains the 
"keys" array. Each `keyNode` is constructed independently so we can compute the 
pass status for that key first. If `--all-results` is disabled and the key has 
passed, we skip adding it to the array. This filtering wouldn’t be possible if 
we added the key directly via `addObject()` at the start.
   
   Rest of the nodes/arrays are now created and added using either 
`putObject/addObject/putArray` calls.



-- 
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: issues-unsubscr...@ozone.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@ozone.apache.org
For additional commands, e-mail: issues-h...@ozone.apache.org

Reply via email to