diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java index da0e8b1..e937569 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java @@ -158,9 +158,10 @@ implClass = cl.loadClass(className); // Add coprocessors as we go to guard against case where a coprocessor is specified twice // in the configuration - this.coprocessors.add(loadInstance(implClass, Coprocessor.PRIORITY_SYSTEM, conf)); + this.coprocessors.add(loadInstance(implClass, priority, conf)); LOG.info("System coprocessor " + className + " was loaded " + - "successfully with priority (" + priority++ + ")."); + "successfully with priority (" + priority + ")."); + ++priority; } catch (Throwable t) { // We always abort if system coprocessors cannot be loaded abortServer(className, t); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.java index 58cd0fb..66b5c60 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.java @@ -29,6 +29,8 @@ import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.testclassification.SmallTests; import org.junit.Assert; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -51,9 +53,8 @@ return this.aborted; } } - @Test - public void testDoubleLoading() { + public void testDoubleLoadingAndPriorityValue() { final Configuration conf = HBaseConfiguration.create(); CoprocessorHost host = new CoprocessorHost(new TestAbortable()) { @@ -61,7 +62,7 @@ @Override public CoprocessorEnvironment createEnvironment(Class implClass, - final Coprocessor instance, int priority, int sequence, Configuration conf) { + final Coprocessor instance, final int priority, int sequence, Configuration conf) { return new CoprocessorEnvironment() { final Coprocessor envInstance = instance; @@ -82,7 +83,7 @@ @Override public int getPriority() { - return 0; + return priority; } @Override @@ -114,10 +115,19 @@ }; final String key = "KEY"; final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver"; - // Try and load coprocessor three times. - conf.setStrings(key, coprocessor, coprocessor, coprocessor); + // Try and load a coprocessor three times + conf.setStrings(key, coprocessor, coprocessor, coprocessor, SimpleRegionObserverV2.class.getName()); host.loadSystemCoprocessors(conf, key); - // Only one coprocessor loaded - Assert.assertEquals(1, host.coprocessors.size()); + // Two coprocessors(SimpleRegionObserver and SimpleRegionObserverV2) loaded + Assert.assertEquals(2, host.coprocessors.size()); + // Check the priority value + CoprocessorEnvironment simpleEnv = host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName()); + CoprocessorEnvironment simpleEnv_v2 = host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName()); + assertNotNull(simpleEnv); + assertNotNull(simpleEnv_v2); + assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority()); + assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority()); + } + public static class SimpleRegionObserverV2 extends SimpleRegionObserver { } } \ No newline at end of file