You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ha...@apache.org on 2008/10/20 20:16:37 UTC

svn commit: r706355 - in /hadoop/core/branches/branch-0.19: ./ conf/ src/hdfs/org/apache/hadoop/hdfs/protocol/ src/hdfs/org/apache/hadoop/hdfs/server/datanode/ src/hdfs/org/apache/hadoop/hdfs/server/namenode/ src/test/org/apache/hadoop/hdfs/server/name...

Author: hairong
Date: Mon Oct 20 11:16:37 2008
New Revision: 706355

URL: http://svn.apache.org/viewvc?rev=706355&view=rev
Log:
Merge -r 706349:706350 from trunk to main to move the change log of HADOOP-4430 into the release 0.19 section.

Modified:
    hadoop/core/branches/branch-0.19/   (props changed)
    hadoop/core/branches/branch-0.19/CHANGES.txt
    hadoop/core/branches/branch-0.19/conf/hadoop-default.xml
    hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
    hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/datanode/FSDataset.java
    hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
    hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/JspHelper.java
    hadoop/core/branches/branch-0.19/src/test/org/apache/hadoop/hdfs/server/namenode/TestNamenodeCapacityReport.java
    hadoop/core/branches/branch-0.19/src/webapps/hdfs/dfshealth.jsp

Propchange: hadoop/core/branches/branch-0.19/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 20 11:16:37 2008
@@ -1 +1 @@
-/hadoop/core/trunk:697306,698176,699056,699098,699415,699424,699444,699490,699517,700163,700628,700923,701273,701398,703923,704203,704261,704701,704703,704707,704712,704732,704748,704989,705391,705420,705430,705762
+/hadoop/core/trunk:697306,698176,699056,699098,699415,699424,699444,699490,699517,700163,700628,700923,701273,701398,703923,704203,704261,704701,704703,704707,704712,704732,704748,704989,705391,705420,705430,705762,706350

Modified: hadoop/core/branches/branch-0.19/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/CHANGES.txt?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/CHANGES.txt (original)
+++ hadoop/core/branches/branch-0.19/CHANGES.txt Mon Oct 20 11:16:37 2008
@@ -85,6 +85,16 @@
     consistent with the web interface as defined in HADOOP-2816. (Suresh
     Srinivas via cdouglas)
 
+    HADOOP-4430. Further change the cluster summary at name node web that was
+    changed in HADOOP-2816:
+      Non DFS Used - This indicates the disk space taken by non DFS file from
+                     the Configured capacity
+      DFS Used % - DFS Used % of Configured Capacity 
+      DFS Remaining % - Remaing % Configured Capacity available for DFS use
+    DFS command line report reflects the same change. Config parameter 
+    dfs.datanode.du.pct is no longer used and is removed from the 
+    hadoop-default.xml. (Suresh Srinivas via hairong)
+
   NEW FEATURES
 
     HADOOP-3341. Allow streaming jobs to specify the field separator for map

Modified: hadoop/core/branches/branch-0.19/conf/hadoop-default.xml
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/conf/hadoop-default.xml?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/conf/hadoop-default.xml (original)
+++ hadoop/core/branches/branch-0.19/conf/hadoop-default.xml Mon Oct 20 11:16:37 2008
@@ -374,13 +374,6 @@
 </property>
 
 <property>
-  <name>dfs.datanode.du.pct</name>
-  <value>0.98f</value>
-  <description>When calculating remaining space, only use this percentage of the real available space
-  </description>
-</property>
-
-<property>
   <name>dfs.name.dir</name>
   <value>${hadoop.tmp.dir}/dfs/name</value>
   <description>Determines where on the local filesystem the DFS name node

Modified: hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java (original)
+++ hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/protocol/DatanodeInfo.java Mon Oct 20 11:16:37 2008
@@ -91,24 +91,36 @@
   /** The raw capacity. */
   public long getCapacity() { return capacity; }
   
