http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html index fa477c7..8001068 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.GetDataAsyncCallback.html @@ -49,7 +49,7 @@ <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.41"></a> <span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.42"></a> <span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.43"></a> -<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.44"></a> +<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a> <span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.45"></a> <span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.SplitLogWorker;<a name="line.46"></a> <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.SplitLogWorker.TaskExecutor;<a name="line.47"></a> @@ -454,7 +454,7 @@ <span class="sourceLineNo">446</span> taskReadyLock.wait(checkInterval);<a name="line.446"></a> <span class="sourceLineNo">447</span> if (server != null) {<a name="line.447"></a> <span class="sourceLineNo">448</span> // check to see if we have stale recovering regions in our internal memory state<a name="line.448"></a> -<span class="sourceLineNo">449</span> Map<String, Region> recoveringRegions = server.getRecoveringRegions();<a name="line.449"></a> +<span class="sourceLineNo">449</span> Map<String, HRegion> recoveringRegions = server.getRecoveringRegions();<a name="line.449"></a> <span class="sourceLineNo">450</span> if (!recoveringRegions.isEmpty()) {<a name="line.450"></a> <span class="sourceLineNo">451</span> // Make a local copy to prevent ConcurrentModificationException when other threads<a name="line.451"></a> <span class="sourceLineNo">452</span> // modify recoveringRegions<a name="line.452"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html index fa477c7..8001068 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.ZkSplitTaskDetails.html @@ -49,7 +49,7 @@ <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.41"></a> <span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.42"></a> <span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.43"></a> -<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.44"></a> +<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a> <span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.45"></a> <span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.SplitLogWorker;<a name="line.46"></a> <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.SplitLogWorker.TaskExecutor;<a name="line.47"></a> @@ -454,7 +454,7 @@ <span class="sourceLineNo">446</span> taskReadyLock.wait(checkInterval);<a name="line.446"></a> <span class="sourceLineNo">447</span> if (server != null) {<a name="line.447"></a> <span class="sourceLineNo">448</span> // check to see if we have stale recovering regions in our internal memory state<a name="line.448"></a> -<span class="sourceLineNo">449</span> Map<String, Region> recoveringRegions = server.getRecoveringRegions();<a name="line.449"></a> +<span class="sourceLineNo">449</span> Map<String, HRegion> recoveringRegions = server.getRecoveringRegions();<a name="line.449"></a> <span class="sourceLineNo">450</span> if (!recoveringRegions.isEmpty()) {<a name="line.450"></a> <span class="sourceLineNo">451</span> // Make a local copy to prevent ConcurrentModificationException when other threads<a name="line.451"></a> <span class="sourceLineNo">452</span> // modify recoveringRegions<a name="line.452"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html index fa477c7..8001068 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html @@ -49,7 +49,7 @@ <span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.41"></a> <span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.42"></a> <span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.43"></a> -<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.44"></a> +<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.44"></a> <span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.45"></a> <span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.SplitLogWorker;<a name="line.46"></a> <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.SplitLogWorker.TaskExecutor;<a name="line.47"></a> @@ -454,7 +454,7 @@ <span class="sourceLineNo">446</span> taskReadyLock.wait(checkInterval);<a name="line.446"></a> <span class="sourceLineNo">447</span> if (server != null) {<a name="line.447"></a> <span class="sourceLineNo">448</span> // check to see if we have stale recovering regions in our internal memory state<a name="line.448"></a> -<span class="sourceLineNo">449</span> Map<String, Region> recoveringRegions = server.getRecoveringRegions();<a name="line.449"></a> +<span class="sourceLineNo">449</span> Map<String, HRegion> recoveringRegions = server.getRecoveringRegions();<a name="line.449"></a> <span class="sourceLineNo">450</span> if (!recoveringRegions.isEmpty()) {<a name="line.450"></a> <span class="sourceLineNo">451</span> // Make a local copy to prevent ConcurrentModificationException when other threads<a name="line.451"></a> <span class="sourceLineNo">452</span> // modify recoveringRegions<a name="line.452"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.Column.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.Column.html b/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.Column.html index 1f6e8cf..df17fee 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.Column.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.Column.html @@ -158,143 +158,142 @@ <span class="sourceLineNo">150</span> for (List<Cell> deleteRow : deleteRows) {<a name="line.150"></a> <span class="sourceLineNo">151</span> deleteArr[i++] = createDeleteMutation(deleteRow, deleteType, timestamp);<a name="line.151"></a> <span class="sourceLineNo">152</span> }<a name="line.152"></a> -<span class="sourceLineNo">153</span> OperationStatus[] opStatus = region.batchMutate(deleteArr, HConstants.NO_NONCE,<a name="line.153"></a> -<span class="sourceLineNo">154</span> HConstants.NO_NONCE);<a name="line.154"></a> -<span class="sourceLineNo">155</span> for (i = 0; i < opStatus.length; i++) {<a name="line.155"></a> -<span class="sourceLineNo">156</span> if (opStatus[i].getOperationStatusCode() != OperationStatusCode.SUCCESS) {<a name="line.156"></a> -<span class="sourceLineNo">157</span> break;<a name="line.157"></a> -<span class="sourceLineNo">158</span> }<a name="line.158"></a> -<span class="sourceLineNo">159</span> totalRowsDeleted++;<a name="line.159"></a> -<span class="sourceLineNo">160</span> if (deleteType == DeleteType.VERSION) {<a name="line.160"></a> -<span class="sourceLineNo">161</span> byte[] versionsDeleted = deleteArr[i].getAttribute(<a name="line.161"></a> -<span class="sourceLineNo">162</span> NO_OF_VERSIONS_TO_DELETE);<a name="line.162"></a> -<span class="sourceLineNo">163</span> if (versionsDeleted != null) {<a name="line.163"></a> -<span class="sourceLineNo">164</span> totalVersionsDeleted += Bytes.toInt(versionsDeleted);<a name="line.164"></a> -<span class="sourceLineNo">165</span> }<a name="line.165"></a> -<span class="sourceLineNo">166</span> }<a name="line.166"></a> -<span class="sourceLineNo">167</span> }<a name="line.167"></a> -<span class="sourceLineNo">168</span> }<a name="line.168"></a> -<span class="sourceLineNo">169</span> }<a name="line.169"></a> -<span class="sourceLineNo">170</span> } catch (IOException ioe) {<a name="line.170"></a> -<span class="sourceLineNo">171</span> LOG.error(ioe);<a name="line.171"></a> -<span class="sourceLineNo">172</span> // Call ServerRpcController#getFailedOn() to retrieve this IOException at client side.<a name="line.172"></a> -<span class="sourceLineNo">173</span> CoprocessorRpcUtils.setControllerException(controller, ioe);<a name="line.173"></a> -<span class="sourceLineNo">174</span> } finally {<a name="line.174"></a> -<span class="sourceLineNo">175</span> if (scanner != null) {<a name="line.175"></a> -<span class="sourceLineNo">176</span> try {<a name="line.176"></a> -<span class="sourceLineNo">177</span> scanner.close();<a name="line.177"></a> -<span class="sourceLineNo">178</span> } catch (IOException ioe) {<a name="line.178"></a> -<span class="sourceLineNo">179</span> LOG.error(ioe);<a name="line.179"></a> -<span class="sourceLineNo">180</span> }<a name="line.180"></a> -<span class="sourceLineNo">181</span> }<a name="line.181"></a> -<span class="sourceLineNo">182</span> }<a name="line.182"></a> -<span class="sourceLineNo">183</span> Builder responseBuilder = BulkDeleteResponse.newBuilder();<a name="line.183"></a> -<span class="sourceLineNo">184</span> responseBuilder.setRowsDeleted(totalRowsDeleted);<a name="line.184"></a> -<span class="sourceLineNo">185</span> if (deleteType == DeleteType.VERSION) {<a name="line.185"></a> -<span class="sourceLineNo">186</span> responseBuilder.setVersionsDeleted(totalVersionsDeleted);<a name="line.186"></a> -<span class="sourceLineNo">187</span> }<a name="line.187"></a> -<span class="sourceLineNo">188</span> BulkDeleteResponse result = responseBuilder.build();<a name="line.188"></a> -<span class="sourceLineNo">189</span> done.run(result);<a name="line.189"></a> -<span class="sourceLineNo">190</span> }<a name="line.190"></a> -<span class="sourceLineNo">191</span><a name="line.191"></a> -<span class="sourceLineNo">192</span> private Delete createDeleteMutation(List<Cell> deleteRow, DeleteType deleteType,<a name="line.192"></a> -<span class="sourceLineNo">193</span> Long timestamp) {<a name="line.193"></a> -<span class="sourceLineNo">194</span> long ts;<a name="line.194"></a> -<span class="sourceLineNo">195</span> if (timestamp == null) {<a name="line.195"></a> -<span class="sourceLineNo">196</span> ts = HConstants.LATEST_TIMESTAMP;<a name="line.196"></a> -<span class="sourceLineNo">197</span> } else {<a name="line.197"></a> -<span class="sourceLineNo">198</span> ts = timestamp;<a name="line.198"></a> -<span class="sourceLineNo">199</span> }<a name="line.199"></a> -<span class="sourceLineNo">200</span> // We just need the rowkey. Get it from 1st KV.<a name="line.200"></a> -<span class="sourceLineNo">201</span> byte[] row = CellUtil.cloneRow(deleteRow.get(0));<a name="line.201"></a> -<span class="sourceLineNo">202</span> Delete delete = new Delete(row, ts);<a name="line.202"></a> -<span class="sourceLineNo">203</span> if (deleteType == DeleteType.FAMILY) {<a name="line.203"></a> -<span class="sourceLineNo">204</span> Set<byte[]> families = new TreeSet<>(Bytes.BYTES_COMPARATOR);<a name="line.204"></a> -<span class="sourceLineNo">205</span> for (Cell kv : deleteRow) {<a name="line.205"></a> -<span class="sourceLineNo">206</span> if (families.add(CellUtil.cloneFamily(kv))) {<a name="line.206"></a> -<span class="sourceLineNo">207</span> delete.addFamily(CellUtil.cloneFamily(kv), ts);<a name="line.207"></a> -<span class="sourceLineNo">208</span> }<a name="line.208"></a> -<span class="sourceLineNo">209</span> }<a name="line.209"></a> -<span class="sourceLineNo">210</span> } else if (deleteType == DeleteType.COLUMN) {<a name="line.210"></a> -<span class="sourceLineNo">211</span> Set<Column> columns = new HashSet<>();<a name="line.211"></a> -<span class="sourceLineNo">212</span> for (Cell kv : deleteRow) {<a name="line.212"></a> -<span class="sourceLineNo">213</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.213"></a> -<span class="sourceLineNo">214</span> if (columns.add(column)) {<a name="line.214"></a> -<span class="sourceLineNo">215</span> // Making deleteColumns() calls more than once for the same cf:qualifier is not correct<a name="line.215"></a> -<span class="sourceLineNo">216</span> // Every call to deleteColumns() will add a new KV to the familymap which will finally<a name="line.216"></a> -<span class="sourceLineNo">217</span> // get written to the memstore as part of delete().<a name="line.217"></a> -<span class="sourceLineNo">218</span> delete.addColumns(column.family, column.qualifier, ts);<a name="line.218"></a> -<span class="sourceLineNo">219</span> }<a name="line.219"></a> -<span class="sourceLineNo">220</span> }<a name="line.220"></a> -<span class="sourceLineNo">221</span> } else if (deleteType == DeleteType.VERSION) {<a name="line.221"></a> -<span class="sourceLineNo">222</span> // When some timestamp was passed to the delete() call only one version of the column (with<a name="line.222"></a> -<span class="sourceLineNo">223</span> // given timestamp) will be deleted. If no timestamp passed, it will delete N versions.<a name="line.223"></a> -<span class="sourceLineNo">224</span> // How many versions will get deleted depends on the Scan being passed. All the KVs that<a name="line.224"></a> -<span class="sourceLineNo">225</span> // the scan fetched will get deleted.<a name="line.225"></a> -<span class="sourceLineNo">226</span> int noOfVersionsToDelete = 0;<a name="line.226"></a> -<span class="sourceLineNo">227</span> if (timestamp == null) {<a name="line.227"></a> -<span class="sourceLineNo">228</span> for (Cell kv : deleteRow) {<a name="line.228"></a> -<span class="sourceLineNo">229</span> delete.addColumn(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv), kv.getTimestamp());<a name="line.229"></a> -<span class="sourceLineNo">230</span> noOfVersionsToDelete++;<a name="line.230"></a> -<span class="sourceLineNo">231</span> }<a name="line.231"></a> -<span class="sourceLineNo">232</span> } else {<a name="line.232"></a> -<span class="sourceLineNo">233</span> Set<Column> columns = new HashSet<>();<a name="line.233"></a> -<span class="sourceLineNo">234</span> for (Cell kv : deleteRow) {<a name="line.234"></a> -<span class="sourceLineNo">235</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.235"></a> -<span class="sourceLineNo">236</span> // Only one version of particular column getting deleted.<a name="line.236"></a> -<span class="sourceLineNo">237</span> if (columns.add(column)) {<a name="line.237"></a> -<span class="sourceLineNo">238</span> delete.addColumn(column.family, column.qualifier, ts);<a name="line.238"></a> -<span class="sourceLineNo">239</span> noOfVersionsToDelete++;<a name="line.239"></a> -<span class="sourceLineNo">240</span> }<a name="line.240"></a> -<span class="sourceLineNo">241</span> }<a name="line.241"></a> -<span class="sourceLineNo">242</span> }<a name="line.242"></a> -<span class="sourceLineNo">243</span> delete.setAttribute(NO_OF_VERSIONS_TO_DELETE, Bytes.toBytes(noOfVersionsToDelete));<a name="line.243"></a> -<span class="sourceLineNo">244</span> }<a name="line.244"></a> -<span class="sourceLineNo">245</span> return delete;<a name="line.245"></a> -<span class="sourceLineNo">246</span> }<a name="line.246"></a> -<span class="sourceLineNo">247</span><a name="line.247"></a> -<span class="sourceLineNo">248</span> private static class Column {<a name="line.248"></a> -<span class="sourceLineNo">249</span> private byte[] family;<a name="line.249"></a> -<span class="sourceLineNo">250</span> private byte[] qualifier;<a name="line.250"></a> -<span class="sourceLineNo">251</span><a name="line.251"></a> -<span class="sourceLineNo">252</span> public Column(byte[] family, byte[] qualifier) {<a name="line.252"></a> -<span class="sourceLineNo">253</span> this.family = family;<a name="line.253"></a> -<span class="sourceLineNo">254</span> this.qualifier = qualifier;<a name="line.254"></a> -<span class="sourceLineNo">255</span> }<a name="line.255"></a> -<span class="sourceLineNo">256</span><a name="line.256"></a> -<span class="sourceLineNo">257</span> @Override<a name="line.257"></a> -<span class="sourceLineNo">258</span> public boolean equals(Object other) {<a name="line.258"></a> -<span class="sourceLineNo">259</span> if (!(other instanceof Column)) {<a name="line.259"></a> -<span class="sourceLineNo">260</span> return false;<a name="line.260"></a> -<span class="sourceLineNo">261</span> }<a name="line.261"></a> -<span class="sourceLineNo">262</span> Column column = (Column) other;<a name="line.262"></a> -<span class="sourceLineNo">263</span> return Bytes.equals(this.family, column.family)<a name="line.263"></a> -<span class="sourceLineNo">264</span> && Bytes.equals(this.qualifier, column.qualifier);<a name="line.264"></a> -<span class="sourceLineNo">265</span> }<a name="line.265"></a> -<span class="sourceLineNo">266</span><a name="line.266"></a> -<span class="sourceLineNo">267</span> @Override<a name="line.267"></a> -<span class="sourceLineNo">268</span> public int hashCode() {<a name="line.268"></a> -<span class="sourceLineNo">269</span> int h = 31;<a name="line.269"></a> -<span class="sourceLineNo">270</span> h = h + 13 * Bytes.hashCode(this.family);<a name="line.270"></a> -<span class="sourceLineNo">271</span> h = h + 13 * Bytes.hashCode(this.qualifier);<a name="line.271"></a> -<span class="sourceLineNo">272</span> return h;<a name="line.272"></a> -<span class="sourceLineNo">273</span> }<a name="line.273"></a> -<span class="sourceLineNo">274</span> }<a name="line.274"></a> -<span class="sourceLineNo">275</span><a name="line.275"></a> -<span class="sourceLineNo">276</span> @Override<a name="line.276"></a> -<span class="sourceLineNo">277</span> public void start(CoprocessorEnvironment env) throws IOException {<a name="line.277"></a> -<span class="sourceLineNo">278</span> if (env instanceof RegionCoprocessorEnvironment) {<a name="line.278"></a> -<span class="sourceLineNo">279</span> this.env = (RegionCoprocessorEnvironment) env;<a name="line.279"></a> -<span class="sourceLineNo">280</span> } else {<a name="line.280"></a> -<span class="sourceLineNo">281</span> throw new CoprocessorException("Must be loaded on a table region!");<a name="line.281"></a> -<span class="sourceLineNo">282</span> }<a name="line.282"></a> -<span class="sourceLineNo">283</span> }<a name="line.283"></a> -<span class="sourceLineNo">284</span><a name="line.284"></a> -<span class="sourceLineNo">285</span> @Override<a name="line.285"></a> -<span class="sourceLineNo">286</span> public void stop(CoprocessorEnvironment env) throws IOException {<a name="line.286"></a> -<span class="sourceLineNo">287</span> // nothing to do<a name="line.287"></a> -<span class="sourceLineNo">288</span> }<a name="line.288"></a> -<span class="sourceLineNo">289</span>}<a name="line.289"></a> +<span class="sourceLineNo">153</span> OperationStatus[] opStatus = region.batchMutate(deleteArr);<a name="line.153"></a> +<span class="sourceLineNo">154</span> for (i = 0; i < opStatus.length; i++) {<a name="line.154"></a> +<span class="sourceLineNo">155</span> if (opStatus[i].getOperationStatusCode() != OperationStatusCode.SUCCESS) {<a name="line.155"></a> +<span class="sourceLineNo">156</span> break;<a name="line.156"></a> +<span class="sourceLineNo">157</span> }<a name="line.157"></a> +<span class="sourceLineNo">158</span> totalRowsDeleted++;<a name="line.158"></a> +<span class="sourceLineNo">159</span> if (deleteType == DeleteType.VERSION) {<a name="line.159"></a> +<span class="sourceLineNo">160</span> byte[] versionsDeleted = deleteArr[i].getAttribute(<a name="line.160"></a> +<span class="sourceLineNo">161</span> NO_OF_VERSIONS_TO_DELETE);<a name="line.161"></a> +<span class="sourceLineNo">162</span> if (versionsDeleted != null) {<a name="line.162"></a> +<span class="sourceLineNo">163</span> totalVersionsDeleted += Bytes.toInt(versionsDeleted);<a name="line.163"></a> +<span class="sourceLineNo">164</span> }<a name="line.164"></a> +<span class="sourceLineNo">165</span> }<a name="line.165"></a> +<span class="sourceLineNo">166</span> }<a name="line.166"></a> +<span class="sourceLineNo">167</span> }<a name="line.167"></a> +<span class="sourceLineNo">168</span> }<a name="line.168"></a> +<span class="sourceLineNo">169</span> } catch (IOException ioe) {<a name="line.169"></a> +<span class="sourceLineNo">170</span> LOG.error(ioe);<a name="line.170"></a> +<span class="sourceLineNo">171</span> // Call ServerRpcController#getFailedOn() to retrieve this IOException at client side.<a name="line.171"></a> +<span class="sourceLineNo">172</span> CoprocessorRpcUtils.setControllerException(controller, ioe);<a name="line.172"></a> +<span class="sourceLineNo">173</span> } finally {<a name="line.173"></a> +<span class="sourceLineNo">174</span> if (scanner != null) {<a name="line.174"></a> +<span class="sourceLineNo">175</span> try {<a name="line.175"></a> +<span class="sourceLineNo">176</span> scanner.close();<a name="line.176"></a> +<span class="sourceLineNo">177</span> } catch (IOException ioe) {<a name="line.177"></a> +<span class="sourceLineNo">178</span> LOG.error(ioe);<a name="line.178"></a> +<span class="sourceLineNo">179</span> }<a name="line.179"></a> +<span class="sourceLineNo">180</span> }<a name="line.180"></a> +<span class="sourceLineNo">181</span> }<a name="line.181"></a> +<span class="sourceLineNo">182</span> Builder responseBuilder = BulkDeleteResponse.newBuilder();<a name="line.182"></a> +<span class="sourceLineNo">183</span> responseBuilder.setRowsDeleted(totalRowsDeleted);<a name="line.183"></a> +<span class="sourceLineNo">184</span> if (deleteType == DeleteType.VERSION) {<a name="line.184"></a> +<span class="sourceLineNo">185</span> responseBuilder.setVersionsDeleted(totalVersionsDeleted);<a name="line.185"></a> +<span class="sourceLineNo">186</span> }<a name="line.186"></a> +<span class="sourceLineNo">187</span> BulkDeleteResponse result = responseBuilder.build();<a name="line.187"></a> +<span class="sourceLineNo">188</span> done.run(result);<a name="line.188"></a> +<span class="sourceLineNo">189</span> }<a name="line.189"></a> +<span class="sourceLineNo">190</span><a name="line.190"></a> +<span class="sourceLineNo">191</span> private Delete createDeleteMutation(List<Cell> deleteRow, DeleteType deleteType,<a name="line.191"></a> +<span class="sourceLineNo">192</span> Long timestamp) {<a name="line.192"></a> +<span class="sourceLineNo">193</span> long ts;<a name="line.193"></a> +<span class="sourceLineNo">194</span> if (timestamp == null) {<a name="line.194"></a> +<span class="sourceLineNo">195</span> ts = HConstants.LATEST_TIMESTAMP;<a name="line.195"></a> +<span class="sourceLineNo">196</span> } else {<a name="line.196"></a> +<span class="sourceLineNo">197</span> ts = timestamp;<a name="line.197"></a> +<span class="sourceLineNo">198</span> }<a name="line.198"></a> +<span class="sourceLineNo">199</span> // We just need the rowkey. Get it from 1st KV.<a name="line.199"></a> +<span class="sourceLineNo">200</span> byte[] row = CellUtil.cloneRow(deleteRow.get(0));<a name="line.200"></a> +<span class="sourceLineNo">201</span> Delete delete = new Delete(row, ts);<a name="line.201"></a> +<span class="sourceLineNo">202</span> if (deleteType == DeleteType.FAMILY) {<a name="line.202"></a> +<span class="sourceLineNo">203</span> Set<byte[]> families = new TreeSet<>(Bytes.BYTES_COMPARATOR);<a name="line.203"></a> +<span class="sourceLineNo">204</span> for (Cell kv : deleteRow) {<a name="line.204"></a> +<span class="sourceLineNo">205</span> if (families.add(CellUtil.cloneFamily(kv))) {<a name="line.205"></a> +<span class="sourceLineNo">206</span> delete.addFamily(CellUtil.cloneFamily(kv), ts);<a name="line.206"></a> +<span class="sourceLineNo">207</span> }<a name="line.207"></a> +<span class="sourceLineNo">208</span> }<a name="line.208"></a> +<span class="sourceLineNo">209</span> } else if (deleteType == DeleteType.COLUMN) {<a name="line.209"></a> +<span class="sourceLineNo">210</span> Set<Column> columns = new HashSet<>();<a name="line.210"></a> +<span class="sourceLineNo">211</span> for (Cell kv : deleteRow) {<a name="line.211"></a> +<span class="sourceLineNo">212</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.212"></a> +<span class="sourceLineNo">213</span> if (columns.add(column)) {<a name="line.213"></a> +<span class="sourceLineNo">214</span> // Making deleteColumns() calls more than once for the same cf:qualifier is not correct<a name="line.214"></a> +<span class="sourceLineNo">215</span> // Every call to deleteColumns() will add a new KV to the familymap which will finally<a name="line.215"></a> +<span class="sourceLineNo">216</span> // get written to the memstore as part of delete().<a name="line.216"></a> +<span class="sourceLineNo">217</span> delete.addColumns(column.family, column.qualifier, ts);<a name="line.217"></a> +<span class="sourceLineNo">218</span> }<a name="line.218"></a> +<span class="sourceLineNo">219</span> }<a name="line.219"></a> +<span class="sourceLineNo">220</span> } else if (deleteType == DeleteType.VERSION) {<a name="line.220"></a> +<span class="sourceLineNo">221</span> // When some timestamp was passed to the delete() call only one version of the column (with<a name="line.221"></a> +<span class="sourceLineNo">222</span> // given timestamp) will be deleted. If no timestamp passed, it will delete N versions.<a name="line.222"></a> +<span class="sourceLineNo">223</span> // How many versions will get deleted depends on the Scan being passed. All the KVs that<a name="line.223"></a> +<span class="sourceLineNo">224</span> // the scan fetched will get deleted.<a name="line.224"></a> +<span class="sourceLineNo">225</span> int noOfVersionsToDelete = 0;<a name="line.225"></a> +<span class="sourceLineNo">226</span> if (timestamp == null) {<a name="line.226"></a> +<span class="sourceLineNo">227</span> for (Cell kv : deleteRow) {<a name="line.227"></a> +<span class="sourceLineNo">228</span> delete.addColumn(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv), kv.getTimestamp());<a name="line.228"></a> +<span class="sourceLineNo">229</span> noOfVersionsToDelete++;<a name="line.229"></a> +<span class="sourceLineNo">230</span> }<a name="line.230"></a> +<span class="sourceLineNo">231</span> } else {<a name="line.231"></a> +<span class="sourceLineNo">232</span> Set<Column> columns = new HashSet<>();<a name="line.232"></a> +<span class="sourceLineNo">233</span> for (Cell kv : deleteRow) {<a name="line.233"></a> +<span class="sourceLineNo">234</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.234"></a> +<span class="sourceLineNo">235</span> // Only one version of particular column getting deleted.<a name="line.235"></a> +<span class="sourceLineNo">236</span> if (columns.add(column)) {<a name="line.236"></a> +<span class="sourceLineNo">237</span> delete.addColumn(column.family, column.qualifier, ts);<a name="line.237"></a> +<span class="sourceLineNo">238</span> noOfVersionsToDelete++;<a name="line.238"></a> +<span class="sourceLineNo">239</span> }<a name="line.239"></a> +<span class="sourceLineNo">240</span> }<a name="line.240"></a> +<span class="sourceLineNo">241</span> }<a name="line.241"></a> +<span class="sourceLineNo">242</span> delete.setAttribute(NO_OF_VERSIONS_TO_DELETE, Bytes.toBytes(noOfVersionsToDelete));<a name="line.242"></a> +<span class="sourceLineNo">243</span> }<a name="line.243"></a> +<span class="sourceLineNo">244</span> return delete;<a name="line.244"></a> +<span class="sourceLineNo">245</span> }<a name="line.245"></a> +<span class="sourceLineNo">246</span><a name="line.246"></a> +<span class="sourceLineNo">247</span> private static class Column {<a name="line.247"></a> +<span class="sourceLineNo">248</span> private byte[] family;<a name="line.248"></a> +<span class="sourceLineNo">249</span> private byte[] qualifier;<a name="line.249"></a> +<span class="sourceLineNo">250</span><a name="line.250"></a> +<span class="sourceLineNo">251</span> public Column(byte[] family, byte[] qualifier) {<a name="line.251"></a> +<span class="sourceLineNo">252</span> this.family = family;<a name="line.252"></a> +<span class="sourceLineNo">253</span> this.qualifier = qualifier;<a name="line.253"></a> +<span class="sourceLineNo">254</span> }<a name="line.254"></a> +<span class="sourceLineNo">255</span><a name="line.255"></a> +<span class="sourceLineNo">256</span> @Override<a name="line.256"></a> +<span class="sourceLineNo">257</span> public boolean equals(Object other) {<a name="line.257"></a> +<span class="sourceLineNo">258</span> if (!(other instanceof Column)) {<a name="line.258"></a> +<span class="sourceLineNo">259</span> return false;<a name="line.259"></a> +<span class="sourceLineNo">260</span> }<a name="line.260"></a> +<span class="sourceLineNo">261</span> Column column = (Column) other;<a name="line.261"></a> +<span class="sourceLineNo">262</span> return Bytes.equals(this.family, column.family)<a name="line.262"></a> +<span class="sourceLineNo">263</span> && Bytes.equals(this.qualifier, column.qualifier);<a name="line.263"></a> +<span class="sourceLineNo">264</span> }<a name="line.264"></a> +<span class="sourceLineNo">265</span><a name="line.265"></a> +<span class="sourceLineNo">266</span> @Override<a name="line.266"></a> +<span class="sourceLineNo">267</span> public int hashCode() {<a name="line.267"></a> +<span class="sourceLineNo">268</span> int h = 31;<a name="line.268"></a> +<span class="sourceLineNo">269</span> h = h + 13 * Bytes.hashCode(this.family);<a name="line.269"></a> +<span class="sourceLineNo">270</span> h = h + 13 * Bytes.hashCode(this.qualifier);<a name="line.270"></a> +<span class="sourceLineNo">271</span> return h;<a name="line.271"></a> +<span class="sourceLineNo">272</span> }<a name="line.272"></a> +<span class="sourceLineNo">273</span> }<a name="line.273"></a> +<span class="sourceLineNo">274</span><a name="line.274"></a> +<span class="sourceLineNo">275</span> @Override<a name="line.275"></a> +<span class="sourceLineNo">276</span> public void start(CoprocessorEnvironment env) throws IOException {<a name="line.276"></a> +<span class="sourceLineNo">277</span> if (env instanceof RegionCoprocessorEnvironment) {<a name="line.277"></a> +<span class="sourceLineNo">278</span> this.env = (RegionCoprocessorEnvironment) env;<a name="line.278"></a> +<span class="sourceLineNo">279</span> } else {<a name="line.279"></a> +<span class="sourceLineNo">280</span> throw new CoprocessorException("Must be loaded on a table region!");<a name="line.280"></a> +<span class="sourceLineNo">281</span> }<a name="line.281"></a> +<span class="sourceLineNo">282</span> }<a name="line.282"></a> +<span class="sourceLineNo">283</span><a name="line.283"></a> +<span class="sourceLineNo">284</span> @Override<a name="line.284"></a> +<span class="sourceLineNo">285</span> public void stop(CoprocessorEnvironment env) throws IOException {<a name="line.285"></a> +<span class="sourceLineNo">286</span> // nothing to do<a name="line.286"></a> +<span class="sourceLineNo">287</span> }<a name="line.287"></a> +<span class="sourceLineNo">288</span>}<a name="line.288"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html index 1f6e8cf..df17fee 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html @@ -158,143 +158,142 @@ <span class="sourceLineNo">150</span> for (List<Cell> deleteRow : deleteRows) {<a name="line.150"></a> <span class="sourceLineNo">151</span> deleteArr[i++] = createDeleteMutation(deleteRow, deleteType, timestamp);<a name="line.151"></a> <span class="sourceLineNo">152</span> }<a name="line.152"></a> -<span class="sourceLineNo">153</span> OperationStatus[] opStatus = region.batchMutate(deleteArr, HConstants.NO_NONCE,<a name="line.153"></a> -<span class="sourceLineNo">154</span> HConstants.NO_NONCE);<a name="line.154"></a> -<span class="sourceLineNo">155</span> for (i = 0; i < opStatus.length; i++) {<a name="line.155"></a> -<span class="sourceLineNo">156</span> if (opStatus[i].getOperationStatusCode() != OperationStatusCode.SUCCESS) {<a name="line.156"></a> -<span class="sourceLineNo">157</span> break;<a name="line.157"></a> -<span class="sourceLineNo">158</span> }<a name="line.158"></a> -<span class="sourceLineNo">159</span> totalRowsDeleted++;<a name="line.159"></a> -<span class="sourceLineNo">160</span> if (deleteType == DeleteType.VERSION) {<a name="line.160"></a> -<span class="sourceLineNo">161</span> byte[] versionsDeleted = deleteArr[i].getAttribute(<a name="line.161"></a> -<span class="sourceLineNo">162</span> NO_OF_VERSIONS_TO_DELETE);<a name="line.162"></a> -<span class="sourceLineNo">163</span> if (versionsDeleted != null) {<a name="line.163"></a> -<span class="sourceLineNo">164</span> totalVersionsDeleted += Bytes.toInt(versionsDeleted);<a name="line.164"></a> -<span class="sourceLineNo">165</span> }<a name="line.165"></a> -<span class="sourceLineNo">166</span> }<a name="line.166"></a> -<span class="sourceLineNo">167</span> }<a name="line.167"></a> -<span class="sourceLineNo">168</span> }<a name="line.168"></a> -<span class="sourceLineNo">169</span> }<a name="line.169"></a> -<span class="sourceLineNo">170</span> } catch (IOException ioe) {<a name="line.170"></a> -<span class="sourceLineNo">171</span> LOG.error(ioe);<a name="line.171"></a> -<span class="sourceLineNo">172</span> // Call ServerRpcController#getFailedOn() to retrieve this IOException at client side.<a name="line.172"></a> -<span class="sourceLineNo">173</span> CoprocessorRpcUtils.setControllerException(controller, ioe);<a name="line.173"></a> -<span class="sourceLineNo">174</span> } finally {<a name="line.174"></a> -<span class="sourceLineNo">175</span> if (scanner != null) {<a name="line.175"></a> -<span class="sourceLineNo">176</span> try {<a name="line.176"></a> -<span class="sourceLineNo">177</span> scanner.close();<a name="line.177"></a> -<span class="sourceLineNo">178</span> } catch (IOException ioe) {<a name="line.178"></a> -<span class="sourceLineNo">179</span> LOG.error(ioe);<a name="line.179"></a> -<span class="sourceLineNo">180</span> }<a name="line.180"></a> -<span class="sourceLineNo">181</span> }<a name="line.181"></a> -<span class="sourceLineNo">182</span> }<a name="line.182"></a> -<span class="sourceLineNo">183</span> Builder responseBuilder = BulkDeleteResponse.newBuilder();<a name="line.183"></a> -<span class="sourceLineNo">184</span> responseBuilder.setRowsDeleted(totalRowsDeleted);<a name="line.184"></a> -<span class="sourceLineNo">185</span> if (deleteType == DeleteType.VERSION) {<a name="line.185"></a> -<span class="sourceLineNo">186</span> responseBuilder.setVersionsDeleted(totalVersionsDeleted);<a name="line.186"></a> -<span class="sourceLineNo">187</span> }<a name="line.187"></a> -<span class="sourceLineNo">188</span> BulkDeleteResponse result = responseBuilder.build();<a name="line.188"></a> -<span class="sourceLineNo">189</span> done.run(result);<a name="line.189"></a> -<span class="sourceLineNo">190</span> }<a name="line.190"></a> -<span class="sourceLineNo">191</span><a name="line.191"></a> -<span class="sourceLineNo">192</span> private Delete createDeleteMutation(List<Cell> deleteRow, DeleteType deleteType,<a name="line.192"></a> -<span class="sourceLineNo">193</span> Long timestamp) {<a name="line.193"></a> -<span class="sourceLineNo">194</span> long ts;<a name="line.194"></a> -<span class="sourceLineNo">195</span> if (timestamp == null) {<a name="line.195"></a> -<span class="sourceLineNo">196</span> ts = HConstants.LATEST_TIMESTAMP;<a name="line.196"></a> -<span class="sourceLineNo">197</span> } else {<a name="line.197"></a> -<span class="sourceLineNo">198</span> ts = timestamp;<a name="line.198"></a> -<span class="sourceLineNo">199</span> }<a name="line.199"></a> -<span class="sourceLineNo">200</span> // We just need the rowkey. Get it from 1st KV.<a name="line.200"></a> -<span class="sourceLineNo">201</span> byte[] row = CellUtil.cloneRow(deleteRow.get(0));<a name="line.201"></a> -<span class="sourceLineNo">202</span> Delete delete = new Delete(row, ts);<a name="line.202"></a> -<span class="sourceLineNo">203</span> if (deleteType == DeleteType.FAMILY) {<a name="line.203"></a> -<span class="sourceLineNo">204</span> Set<byte[]> families = new TreeSet<>(Bytes.BYTES_COMPARATOR);<a name="line.204"></a> -<span class="sourceLineNo">205</span> for (Cell kv : deleteRow) {<a name="line.205"></a> -<span class="sourceLineNo">206</span> if (families.add(CellUtil.cloneFamily(kv))) {<a name="line.206"></a> -<span class="sourceLineNo">207</span> delete.addFamily(CellUtil.cloneFamily(kv), ts);<a name="line.207"></a> -<span class="sourceLineNo">208</span> }<a name="line.208"></a> -<span class="sourceLineNo">209</span> }<a name="line.209"></a> -<span class="sourceLineNo">210</span> } else if (deleteType == DeleteType.COLUMN) {<a name="line.210"></a> -<span class="sourceLineNo">211</span> Set<Column> columns = new HashSet<>();<a name="line.211"></a> -<span class="sourceLineNo">212</span> for (Cell kv : deleteRow) {<a name="line.212"></a> -<span class="sourceLineNo">213</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.213"></a> -<span class="sourceLineNo">214</span> if (columns.add(column)) {<a name="line.214"></a> -<span class="sourceLineNo">215</span> // Making deleteColumns() calls more than once for the same cf:qualifier is not correct<a name="line.215"></a> -<span class="sourceLineNo">216</span> // Every call to deleteColumns() will add a new KV to the familymap which will finally<a name="line.216"></a> -<span class="sourceLineNo">217</span> // get written to the memstore as part of delete().<a name="line.217"></a> -<span class="sourceLineNo">218</span> delete.addColumns(column.family, column.qualifier, ts);<a name="line.218"></a> -<span class="sourceLineNo">219</span> }<a name="line.219"></a> -<span class="sourceLineNo">220</span> }<a name="line.220"></a> -<span class="sourceLineNo">221</span> } else if (deleteType == DeleteType.VERSION) {<a name="line.221"></a> -<span class="sourceLineNo">222</span> // When some timestamp was passed to the delete() call only one version of the column (with<a name="line.222"></a> -<span class="sourceLineNo">223</span> // given timestamp) will be deleted. If no timestamp passed, it will delete N versions.<a name="line.223"></a> -<span class="sourceLineNo">224</span> // How many versions will get deleted depends on the Scan being passed. All the KVs that<a name="line.224"></a> -<span class="sourceLineNo">225</span> // the scan fetched will get deleted.<a name="line.225"></a> -<span class="sourceLineNo">226</span> int noOfVersionsToDelete = 0;<a name="line.226"></a> -<span class="sourceLineNo">227</span> if (timestamp == null) {<a name="line.227"></a> -<span class="sourceLineNo">228</span> for (Cell kv : deleteRow) {<a name="line.228"></a> -<span class="sourceLineNo">229</span> delete.addColumn(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv), kv.getTimestamp());<a name="line.229"></a> -<span class="sourceLineNo">230</span> noOfVersionsToDelete++;<a name="line.230"></a> -<span class="sourceLineNo">231</span> }<a name="line.231"></a> -<span class="sourceLineNo">232</span> } else {<a name="line.232"></a> -<span class="sourceLineNo">233</span> Set<Column> columns = new HashSet<>();<a name="line.233"></a> -<span class="sourceLineNo">234</span> for (Cell kv : deleteRow) {<a name="line.234"></a> -<span class="sourceLineNo">235</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.235"></a> -<span class="sourceLineNo">236</span> // Only one version of particular column getting deleted.<a name="line.236"></a> -<span class="sourceLineNo">237</span> if (columns.add(column)) {<a name="line.237"></a> -<span class="sourceLineNo">238</span> delete.addColumn(column.family, column.qualifier, ts);<a name="line.238"></a> -<span class="sourceLineNo">239</span> noOfVersionsToDelete++;<a name="line.239"></a> -<span class="sourceLineNo">240</span> }<a name="line.240"></a> -<span class="sourceLineNo">241</span> }<a name="line.241"></a> -<span class="sourceLineNo">242</span> }<a name="line.242"></a> -<span class="sourceLineNo">243</span> delete.setAttribute(NO_OF_VERSIONS_TO_DELETE, Bytes.toBytes(noOfVersionsToDelete));<a name="line.243"></a> -<span class="sourceLineNo">244</span> }<a name="line.244"></a> -<span class="sourceLineNo">245</span> return delete;<a name="line.245"></a> -<span class="sourceLineNo">246</span> }<a name="line.246"></a> -<span class="sourceLineNo">247</span><a name="line.247"></a> -<span class="sourceLineNo">248</span> private static class Column {<a name="line.248"></a> -<span class="sourceLineNo">249</span> private byte[] family;<a name="line.249"></a> -<span class="sourceLineNo">250</span> private byte[] qualifier;<a name="line.250"></a> -<span class="sourceLineNo">251</span><a name="line.251"></a> -<span class="sourceLineNo">252</span> public Column(byte[] family, byte[] qualifier) {<a name="line.252"></a> -<span class="sourceLineNo">253</span> this.family = family;<a name="line.253"></a> -<span class="sourceLineNo">254</span> this.qualifier = qualifier;<a name="line.254"></a> -<span class="sourceLineNo">255</span> }<a name="line.255"></a> -<span class="sourceLineNo">256</span><a name="line.256"></a> -<span class="sourceLineNo">257</span> @Override<a name="line.257"></a> -<span class="sourceLineNo">258</span> public boolean equals(Object other) {<a name="line.258"></a> -<span class="sourceLineNo">259</span> if (!(other instanceof Column)) {<a name="line.259"></a> -<span class="sourceLineNo">260</span> return false;<a name="line.260"></a> -<span class="sourceLineNo">261</span> }<a name="line.261"></a> -<span class="sourceLineNo">262</span> Column column = (Column) other;<a name="line.262"></a> -<span class="sourceLineNo">263</span> return Bytes.equals(this.family, column.family)<a name="line.263"></a> -<span class="sourceLineNo">264</span> && Bytes.equals(this.qualifier, column.qualifier);<a name="line.264"></a> -<span class="sourceLineNo">265</span> }<a name="line.265"></a> -<span class="sourceLineNo">266</span><a name="line.266"></a> -<span class="sourceLineNo">267</span> @Override<a name="line.267"></a> -<span class="sourceLineNo">268</span> public int hashCode() {<a name="line.268"></a> -<span class="sourceLineNo">269</span> int h = 31;<a name="line.269"></a> -<span class="sourceLineNo">270</span> h = h + 13 * Bytes.hashCode(this.family);<a name="line.270"></a> -<span class="sourceLineNo">271</span> h = h + 13 * Bytes.hashCode(this.qualifier);<a name="line.271"></a> -<span class="sourceLineNo">272</span> return h;<a name="line.272"></a> -<span class="sourceLineNo">273</span> }<a name="line.273"></a> -<span class="sourceLineNo">274</span> }<a name="line.274"></a> -<span class="sourceLineNo">275</span><a name="line.275"></a> -<span class="sourceLineNo">276</span> @Override<a name="line.276"></a> -<span class="sourceLineNo">277</span> public void start(CoprocessorEnvironment env) throws IOException {<a name="line.277"></a> -<span class="sourceLineNo">278</span> if (env instanceof RegionCoprocessorEnvironment) {<a name="line.278"></a> -<span class="sourceLineNo">279</span> this.env = (RegionCoprocessorEnvironment) env;<a name="line.279"></a> -<span class="sourceLineNo">280</span> } else {<a name="line.280"></a> -<span class="sourceLineNo">281</span> throw new CoprocessorException("Must be loaded on a table region!");<a name="line.281"></a> -<span class="sourceLineNo">282</span> }<a name="line.282"></a> -<span class="sourceLineNo">283</span> }<a name="line.283"></a> -<span class="sourceLineNo">284</span><a name="line.284"></a> -<span class="sourceLineNo">285</span> @Override<a name="line.285"></a> -<span class="sourceLineNo">286</span> public void stop(CoprocessorEnvironment env) throws IOException {<a name="line.286"></a> -<span class="sourceLineNo">287</span> // nothing to do<a name="line.287"></a> -<span class="sourceLineNo">288</span> }<a name="line.288"></a> -<span class="sourceLineNo">289</span>}<a name="line.289"></a> +<span class="sourceLineNo">153</span> OperationStatus[] opStatus = region.batchMutate(deleteArr);<a name="line.153"></a> +<span class="sourceLineNo">154</span> for (i = 0; i < opStatus.length; i++) {<a name="line.154"></a> +<span class="sourceLineNo">155</span> if (opStatus[i].getOperationStatusCode() != OperationStatusCode.SUCCESS) {<a name="line.155"></a> +<span class="sourceLineNo">156</span> break;<a name="line.156"></a> +<span class="sourceLineNo">157</span> }<a name="line.157"></a> +<span class="sourceLineNo">158</span> totalRowsDeleted++;<a name="line.158"></a> +<span class="sourceLineNo">159</span> if (deleteType == DeleteType.VERSION) {<a name="line.159"></a> +<span class="sourceLineNo">160</span> byte[] versionsDeleted = deleteArr[i].getAttribute(<a name="line.160"></a> +<span class="sourceLineNo">161</span> NO_OF_VERSIONS_TO_DELETE);<a name="line.161"></a> +<span class="sourceLineNo">162</span> if (versionsDeleted != null) {<a name="line.162"></a> +<span class="sourceLineNo">163</span> totalVersionsDeleted += Bytes.toInt(versionsDeleted);<a name="line.163"></a> +<span class="sourceLineNo">164</span> }<a name="line.164"></a> +<span class="sourceLineNo">165</span> }<a name="line.165"></a> +<span class="sourceLineNo">166</span> }<a name="line.166"></a> +<span class="sourceLineNo">167</span> }<a name="line.167"></a> +<span class="sourceLineNo">168</span> }<a name="line.168"></a> +<span class="sourceLineNo">169</span> } catch (IOException ioe) {<a name="line.169"></a> +<span class="sourceLineNo">170</span> LOG.error(ioe);<a name="line.170"></a> +<span class="sourceLineNo">171</span> // Call ServerRpcController#getFailedOn() to retrieve this IOException at client side.<a name="line.171"></a> +<span class="sourceLineNo">172</span> CoprocessorRpcUtils.setControllerException(controller, ioe);<a name="line.172"></a> +<span class="sourceLineNo">173</span> } finally {<a name="line.173"></a> +<span class="sourceLineNo">174</span> if (scanner != null) {<a name="line.174"></a> +<span class="sourceLineNo">175</span> try {<a name="line.175"></a> +<span class="sourceLineNo">176</span> scanner.close();<a name="line.176"></a> +<span class="sourceLineNo">177</span> } catch (IOException ioe) {<a name="line.177"></a> +<span class="sourceLineNo">178</span> LOG.error(ioe);<a name="line.178"></a> +<span class="sourceLineNo">179</span> }<a name="line.179"></a> +<span class="sourceLineNo">180</span> }<a name="line.180"></a> +<span class="sourceLineNo">181</span> }<a name="line.181"></a> +<span class="sourceLineNo">182</span> Builder responseBuilder = BulkDeleteResponse.newBuilder();<a name="line.182"></a> +<span class="sourceLineNo">183</span> responseBuilder.setRowsDeleted(totalRowsDeleted);<a name="line.183"></a> +<span class="sourceLineNo">184</span> if (deleteType == DeleteType.VERSION) {<a name="line.184"></a> +<span class="sourceLineNo">185</span> responseBuilder.setVersionsDeleted(totalVersionsDeleted);<a name="line.185"></a> +<span class="sourceLineNo">186</span> }<a name="line.186"></a> +<span class="sourceLineNo">187</span> BulkDeleteResponse result = responseBuilder.build();<a name="line.187"></a> +<span class="sourceLineNo">188</span> done.run(result);<a name="line.188"></a> +<span class="sourceLineNo">189</span> }<a name="line.189"></a> +<span class="sourceLineNo">190</span><a name="line.190"></a> +<span class="sourceLineNo">191</span> private Delete createDeleteMutation(List<Cell> deleteRow, DeleteType deleteType,<a name="line.191"></a> +<span class="sourceLineNo">192</span> Long timestamp) {<a name="line.192"></a> +<span class="sourceLineNo">193</span> long ts;<a name="line.193"></a> +<span class="sourceLineNo">194</span> if (timestamp == null) {<a name="line.194"></a> +<span class="sourceLineNo">195</span> ts = HConstants.LATEST_TIMESTAMP;<a name="line.195"></a> +<span class="sourceLineNo">196</span> } else {<a name="line.196"></a> +<span class="sourceLineNo">197</span> ts = timestamp;<a name="line.197"></a> +<span class="sourceLineNo">198</span> }<a name="line.198"></a> +<span class="sourceLineNo">199</span> // We just need the rowkey. Get it from 1st KV.<a name="line.199"></a> +<span class="sourceLineNo">200</span> byte[] row = CellUtil.cloneRow(deleteRow.get(0));<a name="line.200"></a> +<span class="sourceLineNo">201</span> Delete delete = new Delete(row, ts);<a name="line.201"></a> +<span class="sourceLineNo">202</span> if (deleteType == DeleteType.FAMILY) {<a name="line.202"></a> +<span class="sourceLineNo">203</span> Set<byte[]> families = new TreeSet<>(Bytes.BYTES_COMPARATOR);<a name="line.203"></a> +<span class="sourceLineNo">204</span> for (Cell kv : deleteRow) {<a name="line.204"></a> +<span class="sourceLineNo">205</span> if (families.add(CellUtil.cloneFamily(kv))) {<a name="line.205"></a> +<span class="sourceLineNo">206</span> delete.addFamily(CellUtil.cloneFamily(kv), ts);<a name="line.206"></a> +<span class="sourceLineNo">207</span> }<a name="line.207"></a> +<span class="sourceLineNo">208</span> }<a name="line.208"></a> +<span class="sourceLineNo">209</span> } else if (deleteType == DeleteType.COLUMN) {<a name="line.209"></a> +<span class="sourceLineNo">210</span> Set<Column> columns = new HashSet<>();<a name="line.210"></a> +<span class="sourceLineNo">211</span> for (Cell kv : deleteRow) {<a name="line.211"></a> +<span class="sourceLineNo">212</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.212"></a> +<span class="sourceLineNo">213</span> if (columns.add(column)) {<a name="line.213"></a> +<span class="sourceLineNo">214</span> // Making deleteColumns() calls more than once for the same cf:qualifier is not correct<a name="line.214"></a> +<span class="sourceLineNo">215</span> // Every call to deleteColumns() will add a new KV to the familymap which will finally<a name="line.215"></a> +<span class="sourceLineNo">216</span> // get written to the memstore as part of delete().<a name="line.216"></a> +<span class="sourceLineNo">217</span> delete.addColumns(column.family, column.qualifier, ts);<a name="line.217"></a> +<span class="sourceLineNo">218</span> }<a name="line.218"></a> +<span class="sourceLineNo">219</span> }<a name="line.219"></a> +<span class="sourceLineNo">220</span> } else if (deleteType == DeleteType.VERSION) {<a name="line.220"></a> +<span class="sourceLineNo">221</span> // When some timestamp was passed to the delete() call only one version of the column (with<a name="line.221"></a> +<span class="sourceLineNo">222</span> // given timestamp) will be deleted. If no timestamp passed, it will delete N versions.<a name="line.222"></a> +<span class="sourceLineNo">223</span> // How many versions will get deleted depends on the Scan being passed. All the KVs that<a name="line.223"></a> +<span class="sourceLineNo">224</span> // the scan fetched will get deleted.<a name="line.224"></a> +<span class="sourceLineNo">225</span> int noOfVersionsToDelete = 0;<a name="line.225"></a> +<span class="sourceLineNo">226</span> if (timestamp == null) {<a name="line.226"></a> +<span class="sourceLineNo">227</span> for (Cell kv : deleteRow) {<a name="line.227"></a> +<span class="sourceLineNo">228</span> delete.addColumn(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv), kv.getTimestamp());<a name="line.228"></a> +<span class="sourceLineNo">229</span> noOfVersionsToDelete++;<a name="line.229"></a> +<span class="sourceLineNo">230</span> }<a name="line.230"></a> +<span class="sourceLineNo">231</span> } else {<a name="line.231"></a> +<span class="sourceLineNo">232</span> Set<Column> columns = new HashSet<>();<a name="line.232"></a> +<span class="sourceLineNo">233</span> for (Cell kv : deleteRow) {<a name="line.233"></a> +<span class="sourceLineNo">234</span> Column column = new Column(CellUtil.cloneFamily(kv), CellUtil.cloneQualifier(kv));<a name="line.234"></a> +<span class="sourceLineNo">235</span> // Only one version of particular column getting deleted.<a name="line.235"></a> +<span class="sourceLineNo">236</span> if (columns.add(column)) {<a name="line.236"></a> +<span class="sourceLineNo">237</span> delete.addColumn(column.family, column.qualifier, ts);<a name="line.237"></a> +<span class="sourceLineNo">238</span> noOfVersionsToDelete++;<a name="line.238"></a> +<span class="sourceLineNo">239</span> }<a name="line.239"></a> +<span class="sourceLineNo">240</span> }<a name="line.240"></a> +<span class="sourceLineNo">241</span> }<a name="line.241"></a> +<span class="sourceLineNo">242</span> delete.setAttribute(NO_OF_VERSIONS_TO_DELETE, Bytes.toBytes(noOfVersionsToDelete));<a name="line.242"></a> +<span class="sourceLineNo">243</span> }<a name="line.243"></a> +<span class="sourceLineNo">244</span> return delete;<a name="line.244"></a> +<span class="sourceLineNo">245</span> }<a name="line.245"></a> +<span class="sourceLineNo">246</span><a name="line.246"></a> +<span class="sourceLineNo">247</span> private static class Column {<a name="line.247"></a> +<span class="sourceLineNo">248</span> private byte[] family;<a name="line.248"></a> +<span class="sourceLineNo">249</span> private byte[] qualifier;<a name="line.249"></a> +<span class="sourceLineNo">250</span><a name="line.250"></a> +<span class="sourceLineNo">251</span> public Column(byte[] family, byte[] qualifier) {<a name="line.251"></a> +<span class="sourceLineNo">252</span> this.family = family;<a name="line.252"></a> +<span class="sourceLineNo">253</span> this.qualifier = qualifier;<a name="line.253"></a> +<span class="sourceLineNo">254</span> }<a name="line.254"></a> +<span class="sourceLineNo">255</span><a name="line.255"></a> +<span class="sourceLineNo">256</span> @Override<a name="line.256"></a> +<span class="sourceLineNo">257</span> public boolean equals(Object other) {<a name="line.257"></a> +<span class="sourceLineNo">258</span> if (!(other instanceof Column)) {<a name="line.258"></a> +<span class="sourceLineNo">259</span> return false;<a name="line.259"></a> +<span class="sourceLineNo">260</span> }<a name="line.260"></a> +<span class="sourceLineNo">261</span> Column column = (Column) other;<a name="line.261"></a> +<span class="sourceLineNo">262</span> return Bytes.equals(this.family, column.family)<a name="line.262"></a> +<span class="sourceLineNo">263</span> && Bytes.equals(this.qualifier, column.qualifier);<a name="line.263"></a> +<span class="sourceLineNo">264</span> }<a name="line.264"></a> +<span class="sourceLineNo">265</span><a name="line.265"></a> +<span class="sourceLineNo">266</span> @Override<a name="line.266"></a> +<span class="sourceLineNo">267</span> public int hashCode() {<a name="line.267"></a> +<span class="sourceLineNo">268</span> int h = 31;<a name="line.268"></a> +<span class="sourceLineNo">269</span> h = h + 13 * Bytes.hashCode(this.family);<a name="line.269"></a> +<span class="sourceLineNo">270</span> h = h + 13 * Bytes.hashCode(this.qualifier);<a name="line.270"></a> +<span class="sourceLineNo">271</span> return h;<a name="line.271"></a> +<span class="sourceLineNo">272</span> }<a name="line.272"></a> +<span class="sourceLineNo">273</span> }<a name="line.273"></a> +<span class="sourceLineNo">274</span><a name="line.274"></a> +<span class="sourceLineNo">275</span> @Override<a name="line.275"></a> +<span class="sourceLineNo">276</span> public void start(CoprocessorEnvironment env) throws IOException {<a name="line.276"></a> +<span class="sourceLineNo">277</span> if (env instanceof RegionCoprocessorEnvironment) {<a name="line.277"></a> +<span class="sourceLineNo">278</span> this.env = (RegionCoprocessorEnvironment) env;<a name="line.278"></a> +<span class="sourceLineNo">279</span> } else {<a name="line.279"></a> +<span class="sourceLineNo">280</span> throw new CoprocessorException("Must be loaded on a table region!");<a name="line.280"></a> +<span class="sourceLineNo">281</span> }<a name="line.281"></a> +<span class="sourceLineNo">282</span> }<a name="line.282"></a> +<span class="sourceLineNo">283</span><a name="line.283"></a> +<span class="sourceLineNo">284</span> @Override<a name="line.284"></a> +<span class="sourceLineNo">285</span> public void stop(CoprocessorEnvironment env) throws IOException {<a name="line.285"></a> +<span class="sourceLineNo">286</span> // nothing to do<a name="line.286"></a> +<span class="sourceLineNo">287</span> }<a name="line.287"></a> +<span class="sourceLineNo">288</span>}<a name="line.288"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html index dba349f..73a39f3 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html @@ -36,7 +36,7 @@ <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure.ProcedureMember;<a name="line.28"></a> <span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure.Subprocedure;<a name="line.29"></a> <span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.FlushTableSubprocedurePool;<a name="line.30"></a> -<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.31"></a> +<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.31"></a> <span class="sourceLineNo">032</span><a name="line.32"></a> <span class="sourceLineNo">033</span>/**<a name="line.33"></a> <span class="sourceLineNo">034</span> * This flush region implementation uses the distributed procedure framework to flush<a name="line.34"></a> @@ -48,12 +48,12 @@ <span class="sourceLineNo">040</span> private static final Log LOG = LogFactory.getLog(FlushTableSubprocedure.class);<a name="line.40"></a> <span class="sourceLineNo">041</span><a name="line.41"></a> <span class="sourceLineNo">042</span> private final String table;<a name="line.42"></a> -<span class="sourceLineNo">043</span> private final List<Region> regions;<a name="line.43"></a> +<span class="sourceLineNo">043</span> private final List<HRegion> regions;<a name="line.43"></a> <span class="sourceLineNo">044</span> private final FlushTableSubprocedurePool taskManager;<a name="line.44"></a> <span class="sourceLineNo">045</span><a name="line.45"></a> <span class="sourceLineNo">046</span> public FlushTableSubprocedure(ProcedureMember member,<a name="line.46"></a> <span class="sourceLineNo">047</span> ForeignExceptionDispatcher errorListener, long wakeFrequency, long timeout,<a name="line.47"></a> -<span class="sourceLineNo">048</span> List<Region> regions, String table,<a name="line.48"></a> +<span class="sourceLineNo">048</span> List<HRegion> regions, String table,<a name="line.48"></a> <span class="sourceLineNo">049</span> FlushTableSubprocedurePool taskManager) {<a name="line.49"></a> <span class="sourceLineNo">050</span> super(member, table, errorListener, wakeFrequency, timeout);<a name="line.50"></a> <span class="sourceLineNo">051</span> this.table = table;<a name="line.51"></a> @@ -62,8 +62,8 @@ <span class="sourceLineNo">054</span> }<a name="line.54"></a> <span class="sourceLineNo">055</span><a name="line.55"></a> <span class="sourceLineNo">056</span> private static class RegionFlushTask implements Callable<Void> {<a name="line.56"></a> -<span class="sourceLineNo">057</span> Region region;<a name="line.57"></a> -<span class="sourceLineNo">058</span> RegionFlushTask(Region region) {<a name="line.58"></a> +<span class="sourceLineNo">057</span> HRegion region;<a name="line.57"></a> +<span class="sourceLineNo">058</span> RegionFlushTask(HRegion region) {<a name="line.58"></a> <span class="sourceLineNo">059</span> this.region = region;<a name="line.59"></a> <span class="sourceLineNo">060</span> }<a name="line.60"></a> <span class="sourceLineNo">061</span><a name="line.61"></a> @@ -98,7 +98,7 @@ <span class="sourceLineNo">090</span> }<a name="line.90"></a> <span class="sourceLineNo">091</span><a name="line.91"></a> <span class="sourceLineNo">092</span> // Add all hfiles already existing in region.<a name="line.92"></a> -<span class="sourceLineNo">093</span> for (Region region : regions) {<a name="line.93"></a> +<span class="sourceLineNo">093</span> for (HRegion region : regions) {<a name="line.93"></a> <span class="sourceLineNo">094</span> // submit one task per region for parallelize by region.<a name="line.94"></a> <span class="sourceLineNo">095</span> taskManager.submitTask(new RegionFlushTask(region));<a name="line.95"></a> <span class="sourceLineNo">096</span> monitor.rethrowException();<a name="line.96"></a> http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c0571676/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html ---------------------------------------------------------------------- diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html index dba349f..73a39f3 100644 --- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html +++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html @@ -36,7 +36,7 @@ <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure.ProcedureMember;<a name="line.28"></a> <span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure.Subprocedure;<a name="line.29"></a> <span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.FlushTableSubprocedurePool;<a name="line.30"></a> -<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.31"></a> +<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.31"></a> <span class="sourceLineNo">032</span><a name="line.32"></a> <span class="sourceLineNo">033</span>/**<a name="line.33"></a> <span class="sourceLineNo">034</span> * This flush region implementation uses the distributed procedure framework to flush<a name="line.34"></a> @@ -48,12 +48,12 @@ <span class="sourceLineNo">040</span> private static final Log LOG = LogFactory.getLog(FlushTableSubprocedure.class);<a name="line.40"></a> <span class="sourceLineNo">041</span><a name="line.41"></a> <span class="sourceLineNo">042</span> private final String table;<a name="line.42"></a> -<span class="sourceLineNo">043</span> private final List<Region> regions;<a name="line.43"></a> +<span class="sourceLineNo">043</span> private final List<HRegion> regions;<a name="line.43"></a> <span class="sourceLineNo">044</span> private final FlushTableSubprocedurePool taskManager;<a name="line.44"></a> <span class="sourceLineNo">045</span><a name="line.45"></a> <span class="sourceLineNo">046</span> public FlushTableSubprocedure(ProcedureMember member,<a name="line.46"></a> <span class="sourceLineNo">047</span> ForeignExceptionDispatcher errorListener, long wakeFrequency, long timeout,<a name="line.47"></a> -<span class="sourceLineNo">048</span> List<Region> regions, String table,<a name="line.48"></a> +<span class="sourceLineNo">048</span> List<HRegion> regions, String table,<a name="line.48"></a> <span class="sourceLineNo">049</span> FlushTableSubprocedurePool taskManager) {<a name="line.49"></a> <span class="sourceLineNo">050</span> super(member, table, errorListener, wakeFrequency, timeout);<a name="line.50"></a> <span class="sourceLineNo">051</span> this.table = table;<a name="line.51"></a> @@ -62,8 +62,8 @@ <span class="sourceLineNo">054</span> }<a name="line.54"></a> <span class="sourceLineNo">055</span><a name="line.55"></a> <span class="sourceLineNo">056</span> private static class RegionFlushTask implements Callable<Void> {<a name="line.56"></a> -<span class="sourceLineNo">057</span> Region region;<a name="line.57"></a> -<span class="sourceLineNo">058</span> RegionFlushTask(Region region) {<a name="line.58"></a> +<span class="sourceLineNo">057</span> HRegion region;<a name="line.57"></a> +<span class="sourceLineNo">058</span> RegionFlushTask(HRegion region) {<a name="line.58"></a> <span class="sourceLineNo">059</span> this.region = region;<a name="line.59"></a> <span class="sourceLineNo">060</span> }<a name="line.60"></a> <span class="sourceLineNo">061</span><a name="line.61"></a> @@ -98,7 +98,7 @@ <span class="sourceLineNo">090</span> }<a name="line.90"></a> <span class="sourceLineNo">091</span><a name="line.91"></a> <span class="sourceLineNo">092</span> // Add all hfiles already existing in region.<a name="line.92"></a> -<span class="sourceLineNo">093</span> for (Region region : regions) {<a name="line.93"></a> +<span class="sourceLineNo">093</span> for (HRegion region : regions) {<a name="line.93"></a> <span class="sourceLineNo">094</span> // submit one task per region for parallelize by region.<a name="line.94"></a> <span class="sourceLineNo">095</span> taskManager.submitTask(new RegionFlushTask(region));<a name="line.95"></a> <span class="sourceLineNo">096</span> monitor.rethrowException();<a name="line.96"></a>
