| <!DOCTYPE HTML> |
| <html lang="en"> |
| <head> |
| <!-- Generated by javadoc (17) --> |
| <title>Source code</title> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <meta name="description" content="source: package: org.apache.hadoop.hbase.client, class: FromClientSideBase"> |
| <meta name="generator" content="javadoc/SourceToHTMLConverter"> |
| <link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style"> |
| </head> |
| <body class="source-page"> |
| <main role="main"> |
| <div class="source-container"> |
| <pre><span class="source-line-no">001</span><span id="line-1">/*</span> |
| <span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span> |
| <span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements. See the NOTICE file</span> |
| <span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span> |
| <span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership. The ASF licenses this file</span> |
| <span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span> |
| <span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span> |
| <span class="source-line-no">008</span><span id="line-8"> * with the License. You may obtain a copy of the License at</span> |
| <span class="source-line-no">009</span><span id="line-9"> *</span> |
| <span class="source-line-no">010</span><span id="line-10"> * http://www.apache.org/licenses/LICENSE-2.0</span> |
| <span class="source-line-no">011</span><span id="line-11"> *</span> |
| <span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span> |
| <span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span> |
| <span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span> |
| <span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span> |
| <span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span> |
| <span class="source-line-no">017</span><span id="line-17"> */</span> |
| <span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.client;</span> |
| <span class="source-line-no">019</span><span id="line-19"></span> |
| <span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.HBaseTestingUtil.countRows;</span> |
| <span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertEquals;</span> |
| <span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertNull;</span> |
| <span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertTrue;</span> |
| <span class="source-line-no">024</span><span id="line-24"></span> |
| <span class="source-line-no">025</span><span id="line-25">import java.io.IOException;</span> |
| <span class="source-line-no">026</span><span id="line-26">import java.util.Arrays;</span> |
| <span class="source-line-no">027</span><span id="line-27">import java.util.Iterator;</span> |
| <span class="source-line-no">028</span><span id="line-28">import java.util.List;</span> |
| <span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.conf.Configuration;</span> |
| <span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.Cell;</span> |
| <span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.CellUtil;</span> |
| <span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.CompareOperator;</span> |
| <span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span> |
| <span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.HBaseTestingUtil;</span> |
| <span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.HConstants;</span> |
| <span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.HRegionLocation;</span> |
| <span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.StartTestingClusterOption;</span> |
| <span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;</span> |
| <span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.filter.BinaryComparator;</span> |
| <span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.filter.Filter;</span> |
| <span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.filter.FilterList;</span> |
| <span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.filter.PrefixFilter;</span> |
| <span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.filter.RowFilter;</span> |
| <span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;</span> |
| <span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.filter.WhileMatchFilter;</span> |
| <span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.testclassification.ClientTests;</span> |
| <span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.testclassification.LargeTests;</span> |
| <span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.util.Bytes;</span> |
| <span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span> |
| <span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.util.NonRepeatedEnvironmentEdge;</span> |
| <span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.util.TableDescriptorChecker;</span> |
| <span class="source-line-no">052</span><span id="line-52">import org.junit.experimental.categories.Category;</span> |
| <span class="source-line-no">053</span><span id="line-53">import org.junit.runner.RunWith;</span> |
| <span class="source-line-no">054</span><span id="line-54">import org.junit.runners.Parameterized;</span> |
| <span class="source-line-no">055</span><span id="line-55">import org.slf4j.Logger;</span> |
| <span class="source-line-no">056</span><span id="line-56">import org.slf4j.LoggerFactory;</span> |
| <span class="source-line-no">057</span><span id="line-57"></span> |
| <span class="source-line-no">058</span><span id="line-58">import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;</span> |
| <span class="source-line-no">059</span><span id="line-59"></span> |
| <span class="source-line-no">060</span><span id="line-60">/**</span> |
| <span class="source-line-no">061</span><span id="line-61"> * Base for TestFromClientSide* classes. Has common defines and utility used by all.</span> |
| <span class="source-line-no">062</span><span id="line-62"> */</span> |
| <span class="source-line-no">063</span><span id="line-63">@Category({ LargeTests.class, ClientTests.class })</span> |
| <span class="source-line-no">064</span><span id="line-64">@SuppressWarnings("deprecation")</span> |
| <span class="source-line-no">065</span><span id="line-65">@RunWith(Parameterized.class)</span> |
| <span class="source-line-no">066</span><span id="line-66">class FromClientSideBase {</span> |
| <span class="source-line-no">067</span><span id="line-67"> private static final Logger LOG = LoggerFactory.getLogger(FromClientSideBase.class);</span> |
| <span class="source-line-no">068</span><span id="line-68"> static HBaseTestingUtil TEST_UTIL;</span> |
| <span class="source-line-no">069</span><span id="line-69"> static byte[] ROW = Bytes.toBytes("testRow");</span> |
| <span class="source-line-no">070</span><span id="line-70"> static byte[] FAMILY = Bytes.toBytes("testFamily");</span> |
| <span class="source-line-no">071</span><span id="line-71"> static final byte[] INVALID_FAMILY = Bytes.toBytes("invalidTestFamily");</span> |
| <span class="source-line-no">072</span><span id="line-72"> static byte[] QUALIFIER = Bytes.toBytes("testQualifier");</span> |
| <span class="source-line-no">073</span><span id="line-73"> static byte[] VALUE = Bytes.toBytes("testValue");</span> |
| <span class="source-line-no">074</span><span id="line-74"> static int SLAVES = 1;</span> |
| <span class="source-line-no">075</span><span id="line-75"></span> |
| <span class="source-line-no">076</span><span id="line-76"> // To keep the child classes happy.</span> |
| <span class="source-line-no">077</span><span id="line-77"> FromClientSideBase() {</span> |
| <span class="source-line-no">078</span><span id="line-78"> }</span> |
| <span class="source-line-no">079</span><span id="line-79"></span> |
| <span class="source-line-no">080</span><span id="line-80"> /**</span> |
| <span class="source-line-no">081</span><span id="line-81"> * JUnit does not provide an easy way to run a hook after each parameterized run. Without that</span> |
| <span class="source-line-no">082</span><span id="line-82"> * there is no easy way to restart the test cluster after each parameterized run. Annotation</span> |
| <span class="source-line-no">083</span><span id="line-83"> * BeforeParam does not work either because it runs before parameterization and hence does not</span> |
| <span class="source-line-no">084</span><span id="line-84"> * have access to the test parameters (which is weird). This *hack* checks if the current instance</span> |
| <span class="source-line-no">085</span><span id="line-85"> * of test cluster configuration has the passed parameterized configs. In such a case, we can just</span> |
| <span class="source-line-no">086</span><span id="line-86"> * reuse the cluster for test and do not need to initialize from scratch. While this is a hack, it</span> |
| <span class="source-line-no">087</span><span id="line-87"> * saves a ton of time for the full test and de-flakes it.</span> |
| <span class="source-line-no">088</span><span id="line-88"> */</span> |
| <span class="source-line-no">089</span><span id="line-89"> protected static boolean isSameParameterizedCluster(Class<?> registryImpl, int numHedgedReqs) {</span> |
| <span class="source-line-no">090</span><span id="line-90"> if (TEST_UTIL == null) {</span> |
| <span class="source-line-no">091</span><span id="line-91"> return false;</span> |
| <span class="source-line-no">092</span><span id="line-92"> }</span> |
| <span class="source-line-no">093</span><span id="line-93"> Configuration conf = TEST_UTIL.getConfiguration();</span> |
| <span class="source-line-no">094</span><span id="line-94"> Class<?> confClass = conf.getClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,</span> |
| <span class="source-line-no">095</span><span id="line-95"> ZKConnectionRegistry.class);</span> |
| <span class="source-line-no">096</span><span id="line-96"> int hedgedReqConfig = conf.getInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY,</span> |
| <span class="source-line-no">097</span><span id="line-97"> AbstractRpcBasedConnectionRegistry.HEDGED_REQS_FANOUT_DEFAULT);</span> |
| <span class="source-line-no">098</span><span id="line-98"> return confClass.getName().equals(registryImpl.getName()) && numHedgedReqs == hedgedReqConfig;</span> |
| <span class="source-line-no">099</span><span id="line-99"> }</span> |
| <span class="source-line-no">100</span><span id="line-100"></span> |
| <span class="source-line-no">101</span><span id="line-101"> protected static final void initialize(Class<? extends ConnectionRegistry> registryImpl,</span> |
| <span class="source-line-no">102</span><span id="line-102"> int numHedgedReqs, Class<?>... cps) throws Exception {</span> |
| <span class="source-line-no">103</span><span id="line-103"> // initialize() is called for every unit test, however we only want to reset the cluster state</span> |
| <span class="source-line-no">104</span><span id="line-104"> // at the end of every parameterized run.</span> |
| <span class="source-line-no">105</span><span id="line-105"> if (isSameParameterizedCluster(registryImpl, numHedgedReqs)) {</span> |
| <span class="source-line-no">106</span><span id="line-106"> return;</span> |
| <span class="source-line-no">107</span><span id="line-107"> }</span> |
| <span class="source-line-no">108</span><span id="line-108"> // Uncomment the following lines if more verbosity is needed for</span> |
| <span class="source-line-no">109</span><span id="line-109"> // debugging (see HBASE-12285 for details).</span> |
| <span class="source-line-no">110</span><span id="line-110"> // ((Log4JLogger)RpcServer.LOG).getLogger().setLevel(Level.ALL);</span> |
| <span class="source-line-no">111</span><span id="line-111"> // ((Log4JLogger)RpcClient.LOG).getLogger().setLevel(Level.ALL);</span> |
| <span class="source-line-no">112</span><span id="line-112"> // ((Log4JLogger)ScannerCallable.LOG).getLogger().setLevel(Level.ALL);</span> |
| <span class="source-line-no">113</span><span id="line-113"> // make sure that we do not get the same ts twice, see HBASE-19731 for more details.</span> |
| <span class="source-line-no">114</span><span id="line-114"> EnvironmentEdgeManager.injectEdge(new NonRepeatedEnvironmentEdge());</span> |
| <span class="source-line-no">115</span><span id="line-115"> if (TEST_UTIL != null) {</span> |
| <span class="source-line-no">116</span><span id="line-116"> // We reached end of a parameterized run, clean up.</span> |
| <span class="source-line-no">117</span><span id="line-117"> TEST_UTIL.shutdownMiniCluster();</span> |
| <span class="source-line-no">118</span><span id="line-118"> }</span> |
| <span class="source-line-no">119</span><span id="line-119"> TEST_UTIL = new HBaseTestingUtil();</span> |
| <span class="source-line-no">120</span><span id="line-120"> Configuration conf = TEST_UTIL.getConfiguration();</span> |
| <span class="source-line-no">121</span><span id="line-121"> conf.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,</span> |
| <span class="source-line-no">122</span><span id="line-122"> Arrays.stream(cps).map(Class::getName).toArray(String[]::new));</span> |
| <span class="source-line-no">123</span><span id="line-123"> conf.setBoolean(TableDescriptorChecker.TABLE_SANITY_CHECKS, true); // enable for below tests</span> |
| <span class="source-line-no">124</span><span id="line-124"> conf.setClass(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, registryImpl,</span> |
| <span class="source-line-no">125</span><span id="line-125"> ConnectionRegistry.class);</span> |
| <span class="source-line-no">126</span><span id="line-126"> Preconditions.checkArgument(numHedgedReqs > 0);</span> |
| <span class="source-line-no">127</span><span id="line-127"> conf.setInt(MasterRegistry.MASTER_REGISTRY_HEDGED_REQS_FANOUT_KEY, numHedgedReqs);</span> |
| <span class="source-line-no">128</span><span id="line-128"> StartTestingClusterOption.Builder builder = StartTestingClusterOption.builder();</span> |
| <span class="source-line-no">129</span><span id="line-129"> // Multiple masters needed only when hedged reads for master registry are enabled.</span> |
| <span class="source-line-no">130</span><span id="line-130"> builder.numMasters(numHedgedReqs > 1 ? 3 : 1).numRegionServers(SLAVES);</span> |
| <span class="source-line-no">131</span><span id="line-131"> TEST_UTIL.startMiniCluster(builder.build());</span> |
| <span class="source-line-no">132</span><span id="line-132"> }</span> |
| <span class="source-line-no">133</span><span id="line-133"></span> |
| <span class="source-line-no">134</span><span id="line-134"> protected static void afterClass() throws Exception {</span> |
| <span class="source-line-no">135</span><span id="line-135"> if (TEST_UTIL != null) {</span> |
| <span class="source-line-no">136</span><span id="line-136"> TEST_UTIL.shutdownMiniCluster();</span> |
| <span class="source-line-no">137</span><span id="line-137"> }</span> |
| <span class="source-line-no">138</span><span id="line-138"> }</span> |
| <span class="source-line-no">139</span><span id="line-139"></span> |
| <span class="source-line-no">140</span><span id="line-140"> protected void deleteColumns(Table ht, String value, String keyPrefix) throws IOException {</span> |
| <span class="source-line-no">141</span><span id="line-141"> ResultScanner scanner = buildScanner(keyPrefix, value, ht);</span> |
| <span class="source-line-no">142</span><span id="line-142"> Iterator<Result> it = scanner.iterator();</span> |
| <span class="source-line-no">143</span><span id="line-143"> int count = 0;</span> |
| <span class="source-line-no">144</span><span id="line-144"> while (it.hasNext()) {</span> |
| <span class="source-line-no">145</span><span id="line-145"> Result result = it.next();</span> |
| <span class="source-line-no">146</span><span id="line-146"> Delete delete = new Delete(result.getRow());</span> |
| <span class="source-line-no">147</span><span id="line-147"> delete.addColumn(Bytes.toBytes("trans-tags"), Bytes.toBytes("qual2"));</span> |
| <span class="source-line-no">148</span><span id="line-148"> ht.delete(delete);</span> |
| <span class="source-line-no">149</span><span id="line-149"> count++;</span> |
| <span class="source-line-no">150</span><span id="line-150"> }</span> |
| <span class="source-line-no">151</span><span id="line-151"> assertEquals("Did not perform correct number of deletes", 3, count);</span> |
| <span class="source-line-no">152</span><span id="line-152"> }</span> |
| <span class="source-line-no">153</span><span id="line-153"></span> |
| <span class="source-line-no">154</span><span id="line-154"> protected int getNumberOfRows(String keyPrefix, String value, Table ht) throws Exception {</span> |
| <span class="source-line-no">155</span><span id="line-155"> ResultScanner resultScanner = buildScanner(keyPrefix, value, ht);</span> |
| <span class="source-line-no">156</span><span id="line-156"> Iterator<Result> scanner = resultScanner.iterator();</span> |
| <span class="source-line-no">157</span><span id="line-157"> int numberOfResults = 0;</span> |
| <span class="source-line-no">158</span><span id="line-158"> while (scanner.hasNext()) {</span> |
| <span class="source-line-no">159</span><span id="line-159"> Result result = scanner.next();</span> |
| <span class="source-line-no">160</span><span id="line-160"> System.out.println("Got back key: " + Bytes.toString(result.getRow()));</span> |
| <span class="source-line-no">161</span><span id="line-161"> for (Cell kv : result.rawCells()) {</span> |
| <span class="source-line-no">162</span><span id="line-162"> System.out.println("kv=" + kv.toString() + ", " + Bytes.toString(CellUtil.cloneValue(kv)));</span> |
| <span class="source-line-no">163</span><span id="line-163"> }</span> |
| <span class="source-line-no">164</span><span id="line-164"> numberOfResults++;</span> |
| <span class="source-line-no">165</span><span id="line-165"> }</span> |
| <span class="source-line-no">166</span><span id="line-166"> return numberOfResults;</span> |
| <span class="source-line-no">167</span><span id="line-167"> }</span> |
| <span class="source-line-no">168</span><span id="line-168"></span> |
| <span class="source-line-no">169</span><span id="line-169"> protected ResultScanner buildScanner(String keyPrefix, String value, Table ht)</span> |
| <span class="source-line-no">170</span><span id="line-170"> throws IOException {</span> |
| <span class="source-line-no">171</span><span id="line-171"> // OurFilterList allFilters = new OurFilterList();</span> |
| <span class="source-line-no">172</span><span id="line-172"> FilterList allFilters = new FilterList(/* FilterList.Operator.MUST_PASS_ALL */);</span> |
| <span class="source-line-no">173</span><span id="line-173"> allFilters.addFilter(new PrefixFilter(Bytes.toBytes(keyPrefix)));</span> |
| <span class="source-line-no">174</span><span id="line-174"> SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("trans-tags"),</span> |
| <span class="source-line-no">175</span><span id="line-175"> Bytes.toBytes("qual2"), CompareOperator.EQUAL, Bytes.toBytes(value));</span> |
| <span class="source-line-no">176</span><span id="line-176"> filter.setFilterIfMissing(true);</span> |
| <span class="source-line-no">177</span><span id="line-177"> allFilters.addFilter(filter);</span> |
| <span class="source-line-no">178</span><span id="line-178"></span> |
| <span class="source-line-no">179</span><span id="line-179"> // allFilters.addFilter(new</span> |
| <span class="source-line-no">180</span><span id="line-180"> // RowExcludingSingleColumnValueFilter(Bytes.toBytes("trans-tags"),</span> |
| <span class="source-line-no">181</span><span id="line-181"> // Bytes.toBytes("qual2"), CompareOp.EQUAL, Bytes.toBytes(value)));</span> |
| <span class="source-line-no">182</span><span id="line-182"></span> |
| <span class="source-line-no">183</span><span id="line-183"> Scan scan = new Scan();</span> |
| <span class="source-line-no">184</span><span id="line-184"> scan.addFamily(Bytes.toBytes("trans-blob"));</span> |
| <span class="source-line-no">185</span><span id="line-185"> scan.addFamily(Bytes.toBytes("trans-type"));</span> |
| <span class="source-line-no">186</span><span id="line-186"> scan.addFamily(Bytes.toBytes("trans-date"));</span> |
| <span class="source-line-no">187</span><span id="line-187"> scan.addFamily(Bytes.toBytes("trans-tags"));</span> |
| <span class="source-line-no">188</span><span id="line-188"> scan.addFamily(Bytes.toBytes("trans-group"));</span> |
| <span class="source-line-no">189</span><span id="line-189"> scan.setFilter(allFilters);</span> |
| <span class="source-line-no">190</span><span id="line-190"></span> |
| <span class="source-line-no">191</span><span id="line-191"> return ht.getScanner(scan);</span> |
| <span class="source-line-no">192</span><span id="line-192"> }</span> |
| <span class="source-line-no">193</span><span id="line-193"></span> |
| <span class="source-line-no">194</span><span id="line-194"> protected void putRows(Table ht, int numRows, String value, String key) throws IOException {</span> |
| <span class="source-line-no">195</span><span id="line-195"> for (int i = 0; i < numRows; i++) {</span> |
| <span class="source-line-no">196</span><span id="line-196"> String row = key + "_" + HBaseCommonTestingUtil.getRandomUUID().toString();</span> |
| <span class="source-line-no">197</span><span id="line-197"> System.out.println(String.format("Saving row: %s, with value %s", row, value));</span> |
| <span class="source-line-no">198</span><span id="line-198"> Put put = new Put(Bytes.toBytes(row));</span> |
| <span class="source-line-no">199</span><span id="line-199"> put.setDurability(Durability.SKIP_WAL);</span> |
| <span class="source-line-no">200</span><span id="line-200"> put.addColumn(Bytes.toBytes("trans-blob"), null, Bytes.toBytes("value for blob"));</span> |
| <span class="source-line-no">201</span><span id="line-201"> put.addColumn(Bytes.toBytes("trans-type"), null, Bytes.toBytes("statement"));</span> |
| <span class="source-line-no">202</span><span id="line-202"> put.addColumn(Bytes.toBytes("trans-date"), null, Bytes.toBytes("20090921010101999"));</span> |
| <span class="source-line-no">203</span><span id="line-203"> put.addColumn(Bytes.toBytes("trans-tags"), Bytes.toBytes("qual2"), Bytes.toBytes(value));</span> |
| <span class="source-line-no">204</span><span id="line-204"> put.addColumn(Bytes.toBytes("trans-group"), null, Bytes.toBytes("adhocTransactionGroupId"));</span> |
| <span class="source-line-no">205</span><span id="line-205"> ht.put(put);</span> |
| <span class="source-line-no">206</span><span id="line-206"> }</span> |
| <span class="source-line-no">207</span><span id="line-207"> }</span> |
| <span class="source-line-no">208</span><span id="line-208"></span> |
| <span class="source-line-no">209</span><span id="line-209"> protected void assertRowCount(final Table t, final int expected) throws IOException {</span> |
| <span class="source-line-no">210</span><span id="line-210"> assertEquals(expected, countRows(t, new Scan()));</span> |
| <span class="source-line-no">211</span><span id="line-211"> }</span> |
| <span class="source-line-no">212</span><span id="line-212"></span> |
| <span class="source-line-no">213</span><span id="line-213"> /*</span> |
| <span class="source-line-no">214</span><span id="line-214"> * @return Scan with RowFilter that does LESS than passed key.</span> |
| <span class="source-line-no">215</span><span id="line-215"> */</span> |
| <span class="source-line-no">216</span><span id="line-216"> protected Scan createScanWithRowFilter(final byte[] key) {</span> |
| <span class="source-line-no">217</span><span id="line-217"> return createScanWithRowFilter(key, null, CompareOperator.LESS);</span> |
| <span class="source-line-no">218</span><span id="line-218"> }</span> |
| <span class="source-line-no">219</span><span id="line-219"></span> |
| <span class="source-line-no">220</span><span id="line-220"> /*</span> |
| <span class="source-line-no">221</span><span id="line-221"> * @return Scan with RowFilter that does CompareOp op on passed key.</span> |
| <span class="source-line-no">222</span><span id="line-222"> */</span> |
| <span class="source-line-no">223</span><span id="line-223"> protected Scan createScanWithRowFilter(final byte[] key, final byte[] startRow,</span> |
| <span class="source-line-no">224</span><span id="line-224"> CompareOperator op) {</span> |
| <span class="source-line-no">225</span><span id="line-225"> // Make sure key is of some substance... non-null and > than first key.</span> |
| <span class="source-line-no">226</span><span id="line-226"> assertTrue(key != null && key.length > 0</span> |
| <span class="source-line-no">227</span><span id="line-227"> && Bytes.BYTES_COMPARATOR.compare(key, new byte[] { 'a', 'a', 'a' }) >= 0);</span> |
| <span class="source-line-no">228</span><span id="line-228"> LOG.info("Key=" + Bytes.toString(key));</span> |
| <span class="source-line-no">229</span><span id="line-229"> Scan s = startRow == null ? new Scan() : new Scan().withStartRow(startRow);</span> |
| <span class="source-line-no">230</span><span id="line-230"> Filter f = new RowFilter(op, new BinaryComparator(key));</span> |
| <span class="source-line-no">231</span><span id="line-231"> f = new WhileMatchFilter(f);</span> |
| <span class="source-line-no">232</span><span id="line-232"> s.setFilter(f);</span> |
| <span class="source-line-no">233</span><span id="line-233"> return s;</span> |
| <span class="source-line-no">234</span><span id="line-234"> }</span> |
| <span class="source-line-no">235</span><span id="line-235"></span> |
| <span class="source-line-no">236</span><span id="line-236"> /**</span> |
| <span class="source-line-no">237</span><span id="line-237"> * Split table into multiple regions.</span> |
| <span class="source-line-no">238</span><span id="line-238"> * @param t Table to split.</span> |
| <span class="source-line-no">239</span><span id="line-239"> * @return Map of regions to servers.</span> |
| <span class="source-line-no">240</span><span id="line-240"> */</span> |
| <span class="source-line-no">241</span><span id="line-241"> protected List<HRegionLocation> splitTable(final Table t) throws IOException {</span> |
| <span class="source-line-no">242</span><span id="line-242"> // Split this table in two.</span> |
| <span class="source-line-no">243</span><span id="line-243"> Admin admin = TEST_UTIL.getAdmin();</span> |
| <span class="source-line-no">244</span><span id="line-244"> admin.split(t.getName());</span> |
| <span class="source-line-no">245</span><span id="line-245"> // Is it right closing this admin?</span> |
| <span class="source-line-no">246</span><span id="line-246"> admin.close();</span> |
| <span class="source-line-no">247</span><span id="line-247"> List<HRegionLocation> regions = waitOnSplit(t);</span> |
| <span class="source-line-no">248</span><span id="line-248"> assertTrue(regions.size() > 1);</span> |
| <span class="source-line-no">249</span><span id="line-249"> return regions;</span> |
| <span class="source-line-no">250</span><span id="line-250"> }</span> |
| <span class="source-line-no">251</span><span id="line-251"></span> |
| <span class="source-line-no">252</span><span id="line-252"> /*</span> |
| <span class="source-line-no">253</span><span id="line-253"> * Wait on table split. May return because we waited long enough on the split and it didn't</span> |
| <span class="source-line-no">254</span><span id="line-254"> * happen. Caller should check.</span> |
| <span class="source-line-no">255</span><span id="line-255"> * @return Map of table regions; caller needs to check table actually split.</span> |
| <span class="source-line-no">256</span><span id="line-256"> */</span> |
| <span class="source-line-no">257</span><span id="line-257"> private List<HRegionLocation> waitOnSplit(final Table t) throws IOException {</span> |
| <span class="source-line-no">258</span><span id="line-258"> try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(t.getName())) {</span> |
| <span class="source-line-no">259</span><span id="line-259"> List<HRegionLocation> regions = locator.getAllRegionLocations();</span> |
| <span class="source-line-no">260</span><span id="line-260"> int originalCount = regions.size();</span> |
| <span class="source-line-no">261</span><span id="line-261"> for (int i = 0; i < TEST_UTIL.getConfiguration().getInt("hbase.test.retries", 30); i++) {</span> |
| <span class="source-line-no">262</span><span id="line-262"> try {</span> |
| <span class="source-line-no">263</span><span id="line-263"> Thread.sleep(1000);</span> |
| <span class="source-line-no">264</span><span id="line-264"> } catch (InterruptedException e) {</span> |
| <span class="source-line-no">265</span><span id="line-265"> e.printStackTrace();</span> |
| <span class="source-line-no">266</span><span id="line-266"> }</span> |
| <span class="source-line-no">267</span><span id="line-267"> regions = locator.getAllRegionLocations();</span> |
| <span class="source-line-no">268</span><span id="line-268"> if (regions.size() > originalCount) {</span> |
| <span class="source-line-no">269</span><span id="line-269"> break;</span> |
| <span class="source-line-no">270</span><span id="line-270"> }</span> |
| <span class="source-line-no">271</span><span id="line-271"> }</span> |
| <span class="source-line-no">272</span><span id="line-272"> return regions;</span> |
| <span class="source-line-no">273</span><span id="line-273"> }</span> |
| <span class="source-line-no">274</span><span id="line-274"> }</span> |
| <span class="source-line-no">275</span><span id="line-275"></span> |
| <span class="source-line-no">276</span><span id="line-276"> protected Result getSingleScanResult(Table ht, Scan scan) throws IOException {</span> |
| <span class="source-line-no">277</span><span id="line-277"> ResultScanner scanner = ht.getScanner(scan);</span> |
| <span class="source-line-no">278</span><span id="line-278"> Result result = scanner.next();</span> |
| <span class="source-line-no">279</span><span id="line-279"> scanner.close();</span> |
| <span class="source-line-no">280</span><span id="line-280"> return result;</span> |
| <span class="source-line-no">281</span><span id="line-281"> }</span> |
| <span class="source-line-no">282</span><span id="line-282"></span> |
| <span class="source-line-no">283</span><span id="line-283"> byte[][] makeNAscii(byte[] base, int n) {</span> |
| <span class="source-line-no">284</span><span id="line-284"> if (n > 256) {</span> |
| <span class="source-line-no">285</span><span id="line-285"> return makeNBig(base, n);</span> |
| <span class="source-line-no">286</span><span id="line-286"> }</span> |
| <span class="source-line-no">287</span><span id="line-287"> byte[][] ret = new byte[n][];</span> |
| <span class="source-line-no">288</span><span id="line-288"> for (int i = 0; i < n; i++) {</span> |
| <span class="source-line-no">289</span><span id="line-289"> byte[] tail = Bytes.toBytes(Integer.toString(i));</span> |
| <span class="source-line-no">290</span><span id="line-290"> ret[i] = Bytes.add(base, tail);</span> |
| <span class="source-line-no">291</span><span id="line-291"> }</span> |
| <span class="source-line-no">292</span><span id="line-292"> return ret;</span> |
| <span class="source-line-no">293</span><span id="line-293"> }</span> |
| <span class="source-line-no">294</span><span id="line-294"></span> |
| <span class="source-line-no">295</span><span id="line-295"> protected byte[][] makeN(byte[] base, int n) {</span> |
| <span class="source-line-no">296</span><span id="line-296"> if (n > 256) {</span> |
| <span class="source-line-no">297</span><span id="line-297"> return makeNBig(base, n);</span> |
| <span class="source-line-no">298</span><span id="line-298"> }</span> |
| <span class="source-line-no">299</span><span id="line-299"> byte[][] ret = new byte[n][];</span> |
| <span class="source-line-no">300</span><span id="line-300"> for (int i = 0; i < n; i++) {</span> |
| <span class="source-line-no">301</span><span id="line-301"> ret[i] = Bytes.add(base, new byte[] { (byte) i });</span> |
| <span class="source-line-no">302</span><span id="line-302"> }</span> |
| <span class="source-line-no">303</span><span id="line-303"> return ret;</span> |
| <span class="source-line-no">304</span><span id="line-304"> }</span> |
| <span class="source-line-no">305</span><span id="line-305"></span> |
| <span class="source-line-no">306</span><span id="line-306"> protected byte[][] makeNBig(byte[] base, int n) {</span> |
| <span class="source-line-no">307</span><span id="line-307"> byte[][] ret = new byte[n][];</span> |
| <span class="source-line-no">308</span><span id="line-308"> for (int i = 0; i < n; i++) {</span> |
| <span class="source-line-no">309</span><span id="line-309"> int byteA = (i % 256);</span> |
| <span class="source-line-no">310</span><span id="line-310"> int byteB = (i >> 8);</span> |
| <span class="source-line-no">311</span><span id="line-311"> ret[i] = Bytes.add(base, new byte[] { (byte) byteB, (byte) byteA });</span> |
| <span class="source-line-no">312</span><span id="line-312"> }</span> |
| <span class="source-line-no">313</span><span id="line-313"> return ret;</span> |
| <span class="source-line-no">314</span><span id="line-314"> }</span> |
| <span class="source-line-no">315</span><span id="line-315"></span> |
| <span class="source-line-no">316</span><span id="line-316"> protected long[] makeStamps(int n) {</span> |
| <span class="source-line-no">317</span><span id="line-317"> long[] stamps = new long[n];</span> |
| <span class="source-line-no">318</span><span id="line-318"> for (int i = 0; i < n; i++) {</span> |
| <span class="source-line-no">319</span><span id="line-319"> stamps[i] = i + 1L;</span> |
| <span class="source-line-no">320</span><span id="line-320"> }</span> |
| <span class="source-line-no">321</span><span id="line-321"> return stamps;</span> |
| <span class="source-line-no">322</span><span id="line-322"> }</span> |
| <span class="source-line-no">323</span><span id="line-323"></span> |
| <span class="source-line-no">324</span><span id="line-324"> protected static boolean equals(byte[] left, byte[] right) {</span> |
| <span class="source-line-no">325</span><span id="line-325"> if (left == null && right == null) {</span> |
| <span class="source-line-no">326</span><span id="line-326"> return true;</span> |
| <span class="source-line-no">327</span><span id="line-327"> }</span> |
| <span class="source-line-no">328</span><span id="line-328"> if (left == null && right.length == 0) {</span> |
| <span class="source-line-no">329</span><span id="line-329"> return true;</span> |
| <span class="source-line-no">330</span><span id="line-330"> }</span> |
| <span class="source-line-no">331</span><span id="line-331"> if (right == null && left.length == 0) {</span> |
| <span class="source-line-no">332</span><span id="line-332"> return true;</span> |
| <span class="source-line-no">333</span><span id="line-333"> }</span> |
| <span class="source-line-no">334</span><span id="line-334"> return Bytes.equals(left, right);</span> |
| <span class="source-line-no">335</span><span id="line-335"> }</span> |
| <span class="source-line-no">336</span><span id="line-336"></span> |
| <span class="source-line-no">337</span><span id="line-337"> protected void assertKey(Cell key, byte[] row, byte[] family, byte[] qualifier, byte[] value) {</span> |
| <span class="source-line-no">338</span><span id="line-338"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">339</span><span id="line-339"> + Bytes.toString(CellUtil.cloneRow(key)) + "]", equals(row, CellUtil.cloneRow(key)));</span> |
| <span class="source-line-no">340</span><span id="line-340"> assertTrue(</span> |
| <span class="source-line-no">341</span><span id="line-341"> "Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">342</span><span id="line-342"> + Bytes.toString(CellUtil.cloneFamily(key)) + "]",</span> |
| <span class="source-line-no">343</span><span id="line-343"> equals(family, CellUtil.cloneFamily(key)));</span> |
| <span class="source-line-no">344</span><span id="line-344"> assertTrue(</span> |
| <span class="source-line-no">345</span><span id="line-345"> "Expected qualifier [" + Bytes.toString(qualifier) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">346</span><span id="line-346"> + Bytes.toString(CellUtil.cloneQualifier(key)) + "]",</span> |
| <span class="source-line-no">347</span><span id="line-347"> equals(qualifier, CellUtil.cloneQualifier(key)));</span> |
| <span class="source-line-no">348</span><span id="line-348"> assertTrue("Expected value [" + Bytes.toString(value) + "] " + "Got value ["</span> |
| <span class="source-line-no">349</span><span id="line-349"> + Bytes.toString(CellUtil.cloneValue(key)) + "]", equals(value, CellUtil.cloneValue(key)));</span> |
| <span class="source-line-no">350</span><span id="line-350"> }</span> |
| <span class="source-line-no">351</span><span id="line-351"></span> |
| <span class="source-line-no">352</span><span id="line-352"> static void assertIncrementKey(Cell key, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">353</span><span id="line-353"> long value) {</span> |
| <span class="source-line-no">354</span><span id="line-354"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">355</span><span id="line-355"> + Bytes.toString(CellUtil.cloneRow(key)) + "]", equals(row, CellUtil.cloneRow(key)));</span> |
| <span class="source-line-no">356</span><span id="line-356"> assertTrue(</span> |
| <span class="source-line-no">357</span><span id="line-357"> "Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">358</span><span id="line-358"> + Bytes.toString(CellUtil.cloneFamily(key)) + "]",</span> |
| <span class="source-line-no">359</span><span id="line-359"> equals(family, CellUtil.cloneFamily(key)));</span> |
| <span class="source-line-no">360</span><span id="line-360"> assertTrue(</span> |
| <span class="source-line-no">361</span><span id="line-361"> "Expected qualifier [" + Bytes.toString(qualifier) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">362</span><span id="line-362"> + Bytes.toString(CellUtil.cloneQualifier(key)) + "]",</span> |
| <span class="source-line-no">363</span><span id="line-363"> equals(qualifier, CellUtil.cloneQualifier(key)));</span> |
| <span class="source-line-no">364</span><span id="line-364"> assertEquals("Expected value [" + value + "] " + "Got value ["</span> |
| <span class="source-line-no">365</span><span id="line-365"> + Bytes.toLong(CellUtil.cloneValue(key)) + "]", Bytes.toLong(CellUtil.cloneValue(key)),</span> |
| <span class="source-line-no">366</span><span id="line-366"> value);</span> |
| <span class="source-line-no">367</span><span id="line-367"> }</span> |
| <span class="source-line-no">368</span><span id="line-368"></span> |
| <span class="source-line-no">369</span><span id="line-369"> protected void assertNumKeys(Result result, int n) throws Exception {</span> |
| <span class="source-line-no">370</span><span id="line-370"> assertEquals("Expected " + n + " keys but got " + result.size(), result.size(), n);</span> |
| <span class="source-line-no">371</span><span id="line-371"> }</span> |
| <span class="source-line-no">372</span><span id="line-372"></span> |
| <span class="source-line-no">373</span><span id="line-373"> protected void assertNResult(Result result, byte[] row, byte[][] families, byte[][] qualifiers,</span> |
| <span class="source-line-no">374</span><span id="line-374"> byte[][] values, int[][] idxs) {</span> |
| <span class="source-line-no">375</span><span id="line-375"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">376</span><span id="line-376"> + Bytes.toString(result.getRow()) + "]", equals(row, result.getRow()));</span> |
| <span class="source-line-no">377</span><span id="line-377"> assertEquals("Expected " + idxs.length + " keys but result contains " + result.size(),</span> |
| <span class="source-line-no">378</span><span id="line-378"> result.size(), idxs.length);</span> |
| <span class="source-line-no">379</span><span id="line-379"></span> |
| <span class="source-line-no">380</span><span id="line-380"> Cell[] keys = result.rawCells();</span> |
| <span class="source-line-no">381</span><span id="line-381"></span> |
| <span class="source-line-no">382</span><span id="line-382"> for (int i = 0; i < keys.length; i++) {</span> |
| <span class="source-line-no">383</span><span id="line-383"> byte[] family = families[idxs[i][0]];</span> |
| <span class="source-line-no">384</span><span id="line-384"> byte[] qualifier = qualifiers[idxs[i][1]];</span> |
| <span class="source-line-no">385</span><span id="line-385"> byte[] value = values[idxs[i][2]];</span> |
| <span class="source-line-no">386</span><span id="line-386"> Cell key = keys[i];</span> |
| <span class="source-line-no">387</span><span id="line-387"></span> |
| <span class="source-line-no">388</span><span id="line-388"> byte[] famb = CellUtil.cloneFamily(key);</span> |
| <span class="source-line-no">389</span><span id="line-389"> byte[] qualb = CellUtil.cloneQualifier(key);</span> |
| <span class="source-line-no">390</span><span id="line-390"> byte[] valb = CellUtil.cloneValue(key);</span> |
| <span class="source-line-no">391</span><span id="line-391"> assertTrue("(" + i + ") Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">392</span><span id="line-392"> + Bytes.toString(famb) + "]", equals(family, famb));</span> |
| <span class="source-line-no">393</span><span id="line-393"> assertTrue("(" + i + ") Expected qualifier [" + Bytes.toString(qualifier) + "] "</span> |
| <span class="source-line-no">394</span><span id="line-394"> + "Got qualifier [" + Bytes.toString(qualb) + "]", equals(qualifier, qualb));</span> |
| <span class="source-line-no">395</span><span id="line-395"> assertTrue("(" + i + ") Expected value [" + Bytes.toString(value) + "] " + "Got value ["</span> |
| <span class="source-line-no">396</span><span id="line-396"> + Bytes.toString(valb) + "]", equals(value, valb));</span> |
| <span class="source-line-no">397</span><span id="line-397"> }</span> |
| <span class="source-line-no">398</span><span id="line-398"> }</span> |
| <span class="source-line-no">399</span><span id="line-399"></span> |
| <span class="source-line-no">400</span><span id="line-400"> protected void assertNResult(Result result, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">401</span><span id="line-401"> long[] stamps, byte[][] values, int start, int end) {</span> |
| <span class="source-line-no">402</span><span id="line-402"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">403</span><span id="line-403"> + Bytes.toString(result.getRow()) + "]", equals(row, result.getRow()));</span> |
| <span class="source-line-no">404</span><span id="line-404"> int expectedResults = end - start + 1;</span> |
| <span class="source-line-no">405</span><span id="line-405"> assertEquals(expectedResults, result.size());</span> |
| <span class="source-line-no">406</span><span id="line-406"></span> |
| <span class="source-line-no">407</span><span id="line-407"> Cell[] keys = result.rawCells();</span> |
| <span class="source-line-no">408</span><span id="line-408"></span> |
| <span class="source-line-no">409</span><span id="line-409"> for (int i = 0; i < keys.length; i++) {</span> |
| <span class="source-line-no">410</span><span id="line-410"> byte[] value = values[end - i];</span> |
| <span class="source-line-no">411</span><span id="line-411"> long ts = stamps[end - i];</span> |
| <span class="source-line-no">412</span><span id="line-412"> Cell key = keys[i];</span> |
| <span class="source-line-no">413</span><span id="line-413"></span> |
| <span class="source-line-no">414</span><span id="line-414"> assertTrue("(" + i + ") Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">415</span><span id="line-415"> + Bytes.toString(CellUtil.cloneFamily(key)) + "]", CellUtil.matchingFamily(key, family));</span> |
| <span class="source-line-no">416</span><span id="line-416"> assertTrue(</span> |
| <span class="source-line-no">417</span><span id="line-417"> "(" + i + ") Expected qualifier [" + Bytes.toString(qualifier) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">418</span><span id="line-418"> + Bytes.toString(CellUtil.cloneQualifier(key)) + "]",</span> |
| <span class="source-line-no">419</span><span id="line-419"> CellUtil.matchingQualifier(key, qualifier));</span> |
| <span class="source-line-no">420</span><span id="line-420"> assertEquals("Expected ts [" + ts + "] " + "Got ts [" + key.getTimestamp() + "]", ts,</span> |
| <span class="source-line-no">421</span><span id="line-421"> key.getTimestamp());</span> |
| <span class="source-line-no">422</span><span id="line-422"> assertTrue("(" + i + ") Expected value [" + Bytes.toString(value) + "] " + "Got value ["</span> |
| <span class="source-line-no">423</span><span id="line-423"> + Bytes.toString(CellUtil.cloneValue(key)) + "]", CellUtil.matchingValue(key, value));</span> |
| <span class="source-line-no">424</span><span id="line-424"> }</span> |
| <span class="source-line-no">425</span><span id="line-425"> }</span> |
| <span class="source-line-no">426</span><span id="line-426"></span> |
| <span class="source-line-no">427</span><span id="line-427"> /**</span> |
| <span class="source-line-no">428</span><span id="line-428"> * Validate that result contains two specified keys, exactly. It is assumed key A sorts before key</span> |
| <span class="source-line-no">429</span><span id="line-429"> * B.</span> |
| <span class="source-line-no">430</span><span id="line-430"> */</span> |
| <span class="source-line-no">431</span><span id="line-431"> protected void assertDoubleResult(Result result, byte[] row, byte[] familyA, byte[] qualifierA,</span> |
| <span class="source-line-no">432</span><span id="line-432"> byte[] valueA, byte[] familyB, byte[] qualifierB, byte[] valueB) {</span> |
| <span class="source-line-no">433</span><span id="line-433"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">434</span><span id="line-434"> + Bytes.toString(result.getRow()) + "]", equals(row, result.getRow()));</span> |
| <span class="source-line-no">435</span><span id="line-435"> assertEquals("Expected two keys but result contains " + result.size(), 2, result.size());</span> |
| <span class="source-line-no">436</span><span id="line-436"> Cell[] kv = result.rawCells();</span> |
| <span class="source-line-no">437</span><span id="line-437"> Cell kvA = kv[0];</span> |
| <span class="source-line-no">438</span><span id="line-438"> assertTrue(</span> |
| <span class="source-line-no">439</span><span id="line-439"> "(A) Expected family [" + Bytes.toString(familyA) + "] " + "Got family ["</span> |
| <span class="source-line-no">440</span><span id="line-440"> + Bytes.toString(CellUtil.cloneFamily(kvA)) + "]",</span> |
| <span class="source-line-no">441</span><span id="line-441"> equals(familyA, CellUtil.cloneFamily(kvA)));</span> |
| <span class="source-line-no">442</span><span id="line-442"> assertTrue(</span> |
| <span class="source-line-no">443</span><span id="line-443"> "(A) Expected qualifier [" + Bytes.toString(qualifierA) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">444</span><span id="line-444"> + Bytes.toString(CellUtil.cloneQualifier(kvA)) + "]",</span> |
| <span class="source-line-no">445</span><span id="line-445"> equals(qualifierA, CellUtil.cloneQualifier(kvA)));</span> |
| <span class="source-line-no">446</span><span id="line-446"> assertTrue("(A) Expected value [" + Bytes.toString(valueA) + "] " + "Got value ["</span> |
| <span class="source-line-no">447</span><span id="line-447"> + Bytes.toString(CellUtil.cloneValue(kvA)) + "]", equals(valueA, CellUtil.cloneValue(kvA)));</span> |
| <span class="source-line-no">448</span><span id="line-448"> Cell kvB = kv[1];</span> |
| <span class="source-line-no">449</span><span id="line-449"> assertTrue(</span> |
| <span class="source-line-no">450</span><span id="line-450"> "(B) Expected family [" + Bytes.toString(familyB) + "] " + "Got family ["</span> |
| <span class="source-line-no">451</span><span id="line-451"> + Bytes.toString(CellUtil.cloneFamily(kvB)) + "]",</span> |
| <span class="source-line-no">452</span><span id="line-452"> equals(familyB, CellUtil.cloneFamily(kvB)));</span> |
| <span class="source-line-no">453</span><span id="line-453"> assertTrue(</span> |
| <span class="source-line-no">454</span><span id="line-454"> "(B) Expected qualifier [" + Bytes.toString(qualifierB) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">455</span><span id="line-455"> + Bytes.toString(CellUtil.cloneQualifier(kvB)) + "]",</span> |
| <span class="source-line-no">456</span><span id="line-456"> equals(qualifierB, CellUtil.cloneQualifier(kvB)));</span> |
| <span class="source-line-no">457</span><span id="line-457"> assertTrue("(B) Expected value [" + Bytes.toString(valueB) + "] " + "Got value ["</span> |
| <span class="source-line-no">458</span><span id="line-458"> + Bytes.toString(CellUtil.cloneValue(kvB)) + "]", equals(valueB, CellUtil.cloneValue(kvB)));</span> |
| <span class="source-line-no">459</span><span id="line-459"> }</span> |
| <span class="source-line-no">460</span><span id="line-460"></span> |
| <span class="source-line-no">461</span><span id="line-461"> protected void assertSingleResult(Result result, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">462</span><span id="line-462"> byte[] value) {</span> |
| <span class="source-line-no">463</span><span id="line-463"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">464</span><span id="line-464"> + Bytes.toString(result.getRow()) + "]", equals(row, result.getRow()));</span> |
| <span class="source-line-no">465</span><span id="line-465"> assertEquals("Expected a single key but result contains " + result.size(), 1, result.size());</span> |
| <span class="source-line-no">466</span><span id="line-466"> Cell kv = result.rawCells()[0];</span> |
| <span class="source-line-no">467</span><span id="line-467"> assertTrue("Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">468</span><span id="line-468"> + Bytes.toString(CellUtil.cloneFamily(kv)) + "]", equals(family, CellUtil.cloneFamily(kv)));</span> |
| <span class="source-line-no">469</span><span id="line-469"> assertTrue(</span> |
| <span class="source-line-no">470</span><span id="line-470"> "Expected qualifier [" + Bytes.toString(qualifier) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">471</span><span id="line-471"> + Bytes.toString(CellUtil.cloneQualifier(kv)) + "]",</span> |
| <span class="source-line-no">472</span><span id="line-472"> equals(qualifier, CellUtil.cloneQualifier(kv)));</span> |
| <span class="source-line-no">473</span><span id="line-473"> assertTrue("Expected value [" + Bytes.toString(value) + "] " + "Got value ["</span> |
| <span class="source-line-no">474</span><span id="line-474"> + Bytes.toString(CellUtil.cloneValue(kv)) + "]", equals(value, CellUtil.cloneValue(kv)));</span> |
| <span class="source-line-no">475</span><span id="line-475"> }</span> |
| <span class="source-line-no">476</span><span id="line-476"></span> |
| <span class="source-line-no">477</span><span id="line-477"> protected void assertSingleResult(Result result, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">478</span><span id="line-478"> long value) {</span> |
| <span class="source-line-no">479</span><span id="line-479"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">480</span><span id="line-480"> + Bytes.toString(result.getRow()) + "]", equals(row, result.getRow()));</span> |
| <span class="source-line-no">481</span><span id="line-481"> assertEquals("Expected a single key but result contains " + result.size(), 1, result.size());</span> |
| <span class="source-line-no">482</span><span id="line-482"> Cell kv = result.rawCells()[0];</span> |
| <span class="source-line-no">483</span><span id="line-483"> assertTrue("Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">484</span><span id="line-484"> + Bytes.toString(CellUtil.cloneFamily(kv)) + "]", equals(family, CellUtil.cloneFamily(kv)));</span> |
| <span class="source-line-no">485</span><span id="line-485"> assertTrue(</span> |
| <span class="source-line-no">486</span><span id="line-486"> "Expected qualifier [" + Bytes.toString(qualifier) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">487</span><span id="line-487"> + Bytes.toString(CellUtil.cloneQualifier(kv)) + "]",</span> |
| <span class="source-line-no">488</span><span id="line-488"> equals(qualifier, CellUtil.cloneQualifier(kv)));</span> |
| <span class="source-line-no">489</span><span id="line-489"> assertEquals("Expected value [" + value + "] " + "Got value ["</span> |
| <span class="source-line-no">490</span><span id="line-490"> + Bytes.toLong(CellUtil.cloneValue(kv)) + "]", value, Bytes.toLong(CellUtil.cloneValue(kv)));</span> |
| <span class="source-line-no">491</span><span id="line-491"> }</span> |
| <span class="source-line-no">492</span><span id="line-492"></span> |
| <span class="source-line-no">493</span><span id="line-493"> protected void assertSingleResult(Result result, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">494</span><span id="line-494"> long ts, byte[] value) {</span> |
| <span class="source-line-no">495</span><span id="line-495"> assertTrue("Expected row [" + Bytes.toString(row) + "] " + "Got row ["</span> |
| <span class="source-line-no">496</span><span id="line-496"> + Bytes.toString(result.getRow()) + "]", equals(row, result.getRow()));</span> |
| <span class="source-line-no">497</span><span id="line-497"> assertEquals("Expected a single key but result contains " + result.size(), 1, result.size());</span> |
| <span class="source-line-no">498</span><span id="line-498"> Cell kv = result.rawCells()[0];</span> |
| <span class="source-line-no">499</span><span id="line-499"> assertTrue("Expected family [" + Bytes.toString(family) + "] " + "Got family ["</span> |
| <span class="source-line-no">500</span><span id="line-500"> + Bytes.toString(CellUtil.cloneFamily(kv)) + "]", equals(family, CellUtil.cloneFamily(kv)));</span> |
| <span class="source-line-no">501</span><span id="line-501"> assertTrue(</span> |
| <span class="source-line-no">502</span><span id="line-502"> "Expected qualifier [" + Bytes.toString(qualifier) + "] " + "Got qualifier ["</span> |
| <span class="source-line-no">503</span><span id="line-503"> + Bytes.toString(CellUtil.cloneQualifier(kv)) + "]",</span> |
| <span class="source-line-no">504</span><span id="line-504"> equals(qualifier, CellUtil.cloneQualifier(kv)));</span> |
| <span class="source-line-no">505</span><span id="line-505"> assertEquals("Expected ts [" + ts + "] " + "Got ts [" + kv.getTimestamp() + "]", ts,</span> |
| <span class="source-line-no">506</span><span id="line-506"> kv.getTimestamp());</span> |
| <span class="source-line-no">507</span><span id="line-507"> assertTrue("Expected value [" + Bytes.toString(value) + "] " + "Got value ["</span> |
| <span class="source-line-no">508</span><span id="line-508"> + Bytes.toString(CellUtil.cloneValue(kv)) + "]", equals(value, CellUtil.cloneValue(kv)));</span> |
| <span class="source-line-no">509</span><span id="line-509"> }</span> |
| <span class="source-line-no">510</span><span id="line-510"></span> |
| <span class="source-line-no">511</span><span id="line-511"> protected void assertEmptyResult(Result result) throws Exception {</span> |
| <span class="source-line-no">512</span><span id="line-512"> assertTrue("expected an empty result but result contains " + result.size() + " keys",</span> |
| <span class="source-line-no">513</span><span id="line-513"> result.isEmpty());</span> |
| <span class="source-line-no">514</span><span id="line-514"> }</span> |
| <span class="source-line-no">515</span><span id="line-515"></span> |
| <span class="source-line-no">516</span><span id="line-516"> protected void assertNullResult(Result result) throws Exception {</span> |
| <span class="source-line-no">517</span><span id="line-517"> assertNull("expected null result but received a non-null result", result);</span> |
| <span class="source-line-no">518</span><span id="line-518"> }</span> |
| <span class="source-line-no">519</span><span id="line-519"></span> |
| <span class="source-line-no">520</span><span id="line-520"> protected void getVersionRangeAndVerifyGreaterThan(Table ht, byte[] row, byte[] family,</span> |
| <span class="source-line-no">521</span><span id="line-521"> byte[] qualifier, long[] stamps, byte[][] values, int start, int end) throws IOException {</span> |
| <span class="source-line-no">522</span><span id="line-522"> Get get = new Get(row);</span> |
| <span class="source-line-no">523</span><span id="line-523"> get.addColumn(family, qualifier);</span> |
| <span class="source-line-no">524</span><span id="line-524"> get.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">525</span><span id="line-525"> get.setTimeRange(stamps[start + 1], Long.MAX_VALUE);</span> |
| <span class="source-line-no">526</span><span id="line-526"> Result result = ht.get(get);</span> |
| <span class="source-line-no">527</span><span id="line-527"> assertNResult(result, row, family, qualifier, stamps, values, start + 1, end);</span> |
| <span class="source-line-no">528</span><span id="line-528"> }</span> |
| <span class="source-line-no">529</span><span id="line-529"></span> |
| <span class="source-line-no">530</span><span id="line-530"> protected void getVersionRangeAndVerify(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">531</span><span id="line-531"> long[] stamps, byte[][] values, int start, int end) throws IOException {</span> |
| <span class="source-line-no">532</span><span id="line-532"> Get get = new Get(row);</span> |
| <span class="source-line-no">533</span><span id="line-533"> get.addColumn(family, qualifier);</span> |
| <span class="source-line-no">534</span><span id="line-534"> get.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">535</span><span id="line-535"> get.setTimeRange(stamps[start], stamps[end] + 1);</span> |
| <span class="source-line-no">536</span><span id="line-536"> Result result = ht.get(get);</span> |
| <span class="source-line-no">537</span><span id="line-537"> assertNResult(result, row, family, qualifier, stamps, values, start, end);</span> |
| <span class="source-line-no">538</span><span id="line-538"> }</span> |
| <span class="source-line-no">539</span><span id="line-539"></span> |
| <span class="source-line-no">540</span><span id="line-540"> protected void getAllVersionsAndVerify(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">541</span><span id="line-541"> long[] stamps, byte[][] values, int start, int end) throws IOException {</span> |
| <span class="source-line-no">542</span><span id="line-542"> Get get = new Get(row);</span> |
| <span class="source-line-no">543</span><span id="line-543"> get.addColumn(family, qualifier);</span> |
| <span class="source-line-no">544</span><span id="line-544"> get.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">545</span><span id="line-545"> Result result = ht.get(get);</span> |
| <span class="source-line-no">546</span><span id="line-546"> assertNResult(result, row, family, qualifier, stamps, values, start, end);</span> |
| <span class="source-line-no">547</span><span id="line-547"> }</span> |
| <span class="source-line-no">548</span><span id="line-548"></span> |
| <span class="source-line-no">549</span><span id="line-549"> protected void scanVersionRangeAndVerifyGreaterThan(Table ht, byte[] row, byte[] family,</span> |
| <span class="source-line-no">550</span><span id="line-550"> byte[] qualifier, long[] stamps, byte[][] values, int start, int end) throws IOException {</span> |
| <span class="source-line-no">551</span><span id="line-551"> Scan scan = new Scan().withStartRow(row);</span> |
| <span class="source-line-no">552</span><span id="line-552"> scan.addColumn(family, qualifier);</span> |
| <span class="source-line-no">553</span><span id="line-553"> scan.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">554</span><span id="line-554"> scan.setTimeRange(stamps[start + 1], Long.MAX_VALUE);</span> |
| <span class="source-line-no">555</span><span id="line-555"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">556</span><span id="line-556"> assertNResult(result, row, family, qualifier, stamps, values, start + 1, end);</span> |
| <span class="source-line-no">557</span><span id="line-557"> }</span> |
| <span class="source-line-no">558</span><span id="line-558"></span> |
| <span class="source-line-no">559</span><span id="line-559"> protected void scanVersionRangeAndVerify(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">560</span><span id="line-560"> long[] stamps, byte[][] values, int start, int end) throws IOException {</span> |
| <span class="source-line-no">561</span><span id="line-561"> Scan scan = new Scan().withStartRow(row);</span> |
| <span class="source-line-no">562</span><span id="line-562"> scan.addColumn(family, qualifier);</span> |
| <span class="source-line-no">563</span><span id="line-563"> scan.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">564</span><span id="line-564"> scan.setTimeRange(stamps[start], stamps[end] + 1);</span> |
| <span class="source-line-no">565</span><span id="line-565"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">566</span><span id="line-566"> assertNResult(result, row, family, qualifier, stamps, values, start, end);</span> |
| <span class="source-line-no">567</span><span id="line-567"> }</span> |
| <span class="source-line-no">568</span><span id="line-568"></span> |
| <span class="source-line-no">569</span><span id="line-569"> protected void scanAllVersionsAndVerify(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">570</span><span id="line-570"> long[] stamps, byte[][] values, int start, int end) throws IOException {</span> |
| <span class="source-line-no">571</span><span id="line-571"> Scan scan = new Scan().withStartRow(row);</span> |
| <span class="source-line-no">572</span><span id="line-572"> scan.addColumn(family, qualifier);</span> |
| <span class="source-line-no">573</span><span id="line-573"> scan.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">574</span><span id="line-574"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">575</span><span id="line-575"> assertNResult(result, row, family, qualifier, stamps, values, start, end);</span> |
| <span class="source-line-no">576</span><span id="line-576"> }</span> |
| <span class="source-line-no">577</span><span id="line-577"></span> |
| <span class="source-line-no">578</span><span id="line-578"> protected void getVersionAndVerify(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">579</span><span id="line-579"> long stamp, byte[] value) throws Exception {</span> |
| <span class="source-line-no">580</span><span id="line-580"> Get get = new Get(row);</span> |
| <span class="source-line-no">581</span><span id="line-581"> get.addColumn(family, qualifier);</span> |
| <span class="source-line-no">582</span><span id="line-582"> get.setTimestamp(stamp);</span> |
| <span class="source-line-no">583</span><span id="line-583"> get.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">584</span><span id="line-584"> Result result = ht.get(get);</span> |
| <span class="source-line-no">585</span><span id="line-585"> assertSingleResult(result, row, family, qualifier, stamp, value);</span> |
| <span class="source-line-no">586</span><span id="line-586"> }</span> |
| <span class="source-line-no">587</span><span id="line-587"></span> |
| <span class="source-line-no">588</span><span id="line-588"> protected void getVersionAndVerifyMissing(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">589</span><span id="line-589"> long stamp) throws Exception {</span> |
| <span class="source-line-no">590</span><span id="line-590"> Get get = new Get(row);</span> |
| <span class="source-line-no">591</span><span id="line-591"> get.addColumn(family, qualifier);</span> |
| <span class="source-line-no">592</span><span id="line-592"> get.setTimestamp(stamp);</span> |
| <span class="source-line-no">593</span><span id="line-593"> get.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">594</span><span id="line-594"> Result result = ht.get(get);</span> |
| <span class="source-line-no">595</span><span id="line-595"> assertEmptyResult(result);</span> |
| <span class="source-line-no">596</span><span id="line-596"> }</span> |
| <span class="source-line-no">597</span><span id="line-597"></span> |
| <span class="source-line-no">598</span><span id="line-598"> protected void scanVersionAndVerify(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">599</span><span id="line-599"> long stamp, byte[] value) throws Exception {</span> |
| <span class="source-line-no">600</span><span id="line-600"> Scan scan = new Scan().withStartRow(row);</span> |
| <span class="source-line-no">601</span><span id="line-601"> scan.addColumn(family, qualifier);</span> |
| <span class="source-line-no">602</span><span id="line-602"> scan.setTimestamp(stamp);</span> |
| <span class="source-line-no">603</span><span id="line-603"> scan.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">604</span><span id="line-604"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">605</span><span id="line-605"> assertSingleResult(result, row, family, qualifier, stamp, value);</span> |
| <span class="source-line-no">606</span><span id="line-606"> }</span> |
| <span class="source-line-no">607</span><span id="line-607"></span> |
| <span class="source-line-no">608</span><span id="line-608"> protected void scanVersionAndVerifyMissing(Table ht, byte[] row, byte[] family, byte[] qualifier,</span> |
| <span class="source-line-no">609</span><span id="line-609"> long stamp) throws Exception {</span> |
| <span class="source-line-no">610</span><span id="line-610"> Scan scan = new Scan().withStartRow(row);</span> |
| <span class="source-line-no">611</span><span id="line-611"> scan.addColumn(family, qualifier);</span> |
| <span class="source-line-no">612</span><span id="line-612"> scan.setTimestamp(stamp);</span> |
| <span class="source-line-no">613</span><span id="line-613"> scan.readVersions(Integer.MAX_VALUE);</span> |
| <span class="source-line-no">614</span><span id="line-614"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">615</span><span id="line-615"> assertNullResult(result);</span> |
| <span class="source-line-no">616</span><span id="line-616"> }</span> |
| <span class="source-line-no">617</span><span id="line-617"></span> |
| <span class="source-line-no">618</span><span id="line-618"> protected void getTestNull(Table ht, byte[] row, byte[] family, byte[] value) throws Exception {</span> |
| <span class="source-line-no">619</span><span id="line-619"> Get get = new Get(row);</span> |
| <span class="source-line-no">620</span><span id="line-620"> get.addColumn(family, null);</span> |
| <span class="source-line-no">621</span><span id="line-621"> Result result = ht.get(get);</span> |
| <span class="source-line-no">622</span><span id="line-622"> assertSingleResult(result, row, family, null, value);</span> |
| <span class="source-line-no">623</span><span id="line-623"></span> |
| <span class="source-line-no">624</span><span id="line-624"> get = new Get(row);</span> |
| <span class="source-line-no">625</span><span id="line-625"> get.addColumn(family, HConstants.EMPTY_BYTE_ARRAY);</span> |
| <span class="source-line-no">626</span><span id="line-626"> result = ht.get(get);</span> |
| <span class="source-line-no">627</span><span id="line-627"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">628</span><span id="line-628"></span> |
| <span class="source-line-no">629</span><span id="line-629"> get = new Get(row);</span> |
| <span class="source-line-no">630</span><span id="line-630"> get.addFamily(family);</span> |
| <span class="source-line-no">631</span><span id="line-631"> result = ht.get(get);</span> |
| <span class="source-line-no">632</span><span id="line-632"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">633</span><span id="line-633"></span> |
| <span class="source-line-no">634</span><span id="line-634"> get = new Get(row);</span> |
| <span class="source-line-no">635</span><span id="line-635"> result = ht.get(get);</span> |
| <span class="source-line-no">636</span><span id="line-636"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">637</span><span id="line-637"></span> |
| <span class="source-line-no">638</span><span id="line-638"> }</span> |
| <span class="source-line-no">639</span><span id="line-639"></span> |
| <span class="source-line-no">640</span><span id="line-640"> protected void getTestNull(Table ht, byte[] row, byte[] family, long value) throws Exception {</span> |
| <span class="source-line-no">641</span><span id="line-641"> Get get = new Get(row);</span> |
| <span class="source-line-no">642</span><span id="line-642"> get.addColumn(family, null);</span> |
| <span class="source-line-no">643</span><span id="line-643"> Result result = ht.get(get);</span> |
| <span class="source-line-no">644</span><span id="line-644"> assertSingleResult(result, row, family, null, value);</span> |
| <span class="source-line-no">645</span><span id="line-645"></span> |
| <span class="source-line-no">646</span><span id="line-646"> get = new Get(row);</span> |
| <span class="source-line-no">647</span><span id="line-647"> get.addColumn(family, HConstants.EMPTY_BYTE_ARRAY);</span> |
| <span class="source-line-no">648</span><span id="line-648"> result = ht.get(get);</span> |
| <span class="source-line-no">649</span><span id="line-649"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">650</span><span id="line-650"></span> |
| <span class="source-line-no">651</span><span id="line-651"> get = new Get(row);</span> |
| <span class="source-line-no">652</span><span id="line-652"> get.addFamily(family);</span> |
| <span class="source-line-no">653</span><span id="line-653"> result = ht.get(get);</span> |
| <span class="source-line-no">654</span><span id="line-654"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">655</span><span id="line-655"></span> |
| <span class="source-line-no">656</span><span id="line-656"> get = new Get(row);</span> |
| <span class="source-line-no">657</span><span id="line-657"> result = ht.get(get);</span> |
| <span class="source-line-no">658</span><span id="line-658"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">659</span><span id="line-659"> }</span> |
| <span class="source-line-no">660</span><span id="line-660"></span> |
| <span class="source-line-no">661</span><span id="line-661"> protected void scanTestNull(Table ht, byte[] row, byte[] family, byte[] value) throws Exception {</span> |
| <span class="source-line-no">662</span><span id="line-662"> scanTestNull(ht, row, family, value, false);</span> |
| <span class="source-line-no">663</span><span id="line-663"> }</span> |
| <span class="source-line-no">664</span><span id="line-664"></span> |
| <span class="source-line-no">665</span><span id="line-665"> protected void scanTestNull(Table ht, byte[] row, byte[] family, byte[] value,</span> |
| <span class="source-line-no">666</span><span id="line-666"> boolean isReversedScan) throws Exception {</span> |
| <span class="source-line-no">667</span><span id="line-667"></span> |
| <span class="source-line-no">668</span><span id="line-668"> Scan scan = new Scan();</span> |
| <span class="source-line-no">669</span><span id="line-669"> scan.setReversed(isReversedScan);</span> |
| <span class="source-line-no">670</span><span id="line-670"> scan.addColumn(family, null);</span> |
| <span class="source-line-no">671</span><span id="line-671"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">672</span><span id="line-672"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">673</span><span id="line-673"></span> |
| <span class="source-line-no">674</span><span id="line-674"> scan = new Scan();</span> |
| <span class="source-line-no">675</span><span id="line-675"> scan.setReversed(isReversedScan);</span> |
| <span class="source-line-no">676</span><span id="line-676"> scan.addColumn(family, HConstants.EMPTY_BYTE_ARRAY);</span> |
| <span class="source-line-no">677</span><span id="line-677"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">678</span><span id="line-678"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">679</span><span id="line-679"></span> |
| <span class="source-line-no">680</span><span id="line-680"> scan = new Scan();</span> |
| <span class="source-line-no">681</span><span id="line-681"> scan.setReversed(isReversedScan);</span> |
| <span class="source-line-no">682</span><span id="line-682"> scan.addFamily(family);</span> |
| <span class="source-line-no">683</span><span id="line-683"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">684</span><span id="line-684"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">685</span><span id="line-685"></span> |
| <span class="source-line-no">686</span><span id="line-686"> scan = new Scan();</span> |
| <span class="source-line-no">687</span><span id="line-687"> scan.setReversed(isReversedScan);</span> |
| <span class="source-line-no">688</span><span id="line-688"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">689</span><span id="line-689"> assertSingleResult(result, row, family, HConstants.EMPTY_BYTE_ARRAY, value);</span> |
| <span class="source-line-no">690</span><span id="line-690"></span> |
| <span class="source-line-no">691</span><span id="line-691"> }</span> |
| <span class="source-line-no">692</span><span id="line-692"></span> |
| <span class="source-line-no">693</span><span id="line-693"> protected void singleRowGetTest(Table ht, byte[][] ROWS, byte[][] FAMILIES, byte[][] QUALIFIERS,</span> |
| <span class="source-line-no">694</span><span id="line-694"> byte[][] VALUES) throws Exception {</span> |
| <span class="source-line-no">695</span><span id="line-695"> // Single column from memstore</span> |
| <span class="source-line-no">696</span><span id="line-696"> Get get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">697</span><span id="line-697"> get.addColumn(FAMILIES[4], QUALIFIERS[0]);</span> |
| <span class="source-line-no">698</span><span id="line-698"> Result result = ht.get(get);</span> |
| <span class="source-line-no">699</span><span id="line-699"> assertSingleResult(result, ROWS[0], FAMILIES[4], QUALIFIERS[0], VALUES[0]);</span> |
| <span class="source-line-no">700</span><span id="line-700"></span> |
| <span class="source-line-no">701</span><span id="line-701"> // Single column from storefile</span> |
| <span class="source-line-no">702</span><span id="line-702"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">703</span><span id="line-703"> get.addColumn(FAMILIES[2], QUALIFIERS[2]);</span> |
| <span class="source-line-no">704</span><span id="line-704"> result = ht.get(get);</span> |
| <span class="source-line-no">705</span><span id="line-705"> assertSingleResult(result, ROWS[0], FAMILIES[2], QUALIFIERS[2], VALUES[2]);</span> |
| <span class="source-line-no">706</span><span id="line-706"></span> |
| <span class="source-line-no">707</span><span id="line-707"> // Single column from storefile, family match</span> |
| <span class="source-line-no">708</span><span id="line-708"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">709</span><span id="line-709"> get.addFamily(FAMILIES[7]);</span> |
| <span class="source-line-no">710</span><span id="line-710"> result = ht.get(get);</span> |
| <span class="source-line-no">711</span><span id="line-711"> assertSingleResult(result, ROWS[0], FAMILIES[7], QUALIFIERS[7], VALUES[7]);</span> |
| <span class="source-line-no">712</span><span id="line-712"></span> |
| <span class="source-line-no">713</span><span id="line-713"> // Two columns, one from memstore one from storefile, same family,</span> |
| <span class="source-line-no">714</span><span id="line-714"> // wildcard match</span> |
| <span class="source-line-no">715</span><span id="line-715"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">716</span><span id="line-716"> get.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">717</span><span id="line-717"> result = ht.get(get);</span> |
| <span class="source-line-no">718</span><span id="line-718"> assertDoubleResult(result, ROWS[0], FAMILIES[4], QUALIFIERS[0], VALUES[0], FAMILIES[4],</span> |
| <span class="source-line-no">719</span><span id="line-719"> QUALIFIERS[4], VALUES[4]);</span> |
| <span class="source-line-no">720</span><span id="line-720"></span> |
| <span class="source-line-no">721</span><span id="line-721"> // Two columns, one from memstore one from storefile, same family,</span> |
| <span class="source-line-no">722</span><span id="line-722"> // explicit match</span> |
| <span class="source-line-no">723</span><span id="line-723"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">724</span><span id="line-724"> get.addColumn(FAMILIES[4], QUALIFIERS[0]);</span> |
| <span class="source-line-no">725</span><span id="line-725"> get.addColumn(FAMILIES[4], QUALIFIERS[4]);</span> |
| <span class="source-line-no">726</span><span id="line-726"> result = ht.get(get);</span> |
| <span class="source-line-no">727</span><span id="line-727"> assertDoubleResult(result, ROWS[0], FAMILIES[4], QUALIFIERS[0], VALUES[0], FAMILIES[4],</span> |
| <span class="source-line-no">728</span><span id="line-728"> QUALIFIERS[4], VALUES[4]);</span> |
| <span class="source-line-no">729</span><span id="line-729"></span> |
| <span class="source-line-no">730</span><span id="line-730"> // Three column, one from memstore two from storefile, different families,</span> |
| <span class="source-line-no">731</span><span id="line-731"> // wildcard match</span> |
| <span class="source-line-no">732</span><span id="line-732"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">733</span><span id="line-733"> get.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">734</span><span id="line-734"> get.addFamily(FAMILIES[7]);</span> |
| <span class="source-line-no">735</span><span id="line-735"> result = ht.get(get);</span> |
| <span class="source-line-no">736</span><span id="line-736"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES,</span> |
| <span class="source-line-no">737</span><span id="line-737"> new int[][] { { 4, 0, 0 }, { 4, 4, 4 }, { 7, 7, 7 } });</span> |
| <span class="source-line-no">738</span><span id="line-738"></span> |
| <span class="source-line-no">739</span><span id="line-739"> // Multiple columns from everywhere storefile, many family, wildcard</span> |
| <span class="source-line-no">740</span><span id="line-740"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">741</span><span id="line-741"> get.addFamily(FAMILIES[2]);</span> |
| <span class="source-line-no">742</span><span id="line-742"> get.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">743</span><span id="line-743"> get.addFamily(FAMILIES[6]);</span> |
| <span class="source-line-no">744</span><span id="line-744"> get.addFamily(FAMILIES[7]);</span> |
| <span class="source-line-no">745</span><span id="line-745"> result = ht.get(get);</span> |
| <span class="source-line-no">746</span><span id="line-746"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES, new int[][] { { 2, 2, 2 },</span> |
| <span class="source-line-no">747</span><span id="line-747"> { 2, 4, 4 }, { 4, 0, 0 }, { 4, 4, 4 }, { 6, 6, 6 }, { 6, 7, 7 }, { 7, 7, 7 } });</span> |
| <span class="source-line-no">748</span><span id="line-748"></span> |
| <span class="source-line-no">749</span><span id="line-749"> // Multiple columns from everywhere storefile, many family, wildcard</span> |
| <span class="source-line-no">750</span><span id="line-750"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">751</span><span id="line-751"> get.addColumn(FAMILIES[2], QUALIFIERS[2]);</span> |
| <span class="source-line-no">752</span><span id="line-752"> get.addColumn(FAMILIES[2], QUALIFIERS[4]);</span> |
| <span class="source-line-no">753</span><span id="line-753"> get.addColumn(FAMILIES[4], QUALIFIERS[0]);</span> |
| <span class="source-line-no">754</span><span id="line-754"> get.addColumn(FAMILIES[4], QUALIFIERS[4]);</span> |
| <span class="source-line-no">755</span><span id="line-755"> get.addColumn(FAMILIES[6], QUALIFIERS[6]);</span> |
| <span class="source-line-no">756</span><span id="line-756"> get.addColumn(FAMILIES[6], QUALIFIERS[7]);</span> |
| <span class="source-line-no">757</span><span id="line-757"> get.addColumn(FAMILIES[7], QUALIFIERS[7]);</span> |
| <span class="source-line-no">758</span><span id="line-758"> get.addColumn(FAMILIES[7], QUALIFIERS[8]);</span> |
| <span class="source-line-no">759</span><span id="line-759"> result = ht.get(get);</span> |
| <span class="source-line-no">760</span><span id="line-760"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES, new int[][] { { 2, 2, 2 },</span> |
| <span class="source-line-no">761</span><span id="line-761"> { 2, 4, 4 }, { 4, 0, 0 }, { 4, 4, 4 }, { 6, 6, 6 }, { 6, 7, 7 }, { 7, 7, 7 } });</span> |
| <span class="source-line-no">762</span><span id="line-762"></span> |
| <span class="source-line-no">763</span><span id="line-763"> // Everything</span> |
| <span class="source-line-no">764</span><span id="line-764"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">765</span><span id="line-765"> result = ht.get(get);</span> |
| <span class="source-line-no">766</span><span id="line-766"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES, new int[][] { { 2, 2, 2 },</span> |
| <span class="source-line-no">767</span><span id="line-767"> { 2, 4, 4 }, { 4, 0, 0 }, { 4, 4, 4 }, { 6, 6, 6 }, { 6, 7, 7 }, { 7, 7, 7 }, { 9, 0, 0 } });</span> |
| <span class="source-line-no">768</span><span id="line-768"></span> |
| <span class="source-line-no">769</span><span id="line-769"> // Get around inserted columns</span> |
| <span class="source-line-no">770</span><span id="line-770"></span> |
| <span class="source-line-no">771</span><span id="line-771"> get = new Get(ROWS[1]);</span> |
| <span class="source-line-no">772</span><span id="line-772"> result = ht.get(get);</span> |
| <span class="source-line-no">773</span><span id="line-773"> assertEmptyResult(result);</span> |
| <span class="source-line-no">774</span><span id="line-774"></span> |
| <span class="source-line-no">775</span><span id="line-775"> get = new Get(ROWS[0]);</span> |
| <span class="source-line-no">776</span><span id="line-776"> get.addColumn(FAMILIES[4], QUALIFIERS[3]);</span> |
| <span class="source-line-no">777</span><span id="line-777"> get.addColumn(FAMILIES[2], QUALIFIERS[3]);</span> |
| <span class="source-line-no">778</span><span id="line-778"> result = ht.get(get);</span> |
| <span class="source-line-no">779</span><span id="line-779"> assertEmptyResult(result);</span> |
| <span class="source-line-no">780</span><span id="line-780"></span> |
| <span class="source-line-no">781</span><span id="line-781"> }</span> |
| <span class="source-line-no">782</span><span id="line-782"></span> |
| <span class="source-line-no">783</span><span id="line-783"> protected void singleRowScanTest(Table ht, byte[][] ROWS, byte[][] FAMILIES, byte[][] QUALIFIERS,</span> |
| <span class="source-line-no">784</span><span id="line-784"> byte[][] VALUES) throws Exception {</span> |
| <span class="source-line-no">785</span><span id="line-785"> // Single column from memstore</span> |
| <span class="source-line-no">786</span><span id="line-786"> Scan scan = new Scan();</span> |
| <span class="source-line-no">787</span><span id="line-787"> scan.addColumn(FAMILIES[4], QUALIFIERS[0]);</span> |
| <span class="source-line-no">788</span><span id="line-788"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">789</span><span id="line-789"> assertSingleResult(result, ROWS[0], FAMILIES[4], QUALIFIERS[0], VALUES[0]);</span> |
| <span class="source-line-no">790</span><span id="line-790"></span> |
| <span class="source-line-no">791</span><span id="line-791"> // Single column from storefile</span> |
| <span class="source-line-no">792</span><span id="line-792"> scan = new Scan();</span> |
| <span class="source-line-no">793</span><span id="line-793"> scan.addColumn(FAMILIES[2], QUALIFIERS[2]);</span> |
| <span class="source-line-no">794</span><span id="line-794"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">795</span><span id="line-795"> assertSingleResult(result, ROWS[0], FAMILIES[2], QUALIFIERS[2], VALUES[2]);</span> |
| <span class="source-line-no">796</span><span id="line-796"></span> |
| <span class="source-line-no">797</span><span id="line-797"> // Single column from storefile, family match</span> |
| <span class="source-line-no">798</span><span id="line-798"> scan = new Scan();</span> |
| <span class="source-line-no">799</span><span id="line-799"> scan.addFamily(FAMILIES[7]);</span> |
| <span class="source-line-no">800</span><span id="line-800"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">801</span><span id="line-801"> assertSingleResult(result, ROWS[0], FAMILIES[7], QUALIFIERS[7], VALUES[7]);</span> |
| <span class="source-line-no">802</span><span id="line-802"></span> |
| <span class="source-line-no">803</span><span id="line-803"> // Two columns, one from memstore one from storefile, same family,</span> |
| <span class="source-line-no">804</span><span id="line-804"> // wildcard match</span> |
| <span class="source-line-no">805</span><span id="line-805"> scan = new Scan();</span> |
| <span class="source-line-no">806</span><span id="line-806"> scan.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">807</span><span id="line-807"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">808</span><span id="line-808"> assertDoubleResult(result, ROWS[0], FAMILIES[4], QUALIFIERS[0], VALUES[0], FAMILIES[4],</span> |
| <span class="source-line-no">809</span><span id="line-809"> QUALIFIERS[4], VALUES[4]);</span> |
| <span class="source-line-no">810</span><span id="line-810"></span> |
| <span class="source-line-no">811</span><span id="line-811"> // Two columns, one from memstore one from storefile, same family,</span> |
| <span class="source-line-no">812</span><span id="line-812"> // explicit match</span> |
| <span class="source-line-no">813</span><span id="line-813"> scan = new Scan();</span> |
| <span class="source-line-no">814</span><span id="line-814"> scan.addColumn(FAMILIES[4], QUALIFIERS[0]);</span> |
| <span class="source-line-no">815</span><span id="line-815"> scan.addColumn(FAMILIES[4], QUALIFIERS[4]);</span> |
| <span class="source-line-no">816</span><span id="line-816"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">817</span><span id="line-817"> assertDoubleResult(result, ROWS[0], FAMILIES[4], QUALIFIERS[0], VALUES[0], FAMILIES[4],</span> |
| <span class="source-line-no">818</span><span id="line-818"> QUALIFIERS[4], VALUES[4]);</span> |
| <span class="source-line-no">819</span><span id="line-819"></span> |
| <span class="source-line-no">820</span><span id="line-820"> // Three column, one from memstore two from storefile, different families,</span> |
| <span class="source-line-no">821</span><span id="line-821"> // wildcard match</span> |
| <span class="source-line-no">822</span><span id="line-822"> scan = new Scan();</span> |
| <span class="source-line-no">823</span><span id="line-823"> scan.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">824</span><span id="line-824"> scan.addFamily(FAMILIES[7]);</span> |
| <span class="source-line-no">825</span><span id="line-825"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">826</span><span id="line-826"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES,</span> |
| <span class="source-line-no">827</span><span id="line-827"> new int[][] { { 4, 0, 0 }, { 4, 4, 4 }, { 7, 7, 7 } });</span> |
| <span class="source-line-no">828</span><span id="line-828"></span> |
| <span class="source-line-no">829</span><span id="line-829"> // Multiple columns from everywhere storefile, many family, wildcard</span> |
| <span class="source-line-no">830</span><span id="line-830"> scan = new Scan();</span> |
| <span class="source-line-no">831</span><span id="line-831"> scan.addFamily(FAMILIES[2]);</span> |
| <span class="source-line-no">832</span><span id="line-832"> scan.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">833</span><span id="line-833"> scan.addFamily(FAMILIES[6]);</span> |
| <span class="source-line-no">834</span><span id="line-834"> scan.addFamily(FAMILIES[7]);</span> |
| <span class="source-line-no">835</span><span id="line-835"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">836</span><span id="line-836"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES, new int[][] { { 2, 2, 2 },</span> |
| <span class="source-line-no">837</span><span id="line-837"> { 2, 4, 4 }, { 4, 0, 0 }, { 4, 4, 4 }, { 6, 6, 6 }, { 6, 7, 7 }, { 7, 7, 7 } });</span> |
| <span class="source-line-no">838</span><span id="line-838"></span> |
| <span class="source-line-no">839</span><span id="line-839"> // Multiple columns from everywhere storefile, many family, wildcard</span> |
| <span class="source-line-no">840</span><span id="line-840"> scan = new Scan();</span> |
| <span class="source-line-no">841</span><span id="line-841"> scan.addColumn(FAMILIES[2], QUALIFIERS[2]);</span> |
| <span class="source-line-no">842</span><span id="line-842"> scan.addColumn(FAMILIES[2], QUALIFIERS[4]);</span> |
| <span class="source-line-no">843</span><span id="line-843"> scan.addColumn(FAMILIES[4], QUALIFIERS[0]);</span> |
| <span class="source-line-no">844</span><span id="line-844"> scan.addColumn(FAMILIES[4], QUALIFIERS[4]);</span> |
| <span class="source-line-no">845</span><span id="line-845"> scan.addColumn(FAMILIES[6], QUALIFIERS[6]);</span> |
| <span class="source-line-no">846</span><span id="line-846"> scan.addColumn(FAMILIES[6], QUALIFIERS[7]);</span> |
| <span class="source-line-no">847</span><span id="line-847"> scan.addColumn(FAMILIES[7], QUALIFIERS[7]);</span> |
| <span class="source-line-no">848</span><span id="line-848"> scan.addColumn(FAMILIES[7], QUALIFIERS[8]);</span> |
| <span class="source-line-no">849</span><span id="line-849"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">850</span><span id="line-850"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES, new int[][] { { 2, 2, 2 },</span> |
| <span class="source-line-no">851</span><span id="line-851"> { 2, 4, 4 }, { 4, 0, 0 }, { 4, 4, 4 }, { 6, 6, 6 }, { 6, 7, 7 }, { 7, 7, 7 } });</span> |
| <span class="source-line-no">852</span><span id="line-852"></span> |
| <span class="source-line-no">853</span><span id="line-853"> // Everything</span> |
| <span class="source-line-no">854</span><span id="line-854"> scan = new Scan();</span> |
| <span class="source-line-no">855</span><span id="line-855"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">856</span><span id="line-856"> assertNResult(result, ROWS[0], FAMILIES, QUALIFIERS, VALUES, new int[][] { { 2, 2, 2 },</span> |
| <span class="source-line-no">857</span><span id="line-857"> { 2, 4, 4 }, { 4, 0, 0 }, { 4, 4, 4 }, { 6, 6, 6 }, { 6, 7, 7 }, { 7, 7, 7 }, { 9, 0, 0 } });</span> |
| <span class="source-line-no">858</span><span id="line-858"></span> |
| <span class="source-line-no">859</span><span id="line-859"> // Scan around inserted columns</span> |
| <span class="source-line-no">860</span><span id="line-860"></span> |
| <span class="source-line-no">861</span><span id="line-861"> scan = new Scan().withStartRow(ROWS[1]);</span> |
| <span class="source-line-no">862</span><span id="line-862"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">863</span><span id="line-863"> assertNullResult(result);</span> |
| <span class="source-line-no">864</span><span id="line-864"></span> |
| <span class="source-line-no">865</span><span id="line-865"> scan = new Scan();</span> |
| <span class="source-line-no">866</span><span id="line-866"> scan.addColumn(FAMILIES[4], QUALIFIERS[3]);</span> |
| <span class="source-line-no">867</span><span id="line-867"> scan.addColumn(FAMILIES[2], QUALIFIERS[3]);</span> |
| <span class="source-line-no">868</span><span id="line-868"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">869</span><span id="line-869"> assertNullResult(result);</span> |
| <span class="source-line-no">870</span><span id="line-870"> }</span> |
| <span class="source-line-no">871</span><span id="line-871"></span> |
| <span class="source-line-no">872</span><span id="line-872"> /**</span> |
| <span class="source-line-no">873</span><span id="line-873"> * Verify a single column using gets. Expects family and qualifier arrays to be valid for at least</span> |
| <span class="source-line-no">874</span><span id="line-874"> * the range: idx-2 < idx < idx+2</span> |
| <span class="source-line-no">875</span><span id="line-875"> */</span> |
| <span class="source-line-no">876</span><span id="line-876"> protected void getVerifySingleColumn(Table ht, byte[][] ROWS, int ROWIDX, byte[][] FAMILIES,</span> |
| <span class="source-line-no">877</span><span id="line-877"> int FAMILYIDX, byte[][] QUALIFIERS, int QUALIFIERIDX, byte[][] VALUES, int VALUEIDX)</span> |
| <span class="source-line-no">878</span><span id="line-878"> throws Exception {</span> |
| <span class="source-line-no">879</span><span id="line-879"> Get get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">880</span><span id="line-880"> Result result = ht.get(get);</span> |
| <span class="source-line-no">881</span><span id="line-881"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">882</span><span id="line-882"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">883</span><span id="line-883"></span> |
| <span class="source-line-no">884</span><span id="line-884"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">885</span><span id="line-885"> get.addFamily(FAMILIES[FAMILYIDX]);</span> |
| <span class="source-line-no">886</span><span id="line-886"> result = ht.get(get);</span> |
| <span class="source-line-no">887</span><span id="line-887"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">888</span><span id="line-888"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">889</span><span id="line-889"></span> |
| <span class="source-line-no">890</span><span id="line-890"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">891</span><span id="line-891"> get.addFamily(FAMILIES[FAMILYIDX - 2]);</span> |
| <span class="source-line-no">892</span><span id="line-892"> get.addFamily(FAMILIES[FAMILYIDX]);</span> |
| <span class="source-line-no">893</span><span id="line-893"> get.addFamily(FAMILIES[FAMILYIDX + 2]);</span> |
| <span class="source-line-no">894</span><span id="line-894"> result = ht.get(get);</span> |
| <span class="source-line-no">895</span><span id="line-895"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">896</span><span id="line-896"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">897</span><span id="line-897"></span> |
| <span class="source-line-no">898</span><span id="line-898"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">899</span><span id="line-899"> get.addColumn(FAMILIES[FAMILYIDX], QUALIFIERS[0]);</span> |
| <span class="source-line-no">900</span><span id="line-900"> result = ht.get(get);</span> |
| <span class="source-line-no">901</span><span id="line-901"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">902</span><span id="line-902"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">903</span><span id="line-903"></span> |
| <span class="source-line-no">904</span><span id="line-904"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">905</span><span id="line-905"> get.addColumn(FAMILIES[FAMILYIDX], QUALIFIERS[1]);</span> |
| <span class="source-line-no">906</span><span id="line-906"> get.addFamily(FAMILIES[FAMILYIDX]);</span> |
| <span class="source-line-no">907</span><span id="line-907"> result = ht.get(get);</span> |
| <span class="source-line-no">908</span><span id="line-908"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">909</span><span id="line-909"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">910</span><span id="line-910"></span> |
| <span class="source-line-no">911</span><span id="line-911"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">912</span><span id="line-912"> get.addFamily(FAMILIES[FAMILYIDX]);</span> |
| <span class="source-line-no">913</span><span id="line-913"> get.addColumn(FAMILIES[FAMILYIDX + 1], QUALIFIERS[1]);</span> |
| <span class="source-line-no">914</span><span id="line-914"> get.addColumn(FAMILIES[FAMILYIDX - 2], QUALIFIERS[1]);</span> |
| <span class="source-line-no">915</span><span id="line-915"> get.addFamily(FAMILIES[FAMILYIDX - 1]);</span> |
| <span class="source-line-no">916</span><span id="line-916"> get.addFamily(FAMILIES[FAMILYIDX + 2]);</span> |
| <span class="source-line-no">917</span><span id="line-917"> result = ht.get(get);</span> |
| <span class="source-line-no">918</span><span id="line-918"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">919</span><span id="line-919"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">920</span><span id="line-920"></span> |
| <span class="source-line-no">921</span><span id="line-921"> }</span> |
| <span class="source-line-no">922</span><span id="line-922"></span> |
| <span class="source-line-no">923</span><span id="line-923"> /**</span> |
| <span class="source-line-no">924</span><span id="line-924"> * Verify a single column using scanners. Expects family and qualifier arrays to be valid for at</span> |
| <span class="source-line-no">925</span><span id="line-925"> * least the range: idx-2 to idx+2 Expects row array to be valid for at least idx to idx+2</span> |
| <span class="source-line-no">926</span><span id="line-926"> */</span> |
| <span class="source-line-no">927</span><span id="line-927"> protected void scanVerifySingleColumn(Table ht, byte[][] ROWS, int ROWIDX, byte[][] FAMILIES,</span> |
| <span class="source-line-no">928</span><span id="line-928"> int FAMILYIDX, byte[][] QUALIFIERS, int QUALIFIERIDX, byte[][] VALUES, int VALUEIDX)</span> |
| <span class="source-line-no">929</span><span id="line-929"> throws Exception {</span> |
| <span class="source-line-no">930</span><span id="line-930"> Scan scan = new Scan();</span> |
| <span class="source-line-no">931</span><span id="line-931"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">932</span><span id="line-932"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">933</span><span id="line-933"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">934</span><span id="line-934"></span> |
| <span class="source-line-no">935</span><span id="line-935"> scan = new Scan().withStartRow(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">936</span><span id="line-936"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">937</span><span id="line-937"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">938</span><span id="line-938"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">939</span><span id="line-939"></span> |
| <span class="source-line-no">940</span><span id="line-940"> scan = new Scan().withStartRow(ROWS[ROWIDX]).withStopRow(ROWS[ROWIDX + 1], true);</span> |
| <span class="source-line-no">941</span><span id="line-941"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">942</span><span id="line-942"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">943</span><span id="line-943"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">944</span><span id="line-944"></span> |
| <span class="source-line-no">945</span><span id="line-945"> scan = new Scan().withStartRow(HConstants.EMPTY_START_ROW).withStopRow(ROWS[ROWIDX + 1], true);</span> |
| <span class="source-line-no">946</span><span id="line-946"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">947</span><span id="line-947"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">948</span><span id="line-948"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">949</span><span id="line-949"></span> |
| <span class="source-line-no">950</span><span id="line-950"> scan = new Scan();</span> |
| <span class="source-line-no">951</span><span id="line-951"> scan.addFamily(FAMILIES[FAMILYIDX]);</span> |
| <span class="source-line-no">952</span><span id="line-952"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">953</span><span id="line-953"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">954</span><span id="line-954"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">955</span><span id="line-955"></span> |
| <span class="source-line-no">956</span><span id="line-956"> scan = new Scan();</span> |
| <span class="source-line-no">957</span><span id="line-957"> scan.addColumn(FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX]);</span> |
| <span class="source-line-no">958</span><span id="line-958"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">959</span><span id="line-959"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">960</span><span id="line-960"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">961</span><span id="line-961"></span> |
| <span class="source-line-no">962</span><span id="line-962"> scan = new Scan();</span> |
| <span class="source-line-no">963</span><span id="line-963"> scan.addColumn(FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX + 1]);</span> |
| <span class="source-line-no">964</span><span id="line-964"> scan.addFamily(FAMILIES[FAMILYIDX]);</span> |
| <span class="source-line-no">965</span><span id="line-965"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">966</span><span id="line-966"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">967</span><span id="line-967"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">968</span><span id="line-968"></span> |
| <span class="source-line-no">969</span><span id="line-969"> scan = new Scan();</span> |
| <span class="source-line-no">970</span><span id="line-970"> scan.addColumn(FAMILIES[FAMILYIDX - 1], QUALIFIERS[QUALIFIERIDX + 1]);</span> |
| <span class="source-line-no">971</span><span id="line-971"> scan.addColumn(FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX]);</span> |
| <span class="source-line-no">972</span><span id="line-972"> scan.addFamily(FAMILIES[FAMILYIDX + 1]);</span> |
| <span class="source-line-no">973</span><span id="line-973"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">974</span><span id="line-974"> assertSingleResult(result, ROWS[ROWIDX], FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX],</span> |
| <span class="source-line-no">975</span><span id="line-975"> VALUES[VALUEIDX]);</span> |
| <span class="source-line-no">976</span><span id="line-976"></span> |
| <span class="source-line-no">977</span><span id="line-977"> }</span> |
| <span class="source-line-no">978</span><span id="line-978"></span> |
| <span class="source-line-no">979</span><span id="line-979"> /**</span> |
| <span class="source-line-no">980</span><span id="line-980"> * Verify we do not read any values by accident around a single column Same requirements as</span> |
| <span class="source-line-no">981</span><span id="line-981"> * getVerifySingleColumn</span> |
| <span class="source-line-no">982</span><span id="line-982"> */</span> |
| <span class="source-line-no">983</span><span id="line-983"> protected void getVerifySingleEmpty(Table ht, byte[][] ROWS, int ROWIDX, byte[][] FAMILIES,</span> |
| <span class="source-line-no">984</span><span id="line-984"> int FAMILYIDX, byte[][] QUALIFIERS, int QUALIFIERIDX) throws Exception {</span> |
| <span class="source-line-no">985</span><span id="line-985"> Get get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">986</span><span id="line-986"> get.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">987</span><span id="line-987"> get.addColumn(FAMILIES[4], QUALIFIERS[1]);</span> |
| <span class="source-line-no">988</span><span id="line-988"> Result result = ht.get(get);</span> |
| <span class="source-line-no">989</span><span id="line-989"> assertEmptyResult(result);</span> |
| <span class="source-line-no">990</span><span id="line-990"></span> |
| <span class="source-line-no">991</span><span id="line-991"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">992</span><span id="line-992"> get.addFamily(FAMILIES[4]);</span> |
| <span class="source-line-no">993</span><span id="line-993"> get.addColumn(FAMILIES[4], QUALIFIERS[2]);</span> |
| <span class="source-line-no">994</span><span id="line-994"> result = ht.get(get);</span> |
| <span class="source-line-no">995</span><span id="line-995"> assertEmptyResult(result);</span> |
| <span class="source-line-no">996</span><span id="line-996"></span> |
| <span class="source-line-no">997</span><span id="line-997"> get = new Get(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">998</span><span id="line-998"> get.addFamily(FAMILIES[3]);</span> |
| <span class="source-line-no">999</span><span id="line-999"> get.addColumn(FAMILIES[4], QUALIFIERS[2]);</span> |
| <span class="source-line-no">1000</span><span id="line-1000"> get.addFamily(FAMILIES[5]);</span> |
| <span class="source-line-no">1001</span><span id="line-1001"> result = ht.get(get);</span> |
| <span class="source-line-no">1002</span><span id="line-1002"> assertEmptyResult(result);</span> |
| <span class="source-line-no">1003</span><span id="line-1003"></span> |
| <span class="source-line-no">1004</span><span id="line-1004"> get = new Get(ROWS[ROWIDX + 1]);</span> |
| <span class="source-line-no">1005</span><span id="line-1005"> result = ht.get(get);</span> |
| <span class="source-line-no">1006</span><span id="line-1006"> assertEmptyResult(result);</span> |
| <span class="source-line-no">1007</span><span id="line-1007"></span> |
| <span class="source-line-no">1008</span><span id="line-1008"> }</span> |
| <span class="source-line-no">1009</span><span id="line-1009"></span> |
| <span class="source-line-no">1010</span><span id="line-1010"> protected void scanVerifySingleEmpty(Table ht, byte[][] ROWS, int ROWIDX, byte[][] FAMILIES,</span> |
| <span class="source-line-no">1011</span><span id="line-1011"> int FAMILYIDX, byte[][] QUALIFIERS, int QUALIFIERIDX) throws Exception {</span> |
| <span class="source-line-no">1012</span><span id="line-1012"> Scan scan = new Scan().withStartRow(ROWS[ROWIDX + 1]);</span> |
| <span class="source-line-no">1013</span><span id="line-1013"> Result result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">1014</span><span id="line-1014"> assertNullResult(result);</span> |
| <span class="source-line-no">1015</span><span id="line-1015"></span> |
| <span class="source-line-no">1016</span><span id="line-1016"> scan = new Scan().withStartRow(ROWS[ROWIDX + 1]).withStopRow(ROWS[ROWIDX + 2], true);</span> |
| <span class="source-line-no">1017</span><span id="line-1017"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">1018</span><span id="line-1018"> assertNullResult(result);</span> |
| <span class="source-line-no">1019</span><span id="line-1019"></span> |
| <span class="source-line-no">1020</span><span id="line-1020"> scan = new Scan().withStartRow(HConstants.EMPTY_START_ROW).withStopRow(ROWS[ROWIDX]);</span> |
| <span class="source-line-no">1021</span><span id="line-1021"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">1022</span><span id="line-1022"> assertNullResult(result);</span> |
| <span class="source-line-no">1023</span><span id="line-1023"></span> |
| <span class="source-line-no">1024</span><span id="line-1024"> scan = new Scan();</span> |
| <span class="source-line-no">1025</span><span id="line-1025"> scan.addColumn(FAMILIES[FAMILYIDX], QUALIFIERS[QUALIFIERIDX + 1]);</span> |
| <span class="source-line-no">1026</span><span id="line-1026"> scan.addFamily(FAMILIES[FAMILYIDX - 1]);</span> |
| <span class="source-line-no">1027</span><span id="line-1027"> result = getSingleScanResult(ht, scan);</span> |
| <span class="source-line-no">1028</span><span id="line-1028"> assertNullResult(result);</span> |
| <span class="source-line-no">1029</span><span id="line-1029"></span> |
| <span class="source-line-no">1030</span><span id="line-1030"> }</span> |
| <span class="source-line-no">1031</span><span id="line-1031">}</span> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </pre> |
| </div> |
| </main> |
| </body> |
| </html> |