You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2015/12/14 17:38:23 UTC
[12/45] hbase-site git commit: Published site at
04622254f7209c5cfeadcfa137a97fbed161075a.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html b/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
index 58d8f10..1d60c2d 100644
--- a/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
+++ b/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
@@ -931,524 +931,656 @@
<a class="jxr_linenumber" name="921" href="#921">921</a> }
<a class="jxr_linenumber" name="922" href="#922">922</a>
<a class="jxr_linenumber" name="923" href="#923">923</a> @Test
-<a class="jxr_linenumber" name="924" href="#924">924</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testScanWithException() <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="925" href="#925">925</a> HTable table = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="926" href="#926">926</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="927" href="#927">927</a> latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
-<a class="jxr_linenumber" name="928" href="#928">928</a> exceptionLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
-<a class="jxr_linenumber" name="929" href="#929">929</a> TableName tableName = TableName.valueOf(<span class="jxr_string">"testScanWithException"</span>);
-<a class="jxr_linenumber" name="930" href="#930">930</a> <em class="jxr_comment">// Create KV that will give you two blocks</em>
-<a class="jxr_linenumber" name="931" href="#931">931</a> <em class="jxr_comment">// Create a table with block size as 1024</em>
-<a class="jxr_linenumber" name="932" href="#932">932</a> table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,
-<a class="jxr_linenumber" name="933" href="#933">933</a> CustomInnerRegionObserverWrapper.<strong class="jxr_keyword">class</strong>.getName());
-<a class="jxr_linenumber" name="934" href="#934">934</a> <em class="jxr_comment">// get the block cache and region</em>
-<a class="jxr_linenumber" name="935" href="#935">935</a> RegionLocator locator = table.getRegionLocator();
-<a class="jxr_linenumber" name="936" href="#936">936</a> String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
-<a class="jxr_linenumber" name="937" href="#937">937</a> Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(
-<a class="jxr_linenumber" name="938" href="#938">938</a> regionName);
-<a class="jxr_linenumber" name="939" href="#939">939</a> Store store = region.getStores().iterator().next();
-<a class="jxr_linenumber" name="940" href="#940">940</a> CacheConfig cacheConf = store.getCacheConfig();
-<a class="jxr_linenumber" name="941" href="#941">941</a> cacheConf.setCacheDataOnWrite(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="942" href="#942">942</a> cacheConf.setEvictOnClose(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="943" href="#943">943</a> BlockCache cache = cacheConf.getBlockCache();
-<a class="jxr_linenumber" name="944" href="#944">944</a> <em class="jxr_comment">// insert data. 2 Rows are added</em>
-<a class="jxr_linenumber" name="945" href="#945">945</a> insertData(table);
-<a class="jxr_linenumber" name="946" href="#946">946</a> <em class="jxr_comment">// flush the data</em>
-<a class="jxr_linenumber" name="947" href="#947">947</a> System.out.println(<span class="jxr_string">"Flushing cache"</span>);
-<a class="jxr_linenumber" name="948" href="#948">948</a> <em class="jxr_comment">// Should create one Hfile with 2 blocks</em>
-<a class="jxr_linenumber" name="949" href="#949">949</a> region.flush(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="950" href="#950">950</a> <em class="jxr_comment">// CustomInnerRegionObserver.sleepTime.set(5000);</em>
-<a class="jxr_linenumber" name="951" href="#951">951</a> CustomInnerRegionObserver.throwException.set(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="952" href="#952">952</a> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = initiateScan(table, false);
-<a class="jxr_linenumber" name="953" href="#953">953</a> <em class="jxr_comment">// The block would have been decremented for the scan case as it was</em>
-<a class="jxr_linenumber" name="954" href="#954">954</a> <em class="jxr_comment">// wrapped</em>
-<a class="jxr_linenumber" name="955" href="#955">955</a> <em class="jxr_comment">// before even the postNext hook gets executed.</em>
-<a class="jxr_linenumber" name="956" href="#956">956</a> <em class="jxr_comment">// giving some time for the block to be decremented</em>
-<a class="jxr_linenumber" name="957" href="#957">957</a> Thread.sleep(100);
-<a class="jxr_linenumber" name="958" href="#958">958</a> Iterator<CachedBlock> iterator = cache.iterator();
-<a class="jxr_linenumber" name="959" href="#959">959</a> <strong class="jxr_keyword">boolean</strong> usedBlocksFound = false;
-<a class="jxr_linenumber" name="960" href="#960">960</a> <strong class="jxr_keyword">int</strong> refCount = 0;
-<a class="jxr_linenumber" name="961" href="#961">961</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="962" href="#962">962</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="963" href="#963">963</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="964" href="#964">964</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="965" href="#965">965</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="966" href="#966">966</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="967" href="#967">967</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="968" href="#968">968</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="969" href="#969">969</a> <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="970" href="#970">970</a> }
-<a class="jxr_linenumber" name="971" href="#971">971</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="972" href="#972">972</a> <em class="jxr_comment">// Blocks will be with count 3</em>
-<a class="jxr_linenumber" name="973" href="#973">973</a> assertEquals(NO_OF_THREADS, refCount);
-<a class="jxr_linenumber" name="974" href="#974">974</a> usedBlocksFound = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="975" href="#975">975</a> }
-<a class="jxr_linenumber" name="976" href="#976">976</a> }
-<a class="jxr_linenumber" name="977" href="#977">977</a> assertTrue(usedBlocksFound);
-<a class="jxr_linenumber" name="978" href="#978">978</a> exceptionLatch.countDown();
-<a class="jxr_linenumber" name="979" href="#979">979</a> <em class="jxr_comment">// countdown the latch</em>
-<a class="jxr_linenumber" name="980" href="#980">980</a> CustomInnerRegionObserver.getCdl().get().countDown();
-<a class="jxr_linenumber" name="981" href="#981">981</a> <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
-<a class="jxr_linenumber" name="982" href="#982">982</a> thread.join();
-<a class="jxr_linenumber" name="983" href="#983">983</a> }
-<a class="jxr_linenumber" name="984" href="#984">984</a> iterator = cache.iterator();
-<a class="jxr_linenumber" name="985" href="#985">985</a> usedBlocksFound = false;
-<a class="jxr_linenumber" name="986" href="#986">986</a> refCount = 0;
-<a class="jxr_linenumber" name="987" href="#987">987</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="988" href="#988">988</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="989" href="#989">989</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="990" href="#990">990</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="991" href="#991">991</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="992" href="#992">992</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="993" href="#993">993</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="994" href="#994">994</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="995" href="#995">995</a> <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="996" href="#996">996</a> }
-<a class="jxr_linenumber" name="997" href="#997">997</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="998" href="#998">998</a> <em class="jxr_comment">// Blocks will be with count 3</em>
-<a class="jxr_linenumber" name="999" href="#999">999</a> assertEquals(NO_OF_THREADS, refCount);
-<a class="jxr_linenumber" name="1000" href="#1000">1000</a> usedBlocksFound = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1001" href="#1001">1001</a> }
-<a class="jxr_linenumber" name="1002" href="#1002">1002</a> }
-<a class="jxr_linenumber" name="1003" href="#1003">1003</a> assertTrue(usedBlocksFound);
-<a class="jxr_linenumber" name="1004" href="#1004">1004</a> <em class="jxr_comment">// Sleep till the scan lease would expire? Can we reduce this value?</em>
-<a class="jxr_linenumber" name="1005" href="#1005">1005</a> Thread.sleep(5100);
-<a class="jxr_linenumber" name="1006" href="#1006">1006</a> iterator = cache.iterator();
-<a class="jxr_linenumber" name="1007" href="#1007">1007</a> refCount = 0;
-<a class="jxr_linenumber" name="1008" href="#1008">1008</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="1009" href="#1009">1009</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="1010" href="#1010">1010</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="1011" href="#1011">1011</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="1012" href="#1012">1012</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1013" href="#1013">1013</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="1014" href="#1014">1014</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1015" href="#1015">1015</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1016" href="#1016">1016</a> <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="1017" href="#1017">1017</a> }
-<a class="jxr_linenumber" name="1018" href="#1018">1018</a> assertEquals(0, refCount);
-<a class="jxr_linenumber" name="1019" href="#1019">1019</a> }
-<a class="jxr_linenumber" name="1020" href="#1020">1020</a> } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1021" href="#1021">1021</a> <strong class="jxr_keyword">if</strong> (table != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1022" href="#1022">1022</a> table.close();
-<a class="jxr_linenumber" name="1023" href="#1023">1023</a> }
-<a class="jxr_linenumber" name="1024" href="#1024">1024</a> }
-<a class="jxr_linenumber" name="1025" href="#1025">1025</a> }
-<a class="jxr_linenumber" name="1026" href="#1026">1026</a>
-<a class="jxr_linenumber" name="1027" href="#1027">1027</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> iterateBlockCache(BlockCache cache, Iterator<CachedBlock> iterator) {
-<a class="jxr_linenumber" name="1028" href="#1028">1028</a> <strong class="jxr_keyword">int</strong> refCount;
-<a class="jxr_linenumber" name="1029" href="#1029">1029</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="1030" href="#1030">1030</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="1031" href="#1031">1031</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="1032" href="#1032">1032</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="1033" href="#1033">1033</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1034" href="#1034">1034</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="1035" href="#1035">1035</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1036" href="#1036">1036</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1037" href="#1037">1037</a> <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="1038" href="#1038">1038</a> }
-<a class="jxr_linenumber" name="1039" href="#1039">1039</a> assertEquals(0, refCount);
-<a class="jxr_linenumber" name="1040" href="#1040">1040</a> }
-<a class="jxr_linenumber" name="1041" href="#1041">1041</a> }
-<a class="jxr_linenumber" name="1042" href="#1042">1042</a>
-<a class="jxr_linenumber" name="1043" href="#1043">1043</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> insertData(HTable table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1044" href="#1044">1044</a> Put put = <strong class="jxr_keyword">new</strong> Put(ROW);
-<a class="jxr_linenumber" name="1045" href="#1045">1045</a> put.addColumn(FAMILY, QUALIFIER, data);
-<a class="jxr_linenumber" name="1046" href="#1046">1046</a> table.put(put);
-<a class="jxr_linenumber" name="1047" href="#1047">1047</a> put = <strong class="jxr_keyword">new</strong> Put(ROW1);
-<a class="jxr_linenumber" name="1048" href="#1048">1048</a> put.addColumn(FAMILY, QUALIFIER, data);
-<a class="jxr_linenumber" name="1049" href="#1049">1049</a> table.put(put);
-<a class="jxr_linenumber" name="1050" href="#1050">1050</a> byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);
-<a class="jxr_linenumber" name="1051" href="#1051">1051</a> put = <strong class="jxr_keyword">new</strong> Put(ROW);
-<a class="jxr_linenumber" name="1052" href="#1052">1052</a> put.addColumn(FAMILY, QUALIFIER2, data2);
-<a class="jxr_linenumber" name="1053" href="#1053">1053</a> table.put(put);
-<a class="jxr_linenumber" name="1054" href="#1054">1054</a> }
-<a class="jxr_linenumber" name="1055" href="#1055">1055</a>
-<a class="jxr_linenumber" name="1056" href="#1056">1056</a> <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] initiateScan(HTable table, <strong class="jxr_keyword">boolean</strong> reverse) <strong class="jxr_keyword">throws</strong> IOException,
-<a class="jxr_linenumber" name="1057" href="#1057">1057</a> InterruptedException {
-<a class="jxr_linenumber" name="1058" href="#1058">1058</a> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[NO_OF_THREADS];
-<a class="jxr_linenumber" name="1059" href="#1059">1059</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i < NO_OF_THREADS; i++) {
-<a class="jxr_linenumber" name="1060" href="#1060">1060</a> scanThreads[i] = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>(table, reverse);
-<a class="jxr_linenumber" name="1061" href="#1061">1061</a> }
-<a class="jxr_linenumber" name="1062" href="#1062">1062</a> <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
-<a class="jxr_linenumber" name="1063" href="#1063">1063</a> thread.start();
-<a class="jxr_linenumber" name="1064" href="#1064">1064</a> }
-<a class="jxr_linenumber" name="1065" href="#1065">1065</a> <strong class="jxr_keyword">return</strong> scanThreads;
-<a class="jxr_linenumber" name="1066" href="#1066">1066</a> }
-<a class="jxr_linenumber" name="1067" href="#1067">1067</a>
-<a class="jxr_linenumber" name="1068" href="#1068">1068</a> <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>[] initiateGet(HTable table, <strong class="jxr_keyword">boolean</strong> tracker, <strong class="jxr_keyword">boolean</strong> multipleCFs)
-<a class="jxr_linenumber" name="1069" href="#1069">1069</a> <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="1070" href="#1070">1070</a> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>[] getThreads = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>[NO_OF_THREADS];
-<a class="jxr_linenumber" name="1071" href="#1071">1071</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i < NO_OF_THREADS; i++) {
-<a class="jxr_linenumber" name="1072" href="#1072">1072</a> getThreads[i] = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>(table, tracker, multipleCFs);
-<a class="jxr_linenumber" name="1073" href="#1073">1073</a> }
-<a class="jxr_linenumber" name="1074" href="#1074">1074</a> <strong class="jxr_keyword">for</strong> (GetThread thread : getThreads) {
-<a class="jxr_linenumber" name="1075" href="#1075">1075</a> thread.start();
-<a class="jxr_linenumber" name="1076" href="#1076">1076</a> }
-<a class="jxr_linenumber" name="1077" href="#1077">1077</a> <strong class="jxr_keyword">return</strong> getThreads;
-<a class="jxr_linenumber" name="1078" href="#1078">1078</a> }
-<a class="jxr_linenumber" name="1079" href="#1079">1079</a>
-<a class="jxr_linenumber" name="1080" href="#1080">1080</a> <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>[] initiateMultiGet(HTable table)
-<a class="jxr_linenumber" name="1081" href="#1081">1081</a> <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="1082" href="#1082">1082</a> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>[] multiGetThreads = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>[NO_OF_THREADS];
-<a class="jxr_linenumber" name="1083" href="#1083">1083</a> <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i < NO_OF_THREADS; i++) {
-<a class="jxr_linenumber" name="1084" href="#1084">1084</a> multiGetThreads[i] = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>(table);
-<a class="jxr_linenumber" name="1085" href="#1085">1085</a> }
-<a class="jxr_linenumber" name="1086" href="#1086">1086</a> <strong class="jxr_keyword">for</strong> (MultiGetThread thread : multiGetThreads) {
-<a class="jxr_linenumber" name="1087" href="#1087">1087</a> thread.start();
-<a class="jxr_linenumber" name="1088" href="#1088">1088</a> }
-<a class="jxr_linenumber" name="1089" href="#1089">1089</a> <strong class="jxr_keyword">return</strong> multiGetThreads;
-<a class="jxr_linenumber" name="1090" href="#1090">1090</a> }
-<a class="jxr_linenumber" name="1091" href="#1091">1091</a>
-<a class="jxr_linenumber" name="1092" href="#1092">1092</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> checkForBlockEviction(BlockCache cache, <strong class="jxr_keyword">boolean</strong> getClosed, <strong class="jxr_keyword">boolean</strong> expectOnlyZero,
-<a class="jxr_linenumber" name="1093" href="#1093">1093</a> <strong class="jxr_keyword">boolean</strong> wrappedCp) <strong class="jxr_keyword">throws</strong> InterruptedException {
-<a class="jxr_linenumber" name="1094" href="#1094">1094</a> <strong class="jxr_keyword">int</strong> counter = NO_OF_THREADS;
-<a class="jxr_linenumber" name="1095" href="#1095">1095</a> <strong class="jxr_keyword">if</strong> (CustomInnerRegionObserver.waitForGets.get()) {
-<a class="jxr_linenumber" name="1096" href="#1096">1096</a> <em class="jxr_comment">// Because only one row is selected, it has only 2 blocks</em>
-<a class="jxr_linenumber" name="1097" href="#1097">1097</a> counter = counter - 1;
-<a class="jxr_linenumber" name="1098" href="#1098">1098</a> <strong class="jxr_keyword">while</strong> (CustomInnerRegionObserver.countOfGets.get() < NO_OF_THREADS) {
-<a class="jxr_linenumber" name="1099" href="#1099">1099</a> Thread.sleep(100);
-<a class="jxr_linenumber" name="1100" href="#1100">1100</a> }
-<a class="jxr_linenumber" name="1101" href="#1101">1101</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1102" href="#1102">1102</a> <strong class="jxr_keyword">while</strong> (CustomInnerRegionObserver.countOfNext.get() < NO_OF_THREADS) {
-<a class="jxr_linenumber" name="1103" href="#1103">1103</a> Thread.sleep(100);
-<a class="jxr_linenumber" name="1104" href="#1104">1104</a> }
-<a class="jxr_linenumber" name="1105" href="#1105">1105</a> }
-<a class="jxr_linenumber" name="1106" href="#1106">1106</a> Iterator<CachedBlock> iterator = cache.iterator();
-<a class="jxr_linenumber" name="1107" href="#1107">1107</a> <strong class="jxr_keyword">int</strong> refCount = 0;
-<a class="jxr_linenumber" name="1108" href="#1108">1108</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="1109" href="#1109">1109</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="1110" href="#1110">1110</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="1111" href="#1111">1111</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="1112" href="#1112">1112</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1113" href="#1113">1113</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="1114" href="#1114">1114</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1115" href="#1115">1115</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1116" href="#1116">1116</a> <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="1117" href="#1117">1117</a> }
-<a class="jxr_linenumber" name="1118" href="#1118">1118</a> System.out.println(<span class="jxr_string">" the refcount is "</span> + refCount + <span class="jxr_string">" block is "</span> + cacheKey);
-<a class="jxr_linenumber" name="1119" href="#1119">1119</a> <strong class="jxr_keyword">if</strong> (CustomInnerRegionObserver.waitForGets.get()) {
-<a class="jxr_linenumber" name="1120" href="#1120">1120</a> <strong class="jxr_keyword">if</strong> (expectOnlyZero) {
-<a class="jxr_linenumber" name="1121" href="#1121">1121</a> assertTrue(refCount == 0);
-<a class="jxr_linenumber" name="1122" href="#1122">1122</a> }
-<a class="jxr_linenumber" name="1123" href="#1123">1123</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="1124" href="#1124">1124</a> <em class="jxr_comment">// Because the scan would have also touched up on these blocks but</em>
-<a class="jxr_linenumber" name="1125" href="#1125">1125</a> <em class="jxr_comment">// it</em>
-<a class="jxr_linenumber" name="1126" href="#1126">1126</a> <em class="jxr_comment">// would have touched</em>
-<a class="jxr_linenumber" name="1127" href="#1127">1127</a> <em class="jxr_comment">// all 3</em>
-<a class="jxr_linenumber" name="1128" href="#1128">1128</a> <strong class="jxr_keyword">if</strong> (getClosed) {
-<a class="jxr_linenumber" name="1129" href="#1129">1129</a> <em class="jxr_comment">// If get has closed only the scan's blocks would be available</em>
-<a class="jxr_linenumber" name="1130" href="#1130">1130</a> assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());
-<a class="jxr_linenumber" name="1131" href="#1131">1131</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1132" href="#1132">1132</a> assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));
-<a class="jxr_linenumber" name="1133" href="#1133">1133</a> }
-<a class="jxr_linenumber" name="1134" href="#1134">1134</a> }
-<a class="jxr_linenumber" name="1135" href="#1135">1135</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1136" href="#1136">1136</a> <em class="jxr_comment">// Because the get would have also touched up on these blocks but it</em>
-<a class="jxr_linenumber" name="1137" href="#1137">1137</a> <em class="jxr_comment">// would have touched</em>
-<a class="jxr_linenumber" name="1138" href="#1138">1138</a> <em class="jxr_comment">// upon only 2 additionally</em>
-<a class="jxr_linenumber" name="1139" href="#1139">1139</a> <strong class="jxr_keyword">if</strong> (expectOnlyZero) {
-<a class="jxr_linenumber" name="1140" href="#1140">1140</a> assertTrue(refCount == 0);
-<a class="jxr_linenumber" name="1141" href="#1141">1141</a> }
-<a class="jxr_linenumber" name="1142" href="#1142">1142</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="1143" href="#1143">1143</a> <strong class="jxr_keyword">if</strong> (getLatch == <strong class="jxr_keyword">null</strong> || wrappedCp) {
-<a class="jxr_linenumber" name="1144" href="#1144">1144</a> assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());
-<a class="jxr_linenumber" name="1145" href="#1145">1145</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1146" href="#1146">1146</a> assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));
-<a class="jxr_linenumber" name="1147" href="#1147">1147</a> }
-<a class="jxr_linenumber" name="1148" href="#1148">1148</a> }
-<a class="jxr_linenumber" name="1149" href="#1149">1149</a> }
-<a class="jxr_linenumber" name="1150" href="#1150">1150</a> }
-<a class="jxr_linenumber" name="1151" href="#1151">1151</a> CustomInnerRegionObserver.getCdl().get().countDown();
-<a class="jxr_linenumber" name="1152" href="#1152">1152</a> }
-<a class="jxr_linenumber" name="1153" href="#1153">1153</a>
-<a class="jxr_linenumber" name="1154" href="#1154">1154</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="1155" href="#1155">1155</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HTable table;
-<a class="jxr_linenumber" name="1156" href="#1156">1156</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List<Get> gets = <strong class="jxr_keyword">new</strong> ArrayList<Get>();
-<a class="jxr_linenumber" name="1157" href="#1157">1157</a> <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>(HTable table) {
-<a class="jxr_linenumber" name="1158" href="#1158">1158</a> <strong class="jxr_keyword">this</strong>.table = table;
-<a class="jxr_linenumber" name="1159" href="#1159">1159</a> }
-<a class="jxr_linenumber" name="1160" href="#1160">1160</a> @Override
-<a class="jxr_linenumber" name="1161" href="#1161">1161</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="1162" href="#1162">1162</a> gets.add(<strong class="jxr_keyword">new</strong> Get(ROW));
-<a class="jxr_linenumber" name="1163" href="#1163">1163</a> gets.add(<strong class="jxr_keyword">new</strong> Get(ROW1));
-<a class="jxr_linenumber" name="1164" href="#1164">1164</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1165" href="#1165">1165</a> CustomInnerRegionObserver.getCdl().set(latch);
-<a class="jxr_linenumber" name="1166" href="#1166">1166</a> Result[] r = table.get(gets);
-<a class="jxr_linenumber" name="1167" href="#1167">1167</a> assertTrue(Bytes.equals(r[0].getRow(), ROW));
-<a class="jxr_linenumber" name="1168" href="#1168">1168</a> assertTrue(Bytes.equals(r[1].getRow(), ROW1));
-<a class="jxr_linenumber" name="1169" href="#1169">1169</a> } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="924" href="#924">924</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBlockEvictionAfterHBASE13082WithCompactionAndFlush()
+<a class="jxr_linenumber" name="925" href="#925">925</a> <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="926" href="#926">926</a> <em class="jxr_comment">// do flush and scan in parallel</em>
+<a class="jxr_linenumber" name="927" href="#927">927</a> HTable table = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="928" href="#928">928</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="929" href="#929">929</a> latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="930" href="#930">930</a> compactionLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="931" href="#931">931</a> TableName tableName =
+<a class="jxr_linenumber" name="932" href="#932">932</a> TableName.valueOf(<span class="jxr_string">"testBlockEvictionAfterHBASE13082WithCompactionAndFlush"</span>);
+<a class="jxr_linenumber" name="933" href="#933">933</a> <em class="jxr_comment">// Create a table with block size as 1024</em>
+<a class="jxr_linenumber" name="934" href="#934">934</a> table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,
+<a class="jxr_linenumber" name="935" href="#935">935</a> CustomInnerRegionObserverWrapper.<strong class="jxr_keyword">class</strong>.getName());
+<a class="jxr_linenumber" name="936" href="#936">936</a> <em class="jxr_comment">// get the block cache and region</em>
+<a class="jxr_linenumber" name="937" href="#937">937</a> RegionLocator locator = table.getRegionLocator();
+<a class="jxr_linenumber" name="938" href="#938">938</a> String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
+<a class="jxr_linenumber" name="939" href="#939">939</a> Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(
+<a class="jxr_linenumber" name="940" href="#940">940</a> regionName);
+<a class="jxr_linenumber" name="941" href="#941">941</a> Store store = region.getStores().iterator().next();
+<a class="jxr_linenumber" name="942" href="#942">942</a> CacheConfig cacheConf = store.getCacheConfig();
+<a class="jxr_linenumber" name="943" href="#943">943</a> cacheConf.setCacheDataOnWrite(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="944" href="#944">944</a> cacheConf.setEvictOnClose(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="945" href="#945">945</a> BlockCache cache = cacheConf.getBlockCache();
+<a class="jxr_linenumber" name="946" href="#946">946</a>
+<a class="jxr_linenumber" name="947" href="#947">947</a> <em class="jxr_comment">// insert data. 2 Rows are added</em>
+<a class="jxr_linenumber" name="948" href="#948">948</a> Put put = <strong class="jxr_keyword">new</strong> Put(ROW);
+<a class="jxr_linenumber" name="949" href="#949">949</a> put.addColumn(FAMILY, QUALIFIER, data);
+<a class="jxr_linenumber" name="950" href="#950">950</a> table.put(put);
+<a class="jxr_linenumber" name="951" href="#951">951</a> put = <strong class="jxr_keyword">new</strong> Put(ROW1);
+<a class="jxr_linenumber" name="952" href="#952">952</a> put.addColumn(FAMILY, QUALIFIER, data);
+<a class="jxr_linenumber" name="953" href="#953">953</a> table.put(put);
+<a class="jxr_linenumber" name="954" href="#954">954</a> assertTrue(Bytes.equals(table.get(<strong class="jxr_keyword">new</strong> Get(ROW)).value(), data));
+<a class="jxr_linenumber" name="955" href="#955">955</a> <em class="jxr_comment">// Should create one Hfile with 2 blocks</em>
+<a class="jxr_linenumber" name="956" href="#956">956</a> region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="957" href="#957">957</a> <em class="jxr_comment">// read the data and expect same blocks, one new hit, no misses</em>
+<a class="jxr_linenumber" name="958" href="#958">958</a> <strong class="jxr_keyword">int</strong> refCount = 0;
+<a class="jxr_linenumber" name="959" href="#959">959</a> <em class="jxr_comment">// Check how this miss is happening</em>
+<a class="jxr_linenumber" name="960" href="#960">960</a> <em class="jxr_comment">// insert a second column, read the row, no new blocks, 3 new hits</em>
+<a class="jxr_linenumber" name="961" href="#961">961</a> byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);
+<a class="jxr_linenumber" name="962" href="#962">962</a> byte[] data2 = Bytes.add(data, data);
+<a class="jxr_linenumber" name="963" href="#963">963</a> put = <strong class="jxr_keyword">new</strong> Put(ROW);
+<a class="jxr_linenumber" name="964" href="#964">964</a> put.addColumn(FAMILY, QUALIFIER2, data2);
+<a class="jxr_linenumber" name="965" href="#965">965</a> table.put(put);
+<a class="jxr_linenumber" name="966" href="#966">966</a> <em class="jxr_comment">// flush, one new block</em>
+<a class="jxr_linenumber" name="967" href="#967">967</a> System.out.println(<span class="jxr_string">"Flushing cache"</span>);
+<a class="jxr_linenumber" name="968" href="#968">968</a> region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="969" href="#969">969</a> Iterator<CachedBlock> iterator = cache.iterator();
+<a class="jxr_linenumber" name="970" href="#970">970</a> iterateBlockCache(cache, iterator);
+<a class="jxr_linenumber" name="971" href="#971">971</a> <em class="jxr_comment">// Create three sets of scan</em>
+<a class="jxr_linenumber" name="972" href="#972">972</a> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = initiateScan(table, false);
+<a class="jxr_linenumber" name="973" href="#973">973</a> Thread.sleep(100);
+<a class="jxr_linenumber" name="974" href="#974">974</a> iterator = cache.iterator();
+<a class="jxr_linenumber" name="975" href="#975">975</a> <strong class="jxr_keyword">boolean</strong> usedBlocksFound = false;
+<a class="jxr_linenumber" name="976" href="#976">976</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="977" href="#977">977</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="978" href="#978">978</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="979" href="#979">979</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="980" href="#980">980</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="981" href="#981">981</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="982" href="#982">982</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="983" href="#983">983</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="984" href="#984">984</a> <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="985" href="#985">985</a> }
+<a class="jxr_linenumber" name="986" href="#986">986</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="987" href="#987">987</a> <em class="jxr_comment">// Blocks will be with count 3</em>
+<a class="jxr_linenumber" name="988" href="#988">988</a> assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="989" href="#989">989</a> usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="990" href="#990">990</a> }
+<a class="jxr_linenumber" name="991" href="#991">991</a> }
+<a class="jxr_linenumber" name="992" href="#992">992</a> <em class="jxr_comment">// Make a put and do a flush</em>
+<a class="jxr_linenumber" name="993" href="#993">993</a> QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);
+<a class="jxr_linenumber" name="994" href="#994">994</a> data2 = Bytes.add(data, data);
+<a class="jxr_linenumber" name="995" href="#995">995</a> put = <strong class="jxr_keyword">new</strong> Put(ROW1);
+<a class="jxr_linenumber" name="996" href="#996">996</a> put.addColumn(FAMILY, QUALIFIER2, data2);
+<a class="jxr_linenumber" name="997" href="#997">997</a> table.put(put);
+<a class="jxr_linenumber" name="998" href="#998">998</a> <em class="jxr_comment">// flush, one new block</em>
+<a class="jxr_linenumber" name="999" href="#999">999</a> System.out.println(<span class="jxr_string">"Flushing cache"</span>);
+<a class="jxr_linenumber" name="1000" href="#1000">1000</a> region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1001" href="#1001">1001</a> assertTrue(<span class="jxr_string">"Blocks with non zero ref count should be found "</span>, usedBlocksFound);
+<a class="jxr_linenumber" name="1002" href="#1002">1002</a> usedBlocksFound = false;
+<a class="jxr_linenumber" name="1003" href="#1003">1003</a> System.out.println(<span class="jxr_string">"Compacting"</span>);
+<a class="jxr_linenumber" name="1004" href="#1004">1004</a> assertEquals(3, store.getStorefilesCount());
+<a class="jxr_linenumber" name="1005" href="#1005">1005</a> store.triggerMajorCompaction();
+<a class="jxr_linenumber" name="1006" href="#1006">1006</a> region.compact(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1007" href="#1007">1007</a> waitForStoreFileCount(store, 1, 10000); <em class="jxr_comment">// wait 10 seconds max</em>
+<a class="jxr_linenumber" name="1008" href="#1008">1008</a> assertEquals(1, store.getStorefilesCount());
+<a class="jxr_linenumber" name="1009" href="#1009">1009</a> <em class="jxr_comment">// Even after compaction is done we will have some blocks that cannot</em>
+<a class="jxr_linenumber" name="1010" href="#1010">1010</a> <em class="jxr_comment">// be evicted this is because the scan is still referencing them</em>
+<a class="jxr_linenumber" name="1011" href="#1011">1011</a> iterator = cache.iterator();
+<a class="jxr_linenumber" name="1012" href="#1012">1012</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1013" href="#1013">1013</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1014" href="#1014">1014</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1015" href="#1015">1015</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1016" href="#1016">1016</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1017" href="#1017">1017</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1018" href="#1018">1018</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1019" href="#1019">1019</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1020" href="#1020">1020</a> <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1021" href="#1021">1021</a> }
+<a class="jxr_linenumber" name="1022" href="#1022">1022</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="1023" href="#1023">1023</a> <em class="jxr_comment">// Blocks will be with count 3 as they are not yet cleared</em>
+<a class="jxr_linenumber" name="1024" href="#1024">1024</a> assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="1025" href="#1025">1025</a> usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1026" href="#1026">1026</a> }
+<a class="jxr_linenumber" name="1027" href="#1027">1027</a> }
+<a class="jxr_linenumber" name="1028" href="#1028">1028</a> assertTrue(<span class="jxr_string">"Blocks with non zero ref count should be found "</span>, usedBlocksFound);
+<a class="jxr_linenumber" name="1029" href="#1029">1029</a> <em class="jxr_comment">// Should not throw exception</em>
+<a class="jxr_linenumber" name="1030" href="#1030">1030</a> compactionLatch.countDown();
+<a class="jxr_linenumber" name="1031" href="#1031">1031</a> latch.countDown();
+<a class="jxr_linenumber" name="1032" href="#1032">1032</a> <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
+<a class="jxr_linenumber" name="1033" href="#1033">1033</a> thread.join();
+<a class="jxr_linenumber" name="1034" href="#1034">1034</a> }
+<a class="jxr_linenumber" name="1035" href="#1035">1035</a> <em class="jxr_comment">// by this time all blocks should have been evicted</em>
+<a class="jxr_linenumber" name="1036" href="#1036">1036</a> iterator = cache.iterator();
+<a class="jxr_linenumber" name="1037" href="#1037">1037</a> <em class="jxr_comment">// Since a flush and compaction happened after a scan started</em>
+<a class="jxr_linenumber" name="1038" href="#1038">1038</a> <em class="jxr_comment">// we need to ensure that all the original blocks of the compacted file</em>
+<a class="jxr_linenumber" name="1039" href="#1039">1039</a> <em class="jxr_comment">// is also removed.</em>
+<a class="jxr_linenumber" name="1040" href="#1040">1040</a> iterateBlockCache(cache, iterator);
+<a class="jxr_linenumber" name="1041" href="#1041">1041</a> Result r = table.get(<strong class="jxr_keyword">new</strong> Get(ROW));
+<a class="jxr_linenumber" name="1042" href="#1042">1042</a> assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));
+<a class="jxr_linenumber" name="1043" href="#1043">1043</a> assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));
+<a class="jxr_linenumber" name="1044" href="#1044">1044</a> <em class="jxr_comment">// The gets would be working on new blocks</em>
+<a class="jxr_linenumber" name="1045" href="#1045">1045</a> iterator = cache.iterator();
+<a class="jxr_linenumber" name="1046" href="#1046">1046</a> iterateBlockCache(cache, iterator);
+<a class="jxr_linenumber" name="1047" href="#1047">1047</a> } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1048" href="#1048">1048</a> <strong class="jxr_keyword">if</strong> (table != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1049" href="#1049">1049</a> table.close();
+<a class="jxr_linenumber" name="1050" href="#1050">1050</a> }
+<a class="jxr_linenumber" name="1051" href="#1051">1051</a> }
+<a class="jxr_linenumber" name="1052" href="#1052">1052</a> }
+<a class="jxr_linenumber" name="1053" href="#1053">1053</a>
+<a class="jxr_linenumber" name="1054" href="#1054">1054</a>
+<a class="jxr_linenumber" name="1055" href="#1055">1055</a> @Test
+<a class="jxr_linenumber" name="1056" href="#1056">1056</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testScanWithException() <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="1057" href="#1057">1057</a> HTable table = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1058" href="#1058">1058</a> <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1059" href="#1059">1059</a> latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="1060" href="#1060">1060</a> exceptionLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="1061" href="#1061">1061</a> TableName tableName = TableName.valueOf(<span class="jxr_string">"testScanWithException"</span>);
+<a class="jxr_linenumber" name="1062" href="#1062">1062</a> <em class="jxr_comment">// Create KV that will give you two blocks</em>
+<a class="jxr_linenumber" name="1063" href="#1063">1063</a> <em class="jxr_comment">// Create a table with block size as 1024</em>
+<a class="jxr_linenumber" name="1064" href="#1064">1064</a> table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,
+<a class="jxr_linenumber" name="1065" href="#1065">1065</a> CustomInnerRegionObserverWrapper.<strong class="jxr_keyword">class</strong>.getName());
+<a class="jxr_linenumber" name="1066" href="#1066">1066</a> <em class="jxr_comment">// get the block cache and region</em>
+<a class="jxr_linenumber" name="1067" href="#1067">1067</a> RegionLocator locator = table.getRegionLocator();
+<a class="jxr_linenumber" name="1068" href="#1068">1068</a> String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
+<a class="jxr_linenumber" name="1069" href="#1069">1069</a> Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(
+<a class="jxr_linenumber" name="1070" href="#1070">1070</a> regionName);
+<a class="jxr_linenumber" name="1071" href="#1071">1071</a> Store store = region.getStores().iterator().next();
+<a class="jxr_linenumber" name="1072" href="#1072">1072</a> CacheConfig cacheConf = store.getCacheConfig();
+<a class="jxr_linenumber" name="1073" href="#1073">1073</a> cacheConf.setCacheDataOnWrite(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1074" href="#1074">1074</a> cacheConf.setEvictOnClose(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1075" href="#1075">1075</a> BlockCache cache = cacheConf.getBlockCache();
+<a class="jxr_linenumber" name="1076" href="#1076">1076</a> <em class="jxr_comment">// insert data. 2 Rows are added</em>
+<a class="jxr_linenumber" name="1077" href="#1077">1077</a> insertData(table);
+<a class="jxr_linenumber" name="1078" href="#1078">1078</a> <em class="jxr_comment">// flush the data</em>
+<a class="jxr_linenumber" name="1079" href="#1079">1079</a> System.out.println(<span class="jxr_string">"Flushing cache"</span>);
+<a class="jxr_linenumber" name="1080" href="#1080">1080</a> <em class="jxr_comment">// Should create one Hfile with 2 blocks</em>
+<a class="jxr_linenumber" name="1081" href="#1081">1081</a> region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1082" href="#1082">1082</a> <em class="jxr_comment">// CustomInnerRegionObserver.sleepTime.set(5000);</em>
+<a class="jxr_linenumber" name="1083" href="#1083">1083</a> CustomInnerRegionObserver.throwException.set(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1084" href="#1084">1084</a> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = initiateScan(table, false);
+<a class="jxr_linenumber" name="1085" href="#1085">1085</a> <em class="jxr_comment">// The block would have been decremented for the scan case as it was</em>
+<a class="jxr_linenumber" name="1086" href="#1086">1086</a> <em class="jxr_comment">// wrapped</em>
+<a class="jxr_linenumber" name="1087" href="#1087">1087</a> <em class="jxr_comment">// before even the postNext hook gets executed.</em>
+<a class="jxr_linenumber" name="1088" href="#1088">1088</a> <em class="jxr_comment">// giving some time for the block to be decremented</em>
+<a class="jxr_linenumber" name="1089" href="#1089">1089</a> Thread.sleep(100);
+<a class="jxr_linenumber" name="1090" href="#1090">1090</a> Iterator<CachedBlock> iterator = cache.iterator();
+<a class="jxr_linenumber" name="1091" href="#1091">1091</a> <strong class="jxr_keyword">boolean</strong> usedBlocksFound = false;
+<a class="jxr_linenumber" name="1092" href="#1092">1092</a> <strong class="jxr_keyword">int</strong> refCount = 0;
+<a class="jxr_linenumber" name="1093" href="#1093">1093</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1094" href="#1094">1094</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1095" href="#1095">1095</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1096" href="#1096">1096</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1097" href="#1097">1097</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1098" href="#1098">1098</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1099" href="#1099">1099</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1100" href="#1100">1100</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1101" href="#1101">1101</a> <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1102" href="#1102">1102</a> }
+<a class="jxr_linenumber" name="1103" href="#1103">1103</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="1104" href="#1104">1104</a> <em class="jxr_comment">// Blocks will be with count 3</em>
+<a class="jxr_linenumber" name="1105" href="#1105">1105</a> assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="1106" href="#1106">1106</a> usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1107" href="#1107">1107</a> }
+<a class="jxr_linenumber" name="1108" href="#1108">1108</a> }
+<a class="jxr_linenumber" name="1109" href="#1109">1109</a> assertTrue(usedBlocksFound);
+<a class="jxr_linenumber" name="1110" href="#1110">1110</a> exceptionLatch.countDown();
+<a class="jxr_linenumber" name="1111" href="#1111">1111</a> <em class="jxr_comment">// countdown the latch</em>
+<a class="jxr_linenumber" name="1112" href="#1112">1112</a> CustomInnerRegionObserver.getCdl().get().countDown();
+<a class="jxr_linenumber" name="1113" href="#1113">1113</a> <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
+<a class="jxr_linenumber" name="1114" href="#1114">1114</a> thread.join();
+<a class="jxr_linenumber" name="1115" href="#1115">1115</a> }
+<a class="jxr_linenumber" name="1116" href="#1116">1116</a> iterator = cache.iterator();
+<a class="jxr_linenumber" name="1117" href="#1117">1117</a> usedBlocksFound = false;
+<a class="jxr_linenumber" name="1118" href="#1118">1118</a> refCount = 0;
+<a class="jxr_linenumber" name="1119" href="#1119">1119</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1120" href="#1120">1120</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1121" href="#1121">1121</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1122" href="#1122">1122</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1123" href="#1123">1123</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1124" href="#1124">1124</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1125" href="#1125">1125</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1126" href="#1126">1126</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1127" href="#1127">1127</a> <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1128" href="#1128">1128</a> }
+<a class="jxr_linenumber" name="1129" href="#1129">1129</a> <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="1130" href="#1130">1130</a> <em class="jxr_comment">// Blocks will be with count 3</em>
+<a class="jxr_linenumber" name="1131" href="#1131">1131</a> assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="1132" href="#1132">1132</a> usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1133" href="#1133">1133</a> }
+<a class="jxr_linenumber" name="1134" href="#1134">1134</a> }
+<a class="jxr_linenumber" name="1135" href="#1135">1135</a> assertTrue(usedBlocksFound);
+<a class="jxr_linenumber" name="1136" href="#1136">1136</a> <em class="jxr_comment">// Sleep till the scan lease would expire? Can we reduce this value?</em>
+<a class="jxr_linenumber" name="1137" href="#1137">1137</a> Thread.sleep(5100);
+<a class="jxr_linenumber" name="1138" href="#1138">1138</a> iterator = cache.iterator();
+<a class="jxr_linenumber" name="1139" href="#1139">1139</a> refCount = 0;
+<a class="jxr_linenumber" name="1140" href="#1140">1140</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1141" href="#1141">1141</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1142" href="#1142">1142</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1143" href="#1143">1143</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1144" href="#1144">1144</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1145" href="#1145">1145</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1146" href="#1146">1146</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1147" href="#1147">1147</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1148" href="#1148">1148</a> <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1149" href="#1149">1149</a> }
+<a class="jxr_linenumber" name="1150" href="#1150">1150</a> assertEquals(0, refCount);
+<a class="jxr_linenumber" name="1151" href="#1151">1151</a> }
+<a class="jxr_linenumber" name="1152" href="#1152">1152</a> } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1153" href="#1153">1153</a> <strong class="jxr_keyword">if</strong> (table != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1154" href="#1154">1154</a> table.close();
+<a class="jxr_linenumber" name="1155" href="#1155">1155</a> }
+<a class="jxr_linenumber" name="1156" href="#1156">1156</a> }
+<a class="jxr_linenumber" name="1157" href="#1157">1157</a> }
+<a class="jxr_linenumber" name="1158" href="#1158">1158</a>
+<a class="jxr_linenumber" name="1159" href="#1159">1159</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> iterateBlockCache(BlockCache cache, Iterator<CachedBlock> iterator) {
+<a class="jxr_linenumber" name="1160" href="#1160">1160</a> <strong class="jxr_keyword">int</strong> refCount;
+<a class="jxr_linenumber" name="1161" href="#1161">1161</a> <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1162" href="#1162">1162</a> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1163" href="#1163">1163</a> BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1164" href="#1164">1164</a> <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1165" href="#1165">1165</a> refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1166" href="#1166">1166</a> } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1167" href="#1167">1167</a> refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1168" href="#1168">1168</a> } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1169" href="#1169">1169</a> <strong class="jxr_keyword">continue</strong>;
<a class="jxr_linenumber" name="1170" href="#1170">1170</a> }
-<a class="jxr_linenumber" name="1171" href="#1171">1171</a> }
-<a class="jxr_linenumber" name="1172" href="#1172">1172</a> }
-<a class="jxr_linenumber" name="1173" href="#1173">1173</a>
-<a class="jxr_linenumber" name="1174" href="#1174">1174</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="1175" href="#1175">1175</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HTable table;
-<a class="jxr_linenumber" name="1176" href="#1176">1176</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> tracker;
-<a class="jxr_linenumber" name="1177" href="#1177">1177</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> multipleCFs;
-<a class="jxr_linenumber" name="1178" href="#1178">1178</a>
-<a class="jxr_linenumber" name="1179" href="#1179">1179</a> <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>(HTable table, <strong class="jxr_keyword">boolean</strong> tracker, <strong class="jxr_keyword">boolean</strong> multipleCFs) {
-<a class="jxr_linenumber" name="1180" href="#1180">1180</a> <strong class="jxr_keyword">this</strong>.table = table;
-<a class="jxr_linenumber" name="1181" href="#1181">1181</a> <strong class="jxr_keyword">this</strong>.tracker = tracker;
-<a class="jxr_linenumber" name="1182" href="#1182">1182</a> <strong class="jxr_keyword">this</strong>.multipleCFs = multipleCFs;
-<a class="jxr_linenumber" name="1183" href="#1183">1183</a> }
-<a class="jxr_linenumber" name="1184" href="#1184">1184</a>
-<a class="jxr_linenumber" name="1185" href="#1185">1185</a> @Override
-<a class="jxr_linenumber" name="1186" href="#1186">1186</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="1187" href="#1187">1187</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1188" href="#1188">1188</a> initiateGet(table);
-<a class="jxr_linenumber" name="1189" href="#1189">1189</a> } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="1190" href="#1190">1190</a> <em class="jxr_comment">// do nothing</em>
-<a class="jxr_linenumber" name="1191" href="#1191">1191</a> }
-<a class="jxr_linenumber" name="1192" href="#1192">1192</a> }
-<a class="jxr_linenumber" name="1193" href="#1193">1193</a>
-<a class="jxr_linenumber" name="1194" href="#1194">1194</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> initiateGet(HTable table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1195" href="#1195">1195</a> Get get = <strong class="jxr_keyword">new</strong> Get(ROW);
-<a class="jxr_linenumber" name="1196" href="#1196">1196</a> <strong class="jxr_keyword">if</strong> (tracker) {
-<a class="jxr_linenumber" name="1197" href="#1197">1197</a> <em class="jxr_comment">// Change this</em>
-<a class="jxr_linenumber" name="1198" href="#1198">1198</a> <strong class="jxr_keyword">if</strong> (!multipleCFs) {
-<a class="jxr_linenumber" name="1199" href="#1199">1199</a> get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3));
-<a class="jxr_linenumber" name="1200" href="#1200">1200</a> get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8));
-<a class="jxr_linenumber" name="1201" href="#1201">1201</a> get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9));
-<a class="jxr_linenumber" name="1202" href="#1202">1202</a> <em class="jxr_comment">// Unknown key</em>
-<a class="jxr_linenumber" name="1203" href="#1203">1203</a> get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 900));
-<a class="jxr_linenumber" name="1204" href="#1204">1204</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1205" href="#1205">1205</a> get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 3), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3));
-<a class="jxr_linenumber" name="1206" href="#1206">1206</a> get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 8), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8));
-<a class="jxr_linenumber" name="1207" href="#1207">1207</a> get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 9), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9));
-<a class="jxr_linenumber" name="1208" href="#1208">1208</a> <em class="jxr_comment">// Unknown key</em>
-<a class="jxr_linenumber" name="1209" href="#1209">1209</a> get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 9), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 900));
-<a class="jxr_linenumber" name="1210" href="#1210">1210</a> }
-<a class="jxr_linenumber" name="1211" href="#1211">1211</a> }
-<a class="jxr_linenumber" name="1212" href="#1212">1212</a> CustomInnerRegionObserver.getCdl().set(latch);
-<a class="jxr_linenumber" name="1213" href="#1213">1213</a> Result r = table.get(get);
-<a class="jxr_linenumber" name="1214" href="#1214">1214</a> System.out.println(r);
-<a class="jxr_linenumber" name="1215" href="#1215">1215</a> <strong class="jxr_keyword">if</strong> (!tracker) {
-<a class="jxr_linenumber" name="1216" href="#1216">1216</a> assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));
-<a class="jxr_linenumber" name="1217" href="#1217">1217</a> assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));
-<a class="jxr_linenumber" name="1218" href="#1218">1218</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1219" href="#1219">1219</a> <strong class="jxr_keyword">if</strong> (!multipleCFs) {
-<a class="jxr_linenumber" name="1220" href="#1220">1220</a> assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3)), data2));
-<a class="jxr_linenumber" name="1221" href="#1221">1221</a> assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8)), data2));
-<a class="jxr_linenumber" name="1222" href="#1222">1222</a> assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9)), data2));
-<a class="jxr_linenumber" name="1223" href="#1223">1223</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1224" href="#1224">1224</a> assertTrue(Bytes.equals(
-<a class="jxr_linenumber" name="1225" href="#1225">1225</a> r.getValue(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 3), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3)),
-<a class="jxr_linenumber" name="1226" href="#1226">1226</a> data2));
-<a class="jxr_linenumber" name="1227" href="#1227">1227</a> assertTrue(Bytes.equals(
-<a class="jxr_linenumber" name="1228" href="#1228">1228</a> r.getValue(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 8), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8)),
-<a class="jxr_linenumber" name="1229" href="#1229">1229</a> data2));
-<a class="jxr_linenumber" name="1230" href="#1230">1230</a> assertTrue(Bytes.equals(
-<a class="jxr_linenumber" name="1231" href="#1231">1231</a> r.getValue(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 9), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9)),
-<a class="jxr_linenumber" name="1232" href="#1232">1232</a> data2));
-<a class="jxr_linenumber" name="1233" href="#1233">1233</a> }
-<a class="jxr_linenumber" name="1234" href="#1234">1234</a> }
-<a class="jxr_linenumber" name="1235" href="#1235">1235</a> }
-<a class="jxr_linenumber" name="1236" href="#1236">1236</a> }
-<a class="jxr_linenumber" name="1237" href="#1237">1237</a>
-<a class="jxr_linenumber" name="1238" href="#1238">1238</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="1239" href="#1239">1239</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HTable table;
-<a class="jxr_linenumber" name="1240" href="#1240">1240</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> reverse;
-<a class="jxr_linenumber" name="1241" href="#1241">1241</a>
-<a class="jxr_linenumber" name="1242" href="#1242">1242</a> <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>(HTable table, <strong class="jxr_keyword">boolean</strong> reverse) {
-<a class="jxr_linenumber" name="1243" href="#1243">1243</a> <strong class="jxr_keyword">this</strong>.table = table;
-<a class="jxr_linenumber" name="1244" href="#1244">1244</a> <strong class="jxr_keyword">this</strong>.reverse = reverse;
-<a class="jxr_linenumber" name="1245" href="#1245">1245</a> }
-<a class="jxr_linenumber" name="1246" href="#1246">1246</a>
-<a class="jxr_linenumber" name="1247" href="#1247">1247</a> @Override
-<a class="jxr_linenumber" name="1248" href="#1248">1248</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="1249" href="#1249">1249</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1250" href="#1250">1250</a> initiateScan(table);
-<a class="jxr_linenumber" name="1251" href="#1251">1251</a> } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="1252" href="#1252">1252</a> <em class="jxr_comment">// do nothing</em>
-<a class="jxr_linenumber" name="1253" href="#1253">1253</a> }
-<a class="jxr_linenumber" name="1254" href="#1254">1254</a> }
-<a class="jxr_linenumber" name="1255" href="#1255">1255</a>
-<a class="jxr_linenumber" name="1256" href="#1256">1256</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> initiateScan(HTable table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1257" href="#1257">1257</a> Scan scan = <strong class="jxr_keyword">new</strong> Scan();
-<a class="jxr_linenumber" name="1258" href="#1258">1258</a> <strong class="jxr_keyword">if</strong> (reverse) {
-<a class="jxr_linenumber" name="1259" href="#1259">1259</a> scan.setReversed(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="1260" href="#1260">1260</a> }
-<a class="jxr_linenumber" name="1261" href="#1261">1261</a> CustomInnerRegionObserver.getCdl().set(latch);
-<a class="jxr_linenumber" name="1262" href="#1262">1262</a> ResultScanner resScanner = table.getScanner(scan);
-<a class="jxr_linenumber" name="1263" href="#1263">1263</a> <strong class="jxr_keyword">int</strong> i = (reverse ? ROWS.length - 1 : 0);
-<a class="jxr_linenumber" name="1264" href="#1264">1264</a> <strong class="jxr_keyword">boolean</strong> resultFound = false;
-<a class="jxr_linenumber" name="1265" href="#1265">1265</a> <strong class="jxr_keyword">for</strong> (Result result : resScanner) {
-<a class="jxr_linenumber" name="1266" href="#1266">1266</a> resultFound = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1267" href="#1267">1267</a> System.out.println(result);
-<a class="jxr_linenumber" name="1268" href="#1268">1268</a> <strong class="jxr_keyword">if</strong> (!reverse) {
-<a class="jxr_linenumber" name="1269" href="#1269">1269</a> assertTrue(Bytes.equals(result.getRow(), ROWS[i]));
-<a class="jxr_linenumber" name="1270" href="#1270">1270</a> i++;
-<a class="jxr_linenumber" name="1271" href="#1271">1271</a> } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1272" href="#1272">1272</a> assertTrue(Bytes.equals(result.getRow(), ROWS[i]));
-<a class="jxr_linenumber" name="1273" href="#1273">1273</a> i--;
-<a class="jxr_linenumber" name="1274" href="#1274">1274</a> }
-<a class="jxr_linenumber" name="1275" href="#1275">1275</a> }
-<a class="jxr_linenumber" name="1276" href="#1276">1276</a> assertTrue(resultFound);
-<a class="jxr_linenumber" name="1277" href="#1277">1277</a> }
-<a class="jxr_linenumber" name="1278" href="#1278">1278</a> }
-<a class="jxr_linenumber" name="1279" href="#1279">1279</a>
-<a class="jxr_linenumber" name="1280" href="#1280">1280</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> waitForStoreFileCount(Store store, <strong class="jxr_keyword">int</strong> count, <strong class="jxr_keyword">int</strong> timeout)
-<a class="jxr_linenumber" name="1281" href="#1281">1281</a> <strong class="jxr_keyword">throws</strong> InterruptedException {
-<a class="jxr_linenumber" name="1282" href="#1282">1282</a> <strong class="jxr_keyword">long</strong> start = System.currentTimeMillis();
-<a class="jxr_linenumber" name="1283" href="#1283">1283</a> <strong class="jxr_keyword">while</strong> (start + timeout > System.currentTimeMillis() && store.getStorefilesCount() != count) {
-<a class="jxr_linenumber" name="1284" href="#1284">1284</a> Thread.sleep(100);
-<a class="jxr_linenumber" name="1285" href="#1285">1285</a> }
-<a class="jxr_linenumber" name="1286" href="#1286">1286</a> System.out.println(<span class="jxr_string">"start="</span> + start + <span class="jxr_string">", now="</span> + System.currentTimeMillis() + <span class="jxr_string">", cur="</span>
-<a class="jxr_linenumber" name="1287" href="#1287">1287</a> + store.getStorefilesCount());
-<a class="jxr_linenumber" name="1288" href="#1288">1288</a> assertEquals(count, store.getStorefilesCount());
-<a class="jxr_linenumber" name="1289" href="#1289">1289</a> }
-<a class="jxr_linenumber" name="1290" href="#1290">1290</a>
-<a class="jxr_linenumber" name="1291" href="#1291">1291</a> <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html">CustomScanner</a> <strong class="jxr_keyword">implements</strong> RegionScanner {
-<a class="jxr_linenumber" name="1292" href="#1292">1292</a>
-<a class="jxr_linenumber" name="1293" href="#1293">1293</a> <strong class="jxr_keyword">private</strong> RegionScanner delegate;
-<a class="jxr_linenumber" name="1294" href="#1294">1294</a>
-<a class="jxr_linenumber" name="1295" href="#1295">1295</a> <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html">CustomScanner</a>(RegionScanner delegate) {
-<a class="jxr_linenumber" name="1296" href="#1296">1296</a> <strong class="jxr_keyword">this</strong>.delegate = delegate;
-<a class="jxr_linenumber" name="1297" href="#1297">1297</a> }
-<a class="jxr_linenumber" name="1298" href="#1298">1298</a>
-<a class="jxr_linenumber" name="1299" href="#1299">1299</a> @Override
-<a class="jxr_linenumber" name="1300" href="#1300">1300</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List<Cell> results) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1301" href="#1301">1301</a> <strong class="jxr_keyword">return</strong> delegate.next(results);
-<a class="jxr_linenumber" name="1302" href="#1302">1302</a> }
-<a class="jxr_linenumber" name="1303" href="#1303">1303</a>
-<a class="jxr_linenumber" name="1304" href="#1304">1304</a> @Override
-<a class="jxr_linenumber" name="1305" href="#1305">1305</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List<Cell> result, ScannerContext scannerContext) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1306" href="#1306">1306</a> <strong class="jxr_keyword">return</strong> delegate.next(result, scannerContext);
-<a class="jxr_linenumber" name="1307" href="#1307">1307</a> }
-<a class="jxr_linenumber" name="1308" href="#1308">1308</a>
-<a class="jxr_linenumber" name="1309" href="#1309">1309</a> @Override
-<a class="jxr_linenumber" name="1310" href="#1310">1310</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> nextRaw(List<Cell> result) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1311" href="#1311">1311</a> <strong class="jxr_keyword">return</strong> delegate.nextRaw(result);
-<a class="jxr_linenumber" name="1312" href="#1312">1312</a> }
-<a class="jxr_linenumber" name="1313" href="#1313">1313</a>
-<a class="jxr_linenumber" name="1314" href="#1314">1314</a> @Override
-<a class="jxr_linenumber" name="1315" href="#1315">1315</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> nextRaw(List<Cell> result, ScannerContext context) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1316" href="#1316">1316</a> <strong class="jxr_keyword">boolean</strong> nextRaw = delegate.nextRaw(result, context);
-<a class="jxr_linenumber" name="1317" href="#1317">1317</a> <strong class="jxr_keyword">if</strong> (compactionLatch != <strong class="jxr_keyword">null</strong> && compactionLatch.getCount() > 0) {
-<a class="jxr_linenumber" name="1318" href="#1318">1318</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1319" href="#1319">1319</a> compactionLatch.await();
-<a class="jxr_linenumber" name="1320" href="#1320">1320</a> } <strong class="jxr_keyword">catch</strong> (InterruptedException ie) {
-<a class="jxr_linenumber" name="1321" href="#1321">1321</a> }
-<a class="jxr_linenumber" name="1322" href="#1322">1322</a> }
-<a class="jxr_linenumber" name="1323" href="#1323">1323</a>
-<a class="jxr_linenumber" name="1324" href="#1324">1324</a> <strong class="jxr_keyword">if</strong> (CustomInnerRegionObserver.throwException.get()) {
-<a class="jxr_linenumber" name="1325" href="#1325">1325</a> <strong class="jxr_keyword">if</strong> (exceptionLatch.getCount() > 0) {
-<a class="jxr_linenumber" name="1326" href="#1326">1326</a> <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1327" href="#1327">1327</a> exceptionLatch.await();
-<a class="jxr_linenumber" name="1328" href="#1328">1328</a> } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
-<a class="jxr_linenumber" name="1329" href="#1329">1329</a> }
-<a class="jxr_linenumber" name="1330" href="#1330">1330</a> <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"throw exception"</span>);
-<a class="jxr_linenumber" name="1331" href="#1331">1331</a> }
-<a class="jxr_linenumber" name="1332" href="#1332">1332</a> }
-<a class="jxr_linenumber" name="1333" href="#1333">1333</a> <strong class="jxr_keyword">return</strong> nextRaw;
-<a class="jxr_linenumber" name="1334" href="#1334">1334</a> }
-<a class="jxr_linenumber" name="1335" href="#1335">1335</a>
-<a class="jxr_linenumber" name="1336" href="#1336">1336</a> @Override
-<a class="jxr_linenumber" name="1337" href="#1337">1337</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> close() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1338" href="#1338">1338</a> delegate.close();
-<a class="jxr_linenumber" name="1339" href="#1339">1339</a> }
-<a class="jxr_linenumber" name="1340" href="#1340">1340</a>
-<a class="jxr_linenumber" name="1341" href="#1341">1341</a> @Override
-<a class="jxr_linenumber" name="1342" href="#1342">1342</a> <strong class="jxr_keyword">public</strong> HRegionInfo getRegionInfo() {
-<a class="jxr_linenumber" name="1343" href="#1343">1343</a> <strong class="jxr_keyword">return</strong> delegate.getRegionInfo();
-<a class="jxr_linenumber" name="1344" href="#1344">1344</a> }
-<a class="jxr_linenumber" name="1345" href="#1345">1345</a>
-<a class="jxr_linenumber" name="1346" href="#1346">1346</a> @Override
-<a class="jxr_linenumber" name="1347" href="#1347">1347</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isFilterDone() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1348" href="#1348">1348</a> <strong class="jxr_keyword">return</strong> delegate.isFilterDone();
-<a class="jxr_linenumber" name="1349" href="#1349">1349</a> }
-<a class="jxr_linenumber" name="1350" href="#1350">1350</a>
-<a class="jxr_linenumber" name="1351" href="#1351">1351</a> @Override
-<a class="jxr_linenumber" name="1352" href="#1352">1352</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> reseek(byte[] row) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1353" href="#1353">1353</a> <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1354" href="#1354">1354</a> }
-<a class="jxr_linenumber" name="1355" href="#1355">1355</a>
-<a class="jxr_linenumber" name="1356" href="#1356">1356</a> @Override
-<a class="jxr_linenumber" name="1357" href="#1357">1357</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getMaxResultSize() {
-<a class="jxr_linenumber" name="1358" href="#1358">1358</a> <strong class="jxr_keyword">return</strong> delegate.getMaxResultSize();
-<a class="jxr_linenumber" name="1359" href="#1359">1359</a> }
-<a class="jxr_linenumber" name="1360" href="#1360">1360</a>
-<a class="jxr_linenumber" name="1361" href="#1361">1361</a> @Override
-<a class="jxr_linenumber" name="1362" href="#1362">1362</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getMvccReadPoint() {
-<a class="jxr_linenumber" name="1363" href="#1363">1363</a> <strong class="jxr_keyword">return</strong> delegate.getMvccReadPoint();
-<a class="jxr_linenumber" name="1364" href="#1364">1364</a> }
-<a class="jxr_linenumber" name="1365" href="#1365">1365</a>
-<a class="jxr_linenumber" name="1366" href="#1366">1366</a> @Override
-<a class="jxr_linenumber" name="1367" href="#1367">1367</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getBatch() {
-<a class="jxr_linenumber" name="1368" href="#1368">1368</a> <strong class="jxr_keyword">return</strong> delegate.getBatch();
-<a class="jxr_linenumber" name="1369" href="#1369">1369</a> }
-<a class="jxr_linenumber" name="1370" href="#1370">1370</a>
-<a class="jxr_linenumber" name="1371" href="#1371">1371</a> @Override
-<a class="jxr_linenumber" name="1372" href="#1372">1372</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> shipped() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1373" href="#1373">1373</a> <strong class="jxr_keyword">this</strong>.delegate.shipped();
-<a class="jxr_linenumber" name="1374" href="#1374">1374</a> }
-<a class="jxr_linenumber" name="1375" href="#1375">1375</a> }
-<a class="jxr_linenumber" name="1376" href="#1376">1376</a>
-<a class="jxr_linenumber" name="1377" href="#1377">1377</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">CustomInnerRegionObserverWrapper</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">CustomInnerRegionObserver</a> {
-<a class="jxr_linenumber" name="1378" href="#1378">1378</a> @Override
-<a class="jxr_linenumber" name="1379" href="#1379">1379</a> <strong class="jxr_keyword">public</strong> RegionScanner postScannerOpen(ObserverContext<RegionCoprocessorEnvironment> e,
-<a class="jxr_linenumber" name="1380" href="#1380">1380</a> Scan scan, RegionScanner s) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1381" href="#1381">1381</a> <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html">CustomScanner</a>(s);
-<a class="jxr_linenumber" name="1382" href="#1382">1382</a> }
-<a class="jxr_linenumber" name="1383" href="#1383">1383</a> }
-<a class="jxr_linenumber" na
<TRUNCATED>