You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Gargi-jais11 (via GitHub)" <gi...@apache.org> on 2026/03/24 05:23:11 UTC

[PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Gargi-jais11 opened a new pull request, #9969:
URL: https://github.com/apache/ozone/pull/9969

   ## What changes were proposed in this pull request?
   The DiskBalancer report today shows only:
   ```
   ozone admin datanode diskbalancer report --in-service-datanodes
   Report result:
   Datanode                                VolumeDensity
   dn-hostname-3 (10.141.248.70:19864)     0.09267551461620249
   dn-hostname-1 (10.141.128.135:19864)    0.06619677701803184
   dn-hostname-2 (10.141.126.8:19864)      0.026044182616493772
   ```
   So users see only a single aggregate VolumeDensity per datanode, with no per-disk breakdown.
   According to above report if user wants to run diskbalancer at threshold lower that 10% say at 5% it interprets that diskbalancer will start on DN-3 and DN-1. But it does not start and creates confusion that diskbalancer is not working correctly.
   This is because in reality this threshold value checks wether each volumes utilisation is above or below or within the range. 
   
   Proposed Solution:
   We should also show each volume's density along with the details of each volumes utilisation and pre-allocated container bytes
   
   ## What is the link to the Apache JIRA
   
   https://issues.apache.org/jira/browse/HDDS-14866
   ## How was this patch tested?
   Added a unit test and tested manually as well.
   **DiskBalancer Report before patch:**
   ```
   ozone admin datanode diskbalancer report --in-service-datanodes
   Report result:
   Datanode                                VolumeDensity
   dn-hostname-3 (10.141.248.70:19864)     0.09267551461620249
   dn-hostname-1 (10.141.128.135:19864)    0.06619677701803184
   dn-hostname-2 (10.141.126.8:19864)      0.026044182616493772
   ```
   **DiskBalancer Report after enhancement:**
   ```
   bash-5.1$ ozone admin datanode diskbalancer report --in-service-datanodes       
   Report result:
   Datanode: ozone-datanode-1.ozone_default (172.18.0.8:19864)
   Aggregate VolumeDataDensity: 0.002000812888676179
   IdealUsage: 0.1079634239173063 | Threshold: 10.0% | ThresholdRange: (0.007963423917306298, 0.20796342391730632)
   
   Volume Details -:
   
   StorageID                                     StoragePath                                        VolumeDensity             Utilization               Pre-Allocated Container Bytes
   DS-c1e30832-dd36-444d-81fa-949c70b15b22       /data/hdds1/hdds                                   0.00087753816739934150    0.10884096208470564000    1771044864               
   DS-d962ecab-8e1c-408a-87b0-b6d53456c86f       /data/hdds2/hdds                                   0.00012286827693874790    0.10808629219424505000    877658112                
   DS-48547294-c3ef-40ef-a48a-14bf3b2acad8       /data/hdds3/hdds                                   0.00100040644433808950    0.10696301747296821000    0                        
   
   -------
   
   Datanode: ozone-datanode-2.ozone_default (172.18.0.7:19864)
   Aggregate VolumeDataDensity: 1.940025425348213E-6
   IdealUsage: 0.10798832091026495 | Threshold: 10.0% | ThresholdRange: (0.00798832091026494, 0.20798832091026495)
   
   Volume Details -:
   
   StorageID                                     StoragePath                                        VolumeDensity             Utilization               Pre-Allocated Container Bytes
   DS-e8505479-f9fd-4705-b59e-c2bca68f0382       /data/hdds1/hdds                                   0.00000097001271268105    0.10798735089755226000    943718400                
   DS-d0f5f9cd-920f-4ec9-9248-162ad3e1ad11       /data/hdds2/hdds                                   0.00000097001271266717    0.10798929092297761000    943718400                
   DS-212374f2-15bc-4f54-b64e-30f378da456a       /data/hdds3/hdds                                   0.00000000000000000000    0.10798832091026495000    944766976                
   
   -------
   
   Datanode: ozone-datanode-3.ozone_default (172.18.0.9:19864)
   Aggregate VolumeDataDensity: 1.2933502835515975E-6
   IdealUsage: 0.10797732743285464 | Threshold: 10.0% | ThresholdRange: (0.007977327432854633, 0.20797732743285463)
   
   Volume Details -:
   
   StorageID                                     StoragePath                                        VolumeDensity             Utilization               Pre-Allocated Container Bytes
   DS-8364a6cc-0d6b-471c-9b3f-fb2b68a6ef27       /data/hdds1/hdds                                   0.00000064667514178274    0.10797668075771286000    968884224                
   DS-e9705dfb-f66d-4b21-a619-7c41c53f7cd6       /data/hdds2/hdds                                   0.00000032333757088443    0.10797765077042552000    966787072                
   DS-c64998b1-8a10-4506-b358-e1ae278ed71c       /data/hdds3/hdds                                   0.00000032333757088443    0.10797765077042552000    966787072                
   
   
   Note:
     - Aggregate VolumeDataDensity: Sum of per-volume density (deviation from ideal); higher means more imbalance.
     - IdealUsage: Target utilization ratio (0-1) when volumes are evenly balanced.
     - ThresholdRange: Acceptable deviation (percent); volumes within IdealUsage +/- Threshold are considered balanced.
     - VolumeDensity: Deviation of a particular volume's utilization from IdealUsage.
     - Utilization: Ratio of actual used space to capacity (0-1) for a particular volume.
     - Pre-Allocated Container Bytes: Space reserved for containers not yet written to disk.
     
     // json output
     
     bash-5.1$ ozone admin datanode diskbalancer report --in-service-datanodes --json
   [ {
     "datanode" : "ozone-datanode-1.ozone_default (172.18.0.8:19864)",
     "action" : "report",
     "status" : "success",
     "volumeDensity" : 0.002000812888676179,
     "idealUsage" : 0.1079634239173063,
     "volumes" : [ {
       "storageId" : "DS-c1e30832-dd36-444d-81fa-949c70b15b22",
       "storagePath" : "/data/hdds1/hdds",
       "volumeDensity" : 8.775381673993415E-4,
       "utilization" : 0.10884096208470564,
       "pre-Allocated container bytes" : 1771044864
     }, {
       "storageId" : "DS-d962ecab-8e1c-408a-87b0-b6d53456c86f",
       "storagePath" : "/data/hdds2/hdds",
       "volumeDensity" : 1.228682769387479E-4,
       "utilization" : 0.10808629219424505,
       "pre-Allocated container bytes" : 877658112
     }, {
       "storageId" : "DS-48547294-c3ef-40ef-a48a-14bf3b2acad8",
       "storagePath" : "/data/hdds3/hdds",
       "volumeDensity" : 0.0010004064443380895,
       "utilization" : 0.10696301747296821,
       "pre-Allocated container bytes" : 0
     } ]
   }, {
     "datanode" : "ozone-datanode-3.ozone_default (172.18.0.9:19864)",
     "action" : "report",
     "status" : "success",
     "volumeDensity" : 1.2933502835515975E-6,
     "idealUsage" : 0.10797732743285464,
     "volumes" : [ {
       "storageId" : "DS-8364a6cc-0d6b-471c-9b3f-fb2b68a6ef27",
       "storagePath" : "/data/hdds1/hdds",
       "volumeDensity" : 6.466751417827377E-7,
       "utilization" : 0.10797668075771286,
       "pre-Allocated container bytes" : 968884224
     }, {
       "storageId" : "DS-e9705dfb-f66d-4b21-a619-7c41c53f7cd6",
       "storagePath" : "/data/hdds2/hdds",
       "volumeDensity" : 3.2333757088442994E-7,
       "utilization" : 0.10797765077042552,
       "pre-Allocated container bytes" : 966787072
     }, {
       "storageId" : "DS-c64998b1-8a10-4506-b358-e1ae278ed71c",
       "storagePath" : "/data/hdds3/hdds",
       "volumeDensity" : 3.2333757088442994E-7,
       "utilization" : 0.10797765077042552,
       "pre-Allocated container bytes" : 966787072
     } ]
   }, {
     "datanode" : "ozone-datanode-2.ozone_default (172.18.0.7:19864)",
     "action" : "report",
     "status" : "success",
     "volumeDensity" : 1.940025425348213E-6,
     "idealUsage" : 0.10798832091026495,
     "volumes" : [ {
       "storageId" : "DS-e8505479-f9fd-4705-b59e-c2bca68f0382",
       "storagePath" : "/data/hdds1/hdds",
       "volumeDensity" : 9.700127126810454E-7,
       "utilization" : 0.10798735089755226,
       "pre-Allocated container bytes" : 943718400
     }, {
       "storageId" : "DS-d0f5f9cd-920f-4ec9-9248-162ad3e1ad11",
       "storagePath" : "/data/hdds2/hdds",
       "volumeDensity" : 9.700127126671676E-7,
       "utilization" : 0.10798929092297761,
       "pre-Allocated container bytes" : 943718400
     }, {
       "storageId" : "DS-212374f2-15bc-4f54-b64e-30f378da456a",
       "storagePath" : "/data/hdds3/hdds",
       "volumeDensity" : 0.0,
       "utilization" : 0.10798832091026495,
       "pre-Allocated container bytes" : 944766976
     } ]
   } ]
   
   
   ```
   


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "ChenSammi (via GitHub)" <gi...@apache.org>.
ChenSammi commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4139805207

   Does EffectiveUsedSpace equal to  TotalCapacity - UsedSpace + Pre-AllocatedBytes? If yes, then I think this one can be optional.  I'm fine whether you show it or not.  The rest looks good to me. 


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4136112675

   > datanode debug log by default is not available. Does DN web UI show each volume's capacity and used space? Since we already provide this new command, mainly for debug purpose, it will be more user friendly if we provide all info in one command, instead of user has to visit different places to get a full picture.
   > 
   > BTW, can we limit the Utilization precision, and ThresholdRange? maybe 5 digital, for example, 0.00001 is enough. Or current 20 digital precision is more helpful for debug?
   
   Dn web UI does show the capacity and usep space of each volume but with that the used space shown is not the actual what dn sees, it just shows the current usedbytes that volume has and doesnot consider showing preallocated byte which actual contribute a lot in volume used space.
   I agree with u that it will be good if we show all info in one command. I will add used space, total capacity as well for each volume. 
   ```
   StorageID                 StoragePath               TotalCapacity           UsedSpace         Container Pre-AllocatedBytes                          EffectiveUsedSpace    Utilization    VolumeDensity
   ```
   Does the above columns look good, I believe all these are enough to analyse why volumes are not chosen?
   
   Precision of 5 is too less we can keep atleast 10 for each utilisation and threshold range.


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4139972394

   > Does EffectiveUsedSpace equal to TotalCapacity - UsedSpace + Pre-AllocatedBytes? If yes, then I think this one can be optional. I'm fine whether you show it or not. The rest looks good to me.
   
   ` effectiveUsed = usage.getCapacity() - usage.getAvailable() + committed + required;` required is delta update by source volume which will be freed up.
   Okay I will update then.


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "ChenSammi (via GitHub)" <gi...@apache.org>.
ChenSammi merged PR #9969:
URL: https://github.com/apache/ozone/pull/9969


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "sreejasahithi (via GitHub)" <gi...@apache.org>.
sreejasahithi commented on code in PR #9969:
URL: https://github.com/apache/ozone/pull/9969#discussion_r2979573442


##########
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java:
##########
@@ -685,9 +688,40 @@ public DiskBalancerInfo getDiskBalancerInfo() {
       bytesToMove = calculateBytesToMove(volumeUsages);
     }
 
-    return new DiskBalancerInfo(operationalState, threshold, bandwidthInMB,
+    DiskBalancerInfo info = new DiskBalancerInfo(operationalState, threshold, bandwidthInMB,
         parallelThread, stopAfterDiskEven, version, metrics.getSuccessCount(),
         metrics.getFailureCount(), bytesToMove, metrics.getSuccessBytes(), volumeDataDensity);
+    info.setIdealUsage(getIdealUsage(volumeUsages));
+    info.setVolumeInfo(buildVolumeReportProto(volumeUsages));
+    return info;
+  }
+
+  /**
+   * Build a list of VolumeInfoProto from a list of VolumeFixedUsage.
+   * VolumeInfoProto consists of information like StorageID,
+   * volume utilization and committed bytes to the client.

Review Comment:
   Javadoc refers to the wrong type, the type used is VolumeReportProto



##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -121,20 +164,36 @@ protected String getActionName() {
 
   /**
    * Create a JSON result map for a report.
-   * 
+   *
    * @param report the DiskBalancer report proto
    * @return JSON result map
    */
-  private Map<String, Object> createReportResult(
-      HddsProtos.DatanodeDiskBalancerInfoProto report) {
+  private Map<String, Object> toJson(DatanodeDiskBalancerInfoProto report) {
     Map<String, Object> result = new LinkedHashMap<>();
-    // Format datanode string with hostname and IP address
-    String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-        report.getNode());
-    result.put("datanode", formattedDatanode);
+    result.put("datanode", DiskBalancerSubCommandUtil.getDatanodeHostAndIp(report.getNode()));
     result.put("action", "report");
     result.put("status", "success");
     result.put("volumeDensity", report.getCurrentVolumeDensitySum());
+
+    if (report.hasIdealUsage()) {
+      result.put("idealUsage", report.getIdealUsage());
+    }
+
+    if (report.getVolumeInfoCount() > 0) {

Review Comment:
   Text output includes threshold and the computed range, but JSON only adds idealUsage (and per-volume rows).



##########
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java:
##########
@@ -685,9 +688,40 @@ public DiskBalancerInfo getDiskBalancerInfo() {
       bytesToMove = calculateBytesToMove(volumeUsages);
     }
 
-    return new DiskBalancerInfo(operationalState, threshold, bandwidthInMB,
+    DiskBalancerInfo info = new DiskBalancerInfo(operationalState, threshold, bandwidthInMB,
         parallelThread, stopAfterDiskEven, version, metrics.getSuccessCount(),
         metrics.getFailureCount(), bytesToMove, metrics.getSuccessBytes(), volumeDataDensity);
+    info.setIdealUsage(getIdealUsage(volumeUsages));
+    info.setVolumeInfo(buildVolumeReportProto(volumeUsages));
+    return info;
+  }
+
+  /**
+   * Build a list of VolumeInfoProto from a list of VolumeFixedUsage.
+   * VolumeInfoProto consists of information like StorageID,
+   * volume utilization and committed bytes to the client.
+   *
+   * @param volumeSet snapshot of VolumeFixedUsage which contains the usage information of each volume
+   * @return a list of VolumeReportProto which will be sent to clients for reporting volume status
+   * @throws IllegalArgumentException if volumeSet is null or empty
+   */
+  public static List<VolumeReportProto> buildVolumeReportProto(List<VolumeFixedUsage> volumeSet) {
+    if (volumeSet == null || volumeSet.isEmpty()) {
+      return Collections.emptyList();
+    }
+

Review Comment:
   This method does not throw any exception , please correct the javadoc



-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4123048526

   @ChenSammi Please review this PR.
   


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #9969:
URL: https://github.com/apache/ozone/pull/9969#discussion_r3007380623


##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -121,20 +176,47 @@ protected String getActionName() {
 
   /**
    * Create a JSON result map for a report.
-   * 
+   *
    * @param report the DiskBalancer report proto
    * @return JSON result map
    */
-  private Map<String, Object> createReportResult(
-      HddsProtos.DatanodeDiskBalancerInfoProto report) {
+  private Map<String, Object> toJson(DatanodeDiskBalancerInfoProto report) {
     Map<String, Object> result = new LinkedHashMap<>();
-    // Format datanode string with hostname and IP address
-    String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-        report.getNode());
-    result.put("datanode", formattedDatanode);
+    result.put("datanode", DiskBalancerSubCommandUtil.getDatanodeHostAndIp(report.getNode()));
     result.put("action", "report");
     result.put("status", "success");
     result.put("volumeDensity", report.getCurrentVolumeDensitySum());
+
+    if (report.hasIdealUsage() && report.hasDiskBalancerConf()
+        && report.getDiskBalancerConf().hasThreshold()) {
+      double idealUsage = report.getIdealUsage();
+      double threshold = report.getDiskBalancerConf().getThreshold();
+      double lt = idealUsage - threshold / 100.0;
+      double ut = idealUsage + threshold / 100.0;
+      result.put("idealUsage", String.format("%.8f", idealUsage));
+      result.put("threshold %", report.getDiskBalancerConf().getThreshold());
+      result.put("thresholdRange", String.format("(%.08f, %.08f)", lt, ut));

Review Comment:
   The JSON keys/types introduced here are inconsistent with existing DiskBalancer JSON output (eg status uses numeric `threshold`). Using a key with a space/percent sign (`"threshold %"`) and emitting `idealUsage` as a formatted string makes the JSON harder to consume programmatically. Prefer stable identifier-style keys (eg `thresholdPercent`) and keep numeric values as numbers.
   ```suggestion
         result.put("idealUsage", idealUsage);
         result.put("thresholdPercent", threshold);
         Map<String, Double> thresholdRange = new LinkedHashMap<>();
         thresholdRange.put("lower", lt);
         thresholdRange.put("upper", ut);
         result.put("thresholdRange", thresholdRange);
   ```



##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -121,20 +176,47 @@ protected String getActionName() {
 
   /**
    * Create a JSON result map for a report.
-   * 
+   *
    * @param report the DiskBalancer report proto
    * @return JSON result map
    */
-  private Map<String, Object> createReportResult(
-      HddsProtos.DatanodeDiskBalancerInfoProto report) {
+  private Map<String, Object> toJson(DatanodeDiskBalancerInfoProto report) {
     Map<String, Object> result = new LinkedHashMap<>();
-    // Format datanode string with hostname and IP address
-    String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-        report.getNode());
-    result.put("datanode", formattedDatanode);
+    result.put("datanode", DiskBalancerSubCommandUtil.getDatanodeHostAndIp(report.getNode()));
     result.put("action", "report");
     result.put("status", "success");
     result.put("volumeDensity", report.getCurrentVolumeDensitySum());
+
+    if (report.hasIdealUsage() && report.hasDiskBalancerConf()
+        && report.getDiskBalancerConf().hasThreshold()) {
+      double idealUsage = report.getIdealUsage();
+      double threshold = report.getDiskBalancerConf().getThreshold();
+      double lt = idealUsage - threshold / 100.0;
+      double ut = idealUsage + threshold / 100.0;
+      result.put("idealUsage", String.format("%.8f", idealUsage));
+      result.put("threshold %", report.getDiskBalancerConf().getThreshold());
+      result.put("thresholdRange", String.format("(%.08f, %.08f)", lt, ut));

Review Comment:
   As in the text output, the computed thresholdRange bounds can go outside [0, 1] and produce invalid ranges in JSON. Clamp `lt`/`ut` before formatting so the reported range reflects valid utilization ratios.
   ```suggestion
         double ltClamped = Math.max(0.0, Math.min(1.0, lt));
         double utClamped = Math.max(0.0, Math.min(1.0, ut));
         result.put("idealUsage", String.format("%.8f", idealUsage));
         result.put("threshold %", report.getDiskBalancerConf().getThreshold());
         result.put("thresholdRange",
             String.format("(%.08f, %.08f)", ltClamped, utClamped));
   ```



##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -82,36 +83,90 @@ protected void displayResults(List<String> successNodes, List<String> failedNode
 
     // Display consolidated report for successful nodes
     if (!successNodes.isEmpty() && !reports.isEmpty()) {
-      List<HddsProtos.DatanodeDiskBalancerInfoProto> reportList = 
-          new ArrayList<>(reports.values());
+      List<DatanodeDiskBalancerInfoProto> reportList = new ArrayList<>(reports.values());
       System.out.println(generateReport(reportList));
     }
   }
 
   private String generateReport(List<DatanodeDiskBalancerInfoProto> protos) {
-    // Sort by volume density in descending order (highest imbalance first)
-    List<DatanodeDiskBalancerInfoProto> sortedProtos = new ArrayList<>(protos);
-    sortedProtos.sort((a, b) ->
+    protos.sort((a, b) ->
         Double.compare(b.getCurrentVolumeDensitySum(), a.getCurrentVolumeDensitySum()));
 
-    StringBuilder formatBuilder = new StringBuilder("Report result:%n" +
-        "%-60s %s%n");
-
+    StringBuilder formatBuilder = new StringBuilder("Report result:%n");
     List<String> contentList = new ArrayList<>();
-    contentList.add("Datanode");
-    contentList.add("VolumeDensity");
-
-    for (DatanodeDiskBalancerInfoProto proto : sortedProtos) {
-      formatBuilder.append("%-60s %s%n");
-      // Format datanode string with hostname and IP address
-      String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-          proto.getNode());
-      contentList.add(formattedDatanode);
-      contentList.add(String.valueOf(proto.getCurrentVolumeDensitySum()));
+
+    for (int i = 0; i < protos.size(); i++) {
+      DatanodeDiskBalancerInfoProto p = protos.get(i);
+      String dn = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(p.getNode());
+
+      StringBuilder header = new StringBuilder();
+      header.append("Datanode: ").append(dn).append('\n');
+      header.append("Aggregate VolumeDataDensity: ").
+          append(p.getCurrentVolumeDensitySum()).append('\n');
+
+      if (p.hasIdealUsage() && p.hasDiskBalancerConf()
+          && p.getDiskBalancerConf().hasThreshold()) {
+        double idealUsage = p.getIdealUsage();
+        double threshold = p.getDiskBalancerConf().getThreshold();
+        double lt = idealUsage - threshold / 100.0;
+        double ut = idealUsage + threshold / 100.0;
+        header.append("IdealUsage: ").append(String.format("%.8f", idealUsage));
+        header.append(" | Threshold: ").append(threshold).append('%');
+        header.append(" | ThresholdRange: (").append(String.format("%.8f", lt));
+        header.append(", ").append(String.format("%.8f", ut)).append(')').append('\n').append('\n');
+        header.append("Volume Details -:").append('\n');
+      }
+      formatBuilder.append("%s%n");
+      contentList.add(header.toString());
+
+      if (p.getVolumeInfoCount() > 0 && p.hasIdealUsage()) {
+        formatBuilder.append("%-45s %-40s %15s %15s %30s %20s %15s %15s%n");
+        contentList.add("StorageID");
+        contentList.add("StoragePath");
+        contentList.add("TotalCapacity");
+        contentList.add("UsedSpace");
+        contentList.add("Container Pre-AllocatedSpace");
+        contentList.add("EffectiveUsedSpace");
+        contentList.add("Utilization");
+        contentList.add("VolumeDensity");
+
+        double ideal = p.getIdealUsage();
+        for (VolumeReportProto v : p.getVolumeInfoList()) {
+          formatBuilder.append("%-45s %-40s %15s %15s %30s %20s %15s %15s%n");
+          contentList.add(v.getStorageId() != null ? v.getStorageId() : "-");

Review Comment:
   `v.getStorageId()` is never null for protobuf-generated accessors (it defaults to an empty string when unset). The current null-check won’t emit "-" for missing storageId. Use `v.hasStorageId()` (and/or `!v.getStorageId().isEmpty()`) to decide when to print a placeholder.
   ```suggestion
             contentList.add(v.hasStorageId() ? v.getStorageId() : "-");
   ```



##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -82,36 +83,90 @@ protected void displayResults(List<String> successNodes, List<String> failedNode
 
     // Display consolidated report for successful nodes
     if (!successNodes.isEmpty() && !reports.isEmpty()) {
-      List<HddsProtos.DatanodeDiskBalancerInfoProto> reportList = 
-          new ArrayList<>(reports.values());
+      List<DatanodeDiskBalancerInfoProto> reportList = new ArrayList<>(reports.values());
       System.out.println(generateReport(reportList));
     }
   }
 
   private String generateReport(List<DatanodeDiskBalancerInfoProto> protos) {
-    // Sort by volume density in descending order (highest imbalance first)
-    List<DatanodeDiskBalancerInfoProto> sortedProtos = new ArrayList<>(protos);
-    sortedProtos.sort((a, b) ->
+    protos.sort((a, b) ->
         Double.compare(b.getCurrentVolumeDensitySum(), a.getCurrentVolumeDensitySum()));
 
-    StringBuilder formatBuilder = new StringBuilder("Report result:%n" +
-        "%-60s %s%n");
-
+    StringBuilder formatBuilder = new StringBuilder("Report result:%n");
     List<String> contentList = new ArrayList<>();
-    contentList.add("Datanode");
-    contentList.add("VolumeDensity");
-
-    for (DatanodeDiskBalancerInfoProto proto : sortedProtos) {
-      formatBuilder.append("%-60s %s%n");
-      // Format datanode string with hostname and IP address
-      String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-          proto.getNode());
-      contentList.add(formattedDatanode);
-      contentList.add(String.valueOf(proto.getCurrentVolumeDensitySum()));
+
+    for (int i = 0; i < protos.size(); i++) {
+      DatanodeDiskBalancerInfoProto p = protos.get(i);
+      String dn = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(p.getNode());
+
+      StringBuilder header = new StringBuilder();
+      header.append("Datanode: ").append(dn).append('\n');
+      header.append("Aggregate VolumeDataDensity: ").
+          append(p.getCurrentVolumeDensitySum()).append('\n');
+
+      if (p.hasIdealUsage() && p.hasDiskBalancerConf()
+          && p.getDiskBalancerConf().hasThreshold()) {
+        double idealUsage = p.getIdealUsage();
+        double threshold = p.getDiskBalancerConf().getThreshold();
+        double lt = idealUsage - threshold / 100.0;
+        double ut = idealUsage + threshold / 100.0;

Review Comment:
   ThresholdRange is computed as idealUsage +/- threshold/100 without clamping to [0, 1]. If idealUsage is near 0 or 1 (or threshold is large), this can print negative or >1 ranges, which is misleading to users. Clamp the computed lower/upper bounds before formatting.
   ```suggestion
           double margin = threshold / 100.0;
           double lt = Math.max(0.0, idealUsage - margin);
           double ut = Math.min(1.0, idealUsage + margin);
   ```



##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -27,22 +27,23 @@
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.protocol.DiskBalancerProtocol;
-import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.DatanodeDiskBalancerInfoProto;
+import org.apache.hadoop.hdds.protocol.proto.HddsProtos.VolumeReportProto;
+import org.apache.hadoop.util.StringUtils;
 import picocli.CommandLine.Command;
 
 /**
  * Handler to get disk balancer report.
  */
 @Command(
     name = "report",
-    description = "Get DiskBalancer volume density report",
+    description = "Get DiskBalancer volume density report and per volume info from dns.",

Review Comment:
   The command description says "from dns" which is ambiguous (looks like Domain Name System). Consider changing to "from DNs" or "from datanodes" for clarity, and drop the trailing period to match other subcommand descriptions.
   ```suggestion
       description = "Get DiskBalancer volume density report and per volume info from datanodes",
   ```



##########
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java:
##########
@@ -685,9 +688,42 @@ public DiskBalancerInfo getDiskBalancerInfo() {
       bytesToMove = calculateBytesToMove(volumeUsages);
     }
 
-    return new DiskBalancerInfo(operationalState, threshold, bandwidthInMB,
+    DiskBalancerInfo info = new DiskBalancerInfo(operationalState, threshold, bandwidthInMB,
         parallelThread, stopAfterDiskEven, version, metrics.getSuccessCount(),
         metrics.getFailureCount(), bytesToMove, metrics.getSuccessBytes(), volumeDataDensity);
+    info.setIdealUsage(getIdealUsage(volumeUsages));
+    info.setVolumeInfo(buildVolumeReportProto(volumeUsages));
+    return info;
+  }
+
+  /**
+   * Build a list of VolumeReportProto from a list of VolumeFixedUsage.
+   * VolumeReportProto consists of information like StorageID,
+   * volume utilization and committed bytes to the client.
+   *
+   * @param volumeSet snapshot of VolumeFixedUsage which contains the usage information of each volume
+   * @return a list of VolumeReportProto which will be sent to clients for reporting volume status
+   */
+  public static List<VolumeReportProto> buildVolumeReportProto(List<VolumeFixedUsage> volumeSet) {
+    if (volumeSet == null || volumeSet.isEmpty()) {
+      return Collections.emptyList();
+    }
+
+    List<VolumeReportProto> result = new ArrayList<>();
+    for (VolumeFixedUsage v : volumeSet) {
+      HddsVolume volume = v.getVolume();
+      String path = volume.getStorageDir() != null ? volume.getStorageDir().getPath() : "";
+      result.add(VolumeReportProto.newBuilder()
+          .setStorageId(volume.getStorageID())
+          .setStoragePath(path)
+          .setTotalCapacity(v.getUsage().getCapacity())
+          .setUsedSpace(v.getUsage().getUsedSpace())
+          .setCommittedBytes(volume.getCommittedBytes())
+          .setEffectiveUsedSpace(v.getEffectiveUsed())
+          .setUtilization(v.getUtilization())
+          .build());

Review Comment:
   When `volume.getStorageDir()` is null, `path` is set to an empty string and then written into the proto, which makes `hasStoragePath()` true and causes the CLI to print an empty value instead of the intended placeholder. Avoid setting `storagePath` when it’s unknown (or use a meaningful placeholder consistently).
   ```suggestion
         VolumeReportProto.Builder builder = VolumeReportProto.newBuilder()
             .setStorageId(volume.getStorageID())
             .setTotalCapacity(v.getUsage().getCapacity())
             .setUsedSpace(v.getUsage().getUsedSpace())
             .setCommittedBytes(volume.getCommittedBytes())
             .setEffectiveUsedSpace(v.getEffectiveUsed())
             .setUtilization(v.getUtilization());
         if (volume.getStorageDir() != null) {
           builder.setStoragePath(volume.getStorageDir().getPath());
         }
         result.add(builder.build());
   ```



##########
hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestDiskBalancerSubCommands.java:
##########
@@ -754,9 +763,56 @@ private DatanodeDiskBalancerInfoProto generateRandomReportProto(String hostname)
             .build())
         .build();
 
+    DiskBalancerConfigurationProto configProto = createConfigProto(threshold, 100L, 5, true);
+
+    long committed1 = (random.nextLong() & Long.MAX_VALUE) % (1024L * 1024 * 1024);
+    long committed2 = (random.nextLong() & Long.MAX_VALUE) % (1024L * 1024 * 1024);
+    long capacity1 = 500L * 1024 * 1024 * 1024 + random.nextInt(1024 * 1024);
+    long capacity2 = 600L * 1024 * 1024 * 1024 + random.nextInt(1024 * 1024);
+    double util1 = idealUsage + random.nextDouble() * 0.1;
+    double util2 = idealUsage - random.nextDouble() * 0.1;
+    long used1 = (long) (capacity1 * util1);
+    long used2 = (long) (capacity2 * util2);
+    long effective1 = used1 + committed1;
+    long effective2 = used2 + committed2;
+    String path1 = "/data/hdds-" + hostname + "-1";
+    String path2 = "/data/hdds-" + hostname + "-2";
+    VolumeReportProto vol1 = VolumeReportProto.newBuilder()
+        .setStorageId("DISK-" + hostname + "-vol1")
+        .setStoragePath(path1)
+        .setUtilization(idealUsage + random.nextDouble() * 0.1)

Review Comment:
   In this test helper, `used1` is computed using `util1`, but the proto’s `vol1` utilization is generated independently (`idealUsage + random.nextDouble() * 0.1`). This can make the generated report internally inconsistent (utilization doesn’t match usedSpace/capacity). Use `util1` when setting `vol1` utilization so the fields stay consistent.
   ```suggestion
           .setUtilization(util1)
   ```



##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -82,36 +83,90 @@ protected void displayResults(List<String> successNodes, List<String> failedNode
 
     // Display consolidated report for successful nodes
     if (!successNodes.isEmpty() && !reports.isEmpty()) {
-      List<HddsProtos.DatanodeDiskBalancerInfoProto> reportList = 
-          new ArrayList<>(reports.values());
+      List<DatanodeDiskBalancerInfoProto> reportList = new ArrayList<>(reports.values());
       System.out.println(generateReport(reportList));
     }
   }
 
   private String generateReport(List<DatanodeDiskBalancerInfoProto> protos) {
-    // Sort by volume density in descending order (highest imbalance first)
-    List<DatanodeDiskBalancerInfoProto> sortedProtos = new ArrayList<>(protos);
-    sortedProtos.sort((a, b) ->
+    protos.sort((a, b) ->
         Double.compare(b.getCurrentVolumeDensitySum(), a.getCurrentVolumeDensitySum()));
 
-    StringBuilder formatBuilder = new StringBuilder("Report result:%n" +
-        "%-60s %s%n");
-
+    StringBuilder formatBuilder = new StringBuilder("Report result:%n");
     List<String> contentList = new ArrayList<>();
-    contentList.add("Datanode");
-    contentList.add("VolumeDensity");
-
-    for (DatanodeDiskBalancerInfoProto proto : sortedProtos) {
-      formatBuilder.append("%-60s %s%n");
-      // Format datanode string with hostname and IP address
-      String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-          proto.getNode());
-      contentList.add(formattedDatanode);
-      contentList.add(String.valueOf(proto.getCurrentVolumeDensitySum()));
+
+    for (int i = 0; i < protos.size(); i++) {
+      DatanodeDiskBalancerInfoProto p = protos.get(i);
+      String dn = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(p.getNode());
+
+      StringBuilder header = new StringBuilder();
+      header.append("Datanode: ").append(dn).append('\n');
+      header.append("Aggregate VolumeDataDensity: ").
+          append(p.getCurrentVolumeDensitySum()).append('\n');
+
+      if (p.hasIdealUsage() && p.hasDiskBalancerConf()
+          && p.getDiskBalancerConf().hasThreshold()) {
+        double idealUsage = p.getIdealUsage();
+        double threshold = p.getDiskBalancerConf().getThreshold();
+        double lt = idealUsage - threshold / 100.0;
+        double ut = idealUsage + threshold / 100.0;
+        header.append("IdealUsage: ").append(String.format("%.8f", idealUsage));
+        header.append(" | Threshold: ").append(threshold).append('%');
+        header.append(" | ThresholdRange: (").append(String.format("%.8f", lt));
+        header.append(", ").append(String.format("%.8f", ut)).append(')').append('\n').append('\n');
+        header.append("Volume Details -:").append('\n');

Review Comment:
   The header label "Volume Details -:" is awkward/typo-like in user-facing output. Consider renaming to "Volume Details:" (or similar) for readability.
   ```suggestion
           header.append("Volume Details:").append('\n');
   ```



-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4132068211

   @ChenSammi  utilisation shown for each dn is definitly what we need the user to understand but if we see the dn ui used space shown for each volume is always less than actual used as it contains pre allocated and reserved as well. So I am showing this pre allocated because it will make the suer understand why the used bytes show is suppose 3GB with that volume capacity of 10GB but has utilisation of 50% because 2GB is occupied by pre allocated.
   
   If you suggest may be we can also add the usedBytes for that volume which can clearly show the user that usedBytes + pre-allocated = utilisation for that dn.
   


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "sreejasahithi (via GitHub)" <gi...@apache.org>.
sreejasahithi commented on code in PR #9969:
URL: https://github.com/apache/ozone/pull/9969#discussion_r2980182115


##########
hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerReportSubcommand.java:
##########
@@ -121,20 +164,36 @@ protected String getActionName() {
 
   /**
    * Create a JSON result map for a report.
-   * 
+   *
    * @param report the DiskBalancer report proto
    * @return JSON result map
    */
-  private Map<String, Object> createReportResult(
-      HddsProtos.DatanodeDiskBalancerInfoProto report) {
+  private Map<String, Object> toJson(DatanodeDiskBalancerInfoProto report) {
     Map<String, Object> result = new LinkedHashMap<>();
-    // Format datanode string with hostname and IP address
-    String formattedDatanode = DiskBalancerSubCommandUtil.getDatanodeHostAndIp(
-        report.getNode());
-    result.put("datanode", formattedDatanode);
+    result.put("datanode", DiskBalancerSubCommandUtil.getDatanodeHostAndIp(report.getNode()));
     result.put("action", "report");
     result.put("status", "success");
     result.put("volumeDensity", report.getCurrentVolumeDensitySum());
+
+    if (report.hasIdealUsage()) {
+      result.put("idealUsage", report.getIdealUsage());
+    }
+
+    if (report.getVolumeInfoCount() > 0) {

Review Comment:
   Text output includes threshold and the computed ThresholdRange, but JSON only adds idealUsage (and per-volume rows).



-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "sreejasahithi (via GitHub)" <gi...@apache.org>.
sreejasahithi commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4115960174

   @Gargi-jais11 , can you please add the before and after of the json output.
   


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "sreejasahithi (via GitHub)" <gi...@apache.org>.
sreejasahithi commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4139956186

   > Does EffectiveUsedSpace equal to TotalCapacity - UsedSpace + Pre-AllocatedBytes? 
   
   @ChenSammi , I believe EffectiveUsedSpace is UsedSpace + Pre-AllocatedBytes


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4152761157

   @ChenSammi Please review I have resolved Co-pilot comments.
   


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4132114171

   ```
   2026-03-06 12:27:02,444 DEBUG [DiskBalancerService#2]-org.apache.hadoop.ozone.container.diskbalancer.policy.DefaultVolumeChoosingPolicy: Disk balancing state - idealUsage=0.5094568501, thresholdPercentage=10.0%, thresholdRange=(0.4094568501, 0.6094568501), containerSize=5368709120
   2026-03-06 12:27:02,444 DEBUG [DiskBalancerService#2]-org.apache.hadoop.ozone.container.diskbalancer.policy.DefaultVolumeChoosingPolicy: Volume[0] - disk=DS-bb305d7f-d780-4832-962b-1174fc11757d, utilization=0.5027842722, capacity=53681722491, effectiveUsed=26990325773, available=53534941184, usableSpace=5216560238, committedBytes=26843544466, delta=0
   2026-03-06 12:27:02,444 DEBUG [DiskBalancerService#2]-org.apache.hadoop.ozone.container.diskbalancer.policy.DefaultVolumeChoosingPolicy: Volume[1] - disk=DS-baa06cd6-702b-49fc-9887-e241bce06863, utilization=0.5027846478, capacity=53681722491, effectiveUsed=26990345938, available=53534920704, usableSpace=5216540073, committedBytes=26843544151, delta=0
   2026-03-06 12:27:02,445 DEBUG [DiskBalancerService#2]-org.apache.hadoop.ozone.container.diskbalancer.policy.DefaultVolumeChoosingPolicy: Volume[2] - disk=DS-ef78e643-5126-4fa0-8c30-8ff15564f77f, utilization=0.5228016301, capacity=53681722491, effectiveUsed=28064892027, available=25616830464, usableSpace=4141993984, committedBytes=0, delta=0
   2                       
   
   ```
   Let's take help of above example is any user is giving 10% threshold than it won't start using the threshold range we can say that all have within the range so no movement as per the debug log
   But then what user sees from the dn ui for each volume utilisation is :
   ```
   Disk1-50%
   Disk2-1%
   Disk3-1%
   ```
   So giving threshold 10% user assumes it should start but if we have utilisation for each shown that would be great as it shows the clear picture. so as per above log all dn utilisation is somewhat around 52%:
   ```
   Disk1-50%
   Disk2-50%
   Disk3-52%
   ```
   So user will ask why utilisation is high even if it shows very less used bytes on aprticular voolume that's why added pre allocated container bytes to tell this is the one which is also contributing for used bytes and utilisation to be high.
   I hope this clears why I am also adding pre-allocated bytes.


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "ChenSammi (via GitHub)" <gi...@apache.org>.
ChenSammi commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4134488445

   datanode debug log by default is not available. Does DN web UI show each volume's capacity and used space?  
   Since we already provide this new command, mainly for debug purpose, it will be more user friendly if we provide all info in one command, instead of user has to visit different places to get a full picture. 
   
   BTW, can we limit the Utilization precision, and ThresholdRange? maybe 5 digital, for example, 0.00001 is enough. Or current 20 digital precision is more helpful for debug? 


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "ChenSammi (via GitHub)" <gi...@apache.org>.
ChenSammi commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4131895697

   @Gargi-jais11 , why we only show "Pre-Allocated Container Bytes" for usage detail?  Imaging you are the user which is in doubt why no container is moved, what will be your steps to investigate the issue depending on these new outputs? Which outputs will be most useful? 
   
   


-- 
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-unsubscribe@ozone.apache.org

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


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


Re: [PR] HDDS-14866. Enhance DiskBalancer Report to show individual volume's density [ozone]

Posted by "Gargi-jais11 (via GitHub)" <gi...@apache.org>.
Gargi-jais11 commented on PR #9969:
URL: https://github.com/apache/ozone/pull/9969#issuecomment-4140483651

   @ChenSammi I have updated diskBalancerReport, you can have a fresh look now.
   


-- 
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-unsubscribe@ozone.apache.org

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


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