Repository: hbase
Updated Branches:
  refs/heads/branch-1.0 533f1ddb2 -> f94e8b9eb


HBASE-13923 Loaded region coprocessors are not reported in shell status command 
(Ashish Singhi)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f94e8b9e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f94e8b9e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f94e8b9e

Branch: refs/heads/branch-1.0
Commit: f94e8b9eb6896d949e4398caca73792db8cf28ee
Parents: 533f1dd
Author: tedyu <[email protected]>
Authored: Wed Jun 24 00:31:30 2015 -0700
Committer: tedyu <[email protected]>
Committed: Wed Jun 24 00:31:30 2015 -0700

----------------------------------------------------------------------
 .../hbase/regionserver/HRegionServer.java       | 11 ++++--
 .../hbase/coprocessor/TestClassLoading.java     | 36 ++++++++++++++------
 2 files changed, 34 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/f94e8b9e/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 2af36c2..f5cebc8 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -111,6 +111,7 @@ import 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServic
 import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos;
 import 
org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos.RegionLoad;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.Coprocessor;
+import 
org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.Coprocessor.Builder;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameStringPair;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
@@ -1101,17 +1102,23 @@ public class HRegionServer extends HasThread implements
     serverLoad.setUsedHeapMB((int)(memory.getUsed() / 1024 / 1024));
     serverLoad.setMaxHeapMB((int) (memory.getMax() / 1024 / 1024));
     Set<String> coprocessors = 
getWAL(null).getCoprocessorHost().getCoprocessors();
+    Builder coprocessorBuilder = Coprocessor.newBuilder();
     for (String coprocessor : coprocessors) {
       serverLoad.addCoprocessors(
-        Coprocessor.newBuilder().setName(coprocessor).build());
+        coprocessorBuilder.setName(coprocessor).build());
     }
     RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();
     RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();
     for (HRegion region : regions) {
+      Set<String> regionCoprocessors = 
region.getCoprocessorHost().getCoprocessors();
+      Iterator<String> iterator = regionCoprocessors.iterator();
+      while (iterator.hasNext()) {
+        
serverLoad.addCoprocessors(coprocessorBuilder.setName(iterator.next()).build());
+      }
       serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, 
regionSpecifier));
       for (String coprocessor :
           
getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors()) {
-        
serverLoad.addCoprocessors(Coprocessor.newBuilder().setName(coprocessor).build());
+        
serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());
       }
     }
     serverLoad.setReportStartTime(reportStartTime);

http://git-wip-us.apache.org/repos/asf/hbase/blob/f94e8b9e/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java
index b2f6685..42c5d49 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java
@@ -75,6 +75,10 @@ public class TestClassLoading {
       regionServerCoprocessor.getSimpleName()
   };
 
+  private static final String[] masterRegionServerSystemCoprocessors = new 
String[] {
+      regionCoprocessor1.getSimpleName(), 
MultiRowMutationEndpoint.class.getSimpleName(),
+      regionServerCoprocessor.getSimpleName() };
+
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
     Configuration conf = TEST_UTIL.getConfiguration();
@@ -451,7 +455,7 @@ public class TestClassLoading {
     // This was a test for HBASE-4070.
     // We are removing coprocessors from region load in HBASE-5258.
     // Therefore, this test now only checks system coprocessors.
-    assertAllRegionServers(regionServerSystemCoprocessors,null);
+    assertAllRegionServers(null);
   }
 
   /**
@@ -482,20 +486,19 @@ public class TestClassLoading {
     return serverLoadHashMap;
   }
 
-  void assertAllRegionServers(String[] expectedCoprocessors, String tableName)
+  void assertAllRegionServers(String tableName)
       throws InterruptedException {
     Map<ServerName, ServerLoad> servers;
     String[] actualCoprocessors = null;
     boolean success = false;
-    for(int i = 0; i < 5; i++) {
-      if (tableName == null) {
-        //if no tableName specified, use all servers.
-        servers =
-            TEST_UTIL.getMiniHBaseCluster().getMaster().getServerManager().
-                getOnlineServers();
-      } else {
-        servers = serversForTable(tableName);
-      }
+    String[] expectedCoprocessors = regionServerSystemCoprocessors;
+    if (tableName == null) {
+      // if no tableName specified, use all servers.
+      servers = 
TEST_UTIL.getMiniHBaseCluster().getMaster().getServerManager().getOnlineServers();
+    } else {
+      servers = serversForTable(tableName);
+    }
+    for (int i = 0; i < 5; i++) {
       boolean any_failed = false;
       for(Map.Entry<ServerName,ServerLoad> server: servers.entrySet()) {
         actualCoprocessors = server.getValue().getRsCoprocessors();
@@ -504,8 +507,10 @@ public class TestClassLoading {
               Arrays.toString(actualCoprocessors) +
               " ; expected: " + Arrays.toString(expectedCoprocessors));
           any_failed = true;
+          expectedCoprocessors = 
switchExpectedCoprocessors(expectedCoprocessors);
           break;
         }
+        expectedCoprocessors = 
switchExpectedCoprocessors(expectedCoprocessors);
       }
       if (any_failed == false) {
         success = true;
@@ -517,6 +522,15 @@ public class TestClassLoading {
     assertTrue(success);
   }
 
+  private String[] switchExpectedCoprocessors(String[] expectedCoprocessors) {
+    if (Arrays.equals(regionServerSystemCoprocessors, expectedCoprocessors)) {
+      expectedCoprocessors = masterRegionServerSystemCoprocessors;
+    } else {
+      expectedCoprocessors = regionServerSystemCoprocessors;
+    }
+    return expectedCoprocessors;
+  }
+
   @Test
   public void testMasterCoprocessorsReported() {
     // HBASE 4070: Improve region server metrics to report loaded coprocessors

Reply via email to