-  /** The present capacity available for DFS. */
-  public long getPresentCapacity() { return dfsUsed + remaining; }
-  
   /** The used space by the data node. */
   public long getDfsUsed() { return dfsUsed; }
 
+  /** The used space by the data node. */
+  public long getNonDfsUsed() { 
+    long nonDFSUsed = capacity - dfsUsed - remaining;
+    return nonDFSUsed < 0 ? 0 : nonDFSUsed;
+  }
+
   /** The used space by the data node as percentage of present capacity */
   public float getDfsUsedPercent() { 
-    if (getPresentCapacity() <= 0) {
+    if (capacity <= 0) {
       return 100;
     }
 
-    return ((float)dfsUsed * 100.0f)/(float)getPresentCapacity(); 
+    return ((float)dfsUsed * 100.0f)/(float)capacity; 
   }
 
   /** The raw free space. */
   public long getRemaining() { return remaining; }
 
+  /** The remaining space as percentage of configured capacity. */
+  public float getRemainingPercent() { 
+    if (capacity <= 0) {
+      return 0;
+    }
+
+    return ((float)remaining * 100.0f)/(float)capacity; 
+  }
+
   /** The time when this information was accurate. */
   public long getLastUpdate() { return lastUpdate; }
 
@@ -155,10 +167,11 @@
   public String getDatanodeReport() {
     StringBuffer buffer = new StringBuffer();
     long c = getCapacity();
-    long pc = getPresentCapacity();
     long r = getRemaining();
     long u = getDfsUsed();
+    long nonDFSUsed = getNonDfsUsed();
     float usedPercent = getDfsUsedPercent();
+    float remainingPercent = getRemainingPercent();
 
     buffer.append("Name: "+name+"\n");
     if (!NetworkTopology.DEFAULT_RACK.equals(location)) {
@@ -173,10 +186,11 @@
       buffer.append("Normal\n");
     }
     buffer.append("Configured Capacity: "+c+" ("+FsShell.byteDesc(c)+")"+"\n");
-    buffer.append("Present Capacity: "+pc+" ("+FsShell.byteDesc(pc)+")"+"\n");
-    buffer.append("DFS Remaining: " +r+ "("+FsShell.byteDesc(r)+")"+"\n");
     buffer.append("DFS Used: "+u+" ("+FsShell.byteDesc(u)+")"+"\n");
+    buffer.append("Non DFS Used: "+nonDFSUsed+" ("+FsShell.byteDesc(nonDFSUsed)+")"+"\n");
+    buffer.append("DFS Remaining: " +r+ "("+FsShell.byteDesc(r)+")"+"\n");
     buffer.append("DFS Used%: "+FsShell.limitDecimalTo2(usedPercent)+"%\n");
+    buffer.append("DFS Remaining%: "+FsShell.limitDecimalTo2(remainingPercent)+"%\n");
     buffer.append("Last contact: "+new Date(lastUpdate)+"\n");
     return buffer.toString();
   }
@@ -185,7 +199,6 @@
   public String dumpDatanode() {
     StringBuffer buffer = new StringBuffer();
     long c = getCapacity();
-    long pc = getPresentCapacity();
     long r = getRemaining();
     long u = getDfsUsed();
     buffer.append(name);
@@ -200,7 +213,6 @@
       buffer.append(" IN");
     }
     buffer.append(" " + c + "(" + FsShell.byteDesc(c)+")");
-    buffer.append(" " + pc + "(" + FsShell.byteDesc(c)+")");
     buffer.append(" " + u + "(" + FsShell.byteDesc(u)+")");
     buffer.append(" " + FsShell.limitDecimalTo2(((1.0*u)/c)*100)+"%");
     buffer.append(" " + r + "(" + FsShell.byteDesc(r)+")");

Modified: hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/datanode/FSDataset.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/datanode/FSDataset.java?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/datanode/FSDataset.java (original)
+++ hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/datanode/FSDataset.java Mon Oct 20 11:16:37 2008
@@ -287,21 +287,16 @@
   }
 
   class FSVolume {
-    static final double USABLE_DISK_PCT_DEFAULT = 0.98f; 
-
     private FSDir dataDir;
     private File tmpDir;
     private File detachDir; // copy on write for blocks in snapshot
     private DF usage;
     private DU dfsUsage;
     private long reserved;
-    private double usableDiskPct = USABLE_DISK_PCT_DEFAULT;
 
     
     FSVolume(File currentDir, Configuration conf) throws IOException {
       this.reserved = conf.getLong("dfs.datanode.du.reserved", 0);
-      this.usableDiskPct = conf.getFloat("dfs.datanode.du.pct",
-                                         (float) USABLE_DISK_PCT_DEFAULT);
       File parent = currentDir.getParentFile();
 
       this.detachDir = new File(parent, "detach");
@@ -356,7 +351,7 @@
       if (remaining>available) {
         remaining = available;
       }
-      return (remaining > 0) ? (long)(remaining * usableDiskPct) : 0;
+      return (remaining > 0) ? remaining : 0;
     }
       
     String getMount() throws IOException {

Modified: hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Mon Oct 20 11:16:37 2008
@@ -3277,15 +3277,6 @@
   }
 
   /**
-   * Total raw bytes including non-dfs used space.
-   */
-  public long getPresentCapacity() {
-    synchronized (heartbeats) {
-      return this.capacityUsed + this.capacityRemaining;
-    }
-  }
-
-  /**
    * Total used space by data nodes
    */
   public long getCapacityUsed() {
@@ -3294,18 +3285,29 @@
     }
   }
   /**
-   * Total used space by data nodes
+   * Total used space by data nodes as percentage of total capacity
    */
   public float getCapacityUsedPercent() {
     synchronized(heartbeats){
-      if (getPresentCapacity() <= 0) {
+      if (capacityTotal <= 0) {
         return 100;
       }
 
-      return ((float)getCapacityUsed() * 100.0f)/(float)getPresentCapacity();
+      return ((float)capacityUsed * 100.0f)/(float)capacityTotal;
     }
   }
   /**
+   * Total used space by data nodes for non DFS purposes such
+   * as storing temporary files on the local file system
+   */
+  public long getCapacityUsedNonDFS() {
+    long nonDFSUsed = 0;
+    synchronized(heartbeats){
+      nonDFSUsed = capacityTotal - capacityRemaining - capacityUsed;
+    }
+    return nonDFSUsed < 0 ? 0 : nonDFSUsed;
+  }
+  /**
    * Total non-used raw bytes.
    */
   public long getCapacityRemaining() {
@@ -3315,6 +3317,18 @@
   }
 
   /**
+   * Total remaining space by data nodes as percentage of total capacity
+   */
+  public float getCapacityRemainingPercent() {
+    synchronized(heartbeats){
+      if (capacityTotal <= 0) {
+        return 0;
+      }
+
+      return ((float)capacityRemaining * 100.0f)/(float)capacityTotal;
+    }
+  }
+  /**
    * Total number of connections.
    */
   public int getTotalLoad() {

Modified: hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/JspHelper.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/JspHelper.java?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/JspHelper.java (original)
+++ hadoop/core/branches/branch-0.19/src/hdfs/org/apache/hadoop/hdfs/server/namenode/JspHelper.java Mon Oct 20 11:16:37 2008
@@ -240,8 +240,12 @@
         FIELD_NAME              = 1,
         FIELD_LAST_CONTACT      = 2,
         FIELD_BLOCKS            = 3,
-        FIELD_SIZE              = 4,
-        FIELD_DISK_USED         = 5,
+        FIELD_CAPACITY          = 4,
+        FIELD_USED              = 5,
+        FIELD_PERCENT_USED      = 6,
+        FIELD_NONDFS_USED       = 7,
+        FIELD_REMAINING         = 8,
+        FIELD_PERCENT_REMAINING = 9,
         SORT_ORDER_ASC          = 1,
         SORT_ORDER_DSC          = 2;
 
@@ -251,12 +255,20 @@
       public NodeComapare(String field, String order) {
         if (field.equals("lastcontact")) {
           sortField = FIELD_LAST_CONTACT;
-        } else if (field.equals("size")) {
-          sortField = FIELD_SIZE;
+        } else if (field.equals("capacity")) {
+          sortField = FIELD_CAPACITY;
+        } else if (field.equals("used")) {
+          sortField = FIELD_USED;
+        } else if (field.equals("nondfsused")) {
+          sortField = FIELD_NONDFS_USED;
+        } else if (field.equals("remaining")) {
+          sortField = FIELD_REMAINING;
+        } else if (field.equals("pcused")) {
+          sortField = FIELD_PERCENT_USED;
+        } else if (field.equals("pcremaining")) {
+          sortField = FIELD_PERCENT_REMAINING;
         } else if (field.equals("blocks")) {
           sortField = FIELD_BLOCKS;
-        } else if (field.equals("pcused")) {
-          sortField = FIELD_DISK_USED;
         } else {
           sortField = FIELD_NAME;
         }
@@ -275,18 +287,35 @@
         case FIELD_LAST_CONTACT:
           ret = (int) (d2.getLastUpdate() - d1.getLastUpdate());
           break;
-        case FIELD_BLOCKS:
-          ret = d1.numBlocks() - d2.numBlocks();
-          break;
-        case FIELD_SIZE:
+        case FIELD_CAPACITY:
           long  dlong = d1.getCapacity() - d2.getCapacity();
           ret = (dlong < 0) ? -1 : ((dlong > 0) ? 1 : 0);
           break;
-        case FIELD_DISK_USED:
-          double ddbl =((d2.getRemaining()*1.0/d2.getCapacity())-
-                        (d1.getRemaining()*1.0/d1.getCapacity()));
+        case FIELD_USED:
+          dlong = d1.getDfsUsed() - d2.getDfsUsed();
+          ret = (dlong < 0) ? -1 : ((dlong > 0) ? 1 : 0);
+          break;
+        case FIELD_NONDFS_USED:
+          dlong = d1.getNonDfsUsed() - d2.getNonDfsUsed();
+          ret = (dlong < 0) ? -1 : ((dlong > 0) ? 1 : 0);
+          break;
+        case FIELD_REMAINING:
+          dlong = d1.getRemaining() - d2.getRemaining();
+          ret = (dlong < 0) ? -1 : ((dlong > 0) ? 1 : 0);
+          break;
+        case FIELD_PERCENT_USED:
+          double ddbl =((d1.getDfsUsedPercent())-
+                        (d2.getDfsUsedPercent()));
+          ret = (ddbl < 0) ? -1 : ((ddbl > 0) ? 1 : 0);
+          break;
+        case FIELD_PERCENT_REMAINING:
+          ddbl =((d1.getRemainingPercent())-
+                 (d2.getRemainingPercent()));
           ret = (ddbl < 0) ? -1 : ((ddbl > 0) ? 1 : 0);
           break;
+        case FIELD_BLOCKS:
+          ret = d1.numBlocks() - d2.numBlocks();
+          break;
         case FIELD_NAME: 
           ret = d1.getHostName().compareTo(d2.getHostName());
           break;

Modified: hadoop/core/branches/branch-0.19/src/test/org/apache/hadoop/hdfs/server/namenode/TestNamenodeCapacityReport.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/src/test/org/apache/hadoop/hdfs/server/namenode/TestNamenodeCapacityReport.java?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/src/test/org/apache/hadoop/hdfs/server/namenode/TestNamenodeCapacityReport.java (original)
+++ hadoop/core/branches/branch-0.19/src/test/org/apache/hadoop/hdfs/server/namenode/TestNamenodeCapacityReport.java Mon Oct 20 11:16:37 2008
@@ -64,22 +64,25 @@
       
       assertTrue(live.size() == 1);
       
-      long used, remaining, totalCapacity, presentCapacity;
-      float percentUsed;
+      long used, remaining, configCapacity, nonDFSUsed;
+      float percentUsed, percentRemaining;
       
       for (final DatanodeDescriptor datanode : live) {
         used = datanode.getDfsUsed();
         remaining = datanode.getRemaining();
-        totalCapacity = datanode.getCapacity();
-        presentCapacity = datanode.getPresentCapacity();
+        nonDFSUsed = datanode.getNonDfsUsed();
+        configCapacity = datanode.getCapacity();
         percentUsed = datanode.getDfsUsedPercent();
+        percentRemaining = datanode.getRemainingPercent();
         
-        LOG.info("Datanode totalCapacity " + totalCapacity
-            + " presentCapacity " + presentCapacity + " used " + used
-            + " remaining " + remaining + " perenceUsed " + percentUsed);
+        LOG.info("Datanode configCapacity " + configCapacity
+            + " used " + used + " non DFS used " + nonDFSUsed 
+            + " remaining " + remaining + " perentUsed " + percentUsed
+            + " percentRemaining " + percentRemaining);
         
-        assertTrue(presentCapacity == (used + remaining));
-        assertTrue(percentUsed == ((100.0f * (float)used)/(float)presentCapacity));
+        assertTrue(configCapacity == (used + remaining + nonDFSUsed));
+        assertTrue(percentUsed == ((100.0f * (float)used)/(float)configCapacity));
+        assertTrue(percentRemaining == ((100.0f * (float)remaining)/(float)configCapacity));
       }   
       
       DF df = new DF(new File(cluster.getDataDirectory()), conf);
@@ -99,27 +102,32 @@
       long diskCapacity = numOfDataDirs * df.getCapacity();
       reserved *= numOfDataDirs;
       
-      totalCapacity = namesystem.getCapacityTotal();
-      presentCapacity = namesystem.getPresentCapacity();
+      configCapacity = namesystem.getCapacityTotal();
       used = namesystem.getCapacityUsed();
+      nonDFSUsed = namesystem.getCapacityUsedNonDFS();
       remaining = namesystem.getCapacityRemaining();
       percentUsed = namesystem.getCapacityUsedPercent();
+      percentRemaining = namesystem.getCapacityRemainingPercent();
       
       LOG.info("Data node directory " + cluster.getDataDirectory());
            
-      LOG.info("Name node diskCapacity " + diskCapacity + " totalCapacity "
-          + totalCapacity + " reserved " + reserved + " presentCapacity "
-          + presentCapacity + " used " + used + " remaining " + remaining
-          + " percentUsed " + percentUsed);
+      LOG.info("Name node diskCapacity " + diskCapacity + " configCapacity "
+          + configCapacity + " reserved " + reserved + " used " + used 
+          + " remaining " + remaining + " nonDFSUsed " + nonDFSUsed 
+          + " remaining " + remaining + " percentUsed " + percentUsed 
+          + " percentRemaining " + percentRemaining);
       
       // Ensure new total capacity reported excludes the reserved space
-      assertTrue(totalCapacity == diskCapacity - reserved);
-      
-      // Ensure present capacity is sum of used and remaining
-      assertTrue(presentCapacity == (used + remaining));
+      assertTrue(configCapacity == diskCapacity - reserved);
       
+      // Ensure new total capacity reported excludes the reserved space
+      assertTrue(configCapacity == (used + remaining + nonDFSUsed));
+
+      // Ensure percent used is calculated based on used and present capacity
+      assertTrue(percentUsed == ((float)used * 100.0f)/(float)configCapacity);
+
       // Ensure percent used is calculated based on used and present capacity
-      assertTrue(percentUsed == ((float)used * 100.0f)/(float)presentCapacity);
+      assertTrue(percentRemaining == ((float)remaining * 100.0f)/(float)configCapacity);
     }
     finally {
       if (cluster != null) {cluster.shutdown();}

Modified: hadoop/core/branches/branch-0.19/src/webapps/hdfs/dfshealth.jsp
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.19/src/webapps/hdfs/dfshealth.jsp?rev=706355&r1=706354&r2=706355&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.19/src/webapps/hdfs/dfshealth.jsp (original)
+++ hadoop/core/branches/branch-0.19/src/webapps/hdfs/dfshealth.jsp Mon Oct 20 11:16:37 2008
@@ -85,9 +85,11 @@
         return;
     
     long c = d.getCapacity();
-    long pc = d.getPresentCapacity();
     long u = d.getDfsUsed();
+    long nu = d.getNonDfsUsed();
+    long r = d.getRemaining();
     String percentUsed = FsShell.limitDecimalTo2(d.getDfsUsedPercent());    
+    String percentRemaining = FsShell.limitDecimalTo2(d.getRemainingPercent());    
     
     String adminState = (d.isDecommissioned() ? "Decommissioned" :
                          (d.isDecommissionInProgress() ? "Decommission In Progress":
@@ -97,16 +99,20 @@
     long currentTime = System.currentTimeMillis();
     out.print("<td class=\"lastcontact\"> " +
               ((currentTime - timestamp)/1000) +
-	      "<td class=\"adminstate\">" +
+              "<td class=\"adminstate\">" +
               adminState +
-	      "<td class=\"size\">" +
+              "<td align=\"right\" class=\"capacity\">" +
               FsShell.limitDecimalTo2(c*1.0/diskBytes) +
-	      "<td align=\"right\" class=\"pcapacity\">" +
-              FsShell.limitDecimalTo2(pc*1.0/diskBytes) +      
-	      "<td class=\"pcused\">" + percentUsed +"<td class=\"pcused\">" +
-	      ServletUtil.percentageGraph( (int)Double.parseDouble(percentUsed) , 100) +
-	      "<td class=\"size\">" +
-              FsShell.limitDecimalTo2(d.getRemaining()*1.0/diskBytes) +
+              "<td align=\"right\" class=\"used\">" +
+              FsShell.limitDecimalTo2(u*1.0/diskBytes) +      
+              "<td align=\"right\" class=\"nondfsused\">" +
+              FsShell.limitDecimalTo2(nu*1.0/diskBytes) +      
+              "<td align=\"right\" class=\"remaining\">" +
+              FsShell.limitDecimalTo2(r*1.0/diskBytes) +      
+              "<td align=\"right\" class=\"pcused\">" + percentUsed +
+              "<td class=\"pcused\">" +
+              ServletUtil.percentageGraph( (int)Double.parseDouble(percentUsed) , 100) +
+              "<td align=\"right\" class=\"pcremaining`\">" + percentRemaining +
               "<td title=" + "\"blocks scheduled : " + d.getBlocksScheduled() + 
               "\" class=\"blocks\">" + d.numBlocks() + "\n");
   }
@@ -125,9 +131,6 @@
     if ( sorterOrder == null )
         sorterOrder = "ASC";
 
-    jspHelper.sortNodeList(live, sorterField, sorterOrder);
-    jspHelper.sortNodeList(dead, "name", "ASC");
-    
     // Find out common suffix. Should this be before or after the sort?
     String port_suffix = null;
     if ( live.size() > 0 ) {
@@ -148,22 +151,25 @@
     counterReset();
     
     long total = fsn.getCapacityTotal();
-    long present = fsn.getPresentCapacity();
     long remaining = fsn.getCapacityRemaining();
     long used = fsn.getCapacityUsed();
+    long nonDFS = fsn.getCapacityUsedNonDFS();
     float percentUsed = fsn.getCapacityUsedPercent();
+    float percentRemaining = fsn.getCapacityRemainingPercent();
 
     out.print( "<div id=\"dfstable\"> <table>\n" +
 	       rowTxt() + colTxt() + "Configured Capacity" + colTxt() + ":" + colTxt() +
 	       FsShell.byteDesc( total ) +
-	       rowTxt() + colTxt() + "Present Capacity" + colTxt() + ":" + colTxt() +
-	       FsShell.byteDesc( present ) +
-	       rowTxt() + colTxt() + "DFS Remaining" + colTxt() + ":" + colTxt() +
-	       FsShell.byteDesc( remaining ) +
 	       rowTxt() + colTxt() + "DFS Used" + colTxt() + ":" + colTxt() +
 	       FsShell.byteDesc( used ) +
+	       rowTxt() + colTxt() + "Non DFS Used" + colTxt() + ":" + colTxt() +
+	       FsShell.byteDesc( nonDFS ) +
+	       rowTxt() + colTxt() + "DFS Remaining" + colTxt() + ":" + colTxt() +
+	       FsShell.byteDesc( remaining ) +
 	       rowTxt() + colTxt() + "DFS Used%" + colTxt() + ":" + colTxt() +
 	       FsShell.limitDecimalTo2(percentUsed) + " %" +
+	       rowTxt() + colTxt() + "DFS Remaining%" + colTxt() + ":" + colTxt() +
+	       FsShell.limitDecimalTo2(percentRemaining) + " %" +
 	       rowTxt() + colTxt() +
                "<a href=\"#LiveNodes\">Live Nodes</a> " +
                colTxt() + ":" + colTxt() + live.size() +
@@ -191,24 +197,28 @@
                 diskByteStr = "TB";
             }
 
-	    out.print( "<tr class=\"headerRow\"> <th " +
-                       ("name") + "> Node <th " +
-                       NodeHeaderStr("lastcontact") + "> Last Contact <th " +
-                       NodeHeaderStr("adminstate") + "> Admin State <th " +
-                       NodeHeaderStr("size") + "> Configured capacity (" + 
-                       diskByteStr + ") <th " + 
-                       NodeHeaderStr("pcapacity") + "> Present capacity (" + 
-                       diskByteStr + ") <th " + 
-                       NodeHeaderStr("pcused") + "> Used (%) <th " + 
-                       NodeHeaderStr("pcused") + "> Used (%) <th " +
-                       NodeHeaderStr("remaining") + "> Remaining (" + 
-                       diskByteStr + ") <th " +
-                       NodeHeaderStr("blocks") + "> Blocks\n" );
+      out.print( "<tr class=\"headerRow\"> <th " +
+                 NodeHeaderStr("name") + "> Node <th " +
+                 NodeHeaderStr("lastcontact") + "> Last <br>Contact <th " +
+                 NodeHeaderStr("adminstate") + "> Admin State <th " +
+                 NodeHeaderStr("capacity") + "> Configured <br>Capacity (" + 
+                 diskByteStr + ") <th " + 
+                 NodeHeaderStr("used") + "> Used <br>(" + 
+                 diskByteStr + ") <th " + 
+                 NodeHeaderStr("nondfsused") + "> Non DFS <br>Used (" + 
+                 diskByteStr + ") <th " + 
+                 NodeHeaderStr("remaining") + "> Remaining <br>(" + 
+                 diskByteStr + ") <th " + 
+                 NodeHeaderStr("pcused") + "> Used <br>(%) <th " + 
+                 NodeHeaderStr("pcused") + "> Used <br>(%) <th " +
+                 NodeHeaderStr("pcremaining") + "> Remaining <br>(%) <th " +
+                 NodeHeaderStr("blocks") + "> Blocks\n" );
             
-	    for ( int i=0; i < live.size(); i++ ) {
-		generateNodeData( out, live.get(i), port_suffix, true );
-	    }
-	}
+      jspHelper.sortNodeList(live, sorterField, sorterOrder);
+      for ( int i=0; i < live.size(); i++ ) {
+        generateNodeData( out, live.get(i), port_suffix, true );
+      }
+    }
     out.print("</table>\n");
     
     counterReset();
@@ -220,6 +230,7 @@
 	    out.print( "<table border=1 cellspacing=0> <tr id=\"row1\"> " +
 		       "<td> Node \n" );
 	    
+      jspHelper.sortNodeList(dead, "name", "ASC");
 	    for ( int i=0; i < dead.size() ; i++ ) {
                 generateNodeData( out, dead.get(i), port_suffix, false );
 	    }