anchor.diff:        if (sl != null) {
           RegionMetrics regionMetrics = sl.getRegionMetrics().get(regionInfo.getRegionName());
           regionsToLoad.put(regionInfo, regionMetrics);
  -        if(regionMetrics != null) {
  +        if (regionMetrics != null) {
             totalReadReq += regionMetrics.getReadRequestCount();
             totalWriteReq += regionMetrics.getWriteRequestCount();
             totalSize += regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE);
             totalStoreFileCount += regionMetrics.getStoreFileCount();
             totalMemSize += regionMetrics.getMemStoreSize().get(Size.Unit.MEGABYTE);
             totalStoreFileSizeMB += regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE);
  +          totalCompactingCells += regionMetrics.getCompactingCellCount();
  +          totalCompactedCells += regionMetrics.getCompactedCellCount();
           } else {
             RegionMetrics load0 = getEmptyRegionMetrics(regionInfo);
             regionsToLoad.put(regionInfo, load0);
  
positive.code:   try {
    table = master.getConnection().getTable(TableName.valueOf(fqtn));
    if (table.getDescriptor().getRegionReplication() > 1) {
      tableHeader = "<h2>Table Regions</h2><table id=\"tableRegionTable\" class=\"tablesorter table table-striped\" style=\"table-layout: fixed; word-wrap: break-word;\"><thead><tr><th>Name</th><th>Region Server</th><th>ReadRequests</th><th>WriteRequests</th><th>StorefileSize</th><th>Num.Storefiles</th><th>MemSize</th><th>Locality</th><th>Start Key</th><th>End Key</th><th>ReplicaID</th></tr></thead>";
      withReplica = true;
    } else {
      tableHeader = "<h2>Table Regions</h2><table id=\"tableRegionTable\" class=\"tablesorter table table-striped\" style=\"table-layout: fixed; word-wrap: break-word;\"><thead><tr><th>Name</th><th>Region Server</th><th>ReadRequests</th><th>WriteRequests</th><th>StorefileSize</th><th>Num.Storefiles</th><th>MemSize</th><th>Locality</th><th>Start Key</th><th>End Key</th></tr></thead>";
    }
    if ( !readOnly && action != null ) {
  %>
  
negative.code:   if (totalMemSize > 0) {
      totalMemSizeStr = StringUtils.byteDesc(totalMemSize*1024l*1024);
    }
    if (totalCompactingCells > 0) {
      totalCompactionProgress = String.format("%.2f", 100 *
        ((float) totalCompactedCells / totalCompactingCells)) + "%";
    }
  
    if(regions != null && regions.size() > 0) { %>
  <h2>Table Regions</h2>
  <div class="tabbable">
    <ul class="nav nav-pills">
      <li class="active">
        <a href="#tab_baseStats" data-toggle="tab">Base Stats</a>
      </li>
      <li class="">
        <a href="#tab_compactStats" data-toggle="tab">Compactions</a>
      </li>
    </ul>
    <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;">
      <div class="tab-pane active" id="tab_baseStats">
        <table id="regionServerDetailsTable" class="tablesorter table table-striped">
          <thead>
            <tr>
              <th>Name(<%= String.format("%,1d", regions.size())%>)</th>
              <th>Region Server</th>
              <th>ReadRequests<br>(<%= String.format("%,1d", totalReadReq)%>)</th>
              <th>WriteRequests<br>(<%= String.format("%,1d", totalWriteReq)%>)</th>
              <th>StorefileSize<br>(<%= totalSizeStr %>)</th>
              <th>Num.Storefiles<br>(<%= String.format("%,1d", totalStoreFileCount)%>)</th>
              <th>MemSize<br>(<%= totalMemSizeStr %>)</th>
              <th>Locality</th>
              <th>Start Key</th>
              <th>End Key</th>
              <th>Region State</th>
              <%
                if (withReplica) {
              %>
              <th>ReplicaID</th>
              <%
                }
              %>
            </tr>
          </thead>
          <tbody>
          <%
            List<Map.Entry<RegionInfo, RegionMetrics>> entryList = new ArrayList<>(regionsToLoad.entrySet());
            numRegions = regions.size();
            int numRegionsRendered = 0;
            // render all regions
            if (numRegionsToRender < 0) {
              numRegionsToRender = numRegions;
            }
            for (Map.Entry<RegionInfo, RegionMetrics> hriEntry : entryList) {
              RegionInfo regionInfo = hriEntry.getKey();
              ServerName addr = regionsToServer.get(regionInfo);
              RegionMetrics load = hriEntry.getValue();
              String urlRegionServer = null;
              String readReq = "N/A";
              String writeReq = "N/A";
              String regionSize = ZEROMB;
              String fileCount = "N/A";
              String memSize = ZEROMB;
              float locality = 0.0f;
              String state = "N/A";
              if (load != null) {
                readReq = String.format("%,1d", load.getReadRequestCount());
                writeReq = String.format("%,1d", load.getWriteRequestCount());
                double rSize = load.getStoreFileSize().get(Size.Unit.BYTE);
                if (rSize > 0) {
                  regionSize = StringUtils.byteDesc((long)rSize);
                }
                fileCount = String.format("%,1d", load.getStoreFileCount());
                double mSize = load.getMemStoreSize().get(Size.Unit.BYTE);
                if (mSize > 0) {
                  memSize = StringUtils.byteDesc((long)mSize);
                }
                locality = load.getDataLocality();
              }
  
              if (stateMap.containsKey(regionInfo.getEncodedName())) {
                state = stateMap.get(regionInfo.getEncodedName()).toString();
              }
  
              if (addr != null) {
                ServerMetrics sl = master.getServerManager().getLoad(addr);
                // This port might be wrong if RS actually ended up using something else.
                urlRegionServer =
                  "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status";
                if(sl != null) {
                  Integer i = regDistribution.get(addr);
                  if (null == i) i = Integer.valueOf(0);
                  regDistribution.put(addr, i + 1);
                  if (withReplica && RegionReplicaUtil.isDefaultReplica(regionInfo.getReplicaId())) {
                    i = primaryRegDistribution.get(addr);
                    if (null == i) i = Integer.valueOf(0);
                    primaryRegDistribution.put(addr, i+1);
                  }
                }
              }
              if (numRegionsRendered < numRegionsToRender) {
                numRegionsRendered++;
          %>
          <tr>
            <td><%= escapeXml(Bytes.toStringBinary(regionInfo.getRegionName())) %></td>
            <%
            if (urlRegionServer != null) {
            %>
            <td>
               <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %></a>
            </td>
            <%
            } else {
            %>
            <td class="undeployed-region">not deployed</td>
            <%
            }
            %>
            <td><%= readReq%></td>
            <td><%= writeReq%></td>
            <td><%= regionSize%></td>
            <td><%= fileCount%></td>
            <td><%= memSize%></td>
            <td><%= locality%></td>
            <td><%= escapeXml(Bytes.toStringBinary(regionInfo.getStartKey()))%></td>
            <td><%= escapeXml(Bytes.toStringBinary(regionInfo.getEndKey()))%></td>
            <td><%= state%></td>
            <%
            if (withReplica) {
            %>
            <td><%= regionInfo.getReplicaId() %></td>
            <%
            }
            %>
          </tr>
          <% } %>
          <% } %>
          </tbody>
        </table>
        <% if (numRegions > numRegionsRendered) {
             String allRegionsUrl = "?name=" + URLEncoder.encode(fqtn,"UTF-8") + "&numRegions=all";
        %>
        <p>This table has <b><%= numRegions %></b> regions in total, in order to improve the page load time,
          only <b><%= numRegionsRendered %></b> regions are displayed here, <a href="<%= allRegionsUrl %>">click
          here</a> to see all regions.</p>
        <% } %>
      </div>
      <div class="tab-pane" id="tab_compactStats">
        <table id="tableCompactStatsTable" class="tablesorter table table-striped">
          <thead>
            <tr>
              <th>Name(<%= String.format("%,1d", regions.size())%>)</th>
              <th>Region Server</th>
              <th>Num. Compacting Cells<br>(<%= String.format("%,1d", totalCompactingCells)%>)</th>
              <th>Num. Compacted Cells<br>(<%= String.format("%,1d", totalCompactedCells)%>)</th>
              <th>Remaining Cells<br>(<%= String.format("%,1d", totalCompactingCells-totalCompactedCells)%>)</th>
              <th>Compaction Progress<br>(<%= totalCompactionProgress %>)</th>
            </tr>
          </thead>
          <tbody>
          <%
            numRegionsRendered = 0;
            for (Map.Entry<RegionInfo, RegionMetrics> hriEntry : entryList) {
              RegionInfo regionInfo = hriEntry.getKey();
              ServerName addr = regionsToServer.get(regionInfo);
              RegionMetrics load = hriEntry.getValue();
              String urlRegionServer = null;
              long compactingCells = 0;
              long compactedCells = 0;
              String compactionProgress = "";
              if (load != null) {
                compactingCells = load.getCompactingCellCount();
                compactedCells = load.getCompactedCellCount();
                if (compactingCells > 0) {
                  compactionProgress = String.format("%.2f", 100 * ((float)
                  compactedCells / compactingCells)) + "%";
                }
              }
  
              if (addr != null) {
                // This port might be wrong if RS actually ended up using something else.
                urlRegionServer =
                  "//" + URLEncoder.encode(addr.getHostname()) + ":" + master.getRegionServerInfoPort(addr) + "/rs-status";
              }
  
              if (numRegionsRendered < numRegionsToRender) {
                numRegionsRendered++;
          %>
          <tr>
            <td><%= escapeXml(Bytes.toStringBinary(regionInfo.getRegionName())) %></td>
            <%
            if (urlRegionServer != null) {
            %>
            <td>
              <a href="<%= urlRegionServer %>"><%= addr == null? "-": StringEscapeUtils.escapeHtml4(addr.getHostname().toString()) + ":" + master.getRegionServerInfoPort(addr) %></a>
            </td>
            <%
            } else {
            %>
            <td class="undeployed-region">not deployed</td>
            <%
            }
            %>
            <td><%= String.format("%,1d", compactingCells)%></td>
            <td><%= String.format("%,1d", compactedCells)%></td>
            <td><%= String.format("%,1d", compactingCells - compactedCells)%></td>
            <td><%= compactionProgress%></td>
          </tr>
          <% } %>
          <% } %>
          </tbody>
        </table>
        <% if (numRegions > numRegionsRendered) {
             String allRegionsUrl = "?name=" + URLEncoder.encode(fqtn,"UTF-8") + "&numRegions=all";
        %>
        <p>This table has <b><%= numRegions %></b> regions in total, in order to improve the page load time,
          only <b><%= numRegionsRendered %></b> regions are displayed here, <a href="<%= allRegionsUrl %>">click
          here</a> to see all regions.</p>
        <% } %>
      </div>
    </div>
  </div>
  <h2>Regions by Region Server</h2>
  <%
  if (withReplica) {
  