commit 3d4d8f1b4a27a05f006bac8010c274ce6815b488 Author: Todd Lipcon Date: Thu Sep 1 15:53:00 2011 -0700 HBASE-4257. Truncate RIT list in UI diff --git src/main/jamon/org/apache/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon src/main/jamon/org/apache/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon index 62a63b1..0dc0691 100644 --- src/main/jamon/org/apache/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon +++ src/main/jamon/org/apache/hbase/tmpl/master/AssignmentManagerStatusTmpl.jamon @@ -18,15 +18,40 @@ See the License for the specific language governing permissions and limitations under the License. <%import> +org.apache.hadoop.hbase.HRegionInfo; org.apache.hadoop.hbase.master.AssignmentManager; org.apache.hadoop.hbase.master.AssignmentManager.RegionState; +java.util.Iterator; java.util.Map; <%args> AssignmentManager assignmentManager; +int limit = 100; <%java> Map rit = assignmentManager.getRegionsInTransition(); + +int toRemove = rit.size() - limit; +int removed = 0; +if (toRemove > 0) { + // getRegionsInTransition returned a copy, so we can mutate it + for (Iterator> it = rit.entrySet().iterator(); + it.hasNext() && toRemove > 0; + ) { + Map.Entry e = it.next(); + if (HRegionInfo.FIRST_META_REGIONINFO.getEncodedName().equals( + e.getKey()) || + HRegionInfo.ROOT_REGIONINFO.getEncodedName().equals( + e.getKey())) { + // don't remove the meta regions, they're too interesting! + continue; + } + it.remove(); + toRemove--; + removed++; + } +} +

Regions in Transition

@@ -39,4 +64,7 @@ No regions in transition. <% entry.getKey() %><% entry.getValue().toDescriptiveString() %> + <%if removed > 0 %> + (<% removed %> more regions in transition not shown) + \ No newline at end of file diff --git src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java index 55cf55e..616a3d2 100644 --- src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java +++ src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java @@ -87,7 +87,7 @@ public class HBaseConfiguration extends Configuration { conf.addResource("hbase-default.xml"); conf.addResource("hbase-site.xml"); - checkDefaultsVersion(conf); + //checkDefaultsVersion(conf); checkForClusterFreeMemoryLimit(conf); return conf; } diff --git src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java index 2867491..4266685 100644 --- src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java +++ src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java @@ -19,10 +19,14 @@ */ package org.apache.hadoop.hbase.master; +import static org.junit.Assert.*; + import java.io.IOException; import java.io.StringWriter; import java.util.List; import java.util.NavigableMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; @@ -33,6 +37,7 @@ import org.apache.hadoop.hbase.master.ServerManager; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; +import org.apache.hbase.tmpl.master.AssignmentManagerStatusTmpl; import org.apache.hbase.tmpl.master.MasterStatusTmpl; import org.junit.Before; import org.junit.Test; @@ -57,17 +62,8 @@ public class TestMasterStatusServlet { static final HRegionInfo FAKE_HRI = new HRegionInfo(FAKE_TABLE.getName(), Bytes.toBytes("a"), Bytes.toBytes("b")); - // static final HRegionInfo FAKE_REGION = null; - @Before public void setupBasicMocks() { - try { - HRegion.createHRegion(FAKE_HRI, HBaseTestingUtility.getTestDir(), - HBaseConfiguration.create(), FAKE_TABLE); - } catch(IOException ioe) { - - } - conf = HBaseConfiguration.create(); master = Mockito.mock(HMaster.class); @@ -146,5 +142,43 @@ public class TestMasterStatusServlet { .render(new StringWriter(), master, admin); } + + @Test + public void testAssignmentManagerTruncatedList() throws IOException { + AssignmentManager am = Mockito.mock(AssignmentManager.class); + + // Add 100 regions as in-transition + NavigableMap regionsInTransition = + Maps.newTreeMap(); + for (byte i = 0; i < 100; i++) { + HRegionInfo hri = new HRegionInfo(FAKE_TABLE.getName(), + new byte[]{i}, new byte[]{(byte) (i+1)}); + regionsInTransition.put(hri.getEncodedName(), + new RegionState(hri, RegionState.State.CLOSING, 12345L, FAKE_HOST)); + } + // Add META in transition as well + regionsInTransition.put( + HRegionInfo.FIRST_META_REGIONINFO.getEncodedName(), + new RegionState(HRegionInfo.FIRST_META_REGIONINFO, + RegionState.State.CLOSING, 12345L, FAKE_HOST)); + Mockito.doReturn(regionsInTransition).when(am).getRegionsInTransition(); + // Render to a string + StringWriter sw = new StringWriter(); + new AssignmentManagerStatusTmpl() + .setLimit(50) + .render(sw, am); + String result = sw.toString(); + + // Should always include META + assertTrue(result.contains(HRegionInfo.FIRST_META_REGIONINFO.getEncodedName())); + + // Make sure we only see 50 of them + Matcher matcher = Pattern.compile("CLOSING").matcher(result); + int count = 0; + while (matcher.find()) { + count++; + } + assertEquals(50, count); + } }