Repository: hbase-site Updated Branches: refs/heads/asf-site 40396e2de -> 1ee650677
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html ---------------------------------------------------------------------- diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html index 37f3bd1..04be717 100644 --- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html +++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.CountingRegionObserver.html @@ -95,9 +95,9 @@ <span class="sourceLineNo">087</span> }<a name="line.87"></a> <span class="sourceLineNo">088</span><a name="line.88"></a> <span class="sourceLineNo">089</span> @Override<a name="line.89"></a> -<span class="sourceLineNo">090</span> public void preScannerOpen(ObserverContext<RegionCoprocessorEnvironment> e, Scan scan)<a name="line.90"></a> -<span class="sourceLineNo">091</span> throws IOException {<a name="line.91"></a> -<span class="sourceLineNo">092</span> if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a> +<span class="sourceLineNo">090</span> public boolean preScannerNext(ObserverContext<RegionCoprocessorEnvironment> c,<a name="line.90"></a> +<span class="sourceLineNo">091</span> InternalScanner s, List<Result> result, int limit, boolean hasNext) throws IOException {<a name="line.91"></a> +<span class="sourceLineNo">092</span> if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a> <span class="sourceLineNo">093</span> int concurrency = CONCURRENCY.incrementAndGet();<a name="line.93"></a> <span class="sourceLineNo">094</span> for (;;) {<a name="line.94"></a> <span class="sourceLineNo">095</span> int max = MAX_CONCURRENCY.get();<a name="line.95"></a> @@ -110,68 +110,71 @@ <span class="sourceLineNo">102</span> }<a name="line.102"></a> <span class="sourceLineNo">103</span> Threads.sleepWithoutInterrupt(10);<a name="line.103"></a> <span class="sourceLineNo">104</span> }<a name="line.104"></a> -<span class="sourceLineNo">105</span> }<a name="line.105"></a> -<span class="sourceLineNo">106</span><a name="line.106"></a> -<span class="sourceLineNo">107</span> @Override<a name="line.107"></a> -<span class="sourceLineNo">108</span> public void postScannerClose(ObserverContext<RegionCoprocessorEnvironment> e, InternalScanner s)<a name="line.108"></a> -<span class="sourceLineNo">109</span> throws IOException {<a name="line.109"></a> -<span class="sourceLineNo">110</span> if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.110"></a> -<span class="sourceLineNo">111</span> CONCURRENCY.decrementAndGet();<a name="line.111"></a> -<span class="sourceLineNo">112</span> }<a name="line.112"></a> -<span class="sourceLineNo">113</span> }<a name="line.113"></a> -<span class="sourceLineNo">114</span> }<a name="line.114"></a> -<span class="sourceLineNo">115</span><a name="line.115"></a> -<span class="sourceLineNo">116</span> @BeforeClass<a name="line.116"></a> -<span class="sourceLineNo">117</span> public static void setUp() throws Exception {<a name="line.117"></a> -<span class="sourceLineNo">118</span> Configuration conf = TEST_UTIL.getConfiguration();<a name="line.118"></a> -<span class="sourceLineNo">119</span> conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.119"></a> -<span class="sourceLineNo">120</span> conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.120"></a> -<span class="sourceLineNo">121</span> TEST_UTIL.startMiniCluster(3);<a name="line.121"></a> -<span class="sourceLineNo">122</span> TEST_UTIL.getAdmin().setBalancerRunning(false, true);<a name="line.122"></a> -<span class="sourceLineNo">123</span> AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.123"></a> -<span class="sourceLineNo">124</span> CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.124"></a> -<span class="sourceLineNo">125</span> registry.getClusterId().get(), User.getCurrent());<a name="line.125"></a> -<span class="sourceLineNo">126</span> LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.126"></a> -<span class="sourceLineNo">127</span> SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.127"></a> -<span class="sourceLineNo">128</span> .toArray(byte[][]::new);<a name="line.128"></a> -<span class="sourceLineNo">129</span> TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.129"></a> -<span class="sourceLineNo">130</span> TEST_UTIL.waitTableAvailable(TABLE_NAME);<a name="line.130"></a> -<span class="sourceLineNo">131</span> }<a name="line.131"></a> -<span class="sourceLineNo">132</span><a name="line.132"></a> -<span class="sourceLineNo">133</span> @AfterClass<a name="line.133"></a> -<span class="sourceLineNo">134</span> public static void tearDown() throws Exception {<a name="line.134"></a> -<span class="sourceLineNo">135</span> IOUtils.closeQuietly(CONN);<a name="line.135"></a> -<span class="sourceLineNo">136</span> TEST_UTIL.shutdownMiniCluster();<a name="line.136"></a> -<span class="sourceLineNo">137</span> }<a name="line.137"></a> -<span class="sourceLineNo">138</span><a name="line.138"></a> -<span class="sourceLineNo">139</span> private void assertLocs(List<CompletableFuture<HRegionLocation>> futures)<a name="line.139"></a> -<span class="sourceLineNo">140</span> throws InterruptedException, ExecutionException {<a name="line.140"></a> -<span class="sourceLineNo">141</span> assertEquals(256, futures.size());<a name="line.141"></a> -<span class="sourceLineNo">142</span> for (int i = 0; i < futures.size(); i++) {<a name="line.142"></a> -<span class="sourceLineNo">143</span> HRegionLocation loc = futures.get(i).get();<a name="line.143"></a> -<span class="sourceLineNo">144</span> if (i == 0) {<a name="line.144"></a> -<span class="sourceLineNo">145</span> assertTrue(isEmptyStartRow(loc.getRegionInfo().getStartKey()));<a name="line.145"></a> -<span class="sourceLineNo">146</span> } else {<a name="line.146"></a> -<span class="sourceLineNo">147</span> assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegionInfo().getStartKey()));<a name="line.147"></a> -<span class="sourceLineNo">148</span> }<a name="line.148"></a> -<span class="sourceLineNo">149</span> if (i == futures.size() - 1) {<a name="line.149"></a> -<span class="sourceLineNo">150</span> assertTrue(isEmptyStopRow(loc.getRegionInfo().getEndKey()));<a name="line.150"></a> -<span class="sourceLineNo">151</span> } else {<a name="line.151"></a> -<span class="sourceLineNo">152</span> assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegionInfo().getEndKey()));<a name="line.152"></a> -<span class="sourceLineNo">153</span> }<a name="line.153"></a> -<span class="sourceLineNo">154</span> }<a name="line.154"></a> -<span class="sourceLineNo">155</span> }<a name="line.155"></a> -<span class="sourceLineNo">156</span><a name="line.156"></a> -<span class="sourceLineNo">157</span> @Test<a name="line.157"></a> -<span class="sourceLineNo">158</span> public void test() throws InterruptedException, ExecutionException {<a name="line.158"></a> -<span class="sourceLineNo">159</span> List<CompletableFuture<HRegionLocation>> futures =<a name="line.159"></a> -<span class="sourceLineNo">160</span> IntStream.range(0, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.160"></a> -<span class="sourceLineNo">161</span> .map(r -> LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.161"></a> -<span class="sourceLineNo">162</span> .collect(toList());<a name="line.162"></a> -<span class="sourceLineNo">163</span> assertLocs(futures);<a name="line.163"></a> -<span class="sourceLineNo">164</span> assertTrue(MAX_CONCURRENCY.get() <= MAX_ALLOWED);<a name="line.164"></a> -<span class="sourceLineNo">165</span> }<a name="line.165"></a> -<span class="sourceLineNo">166</span>}<a name="line.166"></a> +<span class="sourceLineNo">105</span> return hasNext;<a name="line.105"></a> +<span class="sourceLineNo">106</span> }<a name="line.106"></a> +<span class="sourceLineNo">107</span><a name="line.107"></a> +<span class="sourceLineNo">108</span> @Override<a name="line.108"></a> +<span class="sourceLineNo">109</span> public boolean postScannerNext(ObserverContext<RegionCoprocessorEnvironment> c,<a name="line.109"></a> +<span class="sourceLineNo">110</span> InternalScanner s, List<Result> result, int limit, boolean hasNext) throws IOException {<a name="line.110"></a> +<span class="sourceLineNo">111</span> if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.111"></a> +<span class="sourceLineNo">112</span> CONCURRENCY.decrementAndGet();<a name="line.112"></a> +<span class="sourceLineNo">113</span> }<a name="line.113"></a> +<span class="sourceLineNo">114</span> return hasNext;<a name="line.114"></a> +<span class="sourceLineNo">115</span> }<a name="line.115"></a> +<span class="sourceLineNo">116</span> }<a name="line.116"></a> +<span class="sourceLineNo">117</span><a name="line.117"></a> +<span class="sourceLineNo">118</span> @BeforeClass<a name="line.118"></a> +<span class="sourceLineNo">119</span> public static void setUp() throws Exception {<a name="line.119"></a> +<span class="sourceLineNo">120</span> Configuration conf = TEST_UTIL.getConfiguration();<a name="line.120"></a> +<span class="sourceLineNo">121</span> conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.121"></a> +<span class="sourceLineNo">122</span> conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.122"></a> +<span class="sourceLineNo">123</span> TEST_UTIL.startMiniCluster(3);<a name="line.123"></a> +<span class="sourceLineNo">124</span> TEST_UTIL.getAdmin().balancerSwitch(false, true);<a name="line.124"></a> +<span class="sourceLineNo">125</span> AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.125"></a> +<span class="sourceLineNo">126</span> CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.126"></a> +<span class="sourceLineNo">127</span> registry.getClusterId().get(), User.getCurrent());<a name="line.127"></a> +<span class="sourceLineNo">128</span> LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.128"></a> +<span class="sourceLineNo">129</span> SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.129"></a> +<span class="sourceLineNo">130</span> .toArray(byte[][]::new);<a name="line.130"></a> +<span class="sourceLineNo">131</span> TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.131"></a> +<span class="sourceLineNo">132</span> TEST_UTIL.waitTableAvailable(TABLE_NAME);<a name="line.132"></a> +<span class="sourceLineNo">133</span> }<a name="line.133"></a> +<span class="sourceLineNo">134</span><a name="line.134"></a> +<span class="sourceLineNo">135</span> @AfterClass<a name="line.135"></a> +<span class="sourceLineNo">136</span> public static void tearDown() throws Exception {<a name="line.136"></a> +<span class="sourceLineNo">137</span> IOUtils.closeQuietly(CONN);<a name="line.137"></a> +<span class="sourceLineNo">138</span> TEST_UTIL.shutdownMiniCluster();<a name="line.138"></a> +<span class="sourceLineNo">139</span> }<a name="line.139"></a> +<span class="sourceLineNo">140</span><a name="line.140"></a> +<span class="sourceLineNo">141</span> private void assertLocs(List<CompletableFuture<HRegionLocation>> futures)<a name="line.141"></a> +<span class="sourceLineNo">142</span> throws InterruptedException, ExecutionException {<a name="line.142"></a> +<span class="sourceLineNo">143</span> assertEquals(256, futures.size());<a name="line.143"></a> +<span class="sourceLineNo">144</span> for (int i = 0; i < futures.size(); i++) {<a name="line.144"></a> +<span class="sourceLineNo">145</span> HRegionLocation loc = futures.get(i).get();<a name="line.145"></a> +<span class="sourceLineNo">146</span> if (i == 0) {<a name="line.146"></a> +<span class="sourceLineNo">147</span> assertTrue(isEmptyStartRow(loc.getRegion().getStartKey()));<a name="line.147"></a> +<span class="sourceLineNo">148</span> } else {<a name="line.148"></a> +<span class="sourceLineNo">149</span> assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegion().getStartKey()));<a name="line.149"></a> +<span class="sourceLineNo">150</span> }<a name="line.150"></a> +<span class="sourceLineNo">151</span> if (i == futures.size() - 1) {<a name="line.151"></a> +<span class="sourceLineNo">152</span> assertTrue(isEmptyStopRow(loc.getRegion().getEndKey()));<a name="line.152"></a> +<span class="sourceLineNo">153</span> } else {<a name="line.153"></a> +<span class="sourceLineNo">154</span> assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegion().getEndKey()));<a name="line.154"></a> +<span class="sourceLineNo">155</span> }<a name="line.155"></a> +<span class="sourceLineNo">156</span> }<a name="line.156"></a> +<span class="sourceLineNo">157</span> }<a name="line.157"></a> +<span class="sourceLineNo">158</span><a name="line.158"></a> +<span class="sourceLineNo">159</span> @Test<a name="line.159"></a> +<span class="sourceLineNo">160</span> public void test() throws InterruptedException, ExecutionException {<a name="line.160"></a> +<span class="sourceLineNo">161</span> List<CompletableFuture<HRegionLocation>> futures =<a name="line.161"></a> +<span class="sourceLineNo">162</span> IntStream.range(0, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.162"></a> +<span class="sourceLineNo">163</span> .map(r -> LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.163"></a> +<span class="sourceLineNo">164</span> .collect(toList());<a name="line.164"></a> +<span class="sourceLineNo">165</span> assertLocs(futures);<a name="line.165"></a> +<span class="sourceLineNo">166</span> assertTrue("max allowed is " + MAX_ALLOWED + " but actual is " + MAX_CONCURRENCY.get(),<a name="line.166"></a> +<span class="sourceLineNo">167</span> MAX_CONCURRENCY.get() <= MAX_ALLOWED);<a name="line.167"></a> +<span class="sourceLineNo">168</span> }<a name="line.168"></a> +<span class="sourceLineNo">169</span>}<a name="line.169"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/1ee65067/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html ---------------------------------------------------------------------- diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html index 37f3bd1..04be717 100644 --- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html +++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html @@ -95,9 +95,9 @@ <span class="sourceLineNo">087</span> }<a name="line.87"></a> <span class="sourceLineNo">088</span><a name="line.88"></a> <span class="sourceLineNo">089</span> @Override<a name="line.89"></a> -<span class="sourceLineNo">090</span> public void preScannerOpen(ObserverContext<RegionCoprocessorEnvironment> e, Scan scan)<a name="line.90"></a> -<span class="sourceLineNo">091</span> throws IOException {<a name="line.91"></a> -<span class="sourceLineNo">092</span> if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a> +<span class="sourceLineNo">090</span> public boolean preScannerNext(ObserverContext<RegionCoprocessorEnvironment> c,<a name="line.90"></a> +<span class="sourceLineNo">091</span> InternalScanner s, List<Result> result, int limit, boolean hasNext) throws IOException {<a name="line.91"></a> +<span class="sourceLineNo">092</span> if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.92"></a> <span class="sourceLineNo">093</span> int concurrency = CONCURRENCY.incrementAndGet();<a name="line.93"></a> <span class="sourceLineNo">094</span> for (;;) {<a name="line.94"></a> <span class="sourceLineNo">095</span> int max = MAX_CONCURRENCY.get();<a name="line.95"></a> @@ -110,68 +110,71 @@ <span class="sourceLineNo">102</span> }<a name="line.102"></a> <span class="sourceLineNo">103</span> Threads.sleepWithoutInterrupt(10);<a name="line.103"></a> <span class="sourceLineNo">104</span> }<a name="line.104"></a> -<span class="sourceLineNo">105</span> }<a name="line.105"></a> -<span class="sourceLineNo">106</span><a name="line.106"></a> -<span class="sourceLineNo">107</span> @Override<a name="line.107"></a> -<span class="sourceLineNo">108</span> public void postScannerClose(ObserverContext<RegionCoprocessorEnvironment> e, InternalScanner s)<a name="line.108"></a> -<span class="sourceLineNo">109</span> throws IOException {<a name="line.109"></a> -<span class="sourceLineNo">110</span> if (e.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.110"></a> -<span class="sourceLineNo">111</span> CONCURRENCY.decrementAndGet();<a name="line.111"></a> -<span class="sourceLineNo">112</span> }<a name="line.112"></a> -<span class="sourceLineNo">113</span> }<a name="line.113"></a> -<span class="sourceLineNo">114</span> }<a name="line.114"></a> -<span class="sourceLineNo">115</span><a name="line.115"></a> -<span class="sourceLineNo">116</span> @BeforeClass<a name="line.116"></a> -<span class="sourceLineNo">117</span> public static void setUp() throws Exception {<a name="line.117"></a> -<span class="sourceLineNo">118</span> Configuration conf = TEST_UTIL.getConfiguration();<a name="line.118"></a> -<span class="sourceLineNo">119</span> conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.119"></a> -<span class="sourceLineNo">120</span> conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.120"></a> -<span class="sourceLineNo">121</span> TEST_UTIL.startMiniCluster(3);<a name="line.121"></a> -<span class="sourceLineNo">122</span> TEST_UTIL.getAdmin().setBalancerRunning(false, true);<a name="line.122"></a> -<span class="sourceLineNo">123</span> AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.123"></a> -<span class="sourceLineNo">124</span> CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.124"></a> -<span class="sourceLineNo">125</span> registry.getClusterId().get(), User.getCurrent());<a name="line.125"></a> -<span class="sourceLineNo">126</span> LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.126"></a> -<span class="sourceLineNo">127</span> SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.127"></a> -<span class="sourceLineNo">128</span> .toArray(byte[][]::new);<a name="line.128"></a> -<span class="sourceLineNo">129</span> TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.129"></a> -<span class="sourceLineNo">130</span> TEST_UTIL.waitTableAvailable(TABLE_NAME);<a name="line.130"></a> -<span class="sourceLineNo">131</span> }<a name="line.131"></a> -<span class="sourceLineNo">132</span><a name="line.132"></a> -<span class="sourceLineNo">133</span> @AfterClass<a name="line.133"></a> -<span class="sourceLineNo">134</span> public static void tearDown() throws Exception {<a name="line.134"></a> -<span class="sourceLineNo">135</span> IOUtils.closeQuietly(CONN);<a name="line.135"></a> -<span class="sourceLineNo">136</span> TEST_UTIL.shutdownMiniCluster();<a name="line.136"></a> -<span class="sourceLineNo">137</span> }<a name="line.137"></a> -<span class="sourceLineNo">138</span><a name="line.138"></a> -<span class="sourceLineNo">139</span> private void assertLocs(List<CompletableFuture<HRegionLocation>> futures)<a name="line.139"></a> -<span class="sourceLineNo">140</span> throws InterruptedException, ExecutionException {<a name="line.140"></a> -<span class="sourceLineNo">141</span> assertEquals(256, futures.size());<a name="line.141"></a> -<span class="sourceLineNo">142</span> for (int i = 0; i < futures.size(); i++) {<a name="line.142"></a> -<span class="sourceLineNo">143</span> HRegionLocation loc = futures.get(i).get();<a name="line.143"></a> -<span class="sourceLineNo">144</span> if (i == 0) {<a name="line.144"></a> -<span class="sourceLineNo">145</span> assertTrue(isEmptyStartRow(loc.getRegionInfo().getStartKey()));<a name="line.145"></a> -<span class="sourceLineNo">146</span> } else {<a name="line.146"></a> -<span class="sourceLineNo">147</span> assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegionInfo().getStartKey()));<a name="line.147"></a> -<span class="sourceLineNo">148</span> }<a name="line.148"></a> -<span class="sourceLineNo">149</span> if (i == futures.size() - 1) {<a name="line.149"></a> -<span class="sourceLineNo">150</span> assertTrue(isEmptyStopRow(loc.getRegionInfo().getEndKey()));<a name="line.150"></a> -<span class="sourceLineNo">151</span> } else {<a name="line.151"></a> -<span class="sourceLineNo">152</span> assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegionInfo().getEndKey()));<a name="line.152"></a> -<span class="sourceLineNo">153</span> }<a name="line.153"></a> -<span class="sourceLineNo">154</span> }<a name="line.154"></a> -<span class="sourceLineNo">155</span> }<a name="line.155"></a> -<span class="sourceLineNo">156</span><a name="line.156"></a> -<span class="sourceLineNo">157</span> @Test<a name="line.157"></a> -<span class="sourceLineNo">158</span> public void test() throws InterruptedException, ExecutionException {<a name="line.158"></a> -<span class="sourceLineNo">159</span> List<CompletableFuture<HRegionLocation>> futures =<a name="line.159"></a> -<span class="sourceLineNo">160</span> IntStream.range(0, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.160"></a> -<span class="sourceLineNo">161</span> .map(r -> LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.161"></a> -<span class="sourceLineNo">162</span> .collect(toList());<a name="line.162"></a> -<span class="sourceLineNo">163</span> assertLocs(futures);<a name="line.163"></a> -<span class="sourceLineNo">164</span> assertTrue(MAX_CONCURRENCY.get() <= MAX_ALLOWED);<a name="line.164"></a> -<span class="sourceLineNo">165</span> }<a name="line.165"></a> -<span class="sourceLineNo">166</span>}<a name="line.166"></a> +<span class="sourceLineNo">105</span> return hasNext;<a name="line.105"></a> +<span class="sourceLineNo">106</span> }<a name="line.106"></a> +<span class="sourceLineNo">107</span><a name="line.107"></a> +<span class="sourceLineNo">108</span> @Override<a name="line.108"></a> +<span class="sourceLineNo">109</span> public boolean postScannerNext(ObserverContext<RegionCoprocessorEnvironment> c,<a name="line.109"></a> +<span class="sourceLineNo">110</span> InternalScanner s, List<Result> result, int limit, boolean hasNext) throws IOException {<a name="line.110"></a> +<span class="sourceLineNo">111</span> if (c.getEnvironment().getRegionInfo().isMetaRegion()) {<a name="line.111"></a> +<span class="sourceLineNo">112</span> CONCURRENCY.decrementAndGet();<a name="line.112"></a> +<span class="sourceLineNo">113</span> }<a name="line.113"></a> +<span class="sourceLineNo">114</span> return hasNext;<a name="line.114"></a> +<span class="sourceLineNo">115</span> }<a name="line.115"></a> +<span class="sourceLineNo">116</span> }<a name="line.116"></a> +<span class="sourceLineNo">117</span><a name="line.117"></a> +<span class="sourceLineNo">118</span> @BeforeClass<a name="line.118"></a> +<span class="sourceLineNo">119</span> public static void setUp() throws Exception {<a name="line.119"></a> +<span class="sourceLineNo">120</span> Configuration conf = TEST_UTIL.getConfiguration();<a name="line.120"></a> +<span class="sourceLineNo">121</span> conf.set(REGION_COPROCESSOR_CONF_KEY, CountingRegionObserver.class.getName());<a name="line.121"></a> +<span class="sourceLineNo">122</span> conf.setInt(MAX_CONCURRENT_LOCATE_REQUEST_PER_TABLE, MAX_ALLOWED);<a name="line.122"></a> +<span class="sourceLineNo">123</span> TEST_UTIL.startMiniCluster(3);<a name="line.123"></a> +<span class="sourceLineNo">124</span> TEST_UTIL.getAdmin().balancerSwitch(false, true);<a name="line.124"></a> +<span class="sourceLineNo">125</span> AsyncRegistry registry = AsyncRegistryFactory.getRegistry(TEST_UTIL.getConfiguration());<a name="line.125"></a> +<span class="sourceLineNo">126</span> CONN = new AsyncConnectionImpl(TEST_UTIL.getConfiguration(), registry,<a name="line.126"></a> +<span class="sourceLineNo">127</span> registry.getClusterId().get(), User.getCurrent());<a name="line.127"></a> +<span class="sourceLineNo">128</span> LOCATOR = new AsyncNonMetaRegionLocator(CONN);<a name="line.128"></a> +<span class="sourceLineNo">129</span> SPLIT_KEYS = IntStream.range(1, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.129"></a> +<span class="sourceLineNo">130</span> .toArray(byte[][]::new);<a name="line.130"></a> +<span class="sourceLineNo">131</span> TEST_UTIL.createTable(TABLE_NAME, FAMILY, SPLIT_KEYS);<a name="line.131"></a> +<span class="sourceLineNo">132</span> TEST_UTIL.waitTableAvailable(TABLE_NAME);<a name="line.132"></a> +<span class="sourceLineNo">133</span> }<a name="line.133"></a> +<span class="sourceLineNo">134</span><a name="line.134"></a> +<span class="sourceLineNo">135</span> @AfterClass<a name="line.135"></a> +<span class="sourceLineNo">136</span> public static void tearDown() throws Exception {<a name="line.136"></a> +<span class="sourceLineNo">137</span> IOUtils.closeQuietly(CONN);<a name="line.137"></a> +<span class="sourceLineNo">138</span> TEST_UTIL.shutdownMiniCluster();<a name="line.138"></a> +<span class="sourceLineNo">139</span> }<a name="line.139"></a> +<span class="sourceLineNo">140</span><a name="line.140"></a> +<span class="sourceLineNo">141</span> private void assertLocs(List<CompletableFuture<HRegionLocation>> futures)<a name="line.141"></a> +<span class="sourceLineNo">142</span> throws InterruptedException, ExecutionException {<a name="line.142"></a> +<span class="sourceLineNo">143</span> assertEquals(256, futures.size());<a name="line.143"></a> +<span class="sourceLineNo">144</span> for (int i = 0; i < futures.size(); i++) {<a name="line.144"></a> +<span class="sourceLineNo">145</span> HRegionLocation loc = futures.get(i).get();<a name="line.145"></a> +<span class="sourceLineNo">146</span> if (i == 0) {<a name="line.146"></a> +<span class="sourceLineNo">147</span> assertTrue(isEmptyStartRow(loc.getRegion().getStartKey()));<a name="line.147"></a> +<span class="sourceLineNo">148</span> } else {<a name="line.148"></a> +<span class="sourceLineNo">149</span> assertEquals(String.format("%02x", i), Bytes.toString(loc.getRegion().getStartKey()));<a name="line.149"></a> +<span class="sourceLineNo">150</span> }<a name="line.150"></a> +<span class="sourceLineNo">151</span> if (i == futures.size() - 1) {<a name="line.151"></a> +<span class="sourceLineNo">152</span> assertTrue(isEmptyStopRow(loc.getRegion().getEndKey()));<a name="line.152"></a> +<span class="sourceLineNo">153</span> } else {<a name="line.153"></a> +<span class="sourceLineNo">154</span> assertEquals(String.format("%02x", i + 1), Bytes.toString(loc.getRegion().getEndKey()));<a name="line.154"></a> +<span class="sourceLineNo">155</span> }<a name="line.155"></a> +<span class="sourceLineNo">156</span> }<a name="line.156"></a> +<span class="sourceLineNo">157</span> }<a name="line.157"></a> +<span class="sourceLineNo">158</span><a name="line.158"></a> +<span class="sourceLineNo">159</span> @Test<a name="line.159"></a> +<span class="sourceLineNo">160</span> public void test() throws InterruptedException, ExecutionException {<a name="line.160"></a> +<span class="sourceLineNo">161</span> List<CompletableFuture<HRegionLocation>> futures =<a name="line.161"></a> +<span class="sourceLineNo">162</span> IntStream.range(0, 256).mapToObj(i -> Bytes.toBytes(String.format("%02x", i)))<a name="line.162"></a> +<span class="sourceLineNo">163</span> .map(r -> LOCATOR.getRegionLocation(TABLE_NAME, r, RegionLocateType.CURRENT, false))<a name="line.163"></a> +<span class="sourceLineNo">164</span> .collect(toList());<a name="line.164"></a> +<span class="sourceLineNo">165</span> assertLocs(futures);<a name="line.165"></a> +<span class="sourceLineNo">166</span> assertTrue("max allowed is " + MAX_ALLOWED + " but actual is " + MAX_CONCURRENCY.get(),<a name="line.166"></a> +<span class="sourceLineNo">167</span> MAX_CONCURRENCY.get() <= MAX_ALLOWED);<a name="line.167"></a> +<span class="sourceLineNo">168</span> }<a name="line.168"></a> +<span class="sourceLineNo">169</span>}<a name="line.169"></a>