You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2019/05/10 14:50:37 UTC
[hbase-site] branch asf-site updated: Published site at
420fbba6aefa58bb6ff252ff0c33e9b4ccae64b0.
This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 0db70fa Published site at 420fbba6aefa58bb6ff252ff0c33e9b4ccae64b0.
0db70fa is described below
commit 0db70faf499a8b7f592083eb2202a01920b51eea
Author: jenkins <bu...@apache.org>
AuthorDate: Fri May 10 14:50:24 2019 +0000
Published site at 420fbba6aefa58bb6ff252ff0c33e9b4ccae64b0.
---
acid-semantics.html | 2 +-
apache_hbase_reference_guide.pdf | 4464 ++++++++++----------
book.html | 4 +-
bulk-loads.html | 2 +-
checkstyle-aggregate.html | 72 +-
coc.html | 2 +-
dependencies.html | 2 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 6 +-
devapidocs/constant-values.html | 4 +-
.../apache/hadoop/hbase/regionserver/HRegion.html | 106 +-
.../LoadIncrementalHFiles.BulkHFileVisitor.html | 6 +-
.../hadoop/hbase/tool/LoadIncrementalHFiles.html | 78 +-
.../src-html/org/apache/hadoop/hbase/Version.html | 4 +-
.../HRegion.BatchOperation.Visitor.html | 1384 +++---
.../hbase/regionserver/HRegion.BatchOperation.html | 1384 +++---
.../regionserver/HRegion.BulkLoadListener.html | 1384 +++---
.../regionserver/HRegion.FlushResult.Result.html | 1384 +++---
.../hbase/regionserver/HRegion.FlushResult.html | 1384 +++---
.../regionserver/HRegion.FlushResultImpl.html | 1384 +++---
.../HRegion.MutationBatchOperation.html | 1384 +++---
.../HRegion.ObservedExceptionsInBatch.html | 1384 +++---
.../regionserver/HRegion.PrepareFlushResult.html | 1384 +++---
.../regionserver/HRegion.RegionScannerImpl.html | 1384 +++---
.../regionserver/HRegion.ReplayBatchOperation.html | 1384 +++---
.../hbase/regionserver/HRegion.RowLockContext.html | 1384 +++---
.../hbase/regionserver/HRegion.RowLockImpl.html | 1384 +++---
.../hbase/regionserver/HRegion.WriteState.html | 1384 +++---
.../apache/hadoop/hbase/regionserver/HRegion.html | 1384 +++---
.../LoadIncrementalHFiles.BulkHFileVisitor.html | 2175 +++++-----
.../tool/LoadIncrementalHFiles.LoadQueueItem.html | 2175 +++++-----
.../hadoop/hbase/tool/LoadIncrementalHFiles.html | 2175 +++++-----
downloads.html | 2 +-
export_control.html | 2 +-
index.html | 2 +-
issue-management.html | 2 +-
licenses.html | 2 +-
mailing-lists.html | 2 +-
metrics.html | 2 +-
old_news.html | 2 +-
plugin-management.html | 2 +-
plugins.html | 2 +-
poweredbyhbase.html | 2 +-
project-info.html | 2 +-
project-reports.html | 2 +-
pseudo-distributed.html | 2 +-
replication.html | 2 +-
resources.html | 2 +-
scm.html | 2 +-
sponsors.html | 2 +-
summary.html | 2 +-
supportingprojects.html | 2 +-
team.html | 2 +-
.../hadoop/hbase/client/TestFromClientSide.html | 2 +-
55 files changed, 16107 insertions(+), 15978 deletions(-)
diff --git a/acid-semantics.html b/acid-semantics.html
index d25e96d..9b63d4f 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -457,7 +457,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 19d1ffc..72f8074 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20190509144552+00'00')
-/CreationDate (D:20190509144552+00'00')
+/ModDate (D:20190510144707+00'00')
+/CreationDate (D:20190510144707+00'00')
>>
endobj
2 0 obj
@@ -618688,7 +618688,7 @@ endobj
>>
endobj
3199 0 obj
-<< /Length 9053
+<< /Length 9059
>>
stream
q
@@ -618749,7 +618749,7 @@ ET
BT
59.24 749.334 Td
/F4.0 11 Tf
-<247b48424153455f484f4d457d2f68626173652d7365727665722d56455253494f4e2e6a617220636f6d706c65746562756c6b6c6f6164203c686466733a2f2f73746f726566696c656f75747075743e> Tj
+<247b48424153455f484f4d457d2f68626173652d6d61707265647563652d56455253494f4e2e6a617220636f6d706c65746562756c6b6c6f6164203c686466733a2f2f73746f726566696c656f75747075743e> Tj
ET
0.0 0.0 0.0 SCN
@@ -866750,2238 +866750,2238 @@ xref
0008855513 00000 n
0008855561 00000 n
0008855686 00000 n
-0008864794 00000 n
-0008865187 00000 n
-0008865236 00000 n
-0008865771 00000 n
-0008865904 00000 n
-0008865953 00000 n
-0008866002 00000 n
-0008878073 00000 n
-0008878476 00000 n
-0008878524 00000 n
-0008879014 00000 n
-0008879237 00000 n
-0008879285 00000 n
-0008879512 00000 n
-0008889391 00000 n
-0008889780 00000 n
-0008889828 00000 n
-0008890010 00000 n
-0008890202 00000 n
-0008890250 00000 n
-0008903243 00000 n
-0008903623 00000 n
-0008903750 00000 n
-0008916235 00000 n
-0008916650 00000 n
-0008916779 00000 n
-0008917020 00000 n
-0008917069 00000 n
-0008917118 00000 n
-0008930912 00000 n
-0008931273 00000 n
-0008931321 00000 n
-0008931369 00000 n
-0008931417 00000 n
-0008944559 00000 n
-0008944961 00000 n
-0008945009 00000 n
-0008945155 00000 n
-0008945301 00000 n
-0008945349 00000 n
-0008956850 00000 n
-0008957211 00000 n
-0008957259 00000 n
-0008964844 00000 n
-0008965224 00000 n
-0008965463 00000 n
-0008965511 00000 n
-0008968856 00000 n
-0008969204 00000 n
-0008975226 00000 n
-0008975633 00000 n
-0008975681 00000 n
-0008975729 00000 n
-0008975997 00000 n
-0008976124 00000 n
-0008976172 00000 n
-0008976423 00000 n
-0008976618 00000 n
-0008988598 00000 n
-0008989004 00000 n
-0008989052 00000 n
-0008989100 00000 n
-0008989220 00000 n
-0009009065 00000 n
-0009009452 00000 n
-0009009501 00000 n
-0009009550 00000 n
-0009022231 00000 n
-0009022668 00000 n
-0009022883 00000 n
-0009022931 00000 n
-0009023405 00000 n
-0009023559 00000 n
-0009023847 00000 n
-0009023896 00000 n
-0009023945 00000 n
-0009037606 00000 n
-0009037999 00000 n
-0009038048 00000 n
-0009038178 00000 n
-0009038227 00000 n
-0009051018 00000 n
-0009051392 00000 n
-0009051440 00000 n
-0009064729 00000 n
-0009065184 00000 n
-0009065232 00000 n
-0009065463 00000 n
-0009065511 00000 n
-0009065746 00000 n
-0009065979 00000 n
-0009066226 00000 n
-0009066472 00000 n
-0009066521 00000 n
-0009066570 00000 n
-0009082982 00000 n
-0009083384 00000 n
-0009083562 00000 n
-0009083611 00000 n
-0009083660 00000 n
-0009089961 00000 n
-0009090309 00000 n
-0009090357 00000 n
-0009098078 00000 n
-0009098426 00000 n
-0009099611 00000 n
-0009099959 00000 n
-0009110736 00000 n
-0009111134 00000 n
-0009111182 00000 n
-0009111230 00000 n
-0009111397 00000 n
-0009111523 00000 n
-0009111653 00000 n
-0009111701 00000 n
-0009111749 00000 n
-0009111797 00000 n
-0009146997 00000 n
-0009147358 00000 n
-0009147406 00000 n
-0009147454 00000 n
-0009147922 00000 n
-0009147970 00000 n
-0009305111 00000 n
-0009308731 00000 n
-0009309584 00000 n
-0009309960 00000 n
-0009404110 00000 n
-0009490431 00000 n
-0009492817 00000 n
-0009493206 00000 n
-0009563723 00000 n
-0009563773 00000 n
-0009566619 00000 n
-0009566995 00000 n
-0009738834 00000 n
-0009745824 00000 n
-0009831701 00000 n
-0009834048 00000 n
-0009913233 00000 n
-0009915674 00000 n
-0009916485 00000 n
-0009916861 00000 n
-0009980231 00000 n
-0009982143 00000 n
-0009994622 00000 n
-0009995020 00000 n
-0009995068 00000 n
-0009995261 00000 n
-0009995392 00000 n
-0009995440 00000 n
-0009995634 00000 n
-0010007141 00000 n
-0010007521 00000 n
-0010007658 00000 n
-0010060130 00000 n
-0010065794 00000 n
-0010066182 00000 n
-0010066232 00000 n
-0010075483 00000 n
-0010075889 00000 n
-0010076023 00000 n
-0010076072 00000 n
-0010093040 00000 n
-0010093442 00000 n
-0010093638 00000 n
-0010093833 00000 n
-0010093882 00000 n
-0010094380 00000 n
-0010100163 00000 n
-0010100551 00000 n
-0010100599 00000 n
-0010256686 00000 n
-0010258707 00000 n
-0010258757 00000 n
-0010274607 00000 n
-0010274987 00000 n
-0010275208 00000 n
-0010275256 00000 n
-0010289971 00000 n
-0010290364 00000 n
-0010290559 00000 n
-0010290607 00000 n
-0010290655 00000 n
-0010290703 00000 n
-0010304231 00000 n
-0010304611 00000 n
-0010304743 00000 n
-0010304791 00000 n
-0010304839 00000 n
-0010316618 00000 n
-0010316992 00000 n
-0010317040 00000 n
-0010325472 00000 n
-0010325833 00000 n
-0010325881 00000 n
-0010336529 00000 n
-0010336877 00000 n
-0010353848 00000 n
-0010354222 00000 n
-0010354270 00000 n
-0010354318 00000 n
-0010367363 00000 n
-0010367792 00000 n
-0010367840 00000 n
-0010367960 00000 n
-0010368090 00000 n
-0010368227 00000 n
-0010368275 00000 n
-0010368793 00000 n
-0010368920 00000 n
-0010369049 00000 n
-0010369098 00000 n
-0010376984 00000 n
-0010377332 00000 n
-0010386913 00000 n
-0010387287 00000 n
-0010387335 00000 n
-0010387384 00000 n
-0010401987 00000 n
-0010402361 00000 n
-0010402409 00000 n
-0010416819 00000 n
-0010417212 00000 n
-0010417259 00000 n
-0010417452 00000 n
-0010428112 00000 n
-0010428486 00000 n
-0010428535 00000 n
-0010445281 00000 n
-0010445661 00000 n
-0010445709 00000 n
-0010445902 00000 n
-0010447359 00000 n
-0010447707 00000 n
-0010456086 00000 n
-0010456471 00000 n
-0010456519 00000 n
-0010456723 00000 n
-0010456771 00000 n
-0010457482 00000 n
-0010457530 00000 n
-0010457578 00000 n
-0010457626 00000 n
-0010457674 00000 n
-0010457876 00000 n
-0010457924 00000 n
-0010458049 00000 n
-0010459808 00000 n
-0010460184 00000 n
-0010460232 00000 n
-0010460354 00000 n
-0010460472 00000 n
-0010474546 00000 n
-0010474920 00000 n
-0010474968 00000 n
-0010475016 00000 n
-0010475064 00000 n
-0010484313 00000 n
-0010484687 00000 n
-0010484735 00000 n
-0010484783 00000 n
-0010484831 00000 n
-0010484879 00000 n
-0010495612 00000 n
-0010496036 00000 n
-0010496084 00000 n
-0010496230 00000 n
-0010496278 00000 n
-0010496327 00000 n
-0010496459 00000 n
-0010496590 00000 n
-0010508586 00000 n
-0010508934 00000 n
-0010513230 00000 n
-0010513659 00000 n
-0010513707 00000 n
-0010514058 00000 n
-0010514184 00000 n
-0010514310 00000 n
-0010514516 00000 n
-0010514645 00000 n
-0010514772 00000 n
-0010527325 00000 n
-0010527782 00000 n
-0010527830 00000 n
-0010527878 00000 n
-0010527926 00000 n
-0010528050 00000 n
-0010528174 00000 n
-0010528302 00000 n
-0010528429 00000 n
-0010528613 00000 n
-0010528730 00000 n
-0010528864 00000 n
-0010528912 00000 n
-0010529026 00000 n
-0010529153 00000 n
-0010529201 00000 n
-0010529976 00000 n
-0010530094 00000 n
-0010530221 00000 n
-0010547652 00000 n
-0010548090 00000 n
-0010548138 00000 n
-0010548269 00000 n
-0010548494 00000 n
-0010548638 00000 n
-0010548686 00000 n
-0010548734 00000 n
-0010548866 00000 n
-0010549016 00000 n
-0010549171 00000 n
-0010560859 00000 n
-0010561257 00000 n
-0010561305 00000 n
-0010561353 00000 n
-0010561495 00000 n
-0010561630 00000 n
-0010561757 00000 n
-0010561805 00000 n
-0010573749 00000 n
-0010574201 00000 n
-0010574249 00000 n
-0010574389 00000 n
-0010574534 00000 n
-0010574658 00000 n
-0010574706 00000 n
-0010574832 00000 n
-0010574980 00000 n
-0010575115 00000 n
-0010575163 00000 n
-0010575306 00000 n
-0010575456 00000 n
-0010575590 00000 n
-0010589441 00000 n
-0010589802 00000 n
-0010589850 00000 n
-0010606053 00000 n
-0010606469 00000 n
-0010606517 00000 n
-0010606731 00000 n
-0010606942 00000 n
-0010637979 00000 n
-0010638366 00000 n
-0010650223 00000 n
-0010650597 00000 n
-0010650645 00000 n
-0010650693 00000 n
-0010650741 00000 n
-0010650789 00000 n
-0010650837 00000 n
-0010660761 00000 n
-0010661122 00000 n
-0010661170 00000 n
-0010672045 00000 n
-0010672434 00000 n
-0010672482 00000 n
-0010672704 00000 n
-0010672925 00000 n
-0010683378 00000 n
-0010683745 00000 n
-0010683996 00000 n
-0010693409 00000 n
-0010693757 00000 n
-0010706441 00000 n
-0010706789 00000 n
-0010717705 00000 n
-0010718067 00000 n
-0010719413 00000 n
-0010719761 00000 n
-0010719809 00000 n
-0010720509 00000 n
-0010732228 00000 n
-0010732680 00000 n
-0010732728 00000 n
-0010733044 00000 n
-0010733224 00000 n
-0010733351 00000 n
-0010733471 00000 n
-0010733519 00000 n
-0010734150 00000 n
-0010734336 00000 n
-0010734384 00000 n
-0010734559 00000 n
-0010734731 00000 n
-0010734779 00000 n
-0010734947 00000 n
-0010734995 00000 n
-0010735319 00000 n
-0010735516 00000 n
-0010748009 00000 n
-0010748383 00000 n
-0010748431 00000 n
-0010758443 00000 n
-0010758858 00000 n
-0010758906 00000 n
-0010759220 00000 n
-0010759533 00000 n
-0010763417 00000 n
-0010763860 00000 n
-0010763908 00000 n
-0010764081 00000 n
-0010764271 00000 n
-0010764471 00000 n
-0010764676 00000 n
-0010764797 00000 n
-0010764921 00000 n
-0010765116 00000 n
-0010765317 00000 n
-0010779316 00000 n
-0010779732 00000 n
-0010779780 00000 n
-0010779828 00000 n
-0010779876 00000 n
-0010780010 00000 n
-0010780058 00000 n
-0010780106 00000 n
-0010780280 00000 n
-0010790279 00000 n
-0010790653 00000 n
-0010790701 00000 n
-0010790748 00000 n
-0010790796 00000 n
-0010800373 00000 n
-0010800817 00000 n
-0010800865 00000 n
-0010801090 00000 n
-0010801314 00000 n
-0010801362 00000 n
-0010801503 00000 n
-0010801552 00000 n
-0010801678 00000 n
-0010801876 00000 n
-0010811879 00000 n
-0010812294 00000 n
-0010812342 00000 n
-0010812390 00000 n
-0010812510 00000 n
-0010812559 00000 n
-0010812608 00000 n
-0010812734 00000 n
-0010812783 00000 n
-0010813295 00000 n
-0010813344 00000 n
-0010824841 00000 n
-0010825243 00000 n
-0010825291 00000 n
-0010825424 00000 n
-0010825553 00000 n
-0010825601 00000 n
-0010825649 00000 n
-0010838830 00000 n
-0010839236 00000 n
-0010839283 00000 n
-0010839331 00000 n
-0010839457 00000 n
-0010841859 00000 n
-0010842248 00000 n
-0010842296 00000 n
-0010842816 00000 n
-0010842864 00000 n
-0010843056 00000 n
-0010843245 00000 n
-0010844732 00000 n
-0010845125 00000 n
-0010845173 00000 n
-0010845296 00000 n
-0010845345 00000 n
-0010862524 00000 n
-0010862898 00000 n
-0010862947 00000 n
-0010879941 00000 n
-0010880392 00000 n
-0010880527 00000 n
-0010880661 00000 n
-0010880795 00000 n
-0010880984 00000 n
-0010881158 00000 n
-0010881353 00000 n
-0010892939 00000 n
-0010893328 00000 n
-0010893540 00000 n
-0010893743 00000 n
-0010908040 00000 n
-0010908451 00000 n
-0010908586 00000 n
-0010908721 00000 n
-0010908856 00000 n
-0010922722 00000 n
-0010923133 00000 n
-0010923311 00000 n
-0010923508 00000 n
-0010923710 00000 n
-0010937299 00000 n
-0010937786 00000 n
-0010937976 00000 n
-0010938165 00000 n
-0010938359 00000 n
-0010938552 00000 n
-0010938743 00000 n
-0010938936 00000 n
-0010939128 00000 n
-0010939176 00000 n
-0010939311 00000 n
-0010939446 00000 n
-0010939581 00000 n
-0010942091 00000 n
-0010942471 00000 n
-0010942601 00000 n
-0010946660 00000 n
-0010947058 00000 n
-0010947106 00000 n
-0010947311 00000 n
-0010947497 00000 n
-0010947681 00000 n
-0010956751 00000 n
-0010957163 00000 n
-0010957211 00000 n
-0010957384 00000 n
-0010957555 00000 n
-0010957725 00000 n
-0010959802 00000 n
-0010960178 00000 n
-0010960226 00000 n
-0010960425 00000 n
-0010960576 00000 n
-0010963128 00000 n
-0010963522 00000 n
-0010963570 00000 n
-0010963739 00000 n
-0010963787 00000 n
-0010964469 00000 n
-0010964623 00000 n
-0010964671 00000 n
-0010964840 00000 n
-0010964970 00000 n
-0010977843 00000 n
-0010978250 00000 n
-0010978298 00000 n
-0010978881 00000 n
-0010979006 00000 n
-0010979054 00000 n
-0010979186 00000 n
-0010979234 00000 n
-0010979366 00000 n
-0010979580 00000 n
-0010990417 00000 n
-0010990797 00000 n
-0010990845 00000 n
-0010990982 00000 n
-0010991030 00000 n
-0011015386 00000 n
-0011015819 00000 n
-0011016012 00000 n
-0011016146 00000 n
-0011016202 00000 n
-0011016386 00000 n
-0011016442 00000 n
-0011016625 00000 n
-0011016681 00000 n
-0011029521 00000 n
-0011029914 00000 n
-0011029969 00000 n
-0011030103 00000 n
-0011030151 00000 n
-0011030199 00000 n
-0011030247 00000 n
-0011030295 00000 n
-0011030343 00000 n
-0011042080 00000 n
-0011042454 00000 n
-0011042502 00000 n
-0011042550 00000 n
-0011042598 00000 n
-0011057062 00000 n
-0011057436 00000 n
-0011057484 00000 n
-0011057532 00000 n
-0011058071 00000 n
-0011058119 00000 n
-0011065459 00000 n
-0011065807 00000 n
-0011065855 00000 n
-0011065903 00000 n
-0011065951 00000 n
-0011065999 00000 n
-0011091674 00000 n
-0011092035 00000 n
-0011092083 00000 n
-0011108698 00000 n
-0011109074 00000 n
-0011121932 00000 n
-0011122325 00000 n
-0011122373 00000 n
-0011122573 00000 n
-0011122621 00000 n
-0011140559 00000 n
-0011140979 00000 n
-0011141027 00000 n
-0011141222 00000 n
-0011141404 00000 n
-0011141452 00000 n
-0011141634 00000 n
-0011141815 00000 n
-0011153341 00000 n
-0011153702 00000 n
-0011165696 00000 n
-0011166057 00000 n
-0011166106 00000 n
-0011179543 00000 n
-0011179936 00000 n
-0011179984 00000 n
-0011180118 00000 n
-0011180166 00000 n
-0011180662 00000 n
-0011180890 00000 n
-0011188668 00000 n
-0011189016 00000 n
-0011198995 00000 n
-0011199382 00000 n
-0011199430 00000 n
-0011199478 00000 n
-0011199526 00000 n
-0011199574 00000 n
-0011199974 00000 n
-0011222358 00000 n
-0011222747 00000 n
-0011222795 00000 n
-0011222997 00000 n
-0011223136 00000 n
-0011223184 00000 n
-0011223876 00000 n
-0011223924 00000 n
-0011249342 00000 n
-0011249703 00000 n
-0011249751 00000 n
-0011249799 00000 n
-0011249847 00000 n
-0011249895 00000 n
-0011261152 00000 n
-0011261567 00000 n
-0011261615 00000 n
-0011261663 00000 n
-0011261711 00000 n
-0011261759 00000 n
-0011261808 00000 n
-0011262036 00000 n
-0011262263 00000 n
-0011271843 00000 n
-0011272249 00000 n
-0011272297 00000 n
-0011272345 00000 n
-0011272540 00000 n
-0011272588 00000 n
-0011284650 00000 n
-0011285043 00000 n
-0011285091 00000 n
-0011285302 00000 n
-0011285350 00000 n
-0011286137 00000 n
-0011286338 00000 n
-0011286386 00000 n
-0011286434 00000 n
-0011286482 00000 n
-0011287076 00000 n
-0011301758 00000 n
-0011302169 00000 n
-0011302217 00000 n
-0011302402 00000 n
-0011302574 00000 n
-0011302622 00000 n
-0011302760 00000 n
-0011317410 00000 n
-0011317877 00000 n
-0011318005 00000 n
-0011318224 00000 n
-0011318273 00000 n
-0011318399 00000 n
-0011318529 00000 n
-0011318578 00000 n
-0011318627 00000 n
-0011319299 00000 n
-0011319469 00000 n
-0011319640 00000 n
-0011334504 00000 n
-0011334944 00000 n
-0011335133 00000 n
-0011335181 00000 n
-0011335229 00000 n
-0011335381 00000 n
-0011335510 00000 n
-0011335672 00000 n
-0011335826 00000 n
-0011335979 00000 n
-0011348394 00000 n
-0011348847 00000 n
-0011348995 00000 n
-0011349043 00000 n
-0011349237 00000 n
-0011349422 00000 n
-0011349470 00000 n
-0011349702 00000 n
-0011349750 00000 n
-0011349940 00000 n
-0011350134 00000 n
-0011350182 00000 n
-0011365853 00000 n
-0011366259 00000 n
-0011366449 00000 n
-0011375139 00000 n
-0011375487 00000 n
-0011385756 00000 n
-0011386117 00000 n
-0011386165 00000 n
-0011386213 00000 n
-0011397412 00000 n
-0011397850 00000 n
-0011398034 00000 n
-0011398082 00000 n
-0011398290 00000 n
-0011398497 00000 n
-0011398545 00000 n
-0011398592 00000 n
-0011399546 00000 n
-0011399728 00000 n
-0011399909 00000 n
-0011399957 00000 n
-0011400005 00000 n
-0011400156 00000 n
-0011413727 00000 n
-0011414120 00000 n
-0011414168 00000 n
-0011414216 00000 n
-0011414478 00000 n
-0011414526 00000 n
-0011416514 00000 n
-0011416894 00000 n
-0011416942 00000 n
-0011417137 00000 n
-0011419054 00000 n
-0011419439 00000 n
-0011419487 00000 n
-0011419721 00000 n
-0011419954 00000 n
-0011420082 00000 n
-0011445779 00000 n
-0011446159 00000 n
-0011446207 00000 n
-0011446368 00000 n
-0011471825 00000 n
-0011472192 00000 n
-0011472391 00000 n
-0011480031 00000 n
-0011480420 00000 n
-0011480468 00000 n
-0011480648 00000 n
-0011480774 00000 n
-0011525127 00000 n
-0011525475 00000 n
-0011557646 00000 n
-0011558026 00000 n
-0011558074 00000 n
-0011558244 00000 n
-0011602952 00000 n
-0011603300 00000 n
-0011610021 00000 n
-0011610414 00000 n
-0011610462 00000 n
-0011610588 00000 n
-0011657967 00000 n
-0011658347 00000 n
-0011658601 00000 n
-0011659005 00000 n
-0011659353 00000 n
-0011659401 00000 n
-0011674953 00000 n
-0011675373 00000 n
-0011675421 00000 n
-0011675614 00000 n
-0011675740 00000 n
-0011675855 00000 n
-0011675986 00000 n
-0011676034 00000 n
-0011698893 00000 n
-0011699241 00000 n
-0011704700 00000 n
-0011705104 00000 n
-0011705152 00000 n
-0011705345 00000 n
-0011705525 00000 n
-0011705757 00000 n
-0011721766 00000 n
-0011722155 00000 n
-0011722203 00000 n
-0011733055 00000 n
-0011733416 00000 n
-0011733464 00000 n
-0011733512 00000 n
-0011733560 00000 n
-0011733608 00000 n
-0011740913 00000 n
-0011741306 00000 n
-0011741354 00000 n
-0011741590 00000 n
-0011744371 00000 n
-0011744732 00000 n
-0011744780 00000 n
-0011749649 00000 n
-0011750010 00000 n
-0011750058 00000 n
-0011751754 00000 n
-0011752102 00000 n
-0011752150 00000 n
-0011752687 00000 n
-0011752904 00000 n
-0011756010 00000 n
-0011756358 00000 n
-0011756406 00000 n
-0011763842 00000 n
-0011764203 00000 n
-0011764251 00000 n
-0011772657 00000 n
-0011773031 00000 n
-0011773079 00000 n
-0011773127 00000 n
-0011773175 00000 n
-0011775314 00000 n
-0011775690 00000 n
-0011775738 00000 n
-0011775956 00000 n
-0011776189 00000 n
-0011778513 00000 n
-0011778874 00000 n
-0011778922 00000 n
-0011790314 00000 n
-0011790743 00000 n
-0011790791 00000 n
-0011790987 00000 n
-0011791183 00000 n
-0011791302 00000 n
-0011791497 00000 n
-0011791616 00000 n
-0011797912 00000 n
-0011798273 00000 n
-0011798321 00000 n
-0011831678 00000 n
-0011832052 00000 n
-0011832100 00000 n
-0011832148 00000 n
-0011890198 00000 n
-0011890546 00000 n
-0011892430 00000 n
-0011892778 00000 n
-0011892826 00000 n
-0011893829 00000 n
-0011894177 00000 n
-0011894225 00000 n
-0011900364 00000 n
-0011900725 00000 n
-0011900773 00000 n
-0011900821 00000 n
-0011900869 00000 n
-0011903125 00000 n
-0011903473 00000 n
-0011903521 00000 n
-0011903569 00000 n
-0011903617 00000 n
-0011903665 00000 n
-0011903713 00000 n
-0011909615 00000 n
-0011910004 00000 n
-0011910052 00000 n
-0011910247 00000 n
-0011910470 00000 n
-0011910518 00000 n
-0011929409 00000 n
-0011929815 00000 n
-0011929863 00000 n
-0011930008 00000 n
-0011948556 00000 n
-0011948962 00000 n
-0011949185 00000 n
-0011957198 00000 n
-0011957618 00000 n
-0011957666 00000 n
-0011957872 00000 n
-0011958077 00000 n
-0011958271 00000 n
-0011958500 00000 n
-0011978431 00000 n
-0011978833 00000 n
-0011978881 00000 n
-0011979076 00000 n
-0011979270 00000 n
-0011979318 00000 n
-0011999474 00000 n
-0011999867 00000 n
-0011999915 00000 n
-0012000160 00000 n
-0012031078 00000 n
-0012031452 00000 n
-0012031500 00000 n
-0012050687 00000 n
-0012051048 00000 n
-0012060010 00000 n
-0012060384 00000 n
-0012060431 00000 n
-0012060478 00000 n
-0012060967 00000 n
-0012071190 00000 n
-0012071551 00000 n
-0012071599 00000 n
-0012071647 00000 n
-0012071695 00000 n
-0012074610 00000 n
-0012074990 00000 n
-0012075038 00000 n
-0012075234 00000 n
-0012075282 00000 n
-0012075829 00000 n
-0012076217 00000 n
-0012076565 00000 n
-0012076613 00000 n
-0012084935 00000 n
-0012085346 00000 n
-0012085394 00000 n
-0012085582 00000 n
-0012085631 00000 n
-0012085818 00000 n
-0012085867 00000 n
-0012086052 00000 n
-0012086101 00000 n
-0012095658 00000 n
-0012096051 00000 n
-0012096099 00000 n
-0012096147 00000 n
-0012096333 00000 n
-0012099703 00000 n
-0012100083 00000 n
-0012100131 00000 n
-0012100316 00000 n
-0012100702 00000 n
-0012101050 00000 n
-0012101098 00000 n
-0012113022 00000 n
-0012113433 00000 n
-0012113481 00000 n
-0012113658 00000 n
-0012113825 00000 n
-0012113950 00000 n
-0012113998 00000 n
-0012114046 00000 n
-0012127712 00000 n
-0012128120 00000 n
-0012128168 00000 n
-0012128389 00000 n
-0012148562 00000 n
-0012148973 00000 n
-0012149116 00000 n
-0012149163 00000 n
-0012149211 00000 n
-0012149259 00000 n
-0012149428 00000 n
-0012149613 00000 n
-0012175202 00000 n
-0012175600 00000 n
-0012175807 00000 n
-0012176015 00000 n
-0012176222 00000 n
-0012194356 00000 n
-0012194717 00000 n
-0012209407 00000 n
-0012209814 00000 n
-0012210019 00000 n
-0012210224 00000 n
-0012210427 00000 n
-0012210631 00000 n
-0012219005 00000 n
-0012219366 00000 n
-0012227717 00000 n
-0012228115 00000 n
-0012228323 00000 n
-0012228533 00000 n
-0012228742 00000 n
-0012242959 00000 n
-0012243361 00000 n
-0012243557 00000 n
-0012243753 00000 n
-0012260657 00000 n
-0012261064 00000 n
-0012261114 00000 n
-0012261247 00000 n
-0012261297 00000 n
-0012271880 00000 n
-0012272254 00000 n
-0012272302 00000 n
-0012272350 00000 n
-0012283441 00000 n
-0012283879 00000 n
-0012283927 00000 n
-0012284361 00000 n
-0012284409 00000 n
-0012284537 00000 n
-0012284723 00000 n
-0012284894 00000 n
-0012285019 00000 n
-0012285146 00000 n
-0012285274 00000 n
-0012285322 00000 n
-0012297250 00000 n
-0012297733 00000 n
-0012297782 00000 n
-0012297910 00000 n
-0012297959 00000 n
-0012298085 00000 n
-0012298215 00000 n
-0012298264 00000 n
-0012298389 00000 n
-0012298513 00000 n
-0012298647 00000 n
-0012298781 00000 n
-0012298916 00000 n
-0012299039 00000 n
-0012299175 00000 n
-0012299305 00000 n
-0012304878 00000 n
-0012305308 00000 n
-0012305356 00000 n
-0012305479 00000 n
-0012305527 00000 n
-0012305653 00000 n
-0012305773 00000 n
-0012305821 00000 n
-0012305947 00000 n
-0012306069 00000 n
-0012306117 00000 n
-0012306238 00000 n
-0012306362 00000 n
-0012306410 00000 n
-0012306534 00000 n
-0012314530 00000 n
-0012314891 00000 n
-0012314939 00000 n
-0012314988 00000 n
-0012315037 00000 n
-0012336199 00000 n
-0012336573 00000 n
-0012373975 00000 n
-0012374323 00000 n
-0012411845 00000 n
-0012412193 00000 n
-0012444760 00000 n
-0012445108 00000 n
-0012475734 00000 n
-0012476082 00000 n
-0012487288 00000 n
-0012487726 00000 n
-0012487774 00000 n
-0012487923 00000 n
-0012488120 00000 n
-0012488255 00000 n
-0012488392 00000 n
-0012488531 00000 n
-0012488673 00000 n
-0012494057 00000 n
-0012494459 00000 n
-0012535116 00000 n
-0012562879 00000 n
-0012570743 00000 n
-0012571118 00000 n
-0012617159 00000 n
-0012617208 00000 n
-0012635317 00000 n
-0012635723 00000 n
-0012635906 00000 n
-0012635953 00000 n
-0012669520 00000 n
-0012669894 00000 n
-0012701503 00000 n
-0012701914 00000 n
-0012702107 00000 n
-0012702298 00000 n
-0012702509 00000 n
-0012702557 00000 n
-0012702605 00000 n
-0012717382 00000 n
-0012717798 00000 n
-0012717993 00000 n
-0012718129 00000 n
-0012718178 00000 n
-0012718386 00000 n
-0012718528 00000 n
-0012718577 00000 n
-0012718713 00000 n
-0012718762 00000 n
-0012730622 00000 n
-0012731037 00000 n
-0012731169 00000 n
-0012731311 00000 n
-0012731359 00000 n
-0012731408 00000 n
-0012731457 00000 n
-0012743871 00000 n
-0012744245 00000 n
-0012744294 00000 n
-0012755311 00000 n
-0012755685 00000 n
-0012755734 00000 n
-0012758598 00000 n
-0012758959 00000 n
-0012760286 00000 n
-0012760662 00000 n
-0012760710 00000 n
-0012760758 00000 n
-0012760927 00000 n
-0012760975 00000 n
-0012761157 00000 n
-0012764115 00000 n
-0012764509 00000 n
-0012764557 00000 n
-0012764742 00000 n
-0012764935 00000 n
-0012765112 00000 n
-0012765288 00000 n
-0012772489 00000 n
-0012772864 00000 n
-0012772912 00000 n
-0012772960 00000 n
-0012773008 00000 n
-0012798895 00000 n
-0012803458 00000 n
-0012803507 00000 n
-0012803556 00000 n
-0012803605 00000 n
-0012811313 00000 n
-0012811661 00000 n
-0012811709 00000 n
-0012858477 00000 n
-0012865115 00000 n
-0012865490 00000 n
-0012865539 00000 n
-0012875469 00000 n
-0012875830 00000 n
-0012875878 00000 n
-0012875926 00000 n
-0012888468 00000 n
-0012888829 00000 n
-0012888877 00000 n
-0012902633 00000 n
-0012902994 00000 n
-0012903042 00000 n
-0012903619 00000 n
-0012903667 00000 n
-0012903715 00000 n
-0012921646 00000 n
-0012921994 00000 n
-0012922042 00000 n
-0012934475 00000 n
-0012934918 00000 n
-0012934966 00000 n
-0012935378 00000 n
-0012935426 00000 n
-0012935566 00000 n
-0012935693 00000 n
-0012935843 00000 n
-0012935980 00000 n
-0012936028 00000 n
-0012936160 00000 n
-0012936207 00000 n
-0012936332 00000 n
-0012936380 00000 n
-0012936508 00000 n
-0012936722 00000 n
-0012946759 00000 n
-0012947139 00000 n
-0012947187 00000 n
-0012947323 00000 n
-0012954733 00000 n
-0012955230 00000 n
-0012955278 00000 n
-0012955326 00000 n
-0012955497 00000 n
-0012955669 00000 n
-0012955925 00000 n
-0012955974 00000 n
-0012956223 00000 n
-0012956451 00000 n
-0012956695 00000 n
-0012956744 00000 n
-0012956937 00000 n
-0012957147 00000 n
-0012957360 00000 n
-0012957409 00000 n
-0012957601 00000 n
-0012957834 00000 n
-0012958019 00000 n
-0012958068 00000 n
-0012958261 00000 n
-0012958310 00000 n
-0012958742 00000 n
-0012958936 00000 n
-0012960920 00000 n
-0012961287 00000 n
-0012961335 00000 n
-0012961529 00000 n
-0012964905 00000 n
-0012965281 00000 n
-0012965329 00000 n
-0012965377 00000 n
-0012965561 00000 n
-0012965609 00000 n
-0012965803 00000 n
-0012969417 00000 n
-0012969856 00000 n
-0012969904 00000 n
-0012974164 00000 n
-0012974694 00000 n
-0012974888 00000 n
-0012975072 00000 n
-0012975265 00000 n
-0012975462 00000 n
-0012975657 00000 n
-0012975843 00000 n
-0012999423 00000 n
-0012999852 00000 n
-0012999900 00000 n
-0013000081 00000 n
-0013000276 00000 n
-0013000471 00000 n
-0013000519 00000 n
-0013000698 00000 n
-0013000945 00000 n
-0013009581 00000 n
-0013009961 00000 n
-0013010144 00000 n
-0013040009 00000 n
-0013040383 00000 n
-0013040431 00000 n
-0013061157 00000 n
-0013061518 00000 n
-0013061566 00000 n
-0013071616 00000 n
-0013072037 00000 n
-0013072085 00000 n
-0013072659 00000 n
-0013072853 00000 n
-0013073074 00000 n
-0013073291 00000 n
-0013073507 00000 n
-0013073738 00000 n
-0013073786 00000 n
-0013073834 00000 n
-0013073882 00000 n
-0013074113 00000 n
-0013074346 00000 n
-0013074394 00000 n
-0013074442 00000 n
-0013088349 00000 n
-0013088736 00000 n
-0013088785 00000 n
-0013088834 00000 n
-0013088883 00000 n
-0013096855 00000 n
-0013097216 00000 n
-0013097265 00000 n
-0013097314 00000 n
-0013097363 00000 n
-0013097412 00000 n
-0013097461 00000 n
-0013109212 00000 n
-0013109599 00000 n
-0013109648 00000 n
-0013110250 00000 n
-0013110598 00000 n
-0013110646 00000 n
-0013123196 00000 n
-0013123559 00000 n
-0013123607 00000 n
-0013123655 00000 n
-0013123703 00000 n
-0013123751 00000 n
-0013123799 00000 n
-0013139399 00000 n
-0013139762 00000 n
-0013139810 00000 n
-0013139858 00000 n
-0013139906 00000 n
-0013154716 00000 n
-0013155079 00000 n
-0013155127 00000 n
-0013155175 00000 n
-0013171843 00000 n
-0013172178 00000 n
-0013186211 00000 n
-0013186574 00000 n
-0013186622 00000 n
-0013186670 00000 n
-0013186718 00000 n
-0013186766 00000 n
-0013199723 00000 n
-0013200086 00000 n
-0013200134 00000 n
-0013200182 00000 n
-0013200230 00000 n
-0013200278 00000 n
-0013200326 00000 n
-0013217382 00000 n
-0013217745 00000 n
-0013217793 00000 n
-0013217841 00000 n
-0013217889 00000 n
-0013217937 00000 n
-0013217985 00000 n
-0013218400 00000 n
-0013240414 00000 n
-0013240777 00000 n
-0013240825 00000 n
-0013240873 00000 n
-0013256290 00000 n
-0013256638 00000 n
-0013256686 00000 n
-0013256734 00000 n
-0013256782 00000 n
-0013269855 00000 n
-0013270203 00000 n
-0013270251 00000 n
-0013270299 00000 n
-0013270347 00000 n
-0013289110 00000 n
-0013289473 00000 n
-0013289521 00000 n
-0013289569 00000 n
-0013289617 00000 n
-0013304592 00000 n
-0013304955 00000 n
-0013305003 00000 n
-0013305446 00000 n
-0013305494 00000 n
-0013305542 00000 n
-0013305590 00000 n
-0013319482 00000 n
-0013319845 00000 n
-0013319893 00000 n
-0013319941 00000 n
-0013319989 00000 n
-0013320037 00000 n
-0013320085 00000 n
-0013335950 00000 n
-0013336313 00000 n
-0013336361 00000 n
-0013336409 00000 n
-0013337030 00000 n
-0013337078 00000 n
-0013337126 00000 n
-0013352394 00000 n
-0013352757 00000 n
-0013352805 00000 n
-0013352853 00000 n
-0013352901 00000 n
-0013352949 00000 n
-0013352997 00000 n
-0013353045 00000 n
-0013353577 00000 n
-0013367980 00000 n
-0013368343 00000 n
-0013368391 00000 n
-0013368439 00000 n
-0013369043 00000 n
-0013369232 00000 n
-0013369280 00000 n
-0013369328 00000 n
-0013369376 00000 n
-0013389212 00000 n
-0013389575 00000 n
-0013389623 00000 n
-0013389671 00000 n
-0013402038 00000 n
-0013402401 00000 n
-0013402449 00000 n
-0013402497 00000 n
-0013402545 00000 n
-0013402593 00000 n
-0013402641 00000 n
-0013402689 00000 n
-0013402737 00000 n
-0013415438 00000 n
-0013415801 00000 n
-0013415849 00000 n
-0013416198 00000 n
-0013416246 00000 n
-0013416646 00000 n
-0013416694 00000 n
-0013416742 00000 n
-0013416790 00000 n
-0013417428 00000 n
-0013431812 00000 n
-0013432175 00000 n
-0013432223 00000 n
-0013432271 00000 n
-0013432319 00000 n
-0013432367 00000 n
-0013440304 00000 n
-0013440652 00000 n
-0013440771 00000 n
-0013440893 00000 n
-0013441022 00000 n
-0013441152 00000 n
-0013441277 00000 n
-0013441404 00000 n
-0013441527 00000 n
-0013441652 00000 n
-0013441779 00000 n
-0013441906 00000 n
-0013442039 00000 n
-0013442172 00000 n
-0013442304 00000 n
-0013442437 00000 n
-0013442565 00000 n
-0013442694 00000 n
-0013442815 00000 n
-0013442936 00000 n
-0013443062 00000 n
-0013443188 00000 n
-0013443316 00000 n
-0013443444 00000 n
-0013443582 00000 n
-0013443720 00000 n
-0013443844 00000 n
-0013443968 00000 n
-0013444091 00000 n
-0013444214 00000 n
-0013444344 00000 n
-0013444474 00000 n
-0013444595 00000 n
-0013444717 00000 n
-0013444844 00000 n
-0013444971 00000 n
-0013445089 00000 n
-0013445209 00000 n
-0013445332 00000 n
-0013445456 00000 n
-0013445611 00000 n
-0013445767 00000 n
-0013445906 00000 n
-0013446047 00000 n
-0013446206 00000 n
-0013446366 00000 n
-0013446510 00000 n
-0013446656 00000 n
-0013446819 00000 n
-0013446983 00000 n
-0013447109 00000 n
-0013447236 00000 n
-0013447358 00000 n
-0013447482 00000 n
-0013447610 00000 n
-0013447740 00000 n
-0013447867 00000 n
-0013447995 00000 n
-0013448117 00000 n
-0013448241 00000 n
-0013448360 00000 n
-0013448480 00000 n
-0013448593 00000 n
-0013448711 00000 n
-0013448837 00000 n
-0013448964 00000 n
-0013449082 00000 n
-0013449202 00000 n
-0013449337 00000 n
-0013449473 00000 n
-0013449595 00000 n
-0013449718 00000 n
-0013449839 00000 n
-0013449961 00000 n
-0013450090 00000 n
-0013450221 00000 n
-0013450338 00000 n
-0013450456 00000 n
-0013450574 00000 n
-0013450693 00000 n
-0013450813 00000 n
-0013450934 00000 n
-0013451062 00000 n
-0013451192 00000 n
-0013451333 00000 n
-0013451475 00000 n
-0013451622 00000 n
-0013451771 00000 n
-0013451898 00000 n
-0013452026 00000 n
-0013452153 00000 n
-0013452281 00000 n
-0013452410 00000 n
-0013452540 00000 n
-0013452673 00000 n
-0013452807 00000 n
-0013452933 00000 n
-0013453060 00000 n
-0013453177 00000 n
-0013453295 00000 n
-0013453424 00000 n
-0013453554 00000 n
-0013453684 00000 n
-0013453816 00000 n
-0013453941 00000 n
-0013454067 00000 n
-0013454199 00000 n
-0013454332 00000 n
-0013454456 00000 n
-0013454581 00000 n
-0013454707 00000 n
-0013454835 00000 n
-0013454958 00000 n
-0013455082 00000 n
-0013455221 00000 n
-0013455361 00000 n
-0013455496 00000 n
-0013455633 00000 n
-0013455775 00000 n
-0013455918 00000 n
-0013456082 00000 n
-0013456247 00000 n
-0013456403 00000 n
-0013456560 00000 n
-0013456692 00000 n
-0013456825 00000 n
-0013456947 00000 n
-0013457070 00000 n
-0013457200 00000 n
-0013457332 00000 n
-0013457469 00000 n
-0013457607 00000 n
-0013457737 00000 n
-0013457868 00000 n
-0013457990 00000 n
-0013458114 00000 n
-0013458236 00000 n
-0013458359 00000 n
-0013458511 00000 n
-0013458664 00000 n
-0013458800 00000 n
-0013458937 00000 n
-0013459077 00000 n
-0013459218 00000 n
-0013459364 00000 n
-0013459511 00000 n
-0013459662 00000 n
-0013459814 00000 n
-0013459956 00000 n
-0013460099 00000 n
-0013460236 00000 n
-0013460374 00000 n
-0013460499 00000 n
-0013460626 00000 n
-0013460751 00000 n
-0013460878 00000 n
-0013461002 00000 n
-0013461127 00000 n
-0013461258 00000 n
-0013461390 00000 n
-0013461517 00000 n
-0013461645 00000 n
-0013461778 00000 n
-0013461912 00000 n
-0013462042 00000 n
-0013462174 00000 n
-0013462300 00000 n
-0013462427 00000 n
-0013462554 00000 n
-0013462683 00000 n
-0013462805 00000 n
-0013462929 00000 n
-0013463072 00000 n
-0013463216 00000 n
-0013463338 00000 n
-0013463462 00000 n
-0013463594 00000 n
-0013463728 00000 n
-0013463853 00000 n
-0013463980 00000 n
-0013464101 00000 n
-0013464224 00000 n
-0013464350 00000 n
-0013464478 00000 n
-0013464602 00000 n
-0013464728 00000 n
-0013464856 00000 n
-0013464985 00000 n
-0013465110 00000 n
-0013465236 00000 n
-0013465366 00000 n
-0013465497 00000 n
-0013465637 00000 n
-0013465779 00000 n
-0013465910 00000 n
-0013466042 00000 n
-0013466179 00000 n
-0013466317 00000 n
-0013466448 00000 n
-0013466580 00000 n
-0013466715 00000 n
-0013466851 00000 n
-0013466981 00000 n
-0013467112 00000 n
-0013467246 00000 n
-0013467381 00000 n
-0013467523 00000 n
-0013467666 00000 n
-0013467807 00000 n
-0013467949 00000 n
-0013468077 00000 n
-0013468206 00000 n
-0013468335 00000 n
-0013468465 00000 n
-0013468591 00000 n
-0013468718 00000 n
-0013468837 00000 n
-0013468958 00000 n
-0013469097 00000 n
-0013469237 00000 n
-0013469361 00000 n
-0013469486 00000 n
-0013469608 00000 n
-0013469731 00000 n
-0013469857 00000 n
-0013469985 00000 n
-0013470103 00000 n
-0013470222 00000 n
-0013470341 00000 n
-0013470462 00000 n
-0013470576 00000 n
-0013470692 00000 n
-0013470809 00000 n
-0013470927 00000 n
-0013471046 00000 n
-0013471166 00000 n
-0013471284 00000 n
-0013471404 00000 n
-0013471521 00000 n
-0013471640 00000 n
-0013471773 00000 n
-0013471908 00000 n
-0013472026 00000 n
-0013472146 00000 n
-0013472271 00000 n
-0013472397 00000 n
-0013472526 00000 n
-0013472656 00000 n
-0013472779 00000 n
-0013472903 00000 n
-0013473036 00000 n
-0013473170 00000 n
-0013473286 00000 n
-0013473403 00000 n
-0013473536 00000 n
-0013473671 00000 n
-0013473805 00000 n
-0013473941 00000 n
-0013474065 00000 n
-0013474190 00000 n
-0013474313 00000 n
-0013474438 00000 n
-0013474590 00000 n
-0013474743 00000 n
-0013474886 00000 n
-0013475030 00000 n
-0013475155 00000 n
-0013475281 00000 n
-0013475402 00000 n
-0013475524 00000 n
-0013475650 00000 n
-0013475777 00000 n
-0013475894 00000 n
-0013476012 00000 n
-0013476145 00000 n
-0013476279 00000 n
-0013476407 00000 n
-0013476536 00000 n
-0013476660 00000 n
-0013476786 00000 n
-0013476912 00000 n
-0013477039 00000 n
-0013477164 00000 n
-0013477291 00000 n
-0013477417 00000 n
-0013477544 00000 n
-0013477671 00000 n
-0013477799 00000 n
-0013477922 00000 n
-0013478046 00000 n
-0013478167 00000 n
-0013478290 00000 n
-0013478425 00000 n
-0013478561 00000 n
-0013478689 00000 n
-0013478818 00000 n
-0013478938 00000 n
-0013479061 00000 n
-0013479187 00000 n
-0013479314 00000 n
-0013479442 00000 n
-0013479572 00000 n
-0013479690 00000 n
-0013479810 00000 n
-0013479925 00000 n
-0013480042 00000 n
-0013480160 00000 n
-0013480280 00000 n
-0013480400 00000 n
-0013480522 00000 n
-0013480651 00000 n
-0013480781 00000 n
-0013480906 00000 n
-0013481032 00000 n
-0013481163 00000 n
-0013481295 00000 n
-0013481422 00000 n
-0013481550 00000 n
-0013481675 00000 n
-0013481803 00000 n
-0013481931 00000 n
-0013482061 00000 n
-0013482188 00000 n
-0013482317 00000 n
-0013482446 00000 n
-0013482576 00000 n
-0013482700 00000 n
-0013482825 00000 n
-0013482952 00000 n
-0013483081 00000 n
-0013483212 00000 n
-0013483344 00000 n
-0013483468 00000 n
-0013483594 00000 n
-0013483724 00000 n
-0013483855 00000 n
-0013483982 00000 n
-0013484111 00000 n
-0013484238 00000 n
-0013484366 00000 n
-0013484497 00000 n
-0013484629 00000 n
-0013484757 00000 n
-0013484886 00000 n
-0013485032 00000 n
-0013485179 00000 n
-0013485303 00000 n
-0013485428 00000 n
-0013485553 00000 n
-0013485679 00000 n
-0013485813 00000 n
-0013485948 00000 n
-0013486079 00000 n
-0013486212 00000 n
-0013486346 00000 n
-0013486482 00000 n
-0013486603 00000 n
-0013486725 00000 n
-0013486844 00000 n
-0013486964 00000 n
-0013487091 00000 n
-0013487219 00000 n
-0013487347 00000 n
-0013487477 00000 n
-0013487604 00000 n
-0013487732 00000 n
-0013487859 00000 n
-0013487988 00000 n
-0013488120 00000 n
-0013488254 00000 n
-0013488414 00000 n
-0013488575 00000 n
-0013488698 00000 n
-0013488823 00000 n
-0013488949 00000 n
-0013489077 00000 n
-0013489206 00000 n
-0013489336 00000 n
-0013489462 00000 n
-0013489589 00000 n
-0013489715 00000 n
-0013489842 00000 n
-0013489962 00000 n
-0013490084 00000 n
-0013490208 00000 n
-0013490333 00000 n
-0013490456 00000 n
-0013490580 00000 n
-0013490709 00000 n
-0013490840 00000 n
-0013490959 00000 n
-0013491079 00000 n
-0013491196 00000 n
-0013491315 00000 n
-0013491434 00000 n
-0013491554 00000 n
-0013491676 00000 n
-0013491800 00000 n
-0013491929 00000 n
-0013492059 00000 n
-0013492197 00000 n
-0013492337 00000 n
-0013492462 00000 n
-0013492588 00000 n
-0013492709 00000 n
-0013492877 00000 n
-0013493000 00000 n
-0013493122 00000 n
-0013493247 00000 n
-0013493373 00000 n
-0013493497 00000 n
-0013493622 00000 n
-0013493746 00000 n
-0013493871 00000 n
-0013493989 00000 n
-0013494109 00000 n
-0013494229 00000 n
-0013494351 00000 n
-0013494471 00000 n
-0013494592 00000 n
-0013494752 00000 n
-0013494913 00000 n
-0013495034 00000 n
-0013495157 00000 n
-0013495281 00000 n
-0013495406 00000 n
-0013495523 00000 n
-0013495719 00000 n
-0013495839 00000 n
-0013495957 00000 n
-0013496081 00000 n
-0013496206 00000 n
-0013496332 00000 n
-0013496460 00000 n
-0013496589 00000 n
-0013496721 00000 n
-0013496841 00000 n
-0013496962 00000 n
-0013497099 00000 n
-0013497237 00000 n
-0013497357 00000 n
-0013497479 00000 n
-0013497607 00000 n
-0013497737 00000 n
-0013497861 00000 n
-0013497986 00000 n
-0013498104 00000 n
-0013498223 00000 n
-0013498349 00000 n
-0013498476 00000 n
-0013498600 00000 n
-0013498725 00000 n
-0013498856 00000 n
-0013498988 00000 n
-0013499105 00000 n
-0013499224 00000 n
-0013499344 00000 n
-0013499466 00000 n
-0013499600 00000 n
-0013499735 00000 n
-0013499859 00000 n
-0013499985 00000 n
-0013500106 00000 n
-0013500228 00000 n
-0013500351 00000 n
-0013500475 00000 n
-0013500622 00000 n
-0013500770 00000 n
-0013500896 00000 n
-0013501023 00000 n
-0013501145 00000 n
-0013501269 00000 n
-0013501391 00000 n
-0013501515 00000 n
-0013501644 00000 n
-0013501774 00000 n
-0013501911 00000 n
-0013502049 00000 n
-0013502170 00000 n
-0013502293 00000 n
-0013502444 00000 n
-0013502597 00000 n
-0013502714 00000 n
-0013502832 00000 n
-0013502965 00000 n
-0013503099 00000 n
-0013503222 00000 n
-0013503347 00000 n
-0013503462 00000 n
-0013503578 00000 n
-0013503694 00000 n
-0013503811 00000 n
-0013503939 00000 n
-0013504068 00000 n
-0013504191 00000 n
-0013504316 00000 n
-0013504442 00000 n
-0013504570 00000 n
-0013504687 00000 n
-0013504805 00000 n
-0013504922 00000 n
-0013505041 00000 n
-0013505162 00000 n
-0013505284 00000 n
-0013505426 00000 n
-0013505569 00000 n
-0013505703 00000 n
-0013505838 00000 n
-0013505960 00000 n
-0013506084 00000 n
-0013506242 00000 n
-0013506401 00000 n
-0013506545 00000 n
-0013506690 00000 n
-0013506962 00000 n
-0013507234 00000 n
-0013507316 00000 n
-0013507548 00000 n
-0013507708 00000 n
-0013507864 00000 n
-0013508083 00000 n
-0013508288 00000 n
-0013508565 00000 n
-0013508829 00000 n
-0013509063 00000 n
-0013509312 00000 n
-0013509657 00000 n
-0013509990 00000 n
-0013510247 00000 n
-0013510508 00000 n
-0013510793 00000 n
-0013511039 00000 n
-0013511235 00000 n
-0013511549 00000 n
-0013511758 00000 n
-0013511972 00000 n
-0013512220 00000 n
-0013512458 00000 n
-0013512799 00000 n
-0013513076 00000 n
-0013513433 00000 n
-0013513734 00000 n
-0013514107 00000 n
-0013514317 00000 n
-0013514518 00000 n
-0013514740 00000 n
-0013514969 00000 n
-0013515182 00000 n
-0013515379 00000 n
-0013515568 00000 n
-0013515797 00000 n
-0013515994 00000 n
-0013516255 00000 n
-0013516464 00000 n
-0013516681 00000 n
-0013516918 00000 n
-0013517115 00000 n
-0013517293 00000 n
-0013517545 00000 n
-0013517767 00000 n
-0013518037 00000 n
-0013518335 00000 n
-0013518626 00000 n
-0013518856 00000 n
-0013519106 00000 n
-0013519360 00000 n
-0013519558 00000 n
-0013519808 00000 n
-0013520070 00000 n
-0013520420 00000 n
-0013520642 00000 n
-0013520924 00000 n
-0013521298 00000 n
-0013521513 00000 n
-0013521751 00000 n
-0013522054 00000 n
-0013522320 00000 n
-0013522610 00000 n
-0013522988 00000 n
-0013523334 00000 n
-0013523584 00000 n
-0013523834 00000 n
-0013524108 00000 n
-0013524474 00000 n
-0013524736 00000 n
-0013524935 00000 n
-0013525180 00000 n
-0013525503 00000 n
-0013525893 00000 n
-0013526215 00000 n
-0013526529 00000 n
-0013526855 00000 n
-0013527145 00000 n
-0013527428 00000 n
-0013527638 00000 n
-0013527833 00000 n
-0013528067 00000 n
-0013528269 00000 n
-0013528535 00000 n
-0013528737 00000 n
-0013528963 00000 n
-0013529169 00000 n
-0013529395 00000 n
-0013529589 00000 n
-0013529927 00000 n
-0013530226 00000 n
-0013530467 00000 n
-0013530662 00000 n
-0013530857 00000 n
-0013531091 00000 n
-0013531286 00000 n
-0013531508 00000 n
-0013531718 00000 n
-0013532016 00000 n
-0013532302 00000 n
-0013532604 00000 n
-0013532854 00000 n
-0013533088 00000 n
-0013533490 00000 n
-0013533760 00000 n
-0013534142 00000 n
-0013534444 00000 n
-0013534690 00000 n
-0013535033 00000 n
-0013535286 00000 n
-0013535489 00000 n
-0013535691 00000 n
-0013535954 00000 n
-0013536183 00000 n
-0013536363 00000 n
-0013536628 00000 n
-0013536807 00000 n
-0013537009 00000 n
-0013537287 00000 n
-0013537629 00000 n
-0013537831 00000 n
-0013538022 00000 n
-0013538303 00000 n
-0013538515 00000 n
-0013538736 00000 n
-0013538947 00000 n
-0013539189 00000 n
-0013539407 00000 n
-0013539650 00000 n
-0013539911 00000 n
-0013540158 00000 n
-0013540424 00000 n
-0013540686 00000 n
-0013540900 00000 n
-0013541234 00000 n
-0013541517 00000 n
-0013541803 00000 n
-0013542034 00000 n
-0013542244 00000 n
-0013542442 00000 n
-0013542704 00000 n
-0013542922 00000 n
-0013543156 00000 n
-0013543426 00000 n
-0013543672 00000 n
-0013543926 00000 n
-0013544184 00000 n
-0013544382 00000 n
-0013544604 00000 n
-0013544910 00000 n
-0013545125 00000 n
-0013545350 00000 n
-0013545557 00000 n
-0013545791 00000 n
-0013545993 00000 n
-0013546183 00000 n
-0013546370 00000 n
-0013546700 00000 n
-0013546939 00000 n
-0013547137 00000 n
-0013547355 00000 n
-0013547557 00000 n
-0013547763 00000 n
-0013547981 00000 n
-0013548195 00000 n
-0013548405 00000 n
-0013548635 00000 n
-0013548841 00000 n
-0013549059 00000 n
-0013549281 00000 n
-0013549587 00000 n
-0013549825 00000 n
-0013550139 00000 n
-0013550369 00000 n
-0013550639 00000 n
-0013550949 00000 n
-0013551156 00000 n
-0013551417 00000 n
-0013551616 00000 n
-0013551850 00000 n
-0013552125 00000 n
-0013552427 00000 n
-0013552694 00000 n
-0013552944 00000 n
-0013553186 00000 n
-0013553420 00000 n
-0013553666 00000 n
-0013553924 00000 n
-0013554290 00000 n
-0013554520 00000 n
-0013554762 00000 n
-0013555140 00000 n
-0013555462 00000 n
-0013555692 00000 n
-0013555958 00000 n
-0013556193 00000 n
-0013556499 00000 n
-0013556730 00000 n
-0013557012 00000 n
-0013557210 00000 n
-0013557476 00000 n
-0013557746 00000 n
-0013558040 00000 n
-0013558298 00000 n
-0013558624 00000 n
-0013558906 00000 n
-0013559108 00000 n
-0013559355 00000 n
-0013559640 00000 n
-0013559827 00000 n
-0013560037 00000 n
-0013560243 00000 n
-0013560594 00000 n
-0013560823 00000 n
-0013561007 00000 n
-0013561320 00000 n
-0013561527 00000 n
-0013561761 00000 n
-0013562011 00000 n
-0013562217 00000 n
-0013562491 00000 n
-0013562701 00000 n
-0013562943 00000 n
-0013563150 00000 n
-0013563411 00000 n
-0013563618 00000 n
-0013563840 00000 n
-0013564090 00000 n
-0013564280 00000 n
-0013564490 00000 n
-0013564752 00000 n
-0013564978 00000 n
-0013565165 00000 n
-0013565362 00000 n
-0013565661 00000 n
-0013565964 00000 n
-0013566161 00000 n
-0013566364 00000 n
-0013566606 00000 n
-0013566857 00000 n
-0013567036 00000 n
-0013567315 00000 n
-0013567505 00000 n
-0013567767 00000 n
-0013568121 00000 n
-0013568355 00000 n
-0013568549 00000 n
-0013568775 00000 n
-0013569069 00000 n
-0013569299 00000 n
-0013569637 00000 n
-0013569883 00000 n
-0013570209 00000 n
-0013570471 00000 n
-0013570749 00000 n
-0013571015 00000 n
-0013571369 00000 n
-0013571656 00000 n
-0013586702 00000 n
-0013597221 00000 n
-0013597439 00000 n
-0013598803 00000 n
-0013599840 00000 n
-0013609091 00000 n
-0013609314 00000 n
-0013610678 00000 n
-0013611733 00000 n
-0013620173 00000 n
-0013620401 00000 n
-0013621765 00000 n
-0013622816 00000 n
-0013629004 00000 n
-0013629220 00000 n
-0013630584 00000 n
-0013631629 00000 n
-0013633407 00000 n
-0013633625 00000 n
-0013633968 00000 n
-0013635102 00000 n
-0013636835 00000 n
-0013637046 00000 n
-0013637381 00000 n
-0013638298 00000 n
-0013641141 00000 n
-0013641354 00000 n
-0013642718 00000 n
-0013643831 00000 n
-0013645475 00000 n
-0013645695 00000 n
-0013647059 00000 n
-0013648192 00000 n
-0013649801 00000 n
-0013650021 00000 n
-0013650347 00000 n
-0013651485 00000 n
-0013654090 00000 n
-0013654305 00000 n
-0013655669 00000 n
-0013656785 00000 n
-0013661650 00000 n
-0013661882 00000 n
-0013663246 00000 n
-0013664354 00000 n
-0013665644 00000 n
-0013665867 00000 n
-0013666183 00000 n
-0013667320 00000 n
-0013668505 00000 n
-0013668733 00000 n
-0013669037 00000 n
+0008864800 00000 n
+0008865193 00000 n
+0008865242 00000 n
+0008865777 00000 n
+0008865910 00000 n
+0008865959 00000 n
+0008866008 00000 n
+0008878079 00000 n
+0008878482 00000 n
+0008878530 00000 n
+0008879020 00000 n
+0008879243 00000 n
+0008879291 00000 n
+0008879518 00000 n
+0008889397 00000 n
+0008889786 00000 n
+0008889834 00000 n
+0008890016 00000 n
+0008890208 00000 n
+0008890256 00000 n
+0008903249 00000 n
+0008903629 00000 n
+0008903756 00000 n
+0008916241 00000 n
+0008916656 00000 n
+0008916785 00000 n
+0008917026 00000 n
+0008917075 00000 n
+0008917124 00000 n
+0008930918 00000 n
+0008931279 00000 n
+0008931327 00000 n
+0008931375 00000 n
+0008931423 00000 n
+0008944565 00000 n
+0008944967 00000 n
+0008945015 00000 n
+0008945161 00000 n
+0008945307 00000 n
+0008945355 00000 n
+0008956856 00000 n
+0008957217 00000 n
+0008957265 00000 n
+0008964850 00000 n
+0008965230 00000 n
+0008965469 00000 n
+0008965517 00000 n
+0008968862 00000 n
+0008969210 00000 n
+0008975232 00000 n
+0008975639 00000 n
+0008975687 00000 n
+0008975735 00000 n
+0008976003 00000 n
+0008976130 00000 n
+0008976178 00000 n
+0008976429 00000 n
+0008976624 00000 n
+0008988604 00000 n
+0008989010 00000 n
+0008989058 00000 n
+0008989106 00000 n
+0008989226 00000 n
+0009009071 00000 n
+0009009458 00000 n
+0009009507 00000 n
+0009009556 00000 n
+0009022237 00000 n
+0009022674 00000 n
+0009022889 00000 n
+0009022937 00000 n
+0009023411 00000 n
+0009023565 00000 n
+0009023853 00000 n
+0009023902 00000 n
+0009023951 00000 n
+0009037612 00000 n
+0009038005 00000 n
+0009038054 00000 n
+0009038184 00000 n
+0009038233 00000 n
+0009051024 00000 n
+0009051398 00000 n
+0009051446 00000 n
+0009064735 00000 n
+0009065190 00000 n
+0009065238 00000 n
+0009065469 00000 n
+0009065517 00000 n
+0009065752 00000 n
+0009065985 00000 n
+0009066232 00000 n
+0009066478 00000 n
+0009066527 00000 n
+0009066576 00000 n
+0009082988 00000 n
+0009083390 00000 n
+0009083568 00000 n
+0009083617 00000 n
+0009083666 00000 n
+0009089967 00000 n
+0009090315 00000 n
+0009090363 00000 n
+0009098084 00000 n
+0009098432 00000 n
+0009099617 00000 n
+0009099965 00000 n
+0009110742 00000 n
+0009111140 00000 n
+0009111188 00000 n
+0009111236 00000 n
+0009111403 00000 n
+0009111529 00000 n
+0009111659 00000 n
+0009111707 00000 n
+0009111755 00000 n
+0009111803 00000 n
+0009147003 00000 n
+0009147364 00000 n
+0009147412 00000 n
+0009147460 00000 n
+0009147928 00000 n
+0009147976 00000 n
+0009305117 00000 n
+0009308737 00000 n
+0009309590 00000 n
+0009309966 00000 n
+0009404116 00000 n
+0009490437 00000 n
+0009492823 00000 n
+0009493212 00000 n
+0009563729 00000 n
+0009563779 00000 n
+0009566625 00000 n
+0009567001 00000 n
+0009738840 00000 n
+0009745830 00000 n
+0009831707 00000 n
+0009834054 00000 n
+0009913239 00000 n
+0009915680 00000 n
+0009916491 00000 n
+0009916867 00000 n
+0009980237 00000 n
+0009982149 00000 n
+0009994628 00000 n
+0009995026 00000 n
+0009995074 00000 n
+0009995267 00000 n
+0009995398 00000 n
+0009995446 00000 n
+0009995640 00000 n
+0010007147 00000 n
+0010007527 00000 n
+0010007664 00000 n
+0010060136 00000 n
+0010065800 00000 n
+0010066188 00000 n
+0010066238 00000 n
+0010075489 00000 n
+0010075895 00000 n
+0010076029 00000 n
+0010076078 00000 n
+0010093046 00000 n
+0010093448 00000 n
+0010093644 00000 n
+0010093839 00000 n
+0010093888 00000 n
+0010094386 00000 n
+0010100169 00000 n
+0010100557 00000 n
+0010100605 00000 n
+0010256692 00000 n
+0010258713 00000 n
+0010258763 00000 n
+0010274613 00000 n
+0010274993 00000 n
+0010275214 00000 n
+0010275262 00000 n
+0010289977 00000 n
+0010290370 00000 n
+0010290565 00000 n
+0010290613 00000 n
+0010290661 00000 n
+0010290709 00000 n
+0010304237 00000 n
+0010304617 00000 n
+0010304749 00000 n
+0010304797 00000 n
+0010304845 00000 n
+0010316624 00000 n
+0010316998 00000 n
+0010317046 00000 n
+0010325478 00000 n
+0010325839 00000 n
+0010325887 00000 n
+0010336535 00000 n
+0010336883 00000 n
+0010353854 00000 n
+0010354228 00000 n
+0010354276 00000 n
+0010354324 00000 n
+0010367369 00000 n
+0010367798 00000 n
+0010367846 00000 n
+0010367966 00000 n
+0010368096 00000 n
+0010368233 00000 n
+0010368281 00000 n
+0010368799 00000 n
+0010368926 00000 n
+0010369055 00000 n
+0010369104 00000 n
+0010376990 00000 n
+0010377338 00000 n
+0010386919 00000 n
+0010387293 00000 n
+0010387341 00000 n
+0010387390 00000 n
+0010401993 00000 n
+0010402367 00000 n
+0010402415 00000 n
+0010416825 00000 n
+0010417218 00000 n
+0010417265 00000 n
+0010417458 00000 n
+0010428118 00000 n
+0010428492 00000 n
+0010428541 00000 n
+0010445287 00000 n
+0010445667 00000 n
+0010445715 00000 n
+0010445908 00000 n
+0010447365 00000 n
+0010447713 00000 n
+0010456092 00000 n
+0010456477 00000 n
+0010456525 00000 n
+0010456729 00000 n
+0010456777 00000 n
+0010457488 00000 n
+0010457536 00000 n
+0010457584 00000 n
+0010457632 00000 n
+0010457680 00000 n
+0010457882 00000 n
+0010457930 00000 n
+0010458055 00000 n
+0010459814 00000 n
+0010460190 00000 n
+0010460238 00000 n
+0010460360 00000 n
+0010460478 00000 n
+0010474552 00000 n
+0010474926 00000 n
+0010474974 00000 n
+0010475022 00000 n
+0010475070 00000 n
+0010484319 00000 n
+0010484693 00000 n
+0010484741 00000 n
+0010484789 00000 n
+0010484837 00000 n
+0010484885 00000 n
+0010495618 00000 n
+0010496042 00000 n
+0010496090 00000 n
+0010496236 00000 n
+0010496284 00000 n
+0010496333 00000 n
+0010496465 00000 n
+0010496596 00000 n
+0010508592 00000 n
+0010508940 00000 n
+0010513236 00000 n
+0010513665 00000 n
+0010513713 00000 n
+0010514064 00000 n
+0010514190 00000 n
+0010514316 00000 n
+0010514522 00000 n
+0010514651 00000 n
+0010514778 00000 n
+0010527331 00000 n
+0010527788 00000 n
+0010527836 00000 n
+0010527884 00000 n
+0010527932 00000 n
+0010528056 00000 n
+0010528180 00000 n
+0010528308 00000 n
+0010528435 00000 n
+0010528619 00000 n
+0010528736 00000 n
+0010528870 00000 n
+0010528918 00000 n
+0010529032 00000 n
+0010529159 00000 n
+0010529207 00000 n
+0010529982 00000 n
+0010530100 00000 n
+0010530227 00000 n
+0010547658 00000 n
+0010548096 00000 n
+0010548144 00000 n
+0010548275 00000 n
+0010548500 00000 n
+0010548644 00000 n
+0010548692 00000 n
+0010548740 00000 n
+0010548872 00000 n
+0010549022 00000 n
+0010549177 00000 n
+0010560865 00000 n
+0010561263 00000 n
+0010561311 00000 n
+0010561359 00000 n
+0010561501 00000 n
+0010561636 00000 n
+0010561763 00000 n
+0010561811 00000 n
+0010573755 00000 n
+0010574207 00000 n
+0010574255 00000 n
+0010574395 00000 n
+0010574540 00000 n
+0010574664 00000 n
+0010574712 00000 n
+0010574838 00000 n
+0010574986 00000 n
+0010575121 00000 n
+0010575169 00000 n
+0010575312 00000 n
+0010575462 00000 n
+0010575596 00000 n
+0010589447 00000 n
+0010589808 00000 n
+0010589856 00000 n
+0010606059 00000 n
+0010606475 00000 n
+0010606523 00000 n
+0010606737 00000 n
+0010606948 00000 n
+0010637985 00000 n
+0010638372 00000 n
+0010650229 00000 n
+0010650603 00000 n
+0010650651 00000 n
+0010650699 00000 n
+0010650747 00000 n
+0010650795 00000 n
+0010650843 00000 n
+0010660767 00000 n
+0010661128 00000 n
+0010661176 00000 n
+0010672051 00000 n
+0010672440 00000 n
+0010672488 00000 n
+0010672710 00000 n
+0010672931 00000 n
+0010683384 00000 n
+0010683751 00000 n
+0010684002 00000 n
+0010693415 00000 n
+0010693763 00000 n
+0010706447 00000 n
+0010706795 00000 n
+0010717711 00000 n
+0010718073 00000 n
+0010719419 00000 n
+0010719767 00000 n
+0010719815 00000 n
+0010720515 00000 n
+0010732234 00000 n
+0010732686 00000 n
+0010732734 00000 n
+0010733050 00000 n
+0010733230 00000 n
+0010733357 00000 n
+0010733477 00000 n
+0010733525 00000 n
+0010734156 00000 n
+0010734342 00000 n
+0010734390 00000 n
+0010734565 00000 n
+0010734737 00000 n
+0010734785 00000 n
+0010734953 00000 n
+0010735001 00000 n
+0010735325 00000 n
+0010735522 00000 n
+0010748015 00000 n
+0010748389 00000 n
+0010748437 00000 n
+0010758449 00000 n
+0010758864 00000 n
+0010758912 00000 n
+0010759226 00000 n
+0010759539 00000 n
+0010763423 00000 n
+0010763866 00000 n
+0010763914 00000 n
+0010764087 00000 n
+0010764277 00000 n
+0010764477 00000 n
+0010764682 00000 n
+0010764803 00000 n
+0010764927 00000 n
+0010765122 00000 n
+0010765323 00000 n
+0010779322 00000 n
+0010779738 00000 n
+0010779786 00000 n
+0010779834 00000 n
+0010779882 00000 n
+0010780016 00000 n
+0010780064 00000 n
+0010780112 00000 n
+0010780286 00000 n
+0010790285 00000 n
+0010790659 00000 n
+0010790707 00000 n
+0010790754 00000 n
+0010790802 00000 n
+0010800379 00000 n
+0010800823 00000 n
+0010800871 00000 n
+0010801096 00000 n
+0010801320 00000 n
+0010801368 00000 n
+0010801509 00000 n
+0010801558 00000 n
+0010801684 00000 n
+0010801882 00000 n
+0010811885 00000 n
+0010812300 00000 n
+0010812348 00000 n
+0010812396 00000 n
+0010812516 00000 n
+0010812565 00000 n
+0010812614 00000 n
+0010812740 00000 n
+0010812789 00000 n
+0010813301 00000 n
+0010813350 00000 n
+0010824847 00000 n
+0010825249 00000 n
+0010825297 00000 n
+0010825430 00000 n
+0010825559 00000 n
+0010825607 00000 n
+0010825655 00000 n
+0010838836 00000 n
+0010839242 00000 n
+0010839289 00000 n
+0010839337 00000 n
+0010839463 00000 n
+0010841865 00000 n
+0010842254 00000 n
+0010842302 00000 n
+0010842822 00000 n
+0010842870 00000 n
+0010843062 00000 n
+0010843251 00000 n
+0010844738 00000 n
+0010845131 00000 n
+0010845179 00000 n
+0010845302 00000 n
+0010845351 00000 n
+0010862530 00000 n
+0010862904 00000 n
+0010862953 00000 n
+0010879947 00000 n
+0010880398 00000 n
+0010880533 00000 n
+0010880667 00000 n
+0010880801 00000 n
+0010880990 00000 n
+0010881164 00000 n
+0010881359 00000 n
+0010892945 00000 n
+0010893334 00000 n
+0010893546 00000 n
+0010893749 00000 n
+0010908046 00000 n
+0010908457 00000 n
+0010908592 00000 n
+0010908727 00000 n
+0010908862 00000 n
+0010922728 00000 n
+0010923139 00000 n
+0010923317 00000 n
+0010923514 00000 n
+0010923716 00000 n
+0010937305 00000 n
+0010937792 00000 n
+0010937982 00000 n
+0010938171 00000 n
+0010938365 00000 n
+0010938558 00000 n
+0010938749 00000 n
+0010938942 00000 n
+0010939134 00000 n
+0010939182 00000 n
+0010939317 00000 n
+0010939452 00000 n
+0010939587 00000 n
+0010942097 00000 n
+0010942477 00000 n
+0010942607 00000 n
+0010946666 00000 n
+0010947064 00000 n
+0010947112 00000 n
+0010947317 00000 n
+0010947503 00000 n
+0010947687 00000 n
+0010956757 00000 n
+0010957169 00000 n
+0010957217 00000 n
+0010957390 00000 n
+0010957561 00000 n
+0010957731 00000 n
+0010959808 00000 n
+0010960184 00000 n
+0010960232 00000 n
+0010960431 00000 n
+0010960582 00000 n
+0010963134 00000 n
+0010963528 00000 n
+0010963576 00000 n
+0010963745 00000 n
+0010963793 00000 n
+0010964475 00000 n
+0010964629 00000 n
+0010964677 00000 n
+0010964846 00000 n
+0010964976 00000 n
+0010977849 00000 n
+0010978256 00000 n
+0010978304 00000 n
+0010978887 00000 n
+0010979012 00000 n
+0010979060 00000 n
+0010979192 00000 n
+0010979240 00000 n
+0010979372 00000 n
+0010979586 00000 n
+0010990423 00000 n
+0010990803 00000 n
+0010990851 00000 n
+0010990988 00000 n
+0010991036 00000 n
+0011015392 00000 n
+0011015825 00000 n
+0011016018 00000 n
+0011016152 00000 n
+0011016208 00000 n
+0011016392 00000 n
+0011016448 00000 n
+0011016631 00000 n
+0011016687 00000 n
+0011029527 00000 n
+0011029920 00000 n
+0011029975 00000 n
+0011030109 00000 n
+0011030157 00000 n
+0011030205 00000 n
+0011030253 00000 n
+0011030301 00000 n
+0011030349 00000 n
+0011042086 00000 n
+0011042460 00000 n
+0011042508 00000 n
+0011042556 00000 n
+0011042604 00000 n
+0011057068 00000 n
+0011057442 00000 n
+0011057490 00000 n
+0011057538 00000 n
+0011058077 00000 n
+0011058125 00000 n
+0011065465 00000 n
+0011065813 00000 n
+0011065861 00000 n
+0011065909 00000 n
+0011065957 00000 n
+0011066005 00000 n
+0011091680 00000 n
+0011092041 00000 n
+0011092089 00000 n
+0011108704 00000 n
+0011109080 00000 n
+0011121938 00000 n
+0011122331 00000 n
+0011122379 00000 n
+0011122579 00000 n
+0011122627 00000 n
+0011140565 00000 n
+0011140985 00000 n
+0011141033 00000 n
+0011141228 00000 n
+0011141410 00000 n
+0011141458 00000 n
+0011141640 00000 n
+0011141821 00000 n
+0011153347 00000 n
+0011153708 00000 n
+0011165702 00000 n
+0011166063 00000 n
+0011166112 00000 n
+0011179549 00000 n
+0011179942 00000 n
+0011179990 00000 n
+0011180124 00000 n
+0011180172 00000 n
+0011180668 00000 n
+0011180896 00000 n
+0011188674 00000 n
+0011189022 00000 n
+0011199001 00000 n
+0011199388 00000 n
+0011199436 00000 n
+0011199484 00000 n
+0011199532 00000 n
+0011199580 00000 n
+0011199980 00000 n
+0011222364 00000 n
+0011222753 00000 n
+0011222801 00000 n
+0011223003 00000 n
+0011223142 00000 n
+0011223190 00000 n
+0011223882 00000 n
+0011223930 00000 n
+0011249348 00000 n
+0011249709 00000 n
+0011249757 00000 n
+0011249805 00000 n
+0011249853 00000 n
+0011249901 00000 n
+0011261158 00000 n
+0011261573 00000 n
+0011261621 00000 n
+0011261669 00000 n
+0011261717 00000 n
+0011261765 00000 n
+0011261814 00000 n
+0011262042 00000 n
+0011262269 00000 n
+0011271849 00000 n
+0011272255 00000 n
+0011272303 00000 n
+0011272351 00000 n
+0011272546 00000 n
+0011272594 00000 n
+0011284656 00000 n
+0011285049 00000 n
+0011285097 00000 n
+0011285308 00000 n
+0011285356 00000 n
+0011286143 00000 n
+0011286344 00000 n
+0011286392 00000 n
+0011286440 00000 n
+0011286488 00000 n
+0011287082 00000 n
+0011301764 00000 n
+0011302175 00000 n
+0011302223 00000 n
+0011302408 00000 n
+0011302580 00000 n
+0011302628 00000 n
+0011302766 00000 n
+0011317416 00000 n
+0011317883 00000 n
+0011318011 00000 n
+0011318230 00000 n
+0011318279 00000 n
+0011318405 00000 n
+0011318535 00000 n
+0011318584 00000 n
+0011318633 00000 n
+0011319305 00000 n
+0011319475 00000 n
+0011319646 00000 n
+0011334510 00000 n
+0011334950 00000 n
+0011335139 00000 n
+0011335187 00000 n
+0011335235 00000 n
+0011335387 00000 n
+0011335516 00000 n
+0011335678 00000 n
+0011335832 00000 n
+0011335985 00000 n
+0011348400 00000 n
+0011348853 00000 n
+0011349001 00000 n
+0011349049 00000 n
+0011349243 00000 n
+0011349428 00000 n
+0011349476 00000 n
+0011349708 00000 n
+0011349756 00000 n
+0011349946 00000 n
+0011350140 00000 n
+0011350188 00000 n
+0011365859 00000 n
+0011366265 00000 n
+0011366455 00000 n
+0011375145 00000 n
+0011375493 00000 n
+0011385762 00000 n
+0011386123 00000 n
+0011386171 00000 n
+0011386219 00000 n
+0011397418 00000 n
+0011397856 00000 n
+0011398040 00000 n
+0011398088 00000 n
+0011398296 00000 n
+0011398503 00000 n
+0011398551 00000 n
+0011398598 00000 n
+0011399552 00000 n
+0011399734 00000 n
+0011399915 00000 n
+0011399963 00000 n
+0011400011 00000 n
+0011400162 00000 n
+0011413733 00000 n
+0011414126 00000 n
+0011414174 00000 n
+0011414222 00000 n
+0011414484 00000 n
+0011414532 00000 n
+0011416520 00000 n
+0011416900 00000 n
+0011416948 00000 n
+0011417143 00000 n
+0011419060 00000 n
+0011419445 00000 n
+0011419493 00000 n
+0011419727 00000 n
+0011419960 00000 n
+0011420088 00000 n
+0011445785 00000 n
+0011446165 00000 n
+0011446213 00000 n
+0011446374 00000 n
+0011471831 00000 n
+0011472198 00000 n
+0011472397 00000 n
+0011480037 00000 n
+0011480426 00000 n
+0011480474 00000 n
+0011480654 00000 n
+0011480780 00000 n
+0011525133 00000 n
+0011525481 00000 n
+0011557652 00000 n
+0011558032 00000 n
+0011558080 00000 n
+0011558250 00000 n
+0011602958 00000 n
+0011603306 00000 n
+0011610027 00000 n
+0011610420 00000 n
+0011610468 00000 n
+0011610594 00000 n
+0011657973 00000 n
+0011658353 00000 n
+0011658607 00000 n
+0011659011 00000 n
+0011659359 00000 n
+0011659407 00000 n
+0011674959 00000 n
+0011675379 00000 n
+0011675427 00000 n
+0011675620 00000 n
+0011675746 00000 n
+0011675861 00000 n
+0011675992 00000 n
+0011676040 00000 n
+0011698899 00000 n
+0011699247 00000 n
+0011704706 00000 n
+0011705110 00000 n
+0011705158 00000 n
+0011705351 00000 n
+0011705531 00000 n
+0011705763 00000 n
+0011721772 00000 n
+0011722161 00000 n
+0011722209 00000 n
+0011733061 00000 n
+0011733422 00000 n
+0011733470 00000 n
+0011733518 00000 n
+0011733566 00000 n
+0011733614 00000 n
+0011740919 00000 n
+0011741312 00000 n
+0011741360 00000 n
+0011741596 00000 n
+0011744377 00000 n
+0011744738 00000 n
+0011744786 00000 n
+0011749655 00000 n
+0011750016 00000 n
+0011750064 00000 n
+0011751760 00000 n
+0011752108 00000 n
+0011752156 00000 n
+0011752693 00000 n
+0011752910 00000 n
+0011756016 00000 n
+0011756364 00000 n
+0011756412 00000 n
+0011763848 00000 n
+0011764209 00000 n
+0011764257 00000 n
+0011772663 00000 n
+0011773037 00000 n
+0011773085 00000 n
+0011773133 00000 n
+0011773181 00000 n
+0011775320 00000 n
+0011775696 00000 n
+0011775744 00000 n
+0011775962 00000 n
+0011776195 00000 n
+0011778519 00000 n
+0011778880 00000 n
+0011778928 00000 n
+0011790320 00000 n
+0011790749 00000 n
+0011790797 00000 n
+0011790993 00000 n
+0011791189 00000 n
+0011791308 00000 n
+0011791503 00000 n
+0011791622 00000 n
+0011797918 00000 n
+0011798279 00000 n
+0011798327 00000 n
+0011831684 00000 n
+0011832058 00000 n
+0011832106 00000 n
+0011832154 00000 n
+0011890204 00000 n
+0011890552 00000 n
+0011892436 00000 n
+0011892784 00000 n
+0011892832 00000 n
+0011893835 00000 n
+0011894183 00000 n
+0011894231 00000 n
+0011900370 00000 n
+0011900731 00000 n
+0011900779 00000 n
+0011900827 00000 n
+0011900875 00000 n
+0011903131 00000 n
+0011903479 00000 n
+0011903527 00000 n
+0011903575 00000 n
+0011903623 00000 n
+0011903671 00000 n
+0011903719 00000 n
+0011909621 00000 n
+0011910010 00000 n
+0011910058 00000 n
+0011910253 00000 n
+0011910476 00000 n
+0011910524 00000 n
+0011929415 00000 n
+0011929821 00000 n
+0011929869 00000 n
+0011930014 00000 n
+0011948562 00000 n
+0011948968 00000 n
+0011949191 00000 n
+0011957204 00000 n
+0011957624 00000 n
+0011957672 00000 n
+0011957878 00000 n
+0011958083 00000 n
+0011958277 00000 n
+0011958506 00000 n
+0011978437 00000 n
+0011978839 00000 n
+0011978887 00000 n
+0011979082 00000 n
+0011979276 00000 n
+0011979324 00000 n
+0011999480 00000 n
+0011999873 00000 n
+0011999921 00000 n
+0012000166 00000 n
+0012031084 00000 n
+0012031458 00000 n
+0012031506 00000 n
+0012050693 00000 n
+0012051054 00000 n
+0012060016 00000 n
+0012060390 00000 n
+0012060437 00000 n
+0012060484 00000 n
+0012060973 00000 n
+0012071196 00000 n
+0012071557 00000 n
+0012071605 00000 n
+0012071653 00000 n
+0012071701 00000 n
+0012074616 00000 n
+0012074996 00000 n
+0012075044 00000 n
+0012075240 00000 n
+0012075288 00000 n
+0012075835 00000 n
+0012076223 00000 n
+0012076571 00000 n
+0012076619 00000 n
+0012084941 00000 n
+0012085352 00000 n
+0012085400 00000 n
+0012085588 00000 n
+0012085637 00000 n
+0012085824 00000 n
+0012085873 00000 n
+0012086058 00000 n
+0012086107 00000 n
+0012095664 00000 n
+0012096057 00000 n
+0012096105 00000 n
+0012096153 00000 n
+0012096339 00000 n
+0012099709 00000 n
+0012100089 00000 n
+0012100137 00000 n
+0012100322 00000 n
+0012100708 00000 n
+0012101056 00000 n
+0012101104 00000 n
+0012113028 00000 n
+0012113439 00000 n
+0012113487 00000 n
+0012113664 00000 n
+0012113831 00000 n
+0012113956 00000 n
+0012114004 00000 n
+0012114052 00000 n
+0012127718 00000 n
+0012128126 00000 n
+0012128174 00000 n
+0012128395 00000 n
+0012148568 00000 n
+0012148979 00000 n
+0012149122 00000 n
+0012149169 00000 n
+0012149217 00000 n
+0012149265 00000 n
+0012149434 00000 n
+0012149619 00000 n
+0012175208 00000 n
+0012175606 00000 n
+0012175813 00000 n
+0012176021 00000 n
+0012176228 00000 n
+0012194362 00000 n
+0012194723 00000 n
+0012209413 00000 n
+0012209820 00000 n
+0012210025 00000 n
+0012210230 00000 n
+0012210433 00000 n
+0012210637 00000 n
+0012219011 00000 n
+0012219372 00000 n
+0012227723 00000 n
+0012228121 00000 n
+0012228329 00000 n
+0012228539 00000 n
+0012228748 00000 n
+0012242965 00000 n
+0012243367 00000 n
+0012243563 00000 n
+0012243759 00000 n
+0012260663 00000 n
+0012261070 00000 n
+0012261120 00000 n
+0012261253 00000 n
+0012261303 00000 n
+0012271886 00000 n
+0012272260 00000 n
+0012272308 00000 n
+0012272356 00000 n
+0012283447 00000 n
+0012283885 00000 n
+0012283933 00000 n
+0012284367 00000 n
+0012284415 00000 n
+0012284543 00000 n
+0012284729 00000 n
+0012284900 00000 n
+0012285025 00000 n
+0012285152 00000 n
+0012285280 00000 n
+0012285328 00000 n
+0012297256 00000 n
+0012297739 00000 n
+0012297788 00000 n
+0012297916 00000 n
+0012297965 00000 n
+0012298091 00000 n
+0012298221 00000 n
+0012298270 00000 n
+0012298395 00000 n
+0012298519 00000 n
+0012298653 00000 n
+0012298787 00000 n
+0012298922 00000 n
+0012299045 00000 n
+0012299181 00000 n
+0012299311 00000 n
+0012304884 00000 n
+0012305314 00000 n
+0012305362 00000 n
+0012305485 00000 n
+0012305533 00000 n
+0012305659 00000 n
+0012305779 00000 n
+0012305827 00000 n
+0012305953 00000 n
+0012306075 00000 n
+0012306123 00000 n
+0012306244 00000 n
+0012306368 00000 n
+0012306416 00000 n
+0012306540 00000 n
+0012314536 00000 n
+0012314897 00000 n
+0012314945 00000 n
+0012314994 00000 n
+0012315043 00000 n
+0012336205 00000 n
+0012336579 00000 n
+0012373981 00000 n
+0012374329 00000 n
+0012411851 00000 n
+0012412199 00000 n
+0012444766 00000 n
+0012445114 00000 n
+0012475740 00000 n
+0012476088 00000 n
+0012487294 00000 n
+0012487732 00000 n
+0012487780 00000 n
+0012487929 00000 n
+0012488126 00000 n
+0012488261 00000 n
+0012488398 00000 n
+0012488537 00000 n
+0012488679 00000 n
+0012494063 00000 n
+0012494465 00000 n
+0012535122 00000 n
+0012562885 00000 n
+0012570749 00000 n
+0012571124 00000 n
+0012617165 00000 n
+0012617214 00000 n
+0012635323 00000 n
+0012635729 00000 n
+0012635912 00000 n
+0012635959 00000 n
+0012669526 00000 n
+0012669900 00000 n
+0012701509 00000 n
+0012701920 00000 n
+0012702113 00000 n
+0012702304 00000 n
+0012702515 00000 n
+0012702563 00000 n
+0012702611 00000 n
+0012717388 00000 n
+0012717804 00000 n
+0012717999 00000 n
+0012718135 00000 n
+0012718184 00000 n
+0012718392 00000 n
+0012718534 00000 n
+0012718583 00000 n
+0012718719 00000 n
+0012718768 00000 n
+0012730628 00000 n
+0012731043 00000 n
+0012731175 00000 n
+0012731317 00000 n
+0012731365 00000 n
+0012731414 00000 n
+0012731463 00000 n
+0012743877 00000 n
+0012744251 00000 n
+0012744300 00000 n
+0012755317 00000 n
+0012755691 00000 n
+0012755740 00000 n
+0012758604 00000 n
+0012758965 00000 n
+0012760292 00000 n
+0012760668 00000 n
+0012760716 00000 n
+0012760764 00000 n
+0012760933 00000 n
+0012760981 00000 n
+0012761163 00000 n
+0012764121 00000 n
+0012764515 00000 n
+0012764563 00000 n
+0012764748 00000 n
+0012764941 00000 n
+0012765118 00000 n
+0012765294 00000 n
+0012772495 00000 n
+0012772870 00000 n
+0012772918 00000 n
+0012772966 00000 n
+0012773014 00000 n
+0012798901 00000 n
+0012803464 00000 n
+0012803513 00000 n
+0012803562 00000 n
+0012803611 00000 n
+0012811319 00000 n
+0012811667 00000 n
+0012811715 00000 n
+0012858483 00000 n
+0012865121 00000 n
+0012865496 00000 n
+0012865545 00000 n
+0012875475 00000 n
+0012875836 00000 n
+0012875884 00000 n
+0012875932 00000 n
+0012888474 00000 n
+0012888835 00000 n
+0012888883 00000 n
+0012902639 00000 n
+0012903000 00000 n
+0012903048 00000 n
+0012903625 00000 n
+0012903673 00000 n
+0012903721 00000 n
+0012921652 00000 n
+0012922000 00000 n
+0012922048 00000 n
+0012934481 00000 n
+0012934924 00000 n
+0012934972 00000 n
+0012935384 00000 n
+0012935432 00000 n
+0012935572 00000 n
+0012935699 00000 n
+0012935849 00000 n
+0012935986 00000 n
+0012936034 00000 n
+0012936166 00000 n
+0012936213 00000 n
+0012936338 00000 n
+0012936386 00000 n
+0012936514 00000 n
+0012936728 00000 n
+0012946765 00000 n
+0012947145 00000 n
+0012947193 00000 n
+0012947329 00000 n
+0012954739 00000 n
+0012955236 00000 n
+0012955284 00000 n
+0012955332 00000 n
+0012955503 00000 n
+0012955675 00000 n
+0012955931 00000 n
+0012955980 00000 n
+0012956229 00000 n
+0012956457 00000 n
+0012956701 00000 n
+0012956750 00000 n
+0012956943 00000 n
+0012957153 00000 n
+0012957366 00000 n
+0012957415 00000 n
+0012957607 00000 n
+0012957840 00000 n
+0012958025 00000 n
+0012958074 00000 n
+0012958267 00000 n
+0012958316 00000 n
+0012958748 00000 n
+0012958942 00000 n
+0012960926 00000 n
+0012961293 00000 n
+0012961341 00000 n
+0012961535 00000 n
+0012964911 00000 n
+0012965287 00000 n
+0012965335 00000 n
+0012965383 00000 n
+0012965567 00000 n
+0012965615 00000 n
+0012965809 00000 n
+0012969423 00000 n
+0012969862 00000 n
+0012969910 00000 n
+0012974170 00000 n
+0012974700 00000 n
+0012974894 00000 n
+0012975078 00000 n
+0012975271 00000 n
+0012975468 00000 n
+0012975663 00000 n
+0012975849 00000 n
+0012999429 00000 n
+0012999858 00000 n
+0012999906 00000 n
+0013000087 00000 n
+0013000282 00000 n
+0013000477 00000 n
+0013000525 00000 n
+0013000704 00000 n
+0013000951 00000 n
+0013009587 00000 n
+0013009967 00000 n
+0013010150 00000 n
+0013040015 00000 n
+0013040389 00000 n
+0013040437 00000 n
+0013061163 00000 n
+0013061524 00000 n
+0013061572 00000 n
+0013071622 00000 n
+0013072043 00000 n
+0013072091 00000 n
+0013072665 00000 n
+0013072859 00000 n
+0013073080 00000 n
+0013073297 00000 n
+0013073513 00000 n
+0013073744 00000 n
+0013073792 00000 n
+0013073840 00000 n
+0013073888 00000 n
+0013074119 00000 n
+0013074352 00000 n
+0013074400 00000 n
+0013074448 00000 n
+0013088355 00000 n
+0013088742 00000 n
+0013088791 00000 n
+0013088840 00000 n
+0013088889 00000 n
+0013096861 00000 n
+0013097222 00000 n
+0013097271 00000 n
+0013097320 00000 n
+0013097369 00000 n
+0013097418 00000 n
+0013097467 00000 n
+0013109218 00000 n
+0013109605 00000 n
+0013109654 00000 n
+0013110256 00000 n
+0013110604 00000 n
+0013110652 00000 n
+0013123202 00000 n
+0013123565 00000 n
+0013123613 00000 n
+0013123661 00000 n
+0013123709 00000 n
+0013123757 00000 n
+0013123805 00000 n
+0013139405 00000 n
+0013139768 00000 n
+0013139816 00000 n
+0013139864 00000 n
+0013139912 00000 n
+0013154722 00000 n
+0013155085 00000 n
+0013155133 00000 n
+0013155181 00000 n
+0013171849 00000 n
+0013172184 00000 n
+0013186217 00000 n
+0013186580 00000 n
+0013186628 00000 n
+0013186676 00000 n
+0013186724 00000 n
+0013186772 00000 n
+0013199729 00000 n
+0013200092 00000 n
+0013200140 00000 n
+0013200188 00000 n
+0013200236 00000 n
+0013200284 00000 n
+0013200332 00000 n
+0013217388 00000 n
+0013217751 00000 n
+0013217799 00000 n
+0013217847 00000 n
+0013217895 00000 n
+0013217943 00000 n
+0013217991 00000 n
+0013218406 00000 n
+0013240420 00000 n
+0013240783 00000 n
+0013240831 00000 n
+0013240879 00000 n
+0013256296 00000 n
+0013256644 00000 n
+0013256692 00000 n
+0013256740 00000 n
+0013256788 00000 n
+0013269861 00000 n
+0013270209 00000 n
+0013270257 00000 n
+0013270305 00000 n
+0013270353 00000 n
+0013289116 00000 n
+0013289479 00000 n
+0013289527 00000 n
+0013289575 00000 n
+0013289623 00000 n
+0013304598 00000 n
+0013304961 00000 n
+0013305009 00000 n
+0013305452 00000 n
+0013305500 00000 n
+0013305548 00000 n
+0013305596 00000 n
+0013319488 00000 n
+0013319851 00000 n
+0013319899 00000 n
+0013319947 00000 n
+0013319995 00000 n
+0013320043 00000 n
+0013320091 00000 n
+0013335956 00000 n
+0013336319 00000 n
+0013336367 00000 n
+0013336415 00000 n
+0013337036 00000 n
+0013337084 00000 n
+0013337132 00000 n
+0013352400 00000 n
+0013352763 00000 n
+0013352811 00000 n
+0013352859 00000 n
+0013352907 00000 n
+0013352955 00000 n
+0013353003 00000 n
+0013353051 00000 n
+0013353583 00000 n
+0013367986 00000 n
+0013368349 00000 n
+0013368397 00000 n
+0013368445 00000 n
+0013369049 00000 n
+0013369238 00000 n
+0013369286 00000 n
+0013369334 00000 n
+0013369382 00000 n
+0013389218 00000 n
+0013389581 00000 n
+0013389629 00000 n
+0013389677 00000 n
+0013402044 00000 n
+0013402407 00000 n
+0013402455 00000 n
+0013402503 00000 n
+0013402551 00000 n
+0013402599 00000 n
+0013402647 00000 n
+0013402695 00000 n
+0013402743 00000 n
+0013415444 00000 n
+0013415807 00000 n
+0013415855 00000 n
+0013416204 00000 n
+0013416252 00000 n
+0013416652 00000 n
+0013416700 00000 n
+0013416748 00000 n
+0013416796 00000 n
+0013417434 00000 n
+0013431818 00000 n
+0013432181 00000 n
+0013432229 00000 n
+0013432277 00000 n
+0013432325 00000 n
+0013432373 00000 n
+0013440310 00000 n
+0013440658 00000 n
+0013440777 00000 n
+0013440899 00000 n
+0013441028 00000 n
+0013441158 00000 n
+0013441283 00000 n
+0013441410 00000 n
+0013441533 00000 n
+0013441658 00000 n
+0013441785 00000 n
+0013441912 00000 n
+0013442045 00000 n
+0013442178 00000 n
+0013442310 00000 n
+0013442443 00000 n
+0013442571 00000 n
+0013442700 00000 n
+0013442821 00000 n
+0013442942 00000 n
+0013443068 00000 n
+0013443194 00000 n
+0013443322 00000 n
+0013443450 00000 n
+0013443588 00000 n
+0013443726 00000 n
+0013443850 00000 n
+0013443974 00000 n
+0013444097 00000 n
+0013444220 00000 n
+0013444350 00000 n
+0013444480 00000 n
+0013444601 00000 n
+0013444723 00000 n
+0013444850 00000 n
+0013444977 00000 n
+0013445095 00000 n
+0013445215 00000 n
+0013445338 00000 n
+0013445462 00000 n
+0013445617 00000 n
+0013445773 00000 n
+0013445912 00000 n
+0013446053 00000 n
+0013446212 00000 n
+0013446372 00000 n
+0013446516 00000 n
+0013446662 00000 n
+0013446825 00000 n
+0013446989 00000 n
+0013447115 00000 n
+0013447242 00000 n
+0013447364 00000 n
+0013447488 00000 n
+0013447616 00000 n
+0013447746 00000 n
+0013447873 00000 n
+0013448001 00000 n
+0013448123 00000 n
+0013448247 00000 n
+0013448366 00000 n
+0013448486 00000 n
+0013448599 00000 n
+0013448717 00000 n
+0013448843 00000 n
+0013448970 00000 n
+0013449088 00000 n
+0013449208 00000 n
+0013449343 00000 n
+0013449479 00000 n
+0013449601 00000 n
+0013449724 00000 n
+0013449845 00000 n
+0013449967 00000 n
+0013450096 00000 n
+0013450227 00000 n
+0013450344 00000 n
+0013450462 00000 n
+0013450580 00000 n
+0013450699 00000 n
+0013450819 00000 n
+0013450940 00000 n
+0013451068 00000 n
+0013451198 00000 n
+0013451339 00000 n
+0013451481 00000 n
+0013451628 00000 n
+0013451777 00000 n
+0013451904 00000 n
+0013452032 00000 n
+0013452159 00000 n
+0013452287 00000 n
+0013452416 00000 n
+0013452546 00000 n
+0013452679 00000 n
+0013452813 00000 n
+0013452939 00000 n
+0013453066 00000 n
+0013453183 00000 n
+0013453301 00000 n
+0013453430 00000 n
+0013453560 00000 n
+0013453690 00000 n
+0013453822 00000 n
+0013453947 00000 n
+0013454073 00000 n
+0013454205 00000 n
+0013454338 00000 n
+0013454462 00000 n
+0013454587 00000 n
+0013454713 00000 n
+0013454841 00000 n
+0013454964 00000 n
+0013455088 00000 n
+0013455227 00000 n
+0013455367 00000 n
+0013455502 00000 n
+0013455639 00000 n
+0013455781 00000 n
+0013455924 00000 n
+0013456088 00000 n
+0013456253 00000 n
+0013456409 00000 n
+0013456566 00000 n
+0013456698 00000 n
+0013456831 00000 n
+0013456953 00000 n
+0013457076 00000 n
+0013457206 00000 n
+0013457338 00000 n
+0013457475 00000 n
+0013457613 00000 n
+0013457743 00000 n
+0013457874 00000 n
+0013457996 00000 n
+0013458120 00000 n
+0013458242 00000 n
+0013458365 00000 n
+0013458517 00000 n
+0013458670 00000 n
+0013458806 00000 n
+0013458943 00000 n
+0013459083 00000 n
+0013459224 00000 n
+0013459370 00000 n
+0013459517 00000 n
+0013459668 00000 n
+0013459820 00000 n
+0013459962 00000 n
+0013460105 00000 n
+0013460242 00000 n
+0013460380 00000 n
+0013460505 00000 n
+0013460632 00000 n
+0013460757 00000 n
+0013460884 00000 n
+0013461008 00000 n
+0013461133 00000 n
+0013461264 00000 n
+0013461396 00000 n
+0013461523 00000 n
+0013461651 00000 n
+0013461784 00000 n
+0013461918 00000 n
+0013462048 00000 n
+0013462180 00000 n
+0013462306 00000 n
+0013462433 00000 n
+0013462560 00000 n
+0013462689 00000 n
+0013462811 00000 n
+0013462935 00000 n
+0013463078 00000 n
+0013463222 00000 n
+0013463344 00000 n
+0013463468 00000 n
+0013463600 00000 n
+0013463734 00000 n
+0013463859 00000 n
+0013463986 00000 n
+0013464107 00000 n
+0013464230 00000 n
+0013464356 00000 n
+0013464484 00000 n
+0013464608 00000 n
+0013464734 00000 n
+0013464862 00000 n
+0013464991 00000 n
+0013465116 00000 n
+0013465242 00000 n
+0013465372 00000 n
+0013465503 00000 n
+0013465643 00000 n
+0013465785 00000 n
+0013465916 00000 n
+0013466048 00000 n
+0013466185 00000 n
+0013466323 00000 n
+0013466454 00000 n
+0013466586 00000 n
+0013466721 00000 n
+0013466857 00000 n
+0013466987 00000 n
+0013467118 00000 n
+0013467252 00000 n
+0013467387 00000 n
+0013467529 00000 n
+0013467672 00000 n
+0013467813 00000 n
+0013467955 00000 n
+0013468083 00000 n
+0013468212 00000 n
+0013468341 00000 n
+0013468471 00000 n
+0013468597 00000 n
+0013468724 00000 n
+0013468843 00000 n
+0013468964 00000 n
+0013469103 00000 n
+0013469243 00000 n
+0013469367 00000 n
+0013469492 00000 n
+0013469614 00000 n
+0013469737 00000 n
+0013469863 00000 n
+0013469991 00000 n
+0013470109 00000 n
+0013470228 00000 n
+0013470347 00000 n
+0013470468 00000 n
+0013470582 00000 n
+0013470698 00000 n
+0013470815 00000 n
+0013470933 00000 n
+0013471052 00000 n
+0013471172 00000 n
+0013471290 00000 n
+0013471410 00000 n
+0013471527 00000 n
+0013471646 00000 n
+0013471779 00000 n
+0013471914 00000 n
+0013472032 00000 n
+0013472152 00000 n
+0013472277 00000 n
+0013472403 00000 n
+0013472532 00000 n
+0013472662 00000 n
+0013472785 00000 n
+0013472909 00000 n
+0013473042 00000 n
+0013473176 00000 n
+0013473292 00000 n
+0013473409 00000 n
+0013473542 00000 n
+0013473677 00000 n
+0013473811 00000 n
+0013473947 00000 n
+0013474071 00000 n
+0013474196 00000 n
+0013474319 00000 n
+0013474444 00000 n
+0013474596 00000 n
+0013474749 00000 n
+0013474892 00000 n
+0013475036 00000 n
+0013475161 00000 n
+0013475287 00000 n
+0013475408 00000 n
+0013475530 00000 n
+0013475656 00000 n
+0013475783 00000 n
+0013475900 00000 n
+0013476018 00000 n
+0013476151 00000 n
+0013476285 00000 n
+0013476413 00000 n
+0013476542 00000 n
+0013476666 00000 n
+0013476792 00000 n
+0013476918 00000 n
+0013477045 00000 n
+0013477170 00000 n
+0013477297 00000 n
+0013477423 00000 n
+0013477550 00000 n
+0013477677 00000 n
+0013477805 00000 n
+0013477928 00000 n
+0013478052 00000 n
+0013478173 00000 n
+0013478296 00000 n
+0013478431 00000 n
+0013478567 00000 n
+0013478695 00000 n
+0013478824 00000 n
+0013478944 00000 n
+0013479067 00000 n
+0013479193 00000 n
+0013479320 00000 n
+0013479448 00000 n
+0013479578 00000 n
+0013479696 00000 n
+0013479816 00000 n
+0013479931 00000 n
+0013480048 00000 n
+0013480166 00000 n
+0013480286 00000 n
+0013480406 00000 n
+0013480528 00000 n
+0013480657 00000 n
+0013480787 00000 n
+0013480912 00000 n
+0013481038 00000 n
+0013481169 00000 n
+0013481301 00000 n
+0013481428 00000 n
+0013481556 00000 n
+0013481681 00000 n
+0013481809 00000 n
+0013481937 00000 n
+0013482067 00000 n
+0013482194 00000 n
+0013482323 00000 n
+0013482452 00000 n
+0013482582 00000 n
+0013482706 00000 n
+0013482831 00000 n
+0013482958 00000 n
+0013483087 00000 n
+0013483218 00000 n
+0013483350 00000 n
+0013483474 00000 n
+0013483600 00000 n
+0013483730 00000 n
+0013483861 00000 n
+0013483988 00000 n
+0013484117 00000 n
+0013484244 00000 n
+0013484372 00000 n
+0013484503 00000 n
+0013484635 00000 n
+0013484763 00000 n
+0013484892 00000 n
+0013485038 00000 n
+0013485185 00000 n
+0013485309 00000 n
+0013485434 00000 n
+0013485559 00000 n
+0013485685 00000 n
+0013485819 00000 n
+0013485954 00000 n
+0013486085 00000 n
+0013486218 00000 n
+0013486352 00000 n
+0013486488 00000 n
+0013486609 00000 n
+0013486731 00000 n
+0013486850 00000 n
+0013486970 00000 n
+0013487097 00000 n
+0013487225 00000 n
+0013487353 00000 n
+0013487483 00000 n
+0013487610 00000 n
+0013487738 00000 n
+0013487865 00000 n
+0013487994 00000 n
+0013488126 00000 n
+0013488260 00000 n
+0013488420 00000 n
+0013488581 00000 n
+0013488704 00000 n
+0013488829 00000 n
+0013488955 00000 n
+0013489083 00000 n
+0013489212 00000 n
+0013489342 00000 n
+0013489468 00000 n
+0013489595 00000 n
+0013489721 00000 n
+0013489848 00000 n
+0013489968 00000 n
+0013490090 00000 n
+0013490214 00000 n
+0013490339 00000 n
+0013490462 00000 n
+0013490586 00000 n
+0013490715 00000 n
+0013490846 00000 n
+0013490965 00000 n
+0013491085 00000 n
+0013491202 00000 n
+0013491321 00000 n
+0013491440 00000 n
+0013491560 00000 n
+0013491682 00000 n
+0013491806 00000 n
+0013491935 00000 n
+0013492065 00000 n
+0013492203 00000 n
+0013492343 00000 n
+0013492468 00000 n
+0013492594 00000 n
+0013492715 00000 n
+0013492883 00000 n
+0013493006 00000 n
+0013493128 00000 n
+0013493253 00000 n
+0013493379 00000 n
+0013493503 00000 n
+0013493628 00000 n
+0013493752 00000 n
+0013493877 00000 n
+0013493995 00000 n
+0013494115 00000 n
+0013494235 00000 n
+0013494357 00000 n
+0013494477 00000 n
+0013494598 00000 n
+0013494758 00000 n
+0013494919 00000 n
+0013495040 00000 n
+0013495163 00000 n
+0013495287 00000 n
+0013495412 00000 n
+0013495529 00000 n
+0013495725 00000 n
+0013495845 00000 n
+0013495963 00000 n
+0013496087 00000 n
+0013496212 00000 n
+0013496338 00000 n
+0013496466 00000 n
+0013496595 00000 n
+0013496727 00000 n
+0013496847 00000 n
+0013496968 00000 n
+0013497105 00000 n
+0013497243 00000 n
+0013497363 00000 n
+0013497485 00000 n
+0013497613 00000 n
+0013497743 00000 n
+0013497867 00000 n
+0013497992 00000 n
+0013498110 00000 n
+0013498229 00000 n
+0013498355 00000 n
+0013498482 00000 n
+0013498606 00000 n
+0013498731 00000 n
+0013498862 00000 n
+0013498994 00000 n
+0013499111 00000 n
+0013499230 00000 n
+0013499350 00000 n
+0013499472 00000 n
+0013499606 00000 n
+0013499741 00000 n
+0013499865 00000 n
+0013499991 00000 n
+0013500112 00000 n
+0013500234 00000 n
+0013500357 00000 n
+0013500481 00000 n
+0013500628 00000 n
+0013500776 00000 n
+0013500902 00000 n
+0013501029 00000 n
+0013501151 00000 n
+0013501275 00000 n
+0013501397 00000 n
+0013501521 00000 n
+0013501650 00000 n
+0013501780 00000 n
+0013501917 00000 n
+0013502055 00000 n
+0013502176 00000 n
+0013502299 00000 n
+0013502450 00000 n
+0013502603 00000 n
+0013502720 00000 n
+0013502838 00000 n
+0013502971 00000 n
+0013503105 00000 n
+0013503228 00000 n
+0013503353 00000 n
+0013503468 00000 n
+0013503584 00000 n
+0013503700 00000 n
+0013503817 00000 n
+0013503945 00000 n
+0013504074 00000 n
+0013504197 00000 n
+0013504322 00000 n
+0013504448 00000 n
+0013504576 00000 n
+0013504693 00000 n
+0013504811 00000 n
+0013504928 00000 n
+0013505047 00000 n
+0013505168 00000 n
+0013505290 00000 n
+0013505432 00000 n
+0013505575 00000 n
+0013505709 00000 n
+0013505844 00000 n
+0013505966 00000 n
+0013506090 00000 n
+0013506248 00000 n
+0013506407 00000 n
+0013506551 00000 n
+0013506696 00000 n
+0013506968 00000 n
+0013507240 00000 n
+0013507322 00000 n
+0013507554 00000 n
+0013507714 00000 n
+0013507870 00000 n
+0013508089 00000 n
+0013508294 00000 n
+0013508571 00000 n
+0013508835 00000 n
+0013509069 00000 n
+0013509318 00000 n
+0013509663 00000 n
+0013509996 00000 n
+0013510253 00000 n
+0013510514 00000 n
+0013510799 00000 n
+0013511045 00000 n
+0013511241 00000 n
+0013511555 00000 n
+0013511764 00000 n
+0013511978 00000 n
+0013512226 00000 n
+0013512464 00000 n
+0013512805 00000 n
+0013513082 00000 n
+0013513439 00000 n
+0013513740 00000 n
+0013514113 00000 n
+0013514323 00000 n
+0013514524 00000 n
+0013514746 00000 n
+0013514975 00000 n
+0013515188 00000 n
+0013515385 00000 n
+0013515574 00000 n
+0013515803 00000 n
+0013516000 00000 n
+0013516261 00000 n
+0013516470 00000 n
+0013516687 00000 n
+0013516924 00000 n
+0013517121 00000 n
+0013517299 00000 n
+0013517551 00000 n
+0013517773 00000 n
+0013518043 00000 n
+0013518341 00000 n
+0013518632 00000 n
+0013518862 00000 n
+0013519112 00000 n
+0013519366 00000 n
+0013519564 00000 n
+0013519814 00000 n
+0013520076 00000 n
+0013520426 00000 n
+0013520648 00000 n
+0013520930 00000 n
+0013521304 00000 n
+0013521519 00000 n
+0013521757 00000 n
+0013522060 00000 n
+0013522326 00000 n
+0013522616 00000 n
+0013522994 00000 n
+0013523340 00000 n
+0013523590 00000 n
+0013523840 00000 n
+0013524114 00000 n
+0013524480 00000 n
+0013524742 00000 n
+0013524941 00000 n
+0013525186 00000 n
+0013525509 00000 n
+0013525899 00000 n
+0013526221 00000 n
+0013526535 00000 n
+0013526861 00000 n
+0013527151 00000 n
+0013527434 00000 n
+0013527644 00000 n
+0013527839 00000 n
+0013528073 00000 n
+0013528275 00000 n
+0013528541 00000 n
+0013528743 00000 n
+0013528969 00000 n
+0013529175 00000 n
+0013529401 00000 n
+0013529595 00000 n
+0013529933 00000 n
+0013530232 00000 n
+0013530473 00000 n
+0013530668 00000 n
+0013530863 00000 n
+0013531097 00000 n
+0013531292 00000 n
+0013531514 00000 n
+0013531724 00000 n
+0013532022 00000 n
+0013532308 00000 n
+0013532610 00000 n
+0013532860 00000 n
+0013533094 00000 n
+0013533496 00000 n
+0013533766 00000 n
+0013534148 00000 n
+0013534450 00000 n
+0013534696 00000 n
+0013535039 00000 n
+0013535292 00000 n
+0013535495 00000 n
+0013535697 00000 n
+0013535960 00000 n
+0013536189 00000 n
+0013536369 00000 n
+0013536634 00000 n
+0013536813 00000 n
+0013537015 00000 n
+0013537293 00000 n
+0013537635 00000 n
+0013537837 00000 n
+0013538028 00000 n
+0013538309 00000 n
+0013538521 00000 n
+0013538742 00000 n
+0013538953 00000 n
+0013539195 00000 n
+0013539413 00000 n
+0013539656 00000 n
+0013539917 00000 n
+0013540164 00000 n
+0013540430 00000 n
+0013540692 00000 n
+0013540906 00000 n
+0013541240 00000 n
+0013541523 00000 n
+0013541809 00000 n
+0013542040 00000 n
+0013542250 00000 n
+0013542448 00000 n
+0013542710 00000 n
+0013542928 00000 n
+0013543162 00000 n
+0013543432 00000 n
+0013543678 00000 n
+0013543932 00000 n
+0013544190 00000 n
+0013544388 00000 n
+0013544610 00000 n
+0013544916 00000 n
+0013545131 00000 n
+0013545356 00000 n
+0013545563 00000 n
+0013545797 00000 n
+0013545999 00000 n
+0013546189 00000 n
+0013546376 00000 n
+0013546706 00000 n
+0013546945 00000 n
+0013547143 00000 n
+0013547361 00000 n
+0013547563 00000 n
+0013547769 00000 n
+0013547987 00000 n
+0013548201 00000 n
+0013548411 00000 n
+0013548641 00000 n
+0013548847 00000 n
+0013549065 00000 n
+0013549287 00000 n
+0013549593 00000 n
+0013549831 00000 n
+0013550145 00000 n
+0013550375 00000 n
+0013550645 00000 n
+0013550955 00000 n
+0013551162 00000 n
+0013551423 00000 n
+0013551622 00000 n
+0013551856 00000 n
+0013552131 00000 n
+0013552433 00000 n
+0013552700 00000 n
+0013552950 00000 n
+0013553192 00000 n
+0013553426 00000 n
+0013553672 00000 n
+0013553930 00000 n
+0013554296 00000 n
+0013554526 00000 n
+0013554768 00000 n
+0013555146 00000 n
+0013555468 00000 n
+0013555698 00000 n
+0013555964 00000 n
+0013556199 00000 n
+0013556505 00000 n
+0013556736 00000 n
+0013557018 00000 n
+0013557216 00000 n
+0013557482 00000 n
+0013557752 00000 n
+0013558046 00000 n
+0013558304 00000 n
+0013558630 00000 n
+0013558912 00000 n
+0013559114 00000 n
+0013559361 00000 n
+0013559646 00000 n
+0013559833 00000 n
+0013560043 00000 n
+0013560249 00000 n
+0013560600 00000 n
+0013560829 00000 n
+0013561013 00000 n
+0013561326 00000 n
+0013561533 00000 n
+0013561767 00000 n
+0013562017 00000 n
+0013562223 00000 n
+0013562497 00000 n
+0013562707 00000 n
+0013562949 00000 n
+0013563156 00000 n
+0013563417 00000 n
+0013563624 00000 n
+0013563846 00000 n
+0013564096 00000 n
+0013564286 00000 n
+0013564496 00000 n
+0013564758 00000 n
+0013564984 00000 n
+0013565171 00000 n
+0013565368 00000 n
+0013565667 00000 n
+0013565970 00000 n
+0013566167 00000 n
+0013566370 00000 n
+0013566612 00000 n
+0013566863 00000 n
+0013567042 00000 n
+0013567321 00000 n
+0013567511 00000 n
+0013567773 00000 n
+0013568127 00000 n
+0013568361 00000 n
+0013568555 00000 n
+0013568781 00000 n
+0013569075 00000 n
+0013569305 00000 n
+0013569643 00000 n
+0013569889 00000 n
+0013570215 00000 n
+0013570477 00000 n
+0013570755 00000 n
+0013571021 00000 n
+0013571375 00000 n
+0013571662 00000 n
+0013586708 00000 n
+0013597227 00000 n
+0013597445 00000 n
+0013598809 00000 n
+0013599846 00000 n
+0013609097 00000 n
+0013609320 00000 n
+0013610684 00000 n
+0013611739 00000 n
+0013620179 00000 n
+0013620407 00000 n
+0013621771 00000 n
+0013622822 00000 n
+0013629010 00000 n
+0013629226 00000 n
+0013630590 00000 n
+0013631635 00000 n
+0013633413 00000 n
+0013633631 00000 n
+0013633974 00000 n
+0013635108 00000 n
+0013636841 00000 n
+0013637052 00000 n
+0013637387 00000 n
+0013638304 00000 n
+0013641147 00000 n
+0013641360 00000 n
+0013642724 00000 n
+0013643837 00000 n
+0013645481 00000 n
+0013645701 00000 n
+0013647065 00000 n
+0013648198 00000 n
+0013649807 00000 n
+0013650027 00000 n
+0013650353 00000 n
+0013651491 00000 n
+0013654096 00000 n
+0013654311 00000 n
+0013655675 00000 n
+0013656791 00000 n
+0013661656 00000 n
+0013661888 00000 n
+0013663252 00000 n
+0013664360 00000 n
+0013665650 00000 n
+0013665873 00000 n
+0013666189 00000 n
+0013667326 00000 n
+0013668511 00000 n
+0013668739 00000 n
+0013669043 00000 n
trailer
<< /Size 5427
/Root 2 0 R
/Info 1 0 R
>>
startxref
-13670175
+13670181
%%EOF
diff --git a/book.html b/book.html
index 7bdac9f..37b9870 100644
--- a/book.html
+++ b/book.html
@@ -28244,7 +28244,7 @@ This utility is often used in conjunction with output from <a href="#importtsv">
<div class="listingblock">
<div class="title">Driver</div>
<div class="content">
-<pre>HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-server-VERSION.jar completebulkload <hdfs://storefileoutput> <tablename></pre>
+<pre>HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-mapreduce-VERSION.jar completebulkload <hdfs://storefileoutput> <tablename></pre>
</div>
</div>
<div class="sect3">
@@ -41701,7 +41701,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-05-09 14:29:35 UTC
+Last updated 2019-05-10 14:29:35 UTC
</div>
</div>
</body>
diff --git a/bulk-loads.html b/bulk-loads.html
index 2c8f7c0..d1c8cf2 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -162,7 +162,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index d99761c..759d8f5 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -8896,12 +8896,12 @@
<td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
<ul>
<li>offset: <tt>"2"</tt></li></ul></td>
-<td>681</td>
+<td>680</td>
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr>
<tr class="b">
<td></td>
<td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3272</td>
+<td>3273</td>
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr>
<tr class="a">
<td>misc</td>
@@ -17706,7 +17706,7 @@
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
<td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input ' *' while parsing JAVADOC_TAG</td>
<td>117</td></tr>
<tr class="a">
@@ -67511,163 +67511,163 @@
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 106).</td>
-<td>8124</td></tr>
+<td>8132</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>8247</td></tr>
+<td>8255</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>8315</td></tr>
+<td>8323</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>8317</td></tr>
+<td>8325</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>8318</td></tr>
+<td>8326</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>8319</td></tr>
+<td>8327</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>8320</td></tr>
+<td>8328</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>8321</td></tr>
+<td>8329</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>8487</td></tr>
+<td>8495</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'else' construct must use '{}'s.</td>
-<td>8488</td></tr>
+<td>8496</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>8490</td></tr>
+<td>8498</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'else' construct must use '{}'s.</td>
-<td>8491</td></tr>
+<td>8499</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>8501</td></tr>
+<td>8509</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'else' construct must use '{}'s.</td>
-<td>8502</td></tr>
+<td>8510</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8572</td></tr>
+<td>8580</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 8, expected level should be 10.</td>
-<td>8574</td></tr>
+<td>8582</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
-<td>8575</td></tr>
+<td>8583</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if rcurly' has incorrect indentation level 8, expected level should be 10.</td>
-<td>8576</td></tr>
+<td>8584</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8577</td></tr>
+<td>8585</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8578</td></tr>
+<td>8586</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8580</td></tr>
+<td>8588</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8581</td></tr>
+<td>8589</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8583</td></tr>
+<td>8591</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8584</td></tr>
+<td>8592</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8587</td></tr>
+<td>8595</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8590</td></tr>
+<td>8598</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8591</td></tr></table></div>
+<td>8599</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</h3>
<table border="0" class="table table-striped">
@@ -93365,31 +93365,31 @@
<td>indentation</td>
<td>Indentation</td>
<td>'method def modifier' has incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
-<td>610</td></tr>
+<td>613</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 14, expected level should be one of the following: 10, 12.</td>
-<td>612</td></tr>
+<td>615</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 14, expected level should be one of the following: 10, 12.</td>
-<td>614</td></tr>
+<td>617</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rcurly' has incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
-<td>615</td></tr>
+<td>618</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'object def rcurly' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
-<td>616</td></tr></table></div>
+<td>619</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.tool.MapreduceTestingShim.java">org/apache/hadoop/hbase/tool/MapreduceTestingShim.java</h3>
<table border="0" class="table table-striped">
@@ -103355,7 +103355,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index ed54b77..c576618 100644
--- a/coc.html
+++ b/coc.html
@@ -231,7 +231,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 261a3ab..19d5a46 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -311,7 +311,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 09f4f5a..fa9237f 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -505,7 +505,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index 19d463e..a82b4eb 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -184,7 +184,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 393c318..6e07712 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -236,8 +236,8 @@
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
<tr class="a">
<td>io.dropwizard.metrics</td>
-<td><a class="externalLink" href="http://metrics.codahale.com/metrics-core/">metrics-core</a></td>
-<td>3.2.1</td>
+<td><a class="externalLink" href="http://metrics.dropwizard.io/metrics-core/">metrics-core</a></td>
+<td>3.2.6</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a></td></tr>
<tr class="b">
@@ -894,7 +894,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-09</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-10</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index a5befea..c3afdf6 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3927,7 +3927,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Thu May 9 14:34:22 UTC 2019"</code></td>
+<td class="colLast"><code>"Fri May 10 14:35:25 UTC 2019"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3941,7 +3941,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"c18fda633f54e3abe90058f4f17bf36d"</code></td>
+<td class="colLast"><code>"d3207878b048e8c902e2a3e9162791f0"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
index 8ef8ec0..1e99c03 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -3383,7 +3383,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
<ul class="blockList">
<li class="blockList">
<h4>FIXED_OVERHEAD</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8195">FIXED_OVERHEAD</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8203">FIXED_OVERHEAD</a></pre>
</li>
</ul>
<a name="DEEP_OVERHEAD">
@@ -3392,7 +3392,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
<ul class="blockList">
<li class="blockList">
<h4>DEEP_OVERHEAD</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8212">DEEP_OVERHEAD</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8220">DEEP_OVERHEAD</a></pre>
</li>
</ul>
<a name="MOCKED_LIST">
@@ -3401,7 +3401,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
<ul class="blockListLast">
<li class="blockList">
<h4>MOCKED_LIST</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8606">MOCKED_LIST</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8614">MOCKED_LIST</a></pre>
<div class="block">A mocked list implementation - discards all updates.</div>
</li>
</ul>
@@ -7548,7 +7548,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>reckonDelta</h4>
-<pre>private static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8122">reckonDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> delta,
+<pre>private static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8130">reckonDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> delta,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell,
byte[] columnFamily,
long now,
@@ -7567,7 +7567,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getLongValue</h4>
-<pre>private static long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8150">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)
+<pre>private static long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8158">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)
throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -7583,7 +7583,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>get</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8166">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase [...]
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8174">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase [...]
<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a> store,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> coordinates,
<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a> isolation,
@@ -7608,7 +7608,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>sort</h4>
-<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8190">sort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class [...]
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8198">sort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class [...]
<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> comparator)</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -7622,7 +7622,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>heapSize</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8229">heapSize</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8237">heapSize</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize--">heapSize</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -7638,7 +7638,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>registerService</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8249">registerService</a>(com.google.protobuf.Service instance)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8257">registerService</a>(com.google.protobuf.Service instance)</pre>
<div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to
be available for handling Region#execService(com.google.protobuf.RpcController,
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.
@@ -7664,7 +7664,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>execService</h4>
-<pre>public com.google.protobuf.Message <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8284">execService</a>(com.google.protobuf.RpcController controller,
+<pre>public com.google.protobuf.Message <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8292">execService</a>(com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall call)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Executes a single protocol buffer coprocessor endpoint <code>Service</code> method using
@@ -7692,7 +7692,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>shouldForceSplit</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8335">shouldForceSplit</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8343">shouldForceSplit</a>()</pre>
</li>
</ul>
<a name="getExplicitSplitPoint--">
@@ -7701,7 +7701,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getExplicitSplitPoint</h4>
-<pre>byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8339">getExplicitSplitPoint</a>()</pre>
+<pre>byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8347">getExplicitSplitPoint</a>()</pre>
</li>
</ul>
<a name="forceSplit-byte:A-">
@@ -7710,7 +7710,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>forceSplit</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8343">forceSplit</a>(byte[] sp)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8351">forceSplit</a>(byte[] sp)</pre>
</li>
</ul>
<a name="clearSplit--">
@@ -7719,7 +7719,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>clearSplit</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8352">clearSplit</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8360">clearSplit</a>()</pre>
</li>
</ul>
<a name="checkSplit--">
@@ -7728,7 +7728,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>checkSplit</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8363">checkSplit</a>()</pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8371">checkSplit</a>()</pre>
<div class="block">Return the splitpoint. null indicates the region isn't splittable
If the splitpoint isn't explicitly specified, it will go over the stores
to find the best splitpoint. Currently the criteria of best splitpoint
@@ -7741,7 +7741,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getCompactPriority</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8397">getCompactPriority</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8405">getCompactPriority</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The priority that this region should have in the compaction queue</dd>
@@ -7754,7 +7754,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getCoprocessorHost</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8403">getCoprocessorHost</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8411">getCoprocessorHost</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the coprocessor host</dd>
@@ -7767,7 +7767,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>setCoprocessorHost</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8409">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a> coprocessorHost)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8417">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a> coprocessorHost)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>coprocessorHost</code> - the new coprocessor host</dd>
@@ -7780,7 +7780,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>startRegionOperation</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8414">startRegionOperation</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8422">startRegionOperation</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation--">Region</a></code></span></div>
<div class="block">This method needs to be called before any public call that reads or
@@ -7802,7 +7802,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>startRegionOperation</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8419">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> op)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8427">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> op)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">Region</a></code></span></div>
<div class="block">This method needs to be called before any public call that reads or
@@ -7826,7 +7826,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>closeRegionOperation</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8458">closeRegionOperation</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8466">closeRegionOperation</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation--">Region</a></code></span></div>
<div class="block">Closes the region operation lock.</div>
@@ -7844,7 +7844,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>closeRegionOperation</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8463">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> operation)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8471">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> operation)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">Region</a></code></span></div>
<div class="block">Closes the region operation lock. This needs to be called in the finally block corresponding
@@ -7863,7 +7863,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>startBulkRegionOperation</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8482">startBulkRegionOperation</a>(boolean writeLockNeeded)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8490">startBulkRegionOperation</a>(boolean writeLockNeeded)
throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a>,
<a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -7885,7 +7885,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>closeBulkRegionOperation</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8500">closeBulkRegionOperation</a>()</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8508">closeBulkRegionOperation</a>()</pre>
<div class="block">Closes the lock. This needs to be called in the finally block corresponding
to the try block of #startRegionOperation</div>
</li>
@@ -7896,7 +7896,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>recordMutationWithoutWal</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8509">recordMutationWithoutWal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.h [...]
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8517">recordMutationWithoutWal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.h [...]
<div class="block">Update LongAdders for number of puts without wal and the size of possible data loss.
These information are exposed by the region server metrics.</div>
</li>
@@ -7907,7 +7907,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>lock</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8531">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a> lock)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8539">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a> lock)
throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
<dl>
@@ -7923,7 +7923,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>lock</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8540">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a> lock,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8548">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a> lock,
int multiplier)
throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -7943,7 +7943,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>sync</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8567">sync</a>(long txid,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8575">sync</a>(long txid,
<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> durability)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Calls sync with the given transaction ID</div>
@@ -7961,7 +7961,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>shouldSyncWAL</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8599">shouldSyncWAL</a>()</pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8607">shouldSyncWAL</a>()</pre>
<div class="block">Check whether we should sync the wal from the table's durability settings</div>
</li>
</ul>
@@ -7971,7 +7971,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getOpenSeqNum</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8630">getOpenSeqNum</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8638">getOpenSeqNum</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the latest sequence number that was read from storage when this region was opened</dd>
@@ -7984,7 +7984,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getMaxStoreSeqId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8635">getMaxStoreSeqId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8643">getMaxStoreSeqId</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMaxStoreSeqId--">getMaxStoreSeqId</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -8000,7 +8000,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getOldestSeqIdOfStore</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8639">getOldestSeqIdOfStore</a>(byte[] familyName)</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8647">getOldestSeqIdOfStore</a>(byte[] familyName)</pre>
</li>
</ul>
<a name="getCompactionState--">
@@ -8009,7 +8009,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getCompactionState</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8644">getCompactionState</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8652">getCompactionState</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCompactionState--">getCompactionState</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -8024,7 +8024,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>reportCompactionRequestStart</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8650">reportCompactionRequestStart</a>(boolean isMajor)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8658">reportCompactionRequestStart</a>(boolean isMajor)</pre>
</li>
</ul>
<a name="reportCompactionRequestEnd-boolean-int-long-">
@@ -8033,7 +8033,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>reportCompactionRequestEnd</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8654">reportCompactionRequestEnd</a>(boolean isMajor,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8662">reportCompactionRequestEnd</a>(boolean isMajor,
int numFiles,
long filesSizeCompacted)</pre>
</li>
@@ -8044,7 +8044,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>reportCompactionRequestFailure</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8665">reportCompactionRequestFailure</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8673">reportCompactionRequestFailure</a>()</pre>
</li>
</ul>
<a name="incrementCompactionsQueuedCount--">
@@ -8053,7 +8053,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>incrementCompactionsQueuedCount</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8669">incrementCompactionsQueuedCount</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8677">incrementCompactionsQueuedCount</a>()</pre>
</li>
</ul>
<a name="decrementCompactionsQueuedCount--">
@@ -8062,7 +8062,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>decrementCompactionsQueuedCount</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8673">decrementCompactionsQueuedCount</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8681">decrementCompactionsQueuedCount</a>()</pre>
</li>
</ul>
<a name="incrementFlushesQueuedCount--">
@@ -8071,7 +8071,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>incrementFlushesQueuedCount</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8677">incrementFlushesQueuedCount</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8685">incrementFlushesQueuedCount</a>()</pre>
</li>
</ul>
<a name="getReadPoint--">
@@ -8080,7 +8080,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getReadPoint</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8682">getReadPoint</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8690">getReadPoint</a>()</pre>
</li>
</ul>
<a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
@@ -8089,7 +8089,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>onConfigurationChange</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8690">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8698">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
object when the <code>Configuration</code> object is reloaded from disk.</div>
<dl>
@@ -8104,7 +8104,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>registerChildren</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8698">registerChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> manager)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8706">registerChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> manager)</pre>
<div class="block">Needs to be called to register the children to the manager.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -8120,7 +8120,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>deregisterChildren</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8707">deregisterChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> manager)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8715">deregisterChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> manager)</pre>
<div class="block">Needs to be called to deregister the children from the manager.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -8136,7 +8136,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getCellComparator</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8712">getCellComparator</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8720">getCellComparator</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCellComparator--">Region</a></code></span></div>
<div class="block">The comparator to be used with the region</div>
<dl>
@@ -8151,7 +8151,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getMemStoreFlushSize</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8717">getMemStoreFlushSize</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8725">getMemStoreFlushSize</a>()</pre>
</li>
</ul>
<a name="throwException-java.lang.String-java.lang.String-">
@@ -8160,7 +8160,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>throwException</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8723">throwException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> title,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8731">throwException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> title,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regionName)</pre>
</li>
</ul>
@@ -8170,7 +8170,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>requestCompaction</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8744">requestCompaction</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> why,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8752">requestCompaction</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> why,
int priority,
boolean major,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionLifeCycleTracker</a> tracker)
@@ -8191,7 +8191,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>requestCompaction</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8754">requestCompaction</a>(byte[] family,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8762">requestCompaction</a>(byte[] family,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> why,
int priority,
boolean major,
@@ -8213,7 +8213,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>requestFlushIfNeeded</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8768">requestFlushIfNeeded</a>()
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8776">requestFlushIfNeeded</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -8227,7 +8227,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>requestFlush</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8774">requestFlush</a>()</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8782">requestFlush</a>()</pre>
</li>
</ul>
<a name="requestFlush0-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">
@@ -8236,7 +8236,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>requestFlush0</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8781">requestFlush0</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> tracker)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8789">requestFlush0</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> tracker)</pre>
</li>
</ul>
<a name="requestFlush-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">
@@ -8245,7 +8245,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>requestFlush</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8801">requestFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> tracker)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8809">requestFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> tracker)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#requestFlush-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">Region</a></code></span></div>
<div class="block">Request flush on this region.</div>
@@ -8263,7 +8263,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockListLast">
<li class="blockList">
<h4>decorateRegionConfiguration</h4>
-<pre>static void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8810">decorateRegionConfiguration</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>static void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8818">decorateRegionConfiguration</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">This method modifies the region's configuration in order to inject replication-related
features</div>
<dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html b/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html
index 3efca49..bf1cd73 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.951">LoadIncrementalHFiles.BulkHFileVisitor</a><TFamily></pre>
+<pre>private static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.954">LoadIncrementalHFiles.BulkHFileVisitor</a><TFamily></pre>
</li>
</ul>
</div>
@@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>bulkFamily</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="type parameter in LoadIncrementalHFiles.BulkHFileVisitor">TFamily</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html#line.953">bulkFamily</a>(byte[] familyName)
+<pre><a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="type parameter in LoadIncrementalHFiles.BulkHFileVisitor">TFamily</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html#line.956">bulkFamily</a>(byte[] familyName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -170,7 +170,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockListLast">
<li class="blockList">
<h4>bulkHFile</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html#line.955">bulkHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="type parameter in LoadIncrementalHFiles.BulkHFileVisitor">TFamily</a> family,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html#line.958">bulkHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="type parameter in LoadIncrementalHFiles.BulkHFileVisitor">TFamily</a> family,
org.apache.hadoop.fs.FileStatus hfileStatus)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html b/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html
index 8305f2b..84dca02 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html
@@ -957,7 +957,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>prepareHFileQueue</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.204">prepareHFileQueue</a>(org.apache.hadoop.fs.Path hfilesDir,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.207">prepareHFileQueue</a>(org.apache.hadoop.fs.Path hfilesDir,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
boolean validateHFile)
@@ -983,7 +983,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>prepareHFileQueue</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.220">prepareHFileQueue</a>(org.apache.hadoop.fs.Path hfilesDir,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.223">prepareHFileQueue</a>(org.apache.hadoop.fs.Path hfilesDir,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
boolean validateHFile,
@@ -1011,7 +1011,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>prepareHFileQueue</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.236">prepareHFileQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.fs.Path>> map,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.239">prepareHFileQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.fs.Path>> map,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
boolean silence)
@@ -1037,7 +1037,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>doBulkLoad</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> regionLocator)
@@ -1065,7 +1065,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>doBulkLoad</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> regionLocator,
@@ -1096,7 +1096,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>doBulkLoad</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> regionLocator,
@@ -1128,7 +1128,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>loadHFileQueue</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.358">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.361">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><byte[][],byte[][]> startEndKeys)
@@ -1157,7 +1157,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>loadHFileQueue</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.375">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.378">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><byte[][],byte[][]> startEndKeys,
@@ -1187,7 +1187,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>performBulkLoad</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nb [...]
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nb [...]
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> regionLocator,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
@@ -1208,7 +1208,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>bulkLoadPhase</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.449">bulkLoadPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.452">bulkLoadPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> pool,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
@@ -1233,7 +1233,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>buildClientServiceCallable</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/client/ClientServiceCallable.html" title="class in org.apache.hadoop.hbase.client">ClientServiceCallable</a><byte[]> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.508">buildClientServiceCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/client/ClientServiceCallable.html" title="class in org.apache.hadoop.hbase.client">ClientServiceCallable</a><byte[]> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.511">buildClientServiceCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> conn,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] first,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> lqis,
@@ -1247,7 +1247,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>checkHFilesCountPerRegionPerFamily</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.567">checkHFilesCountPerRegionPerFamily</a>(org.apache.hbase.thirdparty.com.google.common.collect.Multimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class i [...]
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.570">checkHFilesCountPerRegionPerFamily</a>(org.apache.hbase.thirdparty.com.google.common.collect.Multimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class i [...]
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1257,7 +1257,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>groupOrSplitPhase</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hbase.thirdparty.com.google.common.collect.Multimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.too [...]
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hbase.thirdparty.com.google.common.collect.Multimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.too [...]
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> pool,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><byte[][],byte[][]> startEndKeys)
@@ -1282,7 +1282,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>splitStoreFile</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.647">splitStoreFile</a>(<a href="../../../../../o [...]
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.650">splitStoreFile</a>(<a href="../../../../../o [...]
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
byte[] startKey,
byte[] splitKey)
@@ -1300,7 +1300,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>groupOrSplit</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>>,<a href="https://docs.or [...]
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>>,<a href="https://docs.or [...]
<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a> item,
<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><byte[][],byte[][]> startEndKeys)
@@ -1323,7 +1323,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>tryAtomicRegionLoad</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.778">tryAtomicRegionLoad</a>(<a href="../../../ [...]
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.781">tryAtomicRegionLoad</a>(<a href="../../../ [...]
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] first,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> lqis)
@@ -1350,7 +1350,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.820">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.823">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
org.apache.hadoop.fs.Path hfofDir,
<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1369,7 +1369,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>cleanup</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.873">cleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.876">cleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> pool,
<a href="../../../../../org/apache/hadoop/hbase/client/SecureBulkLoadClient.html" title="class in org.apache.hadoop.hbase.client">SecureBulkLoadClient</a> secureClient)
@@ -1387,7 +1387,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>getUniqueName</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.895">getUniqueName</a>()</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.898">getUniqueName</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1397,7 +1397,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>validateFamiliesInHFiles</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.902">validateFamiliesInHFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.905">validateFamiliesInHFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> queue,
boolean silence)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1415,7 +1415,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>populateLoadQueue</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.923">populateLoadQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> ret,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.926">populateLoadQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> ret,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.fs.Path>> map)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Populate the Queue with given HFiles</div>
@@ -1427,7 +1427,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>discoverLoadQueue</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.930">discoverLoadQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> ret,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.933">discoverLoadQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>> ret,
org.apache.hadoop.fs.Path hfofDir,
boolean validateHFile)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1445,7 +1445,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>visitBulkHFiles</h4>
-<pre>private static <TFamily> void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.962">visitBulkHFiles</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>private static <TFamily> void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.965">visitBulkHFiles</a>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path bulkDir,
<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="interface in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.BulkHFileVisitor</a><TFamily> visitor)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1464,7 +1464,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>visitBulkHFiles</h4>
-<pre>private static <TFamily> void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.972">visitBulkHFiles</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>private static <TFamily> void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.975">visitBulkHFiles</a>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path bulkDir,
<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.BulkHFileVisitor.html" title="interface in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.BulkHFileVisitor</a><TFamily> visitor,
boolean validateHFile)
@@ -1485,7 +1485,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>createExecutorService</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1032">createExecutorService</a>()</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1035">createExecutorService</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1495,7 +1495,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1040">toString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" tit [...]
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1043">toString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" tit [...]
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1505,7 +1505,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>splitStoreFile</h4>
-<pre>static void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1056">splitStoreFile</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>static void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1059">splitStoreFile</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.fs.Path inFile,
<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> familyDesc,
byte[] splitKey,
@@ -1527,7 +1527,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>copyHFileHalf</h4>
-<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1069">copyHFileHalf</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1072">copyHFileHalf</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.fs.Path inFile,
org.apache.hadoop.fs.Path outFile,
<a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a> reference,
@@ -1547,7 +1547,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>shouldCopyHFileMetaKey</h4>
-<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1116">shouldCopyHFileMetaKey</a>(byte[] key)</pre>
+<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1119">shouldCopyHFileMetaKey</a>(byte[] key)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1557,7 +1557,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>isCreateTable</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1125">isCreateTable</a>()</pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1128">isCreateTable</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1567,7 +1567,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>isSilence</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1129">isSilence</a>()</pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1132">isSilence</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1577,7 +1577,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>isAlwaysCopyFiles</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1133">isAlwaysCopyFiles</a>()</pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1136">isAlwaysCopyFiles</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -1587,7 +1587,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>protected final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a [...]
+<pre>protected final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a [...]
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -1603,7 +1603,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -1624,7 +1624,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles.LoadQueueItem</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>>&nbs [...]
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -1644,7 +1644,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1190">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1193">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -1661,7 +1661,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>main</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1220">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1223">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -1676,7 +1676,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockList">
<li class="blockList">
<h4>setBulkToken</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1235">setBulkToken</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> stagingDir)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1238">setBulkToken</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> stagingDir)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Called from replication sink, where it manages bulkToken(staging directory) by itself. This is
used only when SecureBulkLoadEndpoint is configured in hbase.coprocessor.region.classes
@@ -1696,7 +1696,7 @@ public static final <a href="https://docs.oracle.com/javase/8/docs/api/java
<ul class="blockListLast">
<li class="blockList">
<h4>inferBoundaries</h4>
-<pre>public static byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1261">inferBoundaries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> bdryMap)</pre>
+<pre>public static byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html#line.1264">inferBoundaries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a><byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> bdryMap)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Infers region boundaries for a new table.
<p>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 958de4c..5ae33c3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
<span class="sourceLineNo">010</span> public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
<span class="sourceLineNo">011</span> public static final String revision = "Unknown";<a name="line.11"></a>
<span class="sourceLineNo">012</span> public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span> public static final String date = "Thu May 9 14:34:22 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Fri May 10 14:35:25 UTC 2019";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "file:///home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "c18fda633f54e3abe90058f4f17bf36d";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "d3207878b048e8c902e2a3e9162791f0";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
index 462c776..0384df4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
@@ -8109,723 +8109,731 @@
<span class="sourceLineNo">8101</span> break;<a name="line.8101"></a>
<span class="sourceLineNo">8102</span> default: throw new UnsupportedOperationException(op.toString());<a name="line.8102"></a>
<span class="sourceLineNo">8103</span> }<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span><a name="line.8104"></a>
-<span class="sourceLineNo">8105</span> cellPairs.add(new Pair<>(currentValue, newCell));<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span> // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span> if (results != null) {<a name="line.8107"></a>
-<span class="sourceLineNo">8108</span> results.add(newCell);<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span> }<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span> }<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span><a name="line.8111"></a>
-<span class="sourceLineNo">8112</span> // Give coprocessors a chance to update the new cells before apply to WAL or memstore<a name="line.8112"></a>
-<span class="sourceLineNo">8113</span> if (coprocessorHost != null) {<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span> // Here the operation must be increment or append.<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span> cellPairs = op == Operation.INCREMENT ?<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span> coprocessorHost.postIncrementBeforeWAL(mutation, cellPairs) :<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span> coprocessorHost.postAppendBeforeWAL(mutation, cellPairs);<a name="line.8117"></a>
+<span class="sourceLineNo">8104</span> int newCellSize = PrivateCellUtil.estimatedSerializedSizeOf(newCell);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span> if (newCellSize > this.maxCellSize) {<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span> String msg = "Cell with size " + newCellSize + " exceeds limit of " +<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span> this.maxCellSize + " bytes";<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span> if (LOG.isDebugEnabled()) {<a name="line.8108"></a>
+<span class="sourceLineNo">8109</span> LOG.debug(msg);<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span> }<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span> throw new DoNotRetryIOException(msg);<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span> }<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span> cellPairs.add(new Pair<>(currentValue, newCell));<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span> // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span> if (results != null) {<a name="line.8115"></a>
+<span class="sourceLineNo">8116</span> results.add(newCell);<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span> }<a name="line.8117"></a>
<span class="sourceLineNo">8118</span> }<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span> return cellPairs.stream().map(Pair::getSecond).collect(Collectors.toList());<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span> }<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span><a name="line.8121"></a>
-<span class="sourceLineNo">8122</span> private static Cell reckonDelta(final Cell delta, final Cell currentCell,<a name="line.8122"></a>
-<span class="sourceLineNo">8123</span> final byte[] columnFamily, final long now,<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span> Mutation mutation, Function<Cell, byte[]> supplier) throws IOException {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span> // Forward any tags found on the delta.<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span> List<Tag> tags = TagUtil.carryForwardTags(delta);<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span> tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span> if (currentCell != null) {<a name="line.8128"></a>
-<span class="sourceLineNo">8129</span> tags = TagUtil.carryForwardTags(tags, currentCell);<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span> byte[] newValue = supplier.apply(currentCell);<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span> return ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span> .setRow(mutation.getRow(), 0, mutation.getRow().length)<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span> .setFamily(columnFamily, 0, columnFamily.length)<a name="line.8133"></a>
-<span class="sourceLineNo">8134</span> // copy the qualifier if the cell is located in shared memory.<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span> .setQualifier(CellUtil.cloneQualifier(delta))<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span> .setTimestamp(Math.max(currentCell.getTimestamp() + 1, now))<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span> .setType(KeyValue.Type.Put.getCode())<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span> .setValue(newValue, 0, newValue.length)<a name="line.8138"></a>
-<span class="sourceLineNo">8139</span> .setTags(TagUtil.fromList(tags))<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span> .build();<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span> } else {<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span> PrivateCellUtil.updateLatestStamp(delta, now);<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span> return CollectionUtils.isEmpty(tags) ? delta : PrivateCellUtil.createCell(delta, tags);<a name="line.8143"></a>
-<span class="sourceLineNo">8144</span> }<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span> }<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span><a name="line.8146"></a>
-<span class="sourceLineNo">8147</span> /**<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span> * @return Get the long out of the passed in Cell<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span> */<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span> private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.8150"></a>
-<span class="sourceLineNo">8151</span> int len = cell.getValueLength();<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span> if (len != Bytes.SIZEOF_LONG) {<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span> // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span> throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.8154"></a>
-<span class="sourceLineNo">8155</span> }<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span> return PrivateCellUtil.getValueAsLong(cell);<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span> }<a name="line.8157"></a>
-<span class="sourceLineNo">8158</span><a name="line.8158"></a>
-<span class="sourceLineNo">8159</span> /**<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span> * Do a specific Get on passed <code>columnFamily</code> and column qualifiers.<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span> * @param mutation Mutation we are doing this Get for.<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span> * @param store Which column family on row (TODO: Go all Gets in one go)<a name="line.8162"></a>
-<span class="sourceLineNo">8163</span> * @param coordinates Cells from <code>mutation</code> used as coordinates applied to Get.<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span> * @return Return list of Cells found.<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span> */<a name="line.8165"></a>
-<span class="sourceLineNo">8166</span> private List<Cell> get(Mutation mutation, HStore store, List<Cell> coordinates,<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span> IsolationLevel isolation, TimeRange tr) throws IOException {<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span> // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span> // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.8169"></a>
-<span class="sourceLineNo">8170</span> // client since cells are in an array list.<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span> // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span> sort(coordinates, store.getComparator());<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span> Get get = new Get(mutation.getRow());<a name="line.8173"></a>
-<span class="sourceLineNo">8174</span> if (isolation != null) {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span> get.setIsolationLevel(isolation);<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span> }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span> for (Cell cell: coordinates) {<a name="line.8177"></a>
-<span class="sourceLineNo">8178</span> get.addColumn(store.getColumnFamilyDescriptor().getName(), CellUtil.cloneQualifier(cell));<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span> }<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span> // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span> if (tr != null) {<a name="line.8181"></a>
-<span class="sourceLineNo">8182</span> get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span> }<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span> return get(get, false);<a name="line.8184"></a>
-<span class="sourceLineNo">8185</span> }<a name="line.8185"></a>
-<span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span> /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span> * @return Sorted list of <code>cells</code> using <code>comparator</code><a name="line.8188"></a>
-<span class="sourceLineNo">8189</span> */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span> private static List<Cell> sort(List<Cell> cells, final CellComparator comparator) {<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span> cells.sort(comparator);<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span> return cells;<a name="line.8192"></a>
+<span class="sourceLineNo">8119</span><a name="line.8119"></a>
+<span class="sourceLineNo">8120</span> // Give coprocessors a chance to update the new cells before apply to WAL or memstore<a name="line.8120"></a>
+<span class="sourceLineNo">8121</span> if (coprocessorHost != null) {<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span> // Here the operation must be increment or append.<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span> cellPairs = op == Operation.INCREMENT ?<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span> coprocessorHost.postIncrementBeforeWAL(mutation, cellPairs) :<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span> coprocessorHost.postAppendBeforeWAL(mutation, cellPairs);<a name="line.8125"></a>
+<span class="sourceLineNo">8126</span> }<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span> return cellPairs.stream().map(Pair::getSecond).collect(Collectors.toList());<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span> }<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span><a name="line.8129"></a>
+<span class="sourceLineNo">8130</span> private static Cell reckonDelta(final Cell delta, final Cell currentCell,<a name="line.8130"></a>
+<span class="sourceLineNo">8131</span> final byte[] columnFamily, final long now,<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span> Mutation mutation, Function<Cell, byte[]> supplier) throws IOException {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span> // Forward any tags found on the delta.<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span> List<Tag> tags = TagUtil.carryForwardTags(delta);<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span> tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.8135"></a>
+<span class="sourceLineNo">8136</span> if (currentCell != null) {<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span> tags = TagUtil.carryForwardTags(tags, currentCell);<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span> byte[] newValue = supplier.apply(currentCell);<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span> return ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span> .setRow(mutation.getRow(), 0, mutation.getRow().length)<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span> .setFamily(columnFamily, 0, columnFamily.length)<a name="line.8141"></a>
+<span class="sourceLineNo">8142</span> // copy the qualifier if the cell is located in shared memory.<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span> .setQualifier(CellUtil.cloneQualifier(delta))<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span> .setTimestamp(Math.max(currentCell.getTimestamp() + 1, now))<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span> .setType(KeyValue.Type.Put.getCode())<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span> .setValue(newValue, 0, newValue.length)<a name="line.8146"></a>
+<span class="sourceLineNo">8147</span> .setTags(TagUtil.fromList(tags))<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span> .build();<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span> } else {<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span> PrivateCellUtil.updateLatestStamp(delta, now);<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span> return CollectionUtils.isEmpty(tags) ? delta : PrivateCellUtil.createCell(delta, tags);<a name="line.8151"></a>
+<span class="sourceLineNo">8152</span> }<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span> }<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span><a name="line.8154"></a>
+<span class="sourceLineNo">8155</span> /**<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span> * @return Get the long out of the passed in Cell<a name="line.8156"></a>
+<span class="sourceLineNo">8157</span> */<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span> private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span> int len = cell.getValueLength();<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span> if (len != Bytes.SIZEOF_LONG) {<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span> // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span> throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span> }<a name="line.8163"></a>
+<span class="sourceLineNo">8164</span> return PrivateCellUtil.getValueAsLong(cell);<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span> }<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span><a name="line.8166"></a>
+<span class="sourceLineNo">8167</span> /**<a name="line.8167"></a>
+<span class="sourceLineNo">8168</span> * Do a specific Get on passed <code>columnFamily</code> and column qualifiers.<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span> * @param mutation Mutation we are doing this Get for.<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span> * @param store Which column family on row (TODO: Go all Gets in one go)<a name="line.8170"></a>
+<span class="sourceLineNo">8171</span> * @param coordinates Cells from <code>mutation</code> used as coordinates applied to Get.<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span> * @return Return list of Cells found.<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span> */<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span> private List<Cell> get(Mutation mutation, HStore store, List<Cell> coordinates,<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span> IsolationLevel isolation, TimeRange tr) throws IOException {<a name="line.8175"></a>
+<span class="sourceLineNo">8176</span> // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span> // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span> // client since cells are in an array list.<a name="line.8178"></a>
+<span class="sourceLineNo">8179</span> // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span> sort(coordinates, store.getComparator());<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span> Get get = new Get(mutation.getRow());<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span> if (isolation != null) {<a name="line.8182"></a>
+<span class="sourceLineNo">8183</span> get.setIsolationLevel(isolation);<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span> }<a name="line.8184"></a>
+<span class="sourceLineNo">8185</span> for (Cell cell: coordinates) {<a name="line.8185"></a>
+<span class="sourceLineNo">8186</span> get.addColumn(store.getColumnFamilyDescriptor().getName(), CellUtil.cloneQualifier(cell));<a name="line.8186"></a>
+<span class="sourceLineNo">8187</span> }<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span> // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span> if (tr != null) {<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span> get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.8190"></a>
+<span class="sourceLineNo">8191</span> }<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span> return get(get, false);<a name="line.8192"></a>
<span class="sourceLineNo">8193</span> }<a name="line.8193"></a>
<span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span> public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span> ClassSize.OBJECT +<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span> ClassSize.ARRAY +<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span> 55 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT +<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span> (15 * Bytes.SIZEOF_LONG) +<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span> 3 * Bytes.SIZEOF_BOOLEAN);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span><a name="line.8201"></a>
-<span class="sourceLineNo">8202</span> // woefully out of date - currently missing:<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span> // 1 x HashMap - coprocessorServiceHandlers<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span> // 6 x LongAdder - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span> // checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.8205"></a>
-<span class="sourceLineNo">8206</span> // writeRequestsCount, cpRequestsCount<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span> // 1 x HRegion$WriteState - writestate<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span> // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span> // 1 x RegionSplitPolicy - splitPolicy<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span> // 1 x MetricsRegion - metricsRegion<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span> // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span> public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span> ClassSize.OBJECT + // closeLock<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span> (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span> (3 * ClassSize.ATOMIC_LONG) + // numPutsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8215"></a>
-<span class="sourceLineNo">8216</span> // compactionsFailed<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span> (2 * ClassSize.CONCURRENT_HASHMAP) + // lockedRows, scannerReadPoints<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span> WriteState.HEAP_SIZE + // writestate<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span> ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span> (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span> MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.8221"></a>
-<span class="sourceLineNo">8222</span> + 2 * ClassSize.TREEMAP // maxSeqIdInStores, replicationScopes<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span> + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span> + ClassSize.STORE_SERVICES // store services<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span> + StoreHotnessProtector.FIXED_SIZE<a name="line.8225"></a>
-<span class="sourceLineNo">8226</span> ;<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span><a name="line.8227"></a>
-<span class="sourceLineNo">8228</span> @Override<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span> public long heapSize() {<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span> // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span> return DEEP_OVERHEAD + stores.values().stream().mapToLong(HStore::heapSize).sum();<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span> }<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span><a name="line.8233"></a>
-<span class="sourceLineNo">8234</span> /**<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span> * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span> * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span> * org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span> *<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span> * <p><a name="line.8239"></a>
-<span class="sourceLineNo">8240</span> * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span> * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span> * After the first registration, subsequent calls with the same service name will fail with<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span> * a return value of {@code false}.<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span> * </p><a name="line.8244"></a>
-<span class="sourceLineNo">8245</span> * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span> * @return {@code true} if the registration was successful, {@code false}<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span> * otherwise<a name="line.8247"></a>
-<span class="sourceLineNo">8248</span> */<a name="line.8248"></a>
-<span class="sourceLineNo">8249</span> public boolean registerService(com.google.protobuf.Service instance) {<a name="line.8249"></a>
-<span class="sourceLineNo">8250</span> /*<a name="line.8250"></a>
-<span class="sourceLineNo">8251</span> * No stacking of instances is allowed for a single service name<a name="line.8251"></a>
-<span class="sourceLineNo">8252</span> */<a name="line.8252"></a>
-<span class="sourceLineNo">8253</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.8253"></a>
-<span class="sourceLineNo">8254</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.8254"></a>
-<span class="sourceLineNo">8255</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.8255"></a>
-<span class="sourceLineNo">8256</span> LOG.error("Coprocessor service " + serviceName +<a name="line.8256"></a>
-<span class="sourceLineNo">8257</span> " already registered, rejecting request from " + instance);<a name="line.8257"></a>
-<span class="sourceLineNo">8258</span> return false;<a name="line.8258"></a>
-<span class="sourceLineNo">8259</span> }<a name="line.8259"></a>
-<span class="sourceLineNo">8260</span><a name="line.8260"></a>
-<span class="sourceLineNo">8261</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.8261"></a>
-<span class="sourceLineNo">8262</span> if (LOG.isDebugEnabled()) {<a name="line.8262"></a>
-<span class="sourceLineNo">8263</span> LOG.debug("Registered coprocessor service: region=" +<a name="line.8263"></a>
-<span class="sourceLineNo">8264</span> Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.8264"></a>
-<span class="sourceLineNo">8265</span> " service=" + serviceName);<a name="line.8265"></a>
-<span class="sourceLineNo">8266</span> }<a name="line.8266"></a>
-<span class="sourceLineNo">8267</span> return true;<a name="line.8267"></a>
-<span class="sourceLineNo">8268</span> }<a name="line.8268"></a>
-<span class="sourceLineNo">8269</span><a name="line.8269"></a>
-<span class="sourceLineNo">8270</span> /**<a name="line.8270"></a>
-<span class="sourceLineNo">8271</span> * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.8271"></a>
-<span class="sourceLineNo">8272</span> * the registered protocol handlers. {@link Service} implementations must be registered via the<a name="line.8272"></a>
-<span class="sourceLineNo">8273</span> * {@link #registerService(com.google.protobuf.Service)}<a name="line.8273"></a>
-<span class="sourceLineNo">8274</span> * method before they are available.<a name="line.8274"></a>
-<span class="sourceLineNo">8275</span> *<a name="line.8275"></a>
-<span class="sourceLineNo">8276</span> * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.8276"></a>
-<span class="sourceLineNo">8277</span> * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.8277"></a>
-<span class="sourceLineNo">8278</span> * and parameters for the method invocation<a name="line.8278"></a>
-<span class="sourceLineNo">8279</span> * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.8279"></a>
-<span class="sourceLineNo">8280</span> * @throws IOException if no registered service handler is found or an error<a name="line.8280"></a>
-<span class="sourceLineNo">8281</span> * occurs during the invocation<a name="line.8281"></a>
-<span class="sourceLineNo">8282</span> * @see #registerService(com.google.protobuf.Service)<a name="line.8282"></a>
-<span class="sourceLineNo">8283</span> */<a name="line.8283"></a>
-<span class="sourceLineNo">8284</span> public com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.8284"></a>
-<span class="sourceLineNo">8285</span> CoprocessorServiceCall call) throws IOException {<a name="line.8285"></a>
-<span class="sourceLineNo">8286</span> String serviceName = call.getServiceName();<a name="line.8286"></a>
-<span class="sourceLineNo">8287</span> com.google.protobuf.Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.8287"></a>
-<span class="sourceLineNo">8288</span> if (service == null) {<a name="line.8288"></a>
-<span class="sourceLineNo">8289</span> throw new UnknownProtocolException(null, "No registered coprocessor service found for " +<a name="line.8289"></a>
-<span class="sourceLineNo">8290</span> serviceName + " in region " + Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.8290"></a>
-<span class="sourceLineNo">8291</span> }<a name="line.8291"></a>
-<span class="sourceLineNo">8292</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.8292"></a>
-<span class="sourceLineNo">8293</span><a name="line.8293"></a>
-<span class="sourceLineNo">8294</span> cpRequestsCount.increment();<a name="line.8294"></a>
-<span class="sourceLineNo">8295</span> String methodName = call.getMethodName();<a name="line.8295"></a>
-<span class="sourceLineNo">8296</span> com.google.protobuf.Descriptors.MethodDescriptor methodDesc =<a name="line.8296"></a>
-<span class="sourceLineNo">8297</span> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);<a name="line.8297"></a>
-<span class="sourceLineNo">8298</span><a name="line.8298"></a>
-<span class="sourceLineNo">8299</span> com.google.protobuf.Message.Builder builder =<a name="line.8299"></a>
-<span class="sourceLineNo">8300</span> service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.8300"></a>
+<span class="sourceLineNo">8195</span> /**<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span> * @return Sorted list of <code>cells</code> using <code>comparator</code><a name="line.8196"></a>
+<span class="sourceLineNo">8197</span> */<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span> private static List<Cell> sort(List<Cell> cells, final CellComparator comparator) {<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span> cells.sort(comparator);<a name="line.8199"></a>
+<span class="sourceLineNo">8200</span> return cells;<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span> }<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span><a name="line.8202"></a>
+<span class="sourceLineNo">8203</span> public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span> ClassSize.OBJECT +<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span> ClassSize.ARRAY +<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span> 55 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT +<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span> (15 * Bytes.SIZEOF_LONG) +<a name="line.8207"></a>
+<span class="sourceLineNo">8208</span> 3 * Bytes.SIZEOF_BOOLEAN);<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span><a name="line.8209"></a>
+<span class="sourceLineNo">8210</span> // woefully out of date - currently missing:<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span> // 1 x HashMap - coprocessorServiceHandlers<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span> // 6 x LongAdder - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span> // checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span> // writeRequestsCount, cpRequestsCount<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span> // 1 x HRegion$WriteState - writestate<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span> // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span> // 1 x RegionSplitPolicy - splitPolicy<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span> // 1 x MetricsRegion - metricsRegion<a name="line.8218"></a>
+<span class="sourceLineNo">8219</span> // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span> public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span> ClassSize.OBJECT + // closeLock<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span> (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span> (3 * ClassSize.ATOMIC_LONG) + // numPutsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span> // compactionsFailed<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span> (2 * ClassSize.CONCURRENT_HASHMAP) + // lockedRows, scannerReadPoints<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span> WriteState.HEAP_SIZE + // writestate<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span> ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span> (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.8228"></a>
+<span class="sourceLineNo">8229</span> MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span> + 2 * ClassSize.TREEMAP // maxSeqIdInStores, replicationScopes<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span> + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span> + ClassSize.STORE_SERVICES // store services<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span> + StoreHotnessProtector.FIXED_SIZE<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span> ;<a name="line.8234"></a>
+<span class="sourceLineNo">8235</span><a name="line.8235"></a>
+<span class="sourceLineNo">8236</span> @Override<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span> public long heapSize() {<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span> // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.8238"></a>
+<span class="sourceLineNo">8239</span> return DEEP_OVERHEAD + stores.values().stream().mapToLong(HStore::heapSize).sum();<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span> }<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span><a name="line.8241"></a>
+<span class="sourceLineNo">8242</span> /**<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span> * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span> * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span> * org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span> *<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span> * <p><a name="line.8247"></a>
+<span class="sourceLineNo">8248</span> * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span> * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span> * After the first registration, subsequent calls with the same service name will fail with<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span> * a return value of {@code false}.<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span> * </p><a name="line.8252"></a>
+<span class="sourceLineNo">8253</span> * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span> * @return {@code true} if the registration was successful, {@code false}<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span> * otherwise<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span> */<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span> public boolean registerService(com.google.protobuf.Service instance) {<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span> /*<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span> * No stacking of instances is allowed for a single service name<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span> */<a name="line.8260"></a>
+<span class="sourceLineNo">8261</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.8261"></a>
+<span class="sourceLineNo">8262</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.8262"></a>
+<span class="sourceLineNo">8263</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.8263"></a>
+<span class="sourceLineNo">8264</span> LOG.error("Coprocessor service " + serviceName +<a name="line.8264"></a>
+<span class="sourceLineNo">8265</span> " already registered, rejecting request from " + instance);<a name="line.8265"></a>
+<span class="sourceLineNo">8266</span> return false;<a name="line.8266"></a>
+<span class="sourceLineNo">8267</span> }<a name="line.8267"></a>
+<span class="sourceLineNo">8268</span><a name="line.8268"></a>
+<span class="sourceLineNo">8269</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.8269"></a>
+<span class="sourceLineNo">8270</span> if (LOG.isDebugEnabled()) {<a name="line.8270"></a>
+<span class="sourceLineNo">8271</span> LOG.debug("Registered coprocessor service: region=" +<a name="line.8271"></a>
+<span class="sourceLineNo">8272</span> Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.8272"></a>
+<span class="sourceLineNo">8273</span> " service=" + serviceName);<a name="line.8273"></a>
+<span class="sourceLineNo">8274</span> }<a name="line.8274"></a>
+<span class="sourceLineNo">8275</span> return true;<a name="line.8275"></a>
+<span class="sourceLineNo">8276</span> }<a name="line.8276"></a>
+<span class="sourceLineNo">8277</span><a name="line.8277"></a>
+<span class="sourceLineNo">8278</span> /**<a name="line.8278"></a>
+<span class="sourceLineNo">8279</span> * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.8279"></a>
+<span class="sourceLineNo">8280</span> * the registered protocol handlers. {@link Service} implementations must be registered via the<a name="line.8280"></a>
+<span class="sourceLineNo">8281</span> * {@link #registerService(com.google.protobuf.Service)}<a name="line.8281"></a>
+<span class="sourceLineNo">8282</span> * method before they are available.<a name="line.8282"></a>
+<span class="sourceLineNo">8283</span> *<a name="line.8283"></a>
+<span class="sourceLineNo">8284</span> * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.8284"></a>
+<span class="sourceLineNo">8285</span> * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.8285"></a>
+<span class="sourceLineNo">8286</span> * and parameters for the method invocation<a name="line.8286"></a>
+<span class="sourceLineNo">8287</span> * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.8287"></a>
+<span class="sourceLineNo">8288</span> * @throws IOException if no registered service handler is found or an error<a name="line.8288"></a>
+<span class="sourceLineNo">8289</span> * occurs during the invocation<a name="line.8289"></a>
+<span class="sourceLineNo">8290</span> * @see #registerService(com.google.protobuf.Service)<a name="line.8290"></a>
+<span class="sourceLineNo">8291</span> */<a name="line.8291"></a>
+<span class="sourceLineNo">8292</span> public com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.8292"></a>
+<span class="sourceLineNo">8293</span> CoprocessorServiceCall call) throws IOException {<a name="line.8293"></a>
+<span class="sourceLineNo">8294</span> String serviceName = call.getServiceName();<a name="line.8294"></a>
+<span class="sourceLineNo">8295</span> com.google.protobuf.Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.8295"></a>
+<span class="sourceLineNo">8296</span> if (service == null) {<a name="line.8296"></a>
+<span class="sourceLineNo">8297</span> throw new UnknownProtocolException(null, "No registered coprocessor service found for " +<a name="line.8297"></a>
+<span class="sourceLineNo">8298</span> serviceName + " in region " + Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.8298"></a>
+<span class="sourceLineNo">8299</span> }<a name="line.8299"></a>
+<span class="sourceLineNo">8300</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.8300"></a>
<span class="sourceLineNo">8301</span><a name="line.8301"></a>
-<span class="sourceLineNo">8302</span> org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(builder,<a name="line.8302"></a>
-<span class="sourceLineNo">8303</span> call.getRequest().toByteArray());<a name="line.8303"></a>
-<span class="sourceLineNo">8304</span> com.google.protobuf.Message request =<a name="line.8304"></a>
-<span class="sourceLineNo">8305</span> CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.8305"></a>
+<span class="sourceLineNo">8302</span> cpRequestsCount.increment();<a name="line.8302"></a>
+<span class="sourceLineNo">8303</span> String methodName = call.getMethodName();<a name="line.8303"></a>
+<span class="sourceLineNo">8304</span> com.google.protobuf.Descriptors.MethodDescriptor methodDesc =<a name="line.8304"></a>
+<span class="sourceLineNo">8305</span> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);<a name="line.8305"></a>
<span class="sourceLineNo">8306</span><a name="line.8306"></a>
-<span class="sourceLineNo">8307</span> if (coprocessorHost != null) {<a name="line.8307"></a>
-<span class="sourceLineNo">8308</span> request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.8308"></a>
-<span class="sourceLineNo">8309</span> }<a name="line.8309"></a>
-<span class="sourceLineNo">8310</span><a name="line.8310"></a>
-<span class="sourceLineNo">8311</span> final com.google.protobuf.Message.Builder responseBuilder =<a name="line.8311"></a>
-<span class="sourceLineNo">8312</span> service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.8312"></a>
-<span class="sourceLineNo">8313</span> service.callMethod(methodDesc, controller, request,<a name="line.8313"></a>
-<span class="sourceLineNo">8314</span> new com.google.protobuf.RpcCallback<com.google.protobuf.Message>() {<a name="line.8314"></a>
-<span class="sourceLineNo">8315</span> @Override<a name="line.8315"></a>
-<span class="sourceLineNo">8316</span> public void run(com.google.protobuf.Message message) {<a name="line.8316"></a>
-<span class="sourceLineNo">8317</span> if (message != null) {<a name="line.8317"></a>
-<span class="sourceLineNo">8318</span> responseBuilder.mergeFrom(message);<a name="line.8318"></a>
-<span class="sourceLineNo">8319</span> }<a name="line.8319"></a>
-<span class="sourceLineNo">8320</span> }<a name="line.8320"></a>
-<span class="sourceLineNo">8321</span> });<a name="line.8321"></a>
-<span class="sourceLineNo">8322</span><a name="line.8322"></a>
-<span class="sourceLineNo">8323</span> if (coprocessorHost != null) {<a name="line.8323"></a>
-<span class="sourceLineNo">8324</span> coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.8324"></a>
-<span class="sourceLineNo">8325</span> }<a name="line.8325"></a>
-<span class="sourceLineNo">8326</span> IOException exception =<a name="line.8326"></a>
-<span class="sourceLineNo">8327</span> org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getControllerException(controller);<a name="line.8327"></a>
-<span class="sourceLineNo">8328</span> if (exception != null) {<a name="line.8328"></a>
-<span class="sourceLineNo">8329</span> throw exception;<a name="line.8329"></a>
-<span class="sourceLineNo">8330</span> }<a name="line.8330"></a>
-<span class="sourceLineNo">8331</span><a name="line.8331"></a>
-<span class="sourceLineNo">8332</span> return responseBuilder.build();<a name="line.8332"></a>
-<span class="sourceLineNo">8333</span> }<a name="line.8333"></a>
-<span class="sourceLineNo">8334</span><a name="line.8334"></a>
-<span class="sourceLineNo">8335</span> boolean shouldForceSplit() {<a name="line.8335"></a>
-<span class="sourceLineNo">8336</span> return this.splitRequest;<a name="line.8336"></a>
-<span class="sourceLineNo">8337</span> }<a name="line.8337"></a>
-<span class="sourceLineNo">8338</span><a name="line.8338"></a>
-<span class="sourceLineNo">8339</span> byte[] getExplicitSplitPoint() {<a name="line.8339"></a>
-<span class="sourceLineNo">8340</span> return this.explicitSplitPoint;<a name="line.8340"></a>
+<span class="sourceLineNo">8307</span> com.google.protobuf.Message.Builder builder =<a name="line.8307"></a>
+<span class="sourceLineNo">8308</span> service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.8308"></a>
+<span class="sourceLineNo">8309</span><a name="line.8309"></a>
+<span class="sourceLineNo">8310</span> org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(builder,<a name="line.8310"></a>
+<span class="sourceLineNo">8311</span> call.getRequest().toByteArray());<a name="line.8311"></a>
+<span class="sourceLineNo">8312</span> com.google.protobuf.Message request =<a name="line.8312"></a>
+<span class="sourceLineNo">8313</span> CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.8313"></a>
+<span class="sourceLineNo">8314</span><a name="line.8314"></a>
+<span class="sourceLineNo">8315</span> if (coprocessorHost != null) {<a name="line.8315"></a>
+<span class="sourceLineNo">8316</span> request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.8316"></a>
+<span class="sourceLineNo">8317</span> }<a name="line.8317"></a>
+<span class="sourceLineNo">8318</span><a name="line.8318"></a>
+<span class="sourceLineNo">8319</span> final com.google.protobuf.Message.Builder responseBuilder =<a name="line.8319"></a>
+<span class="sourceLineNo">8320</span> service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.8320"></a>
+<span class="sourceLineNo">8321</span> service.callMethod(methodDesc, controller, request,<a name="line.8321"></a>
+<span class="sourceLineNo">8322</span> new com.google.protobuf.RpcCallback<com.google.protobuf.Message>() {<a name="line.8322"></a>
+<span class="sourceLineNo">8323</span> @Override<a name="line.8323"></a>
+<span class="sourceLineNo">8324</span> public void run(com.google.protobuf.Message message) {<a name="line.8324"></a>
+<span class="sourceLineNo">8325</span> if (message != null) {<a name="line.8325"></a>
+<span class="sourceLineNo">8326</span> responseBuilder.mergeFrom(message);<a name="line.8326"></a>
+<span class="sourceLineNo">8327</span> }<a name="line.8327"></a>
+<span class="sourceLineNo">8328</span> }<a name="line.8328"></a>
+<span class="sourceLineNo">8329</span> });<a name="line.8329"></a>
+<span class="sourceLineNo">8330</span><a name="line.8330"></a>
+<span class="sourceLineNo">8331</span> if (coprocessorHost != null) {<a name="line.8331"></a>
+<span class="sourceLineNo">8332</span> coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.8332"></a>
+<span class="sourceLineNo">8333</span> }<a name="line.8333"></a>
+<span class="sourceLineNo">8334</span> IOException exception =<a name="line.8334"></a>
+<span class="sourceLineNo">8335</span> org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getControllerException(controller);<a name="line.8335"></a>
+<span class="sourceLineNo">8336</span> if (exception != null) {<a name="line.8336"></a>
+<span class="sourceLineNo">8337</span> throw exception;<a name="line.8337"></a>
+<span class="sourceLineNo">8338</span> }<a name="line.8338"></a>
+<span class="sourceLineNo">8339</span><a name="line.8339"></a>
+<span class="sourceLineNo">8340</span> return responseBuilder.build();<a name="line.8340"></a>
<span class="sourceLineNo">8341</span> }<a name="line.8341"></a>
<span class="sourceLineNo">8342</span><a name="line.8342"></a>
-<span class="sourceLineNo">8343</span> void forceSplit(byte[] sp) {<a name="line.8343"></a>
-<span class="sourceLineNo">8344</span> // This HRegion will go away after the forced split is successful<a name="line.8344"></a>
-<span class="sourceLineNo">8345</span> // But if a forced split fails, we need to clear forced split.<a name="line.8345"></a>
-<span class="sourceLineNo">8346</span> this.splitRequest = true;<a name="line.8346"></a>
-<span class="sourceLineNo">8347</span> if (sp != null) {<a name="line.8347"></a>
-<span class="sourceLineNo">8348</span> this.explicitSplitPoint = sp;<a name="line.8348"></a>
-<span class="sourceLineNo">8349</span> }<a name="line.8349"></a>
-<span class="sourceLineNo">8350</span> }<a name="line.8350"></a>
-<span class="sourceLineNo">8351</span><a name="line.8351"></a>
-<span class="sourceLineNo">8352</span> void clearSplit() {<a name="line.8352"></a>
-<span class="sourceLineNo">8353</span> this.splitRequest = false;<a name="line.8353"></a>
-<span class="sourceLineNo">8354</span> this.explicitSplitPoint = null;<a name="line.8354"></a>
-<span class="sourceLineNo">8355</span> }<a name="line.8355"></a>
-<span class="sourceLineNo">8356</span><a name="line.8356"></a>
-<span class="sourceLineNo">8357</span> /**<a name="line.8357"></a>
-<span class="sourceLineNo">8358</span> * Return the splitpoint. null indicates the region isn't splittable<a name="line.8358"></a>
-<span class="sourceLineNo">8359</span> * If the splitpoint isn't explicitly specified, it will go over the stores<a name="line.8359"></a>
-<span class="sourceLineNo">8360</span> * to find the best splitpoint. Currently the criteria of best splitpoint<a name="line.8360"></a>
-<span class="sourceLineNo">8361</span> * is based on the size of the store.<a name="line.8361"></a>
-<span class="sourceLineNo">8362</span> */<a name="line.8362"></a>
-<span class="sourceLineNo">8363</span> public byte[] checkSplit() {<a name="line.8363"></a>
-<span class="sourceLineNo">8364</span> // Can't split META<a name="line.8364"></a>
-<span class="sourceLineNo">8365</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8365"></a>
-<span class="sourceLineNo">8366</span> if (shouldForceSplit()) {<a name="line.8366"></a>
-<span class="sourceLineNo">8367</span> LOG.warn("Cannot split meta region in HBase 0.20 and above");<a name="line.8367"></a>
-<span class="sourceLineNo">8368</span> }<a name="line.8368"></a>
-<span class="sourceLineNo">8369</span> return null;<a name="line.8369"></a>
-<span class="sourceLineNo">8370</span> }<a name="line.8370"></a>
-<span class="sourceLineNo">8371</span><a name="line.8371"></a>
-<span class="sourceLineNo">8372</span> // Can't split a region that is closing.<a name="line.8372"></a>
-<span class="sourceLineNo">8373</span> if (this.isClosing()) {<a name="line.8373"></a>
-<span class="sourceLineNo">8374</span> return null;<a name="line.8374"></a>
-<span class="sourceLineNo">8375</span> }<a name="line.8375"></a>
-<span class="sourceLineNo">8376</span><a name="line.8376"></a>
-<span class="sourceLineNo">8377</span> if (!splitPolicy.shouldSplit()) {<a name="line.8377"></a>
-<span class="sourceLineNo">8378</span> return null;<a name="line.8378"></a>
-<span class="sourceLineNo">8379</span> }<a name="line.8379"></a>
-<span class="sourceLineNo">8380</span><a name="line.8380"></a>
-<span class="sourceLineNo">8381</span> byte[] ret = splitPolicy.getSplitPoint();<a name="line.8381"></a>
-<span class="sourceLineNo">8382</span><a name="line.8382"></a>
-<span class="sourceLineNo">8383</span> if (ret != null) {<a name="line.8383"></a>
-<span class="sourceLineNo">8384</span> try {<a name="line.8384"></a>
-<span class="sourceLineNo">8385</span> checkRow(ret, "calculated split");<a name="line.8385"></a>
-<span class="sourceLineNo">8386</span> } catch (IOException e) {<a name="line.8386"></a>
-<span class="sourceLineNo">8387</span> LOG.error("Ignoring invalid split", e);<a name="line.8387"></a>
-<span class="sourceLineNo">8388</span> return null;<a name="line.8388"></a>
-<span class="sourceLineNo">8389</span> }<a name="line.8389"></a>
-<span class="sourceLineNo">8390</span> }<a name="line.8390"></a>
-<span class="sourceLineNo">8391</span> return ret;<a name="line.8391"></a>
-<span class="sourceLineNo">8392</span> }<a name="line.8392"></a>
-<span class="sourceLineNo">8393</span><a name="line.8393"></a>
-<span class="sourceLineNo">8394</span> /**<a name="line.8394"></a>
-<span class="sourceLineNo">8395</span> * @return The priority that this region should have in the compaction queue<a name="line.8395"></a>
-<span class="sourceLineNo">8396</span> */<a name="line.8396"></a>
-<span class="sourceLineNo">8397</span> public int getCompactPriority() {<a name="line.8397"></a>
-<span class="sourceLineNo">8398</span> return stores.values().stream().mapToInt(HStore::getCompactPriority).min()<a name="line.8398"></a>
-<span class="sourceLineNo">8399</span> .orElse(Store.NO_PRIORITY);<a name="line.8399"></a>
+<span class="sourceLineNo">8343</span> boolean shouldForceSplit() {<a name="line.8343"></a>
+<span class="sourceLineNo">8344</span> return this.splitRequest;<a name="line.8344"></a>
+<span class="sourceLineNo">8345</span> }<a name="line.8345"></a>
+<span class="sourceLineNo">8346</span><a name="line.8346"></a>
+<span class="sourceLineNo">8347</span> byte[] getExplicitSplitPoint() {<a name="line.8347"></a>
+<span class="sourceLineNo">8348</span> return this.explicitSplitPoint;<a name="line.8348"></a>
+<span class="sourceLineNo">8349</span> }<a name="line.8349"></a>
+<span class="sourceLineNo">8350</span><a name="line.8350"></a>
+<span class="sourceLineNo">8351</span> void forceSplit(byte[] sp) {<a name="line.8351"></a>
+<span class="sourceLineNo">8352</span> // This HRegion will go away after the forced split is successful<a name="line.8352"></a>
+<span class="sourceLineNo">8353</span> // But if a forced split fails, we need to clear forced split.<a name="line.8353"></a>
+<span class="sourceLineNo">8354</span> this.splitRequest = true;<a name="line.8354"></a>
+<span class="sourceLineNo">8355</span> if (sp != null) {<a name="line.8355"></a>
+<span class="sourceLineNo">8356</span> this.explicitSplitPoint = sp;<a name="line.8356"></a>
+<span class="sourceLineNo">8357</span> }<a name="line.8357"></a>
+<span class="sourceLineNo">8358</span> }<a name="line.8358"></a>
+<span class="sourceLineNo">8359</span><a name="line.8359"></a>
+<span class="sourceLineNo">8360</span> void clearSplit() {<a name="line.8360"></a>
+<span class="sourceLineNo">8361</span> this.splitRequest = false;<a name="line.8361"></a>
+<span class="sourceLineNo">8362</span> this.explicitSplitPoint = null;<a name="line.8362"></a>
+<span class="sourceLineNo">8363</span> }<a name="line.8363"></a>
+<span class="sourceLineNo">8364</span><a name="line.8364"></a>
+<span class="sourceLineNo">8365</span> /**<a name="line.8365"></a>
+<span class="sourceLineNo">8366</span> * Return the splitpoint. null indicates the region isn't splittable<a name="line.8366"></a>
+<span class="sourceLineNo">8367</span> * If the splitpoint isn't explicitly specified, it will go over the stores<a name="line.8367"></a>
+<span class="sourceLineNo">8368</span> * to find the best splitpoint. Currently the criteria of best splitpoint<a name="line.8368"></a>
+<span class="sourceLineNo">8369</span> * is based on the size of the store.<a name="line.8369"></a>
+<span class="sourceLineNo">8370</span> */<a name="line.8370"></a>
+<span class="sourceLineNo">8371</span> public byte[] checkSplit() {<a name="line.8371"></a>
+<span class="sourceLineNo">8372</span> // Can't split META<a name="line.8372"></a>
+<span class="sourceLineNo">8373</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8373"></a>
+<span class="sourceLineNo">8374</span> if (shouldForceSplit()) {<a name="line.8374"></a>
+<span class="sourceLineNo">8375</span> LOG.warn("Cannot split meta region in HBase 0.20 and above");<a name="line.8375"></a>
+<span class="sourceLineNo">8376</span> }<a name="line.8376"></a>
+<span class="sourceLineNo">8377</span> return null;<a name="line.8377"></a>
+<span class="sourceLineNo">8378</span> }<a name="line.8378"></a>
+<span class="sourceLineNo">8379</span><a name="line.8379"></a>
+<span class="sourceLineNo">8380</span> // Can't split a region that is closing.<a name="line.8380"></a>
+<span class="sourceLineNo">8381</span> if (this.isClosing()) {<a name="line.8381"></a>
+<span class="sourceLineNo">8382</span> return null;<a name="line.8382"></a>
+<span class="sourceLineNo">8383</span> }<a name="line.8383"></a>
+<span class="sourceLineNo">8384</span><a name="line.8384"></a>
+<span class="sourceLineNo">8385</span> if (!splitPolicy.shouldSplit()) {<a name="line.8385"></a>
+<span class="sourceLineNo">8386</span> return null;<a name="line.8386"></a>
+<span class="sourceLineNo">8387</span> }<a name="line.8387"></a>
+<span class="sourceLineNo">8388</span><a name="line.8388"></a>
+<span class="sourceLineNo">8389</span> byte[] ret = splitPolicy.getSplitPoint();<a name="line.8389"></a>
+<span class="sourceLineNo">8390</span><a name="line.8390"></a>
+<span class="sourceLineNo">8391</span> if (ret != null) {<a name="line.8391"></a>
+<span class="sourceLineNo">8392</span> try {<a name="line.8392"></a>
+<span class="sourceLineNo">8393</span> checkRow(ret, "calculated split");<a name="line.8393"></a>
+<span class="sourceLineNo">8394</span> } catch (IOException e) {<a name="line.8394"></a>
+<span class="sourceLineNo">8395</span> LOG.error("Ignoring invalid split", e);<a name="line.8395"></a>
+<span class="sourceLineNo">8396</span> return null;<a name="line.8396"></a>
+<span class="sourceLineNo">8397</span> }<a name="line.8397"></a>
+<span class="sourceLineNo">8398</span> }<a name="line.8398"></a>
+<span class="sourceLineNo">8399</span> return ret;<a name="line.8399"></a>
<span class="sourceLineNo">8400</span> }<a name="line.8400"></a>
<span class="sourceLineNo">8401</span><a name="line.8401"></a>
-<span class="sourceLineNo">8402</span> /** @return the coprocessor host */<a name="line.8402"></a>
-<span class="sourceLineNo">8403</span> public RegionCoprocessorHost getCoprocessorHost() {<a name="line.8403"></a>
-<span class="sourceLineNo">8404</span> return coprocessorHost;<a name="line.8404"></a>
-<span class="sourceLineNo">8405</span> }<a name="line.8405"></a>
-<span class="sourceLineNo">8406</span><a name="line.8406"></a>
-<span class="sourceLineNo">8407</span> /** @param coprocessorHost the new coprocessor host */<a name="line.8407"></a>
-<span class="sourceLineNo">8408</span> @VisibleForTesting<a name="line.8408"></a>
-<span class="sourceLineNo">8409</span> public void setCoprocessorHost(final RegionCoprocessorHost coprocessorHost) {<a name="line.8409"></a>
-<span class="sourceLineNo">8410</span> this.coprocessorHost = coprocessorHost;<a name="line.8410"></a>
-<span class="sourceLineNo">8411</span> }<a name="line.8411"></a>
-<span class="sourceLineNo">8412</span><a name="line.8412"></a>
-<span class="sourceLineNo">8413</span> @Override<a name="line.8413"></a>
-<span class="sourceLineNo">8414</span> public void startRegionOperation() throws IOException {<a name="line.8414"></a>
-<span class="sourceLineNo">8415</span> startRegionOperation(Operation.ANY);<a name="line.8415"></a>
-<span class="sourceLineNo">8416</span> }<a name="line.8416"></a>
-<span class="sourceLineNo">8417</span><a name="line.8417"></a>
-<span class="sourceLineNo">8418</span> @Override<a name="line.8418"></a>
-<span class="sourceLineNo">8419</span> public void startRegionOperation(Operation op) throws IOException {<a name="line.8419"></a>
-<span class="sourceLineNo">8420</span> switch (op) {<a name="line.8420"></a>
-<span class="sourceLineNo">8421</span> case GET: // read operations<a name="line.8421"></a>
-<span class="sourceLineNo">8422</span> case SCAN:<a name="line.8422"></a>
-<span class="sourceLineNo">8423</span> checkReadsEnabled();<a name="line.8423"></a>
-<span class="sourceLineNo">8424</span> break;<a name="line.8424"></a>
-<span class="sourceLineNo">8425</span> default:<a name="line.8425"></a>
-<span class="sourceLineNo">8426</span> break;<a name="line.8426"></a>
-<span class="sourceLineNo">8427</span> }<a name="line.8427"></a>
-<span class="sourceLineNo">8428</span> if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.8428"></a>
-<span class="sourceLineNo">8429</span> || op == Operation.COMPACT_REGION || op == Operation.COMPACT_SWITCH) {<a name="line.8429"></a>
-<span class="sourceLineNo">8430</span> // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.8430"></a>
-<span class="sourceLineNo">8431</span> // region<a name="line.8431"></a>
-<span class="sourceLineNo">8432</span> return;<a name="line.8432"></a>
-<span class="sourceLineNo">8433</span> }<a name="line.8433"></a>
-<span class="sourceLineNo">8434</span> if (this.closing.get()) {<a name="line.8434"></a>
-<span class="sourceLineNo">8435</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8435"></a>
-<span class="sourceLineNo">8436</span> }<a name="line.8436"></a>
-<span class="sourceLineNo">8437</span> lock(lock.readLock());<a name="line.8437"></a>
-<span class="sourceLineNo">8438</span> if (this.closed.get()) {<a name="line.8438"></a>
-<span class="sourceLineNo">8439</span> lock.readLock().unlock();<a name="line.8439"></a>
-<span class="sourceLineNo">8440</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8440"></a>
+<span class="sourceLineNo">8402</span> /**<a name="line.8402"></a>
+<span class="sourceLineNo">8403</span> * @return The priority that this region should have in the compaction queue<a name="line.8403"></a>
+<span class="sourceLineNo">8404</span> */<a name="line.8404"></a>
+<span class="sourceLineNo">8405</span> public int getCompactPriority() {<a name="line.8405"></a>
+<span class="sourceLineNo">8406</span> return stores.values().stream().mapToInt(HStore::getCompactPriority).min()<a name="line.8406"></a>
+<span class="sourceLineNo">8407</span> .orElse(Store.NO_PRIORITY);<a name="line.8407"></a>
+<span class="sourceLineNo">8408</span> }<a name="line.8408"></a>
+<span class="sourceLineNo">8409</span><a name="line.8409"></a>
+<span class="sourceLineNo">8410</span> /** @return the coprocessor host */<a name="line.8410"></a>
+<span class="sourceLineNo">8411</span> public RegionCoprocessorHost getCoprocessorHost() {<a name="line.8411"></a>
+<span class="sourceLineNo">8412</span> return coprocessorHost;<a name="line.8412"></a>
+<span class="sourceLineNo">8413</span> }<a name="line.8413"></a>
+<span class="sourceLineNo">8414</span><a name="line.8414"></a>
+<span class="sourceLineNo">8415</span> /** @param coprocessorHost the new coprocessor host */<a name="line.8415"></a>
+<span class="sourceLineNo">8416</span> @VisibleForTesting<a name="line.8416"></a>
+<span class="sourceLineNo">8417</span> public void setCoprocessorHost(final RegionCoprocessorHost coprocessorHost) {<a name="line.8417"></a>
+<span class="sourceLineNo">8418</span> this.coprocessorHost = coprocessorHost;<a name="line.8418"></a>
+<span class="sourceLineNo">8419</span> }<a name="line.8419"></a>
+<span class="sourceLineNo">8420</span><a name="line.8420"></a>
+<span class="sourceLineNo">8421</span> @Override<a name="line.8421"></a>
+<span class="sourceLineNo">8422</span> public void startRegionOperation() throws IOException {<a name="line.8422"></a>
+<span class="sourceLineNo">8423</span> startRegionOperation(Operation.ANY);<a name="line.8423"></a>
+<span class="sourceLineNo">8424</span> }<a name="line.8424"></a>
+<span class="sourceLineNo">8425</span><a name="line.8425"></a>
+<span class="sourceLineNo">8426</span> @Override<a name="line.8426"></a>
+<span class="sourceLineNo">8427</span> public void startRegionOperation(Operation op) throws IOException {<a name="line.8427"></a>
+<span class="sourceLineNo">8428</span> switch (op) {<a name="line.8428"></a>
+<span class="sourceLineNo">8429</span> case GET: // read operations<a name="line.8429"></a>
+<span class="sourceLineNo">8430</span> case SCAN:<a name="line.8430"></a>
+<span class="sourceLineNo">8431</span> checkReadsEnabled();<a name="line.8431"></a>
+<span class="sourceLineNo">8432</span> break;<a name="line.8432"></a>
+<span class="sourceLineNo">8433</span> default:<a name="line.8433"></a>
+<span class="sourceLineNo">8434</span> break;<a name="line.8434"></a>
+<span class="sourceLineNo">8435</span> }<a name="line.8435"></a>
+<span class="sourceLineNo">8436</span> if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.8436"></a>
+<span class="sourceLineNo">8437</span> || op == Operation.COMPACT_REGION || op == Operation.COMPACT_SWITCH) {<a name="line.8437"></a>
+<span class="sourceLineNo">8438</span> // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.8438"></a>
+<span class="sourceLineNo">8439</span> // region<a name="line.8439"></a>
+<span class="sourceLineNo">8440</span> return;<a name="line.8440"></a>
<span class="sourceLineNo">8441</span> }<a name="line.8441"></a>
-<span class="sourceLineNo">8442</span> // The unit for snapshot is a region. So, all stores for this region must be<a name="line.8442"></a>
-<span class="sourceLineNo">8443</span> // prepared for snapshot operation before proceeding.<a name="line.8443"></a>
-<span class="sourceLineNo">8444</span> if (op == Operation.SNAPSHOT) {<a name="line.8444"></a>
-<span class="sourceLineNo">8445</span> stores.values().forEach(HStore::preSnapshotOperation);<a name="line.8445"></a>
-<span class="sourceLineNo">8446</span> }<a name="line.8446"></a>
-<span class="sourceLineNo">8447</span> try {<a name="line.8447"></a>
-<span class="sourceLineNo">8448</span> if (coprocessorHost != null) {<a name="line.8448"></a>
-<span class="sourceLineNo">8449</span> coprocessorHost.postStartRegionOperation(op);<a name="line.8449"></a>
-<span class="sourceLineNo">8450</span> }<a name="line.8450"></a>
-<span class="sourceLineNo">8451</span> } catch (Exception e) {<a name="line.8451"></a>
-<span class="sourceLineNo">8452</span> lock.readLock().unlock();<a name="line.8452"></a>
-<span class="sourceLineNo">8453</span> throw new IOException(e);<a name="line.8453"></a>
+<span class="sourceLineNo">8442</span> if (this.closing.get()) {<a name="line.8442"></a>
+<span class="sourceLineNo">8443</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8443"></a>
+<span class="sourceLineNo">8444</span> }<a name="line.8444"></a>
+<span class="sourceLineNo">8445</span> lock(lock.readLock());<a name="line.8445"></a>
+<span class="sourceLineNo">8446</span> if (this.closed.get()) {<a name="line.8446"></a>
+<span class="sourceLineNo">8447</span> lock.readLock().unlock();<a name="line.8447"></a>
+<span class="sourceLineNo">8448</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8448"></a>
+<span class="sourceLineNo">8449</span> }<a name="line.8449"></a>
+<span class="sourceLineNo">8450</span> // The unit for snapshot is a region. So, all stores for this region must be<a name="line.8450"></a>
+<span class="sourceLineNo">8451</span> // prepared for snapshot operation before proceeding.<a name="line.8451"></a>
+<span class="sourceLineNo">8452</span> if (op == Operation.SNAPSHOT) {<a name="line.8452"></a>
+<span class="sourceLineNo">8453</span> stores.values().forEach(HStore::preSnapshotOperation);<a name="line.8453"></a>
<span class="sourceLineNo">8454</span> }<a name="line.8454"></a>
-<span class="sourceLineNo">8455</span> }<a name="line.8455"></a>
-<span class="sourceLineNo">8456</span><a name="line.8456"></a>
-<span class="sourceLineNo">8457</span> @Override<a name="line.8457"></a>
-<span class="sourceLineNo">8458</span> public void closeRegionOperation() throws IOException {<a name="line.8458"></a>
-<span class="sourceLineNo">8459</span> closeRegionOperation(Operation.ANY);<a name="line.8459"></a>
-<span class="sourceLineNo">8460</span> }<a name="line.8460"></a>
-<span class="sourceLineNo">8461</span><a name="line.8461"></a>
-<span class="sourceLineNo">8462</span> @Override<a name="line.8462"></a>
-<span class="sourceLineNo">8463</span> public void closeRegionOperation(Operation operation) throws IOException {<a name="line.8463"></a>
-<span class="sourceLineNo">8464</span> if (operation == Operation.SNAPSHOT) {<a name="line.8464"></a>
-<span class="sourceLineNo">8465</span> stores.values().forEach(HStore::postSnapshotOperation);<a name="line.8465"></a>
-<span class="sourceLineNo">8466</span> }<a name="line.8466"></a>
-<span class="sourceLineNo">8467</span> lock.readLock().unlock();<a name="line.8467"></a>
-<span class="sourceLineNo">8468</span> if (coprocessorHost != null) {<a name="line.8468"></a>
-<span class="sourceLineNo">8469</span> coprocessorHost.postCloseRegionOperation(operation);<a name="line.8469"></a>
-<span class="sourceLineNo">8470</span> }<a name="line.8470"></a>
-<span class="sourceLineNo">8471</span> }<a name="line.8471"></a>
-<span class="sourceLineNo">8472</span><a name="line.8472"></a>
-<span class="sourceLineNo">8473</span> /**<a name="line.8473"></a>
-<span class="sourceLineNo">8474</span> * This method needs to be called before any public call that reads or<a name="line.8474"></a>
-<span class="sourceLineNo">8475</span> * modifies stores in bulk. It has to be called just before a try.<a name="line.8475"></a>
-<span class="sourceLineNo">8476</span> * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.8476"></a>
-<span class="sourceLineNo">8477</span> * Acquires a writelock and checks if the region is closing or closed.<a name="line.8477"></a>
-<span class="sourceLineNo">8478</span> * @throws NotServingRegionException when the region is closing or closed<a name="line.8478"></a>
-<span class="sourceLineNo">8479</span> * @throws RegionTooBusyException if failed to get the lock in time<a name="line.8479"></a>
-<span class="sourceLineNo">8480</span> * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.8480"></a>
-<span class="sourceLineNo">8481</span> */<a name="line.8481"></a>
-<span class="sourceLineNo">8482</span> private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.8482"></a>
-<span class="sourceLineNo">8483</span> throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.8483"></a>
-<span class="sourceLineNo">8484</span> if (this.closing.get()) {<a name="line.8484"></a>
-<span class="sourceLineNo">8485</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8485"></a>
-<span class="sourceLineNo">8486</span> }<a name="line.8486"></a>
-<span class="sourceLineNo">8487</span> if (writeLockNeeded) lock(lock.writeLock());<a name="line.8487"></a>
-<span class="sourceLineNo">8488</span> else lock(lock.readLock());<a name="line.8488"></a>
-<span class="sourceLineNo">8489</span> if (this.closed.get()) {<a name="line.8489"></a>
-<span class="sourceLineNo">8490</span> if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8490"></a>
-<span class="sourceLineNo">8491</span> else lock.readLock().unlock();<a name="line.8491"></a>
-<span class="sourceLineNo">8492</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8492"></a>
-<span class="sourceLineNo">8493</span> }<a name="line.8493"></a>
-<span class="sourceLineNo">8494</span> }<a name="line.8494"></a>
-<span class="sourceLineNo">8495</span><a name="line.8495"></a>
-<span class="sourceLineNo">8496</span> /**<a name="line.8496"></a>
-<span class="sourceLineNo">8497</span> * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8497"></a>
-<span class="sourceLineNo">8498</span> * to the try block of #startRegionOperation<a name="line.8498"></a>
-<span class="sourceLineNo">8499</span> */<a name="line.8499"></a>
-<span class="sourceLineNo">8500</span> private void closeBulkRegionOperation(){<a name="line.8500"></a>
-<span class="sourceLineNo">8501</span> if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8501"></a>
-<span class="sourceLineNo">8502</span> else lock.readLock().unlock();<a name="line.8502"></a>
-<span class="sourceLineNo">8503</span> }<a name="line.8503"></a>
-<span class="sourceLineNo">8504</span><a name="line.8504"></a>
-<span class="sourceLineNo">8505</span> /**<a name="line.8505"></a>
-<span class="sourceLineNo">8506</span> * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8506"></a>
-<span class="sourceLineNo">8507</span> * These information are exposed by the region server metrics.<a name="line.8507"></a>
-<span class="sourceLineNo">8508</span> */<a name="line.8508"></a>
-<span class="sourceLineNo">8509</span> private void recordMutationWithoutWal(final Map<byte [], List<Cell>> familyMap) {<a name="line.8509"></a>
-<span class="sourceLineNo">8510</span> numMutationsWithoutWAL.increment();<a name="line.8510"></a>
-<span class="sourceLineNo">8511</span> if (numMutationsWithoutWAL.sum() <= 1) {<a name="line.8511"></a>
-<span class="sourceLineNo">8512</span> LOG.info("writing data to region " + this +<a name="line.8512"></a>
-<span class="sourceLineNo">8513</span> " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8513"></a>
-<span class="sourceLineNo">8514</span> }<a name="line.8514"></a>
-<span class="sourceLineNo">8515</span><a name="line.8515"></a>
-<span class="sourceLineNo">8516</span> long mutationSize = 0;<a name="line.8516"></a>
-<span class="sourceLineNo">8517</span> for (List<Cell> cells: familyMap.values()) {<a name="line.8517"></a>
-<span class="sourceLineNo">8518</span> // Optimization: 'foreach' loop is not used. See:<a name="line.8518"></a>
-<span class="sourceLineNo">8519</span> // HBASE-12023 HRegion.applyFamilyMapToMemstore creates too many iterator objects<a name="line.8519"></a>
-<span class="sourceLineNo">8520</span> assert cells instanceof RandomAccess;<a name="line.8520"></a>
-<span class="sourceLineNo">8521</span> int listSize = cells.size();<a name="line.8521"></a>
-<span class="sourceLineNo">8522</span> for (int i=0; i < listSize; i++) {<a name="line.8522"></a>
-<span class="sourceLineNo">8523</span> Cell cell = cells.get(i);<a name="line.8523"></a>
-<span class="sourceLineNo">8524</span> mutationSize += cell.getSerializedSize();<a name="line.8524"></a>
-<span class="sourceLineNo">8525</span> }<a name="line.8525"></a>
-<span class="sourceLineNo">8526</span> }<a name="line.8526"></a>
-<span class="sourceLineNo">8527</span><a name="line.8527"></a>
-<span class="sourceLineNo">8528</span> dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8528"></a>
-<span class="sourceLineNo">8529</span> }<a name="line.8529"></a>
-<span class="sourceLineNo">8530</span><a name="line.8530"></a>
-<span class="sourceLineNo">8531</span> private void lock(final Lock lock) throws RegionTooBusyException, InterruptedIOException {<a name="line.8531"></a>
-<span class="sourceLineNo">8532</span> lock(lock, 1);<a name="line.8532"></a>
-<span class="sourceLineNo">8533</span> }<a name="line.8533"></a>
-<span class="sourceLineNo">8534</span><a name="line.8534"></a>
-<span class="sourceLineNo">8535</span> /**<a name="line.8535"></a>
-<span class="sourceLineNo">8536</span> * Try to acquire a lock. Throw RegionTooBusyException<a name="line.8536"></a>
-<span class="sourceLineNo">8537</span> * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8537"></a>
-<span class="sourceLineNo">8538</span> * if interrupted while waiting for the lock.<a name="line.8538"></a>
-<span class="sourceLineNo">8539</span> */<a name="line.8539"></a>
-<span class="sourceLineNo">8540</span> private void lock(final Lock lock, final int multiplier)<a name="line.8540"></a>
-<span class="sourceLineNo">8541</span> throws RegionTooBusyException, InterruptedIOException {<a name="line.8541"></a>
-<span class="sourceLineNo">8542</span> try {<a name="line.8542"></a>
-<span class="sourceLineNo">8543</span> final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8543"></a>
-<span class="sourceLineNo">8544</span> busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8544"></a>
-<span class="sourceLineNo">8545</span> if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8545"></a>
-<span class="sourceLineNo">8546</span> // Don't print millis. Message is used as a key over in<a name="line.8546"></a>
-<span class="sourceLineNo">8547</span> // RetriesExhaustedWithDetailsException processing.<a name="line.8547"></a>
-<span class="sourceLineNo">8548</span> throw new RegionTooBusyException("Failed to obtain lock; regionName=" +<a name="line.8548"></a>
-<span class="sourceLineNo">8549</span> (this.getRegionInfo() == null? "unknown":<a name="line.8549"></a>
-<span class="sourceLineNo">8550</span> this.getRegionInfo().getRegionNameAsString()) +<a name="line.8550"></a>
-<span class="sourceLineNo">8551</span> ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.8551"></a>
-<span class="sourceLineNo">8552</span> this.getRegionServerServices().getServerName()));<a name="line.8552"></a>
-<span class="sourceLineNo">8553</span> }<a name="line.8553"></a>
-<span class="sourceLineNo">8554</span> } catch (InterruptedException ie) {<a name="line.8554"></a>
-<span class="sourceLineNo">8555</span> LOG.info("Interrupted while waiting for a lock");<a name="line.8555"></a>
-<span class="sourceLineNo">8556</span> InterruptedIOException iie = new InterruptedIOException();<a name="line.8556"></a>
-<span class="sourceLineNo">8557</span> iie.initCause(ie);<a name="line.8557"></a>
-<span class="sourceLineNo">8558</span> throw iie;<a name="line.8558"></a>
-<span class="sourceLineNo">8559</span> }<a name="line.8559"></a>
-<span class="sourceLineNo">8560</span> }<a name="line.8560"></a>
-<span class="sourceLineNo">8561</span><a name="line.8561"></a>
-<span class="sourceLineNo">8562</span> /**<a name="line.8562"></a>
-<span class="sourceLineNo">8563</span> * Calls sync with the given transaction ID<a name="line.8563"></a>
-<span class="sourceLineNo">8564</span> * @param txid should sync up to which transaction<a name="line.8564"></a>
-<span class="sourceLineNo">8565</span> * @throws IOException If anything goes wrong with DFS<a name="line.8565"></a>
-<span class="sourceLineNo">8566</span> */<a name="line.8566"></a>
-<span class="sourceLineNo">8567</span> private void sync(long txid, Durability durability) throws IOException {<a name="line.8567"></a>
-<span class="sourceLineNo">8568</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8568"></a>
-<span class="sourceLineNo">8569</span> this.wal.sync(txid);<a name="line.8569"></a>
-<span class="sourceLineNo">8570</span> } else {<a name="line.8570"></a>
-<span class="sourceLineNo">8571</span> switch(durability) {<a name="line.8571"></a>
-<span class="sourceLineNo">8572</span> case USE_DEFAULT:<a name="line.8572"></a>
-<span class="sourceLineNo">8573</span> // do what table defaults to<a name="line.8573"></a>
-<span class="sourceLineNo">8574</span> if (shouldSyncWAL()) {<a name="line.8574"></a>
-<span class="sourceLineNo">8575</span> this.wal.sync(txid);<a name="line.8575"></a>
-<span class="sourceLineNo">8576</span> }<a name="line.8576"></a>
-<span class="sourceLineNo">8577</span> break;<a name="line.8577"></a>
-<span class="sourceLineNo">8578</span> case SKIP_WAL:<a name="line.8578"></a>
-<span class="sourceLineNo">8579</span> // nothing do to<a name="line.8579"></a>
-<span class="sourceLineNo">8580</span> break;<a name="line.8580"></a>
-<span class="sourceLineNo">8581</span> case ASYNC_WAL:<a name="line.8581"></a>
-<span class="sourceLineNo">8582</span> // nothing do to<a name="line.8582"></a>
-<span class="sourceLineNo">8583</span> break;<a name="line.8583"></a>
-<span class="sourceLineNo">8584</span> case SYNC_WAL:<a name="line.8584"></a>
-<span class="sourceLineNo">8585</span> this.wal.sync(txid, false);<a name="line.8585"></a>
-<span class="sourceLineNo">8586</span> break;<a name="line.8586"></a>
-<span class="sourceLineNo">8587</span> case FSYNC_WAL:<a name="line.8587"></a>
-<span class="sourceLineNo">8588</span> this.wal.sync(txid, true);<a name="line.8588"></a>
-<span class="sourceLineNo">8589</span> break;<a name="line.8589"></a>
-<span class="sourceLineNo">8590</span> default:<a name="line.8590"></a>
-<span class="sourceLineNo">8591</span> throw new RuntimeException("Unknown durability " + durability);<a name="line.8591"></a>
-<span class="sourceLineNo">8592</span> }<a name="line.8592"></a>
-<span class="sourceLineNo">8593</span> }<a name="line.8593"></a>
-<span class="sourceLineNo">8594</span> }<a name="line.8594"></a>
-<span class="sourceLineNo">8595</span><a name="line.8595"></a>
-<span class="sourceLineNo">8596</span> /**<a name="line.8596"></a>
-<span class="sourceLineNo">8597</span> * Check whether we should sync the wal from the table's durability settings<a name="line.8597"></a>
-<span class="sourceLineNo">8598</span> */<a name="line.8598"></a>
-<span class="sourceLineNo">8599</span> private boolean shouldSyncWAL() {<a name="line.8599"></a>
-<span class="sourceLineNo">8600</span> return regionDurability.ordinal() > Durability.ASYNC_WAL.ordinal();<a name="line.8600"></a>
-<span class="sourceLineNo">8601</span> }<a name="line.8601"></a>
-<span class="sourceLineNo">8602</span><a name="line.8602"></a>
-<span class="sourceLineNo">8603</span> /**<a name="line.8603"></a>
-<span class="sourceLineNo">8604</span> * A mocked list implementation - discards all updates.<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span> */<a name="line.8605"></a>
-<span class="sourceLineNo">8606</span> private static final List<Cell> MOCKED_LIST = new AbstractList<Cell>() {<a name="line.8606"></a>
-<span class="sourceLineNo">8607</span><a name="line.8607"></a>
-<span class="sourceLineNo">8608</span> @Override<a name="line.8608"></a>
-<span class="sourceLineNo">8609</span> public void add(int index, Cell element) {<a name="line.8609"></a>
-<span class="sourceLineNo">8610</span> // do nothing<a name="line.8610"></a>
-<span class="sourceLineNo">8611</span> }<a name="line.8611"></a>
-<span class="sourceLineNo">8612</span><a name="line.8612"></a>
-<span class="sourceLineNo">8613</span> @Override<a name="line.8613"></a>
-<span class="sourceLineNo">8614</span> public boolean addAll(int index, Collection<? extends Cell> c) {<a name="line.8614"></a>
-<span class="sourceLineNo">8615</span> return false; // this list is never changed as a result of an update<a name="line.8615"></a>
-<span class="sourceLineNo">8616</span> }<a name="line.8616"></a>
-<span class="sourceLineNo">8617</span><a name="line.8617"></a>
-<span class="sourceLineNo">8618</span> @Override<a name="line.8618"></a>
-<span class="sourceLineNo">8619</span> public KeyValue get(int index) {<a name="line.8619"></a>
-<span class="sourceLineNo">8620</span> throw new UnsupportedOperationException();<a name="line.8620"></a>
-<span class="sourceLineNo">8621</span> }<a name="line.8621"></a>
-<span class="sourceLineNo">8622</span><a name="line.8622"></a>
-<span class="sourceLineNo">8623</span> @Override<a name="line.8623"></a>
-<span class="sourceLineNo">8624</span> public int size() {<a name="line.8624"></a>
-<span class="sourceLineNo">8625</span> return 0;<a name="line.8625"></a>
-<span class="sourceLineNo">8626</span> }<a name="line.8626"></a>
-<span class="sourceLineNo">8627</span> };<a name="line.8627"></a>
-<span class="sourceLineNo">8628</span><a name="line.8628"></a>
-<span class="sourceLineNo">8629</span> /** @return the latest sequence number that was read from storage when this region was opened */<a name="line.8629"></a>
-<span class="sourceLineNo">8630</span> public long getOpenSeqNum() {<a name="line.8630"></a>
-<span class="sourceLineNo">8631</span> return this.openSeqNum;<a name="line.8631"></a>
-<span class="sourceLineNo">8632</span> }<a name="line.8632"></a>
-<span class="sourceLineNo">8633</span><a name="line.8633"></a>
-<span class="sourceLineNo">8634</span> @Override<a name="line.8634"></a>
-<span class="sourceLineNo">8635</span> public Map<byte[], Long> getMaxStoreSeqId() {<a name="line.8635"></a>
-<span class="sourceLineNo">8636</span> return this.maxSeqIdInStores;<a name="line.8636"></a>
-<span class="sourceLineNo">8637</span> }<a name="line.8637"></a>
-<span class="sourceLineNo">8638</span><a name="line.8638"></a>
-<span class="sourceLineNo">8639</span> public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8639"></a>
-<span class="sourceLineNo">8640</span> return wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8640"></a>
-<span class="sourceLineNo">8641</span> }<a name="line.8641"></a>
-<span class="sourceLineNo">8642</span><a name="line.8642"></a>
-<span class="sourceLineNo">8643</span> @Override<a name="line.8643"></a>
-<span class="sourceLineNo">8644</span> public CompactionState getCompactionState() {<a name="line.8644"></a>
-<span class="sourceLineNo">8645</span> boolean hasMajor = majorInProgress.get() > 0, hasMinor = minorInProgress.get() > 0;<a name="line.8645"></a>
-<span class="sourceLineNo">8646</span> return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8646"></a>
-<span class="sourceLineNo">8647</span> : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8647"></a>
-<span class="sourceLineNo">8648</span> }<a name="line.8648"></a>
-<span class="sourceLineNo">8649</span><a name="line.8649"></a>
-<span class="sourceLineNo">8650</span> public void reportCompactionRequestStart(boolean isMajor){<a name="line.8650"></a>
-<span class="sourceLineNo">8651</span> (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8651"></a>
-<span class="sourceLineNo">8652</span> }<a name="line.8652"></a>
-<span class="sourceLineNo">8653</span><a name="line.8653"></a>
-<span class="sourceLineNo">8654</span> public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8654"></a>
-<span class="sourceLineNo">8655</span> int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8655"></a>
-<span class="sourceLineNo">8656</span><a name="line.8656"></a>
-<span class="sourceLineNo">8657</span> // metrics<a name="line.8657"></a>
-<span class="sourceLineNo">8658</span> compactionsFinished.increment();<a name="line.8658"></a>
-<span class="sourceLineNo">8659</span> compactionNumFilesCompacted.add(numFiles);<a name="line.8659"></a>
-<span class="sourceLineNo">8660</span> compactionNumBytesCompacted.add(filesSizeCompacted);<a name="line.8660"></a>
+<span class="sourceLineNo">8455</span> try {<a name="line.8455"></a>
+<span class="sourceLineNo">8456</span> if (coprocessorHost != null) {<a name="line.8456"></a>
+<span class="sourceLineNo">8457</span> coprocessorHost.postStartRegionOperation(op);<a name="line.8457"></a>
+<span class="sourceLineNo">8458</span> }<a name="line.8458"></a>
+<span class="sourceLineNo">8459</span> } catch (Exception e) {<a name="line.8459"></a>
+<span class="sourceLineNo">8460</span> lock.readLock().unlock();<a name="line.8460"></a>
+<span class="sourceLineNo">8461</span> throw new IOException(e);<a name="line.8461"></a>
+<span class="sourceLineNo">8462</span> }<a name="line.8462"></a>
+<span class="sourceLineNo">8463</span> }<a name="line.8463"></a>
+<span class="sourceLineNo">8464</span><a name="line.8464"></a>
+<span class="sourceLineNo">8465</span> @Override<a name="line.8465"></a>
+<span class="sourceLineNo">8466</span> public void closeRegionOperation() throws IOException {<a name="line.8466"></a>
+<span class="sourceLineNo">8467</span> closeRegionOperation(Operation.ANY);<a name="line.8467"></a>
+<span class="sourceLineNo">8468</span> }<a name="line.8468"></a>
+<span class="sourceLineNo">8469</span><a name="line.8469"></a>
+<span class="sourceLineNo">8470</span> @Override<a name="line.8470"></a>
+<span class="sourceLineNo">8471</span> public void closeRegionOperation(Operation operation) throws IOException {<a name="line.8471"></a>
+<span class="sourceLineNo">8472</span> if (operation == Operation.SNAPSHOT) {<a name="line.8472"></a>
+<span class="sourceLineNo">8473</span> stores.values().forEach(HStore::postSnapshotOperation);<a name="line.8473"></a>
+<span class="sourceLineNo">8474</span> }<a name="line.8474"></a>
+<span class="sourceLineNo">8475</span> lock.readLock().unlock();<a name="line.8475"></a>
+<span class="sourceLineNo">8476</span> if (coprocessorHost != null) {<a name="line.8476"></a>
+<span class="sourceLineNo">8477</span> coprocessorHost.postCloseRegionOperation(operation);<a name="line.8477"></a>
+<span class="sourceLineNo">8478</span> }<a name="line.8478"></a>
+<span class="sourceLineNo">8479</span> }<a name="line.8479"></a>
+<span class="sourceLineNo">8480</span><a name="line.8480"></a>
+<span class="sourceLineNo">8481</span> /**<a name="line.8481"></a>
+<span class="sourceLineNo">8482</span> * This method needs to be called before any public call that reads or<a name="line.8482"></a>
+<span class="sourceLineNo">8483</span> * modifies stores in bulk. It has to be called just before a try.<a name="line.8483"></a>
+<span class="sourceLineNo">8484</span> * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.8484"></a>
+<span class="sourceLineNo">8485</span> * Acquires a writelock and checks if the region is closing or closed.<a name="line.8485"></a>
+<span class="sourceLineNo">8486</span> * @throws NotServingRegionException when the region is closing or closed<a name="line.8486"></a>
+<span class="sourceLineNo">8487</span> * @throws RegionTooBusyException if failed to get the lock in time<a name="line.8487"></a>
+<span class="sourceLineNo">8488</span> * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.8488"></a>
+<span class="sourceLineNo">8489</span> */<a name="line.8489"></a>
+<span class="sourceLineNo">8490</span> private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.8490"></a>
+<span class="sourceLineNo">8491</span> throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.8491"></a>
+<span class="sourceLineNo">8492</span> if (this.closing.get()) {<a name="line.8492"></a>
+<span class="sourceLineNo">8493</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8493"></a>
+<span class="sourceLineNo">8494</span> }<a name="line.8494"></a>
+<span class="sourceLineNo">8495</span> if (writeLockNeeded) lock(lock.writeLock());<a name="line.8495"></a>
+<span class="sourceLineNo">8496</span> else lock(lock.readLock());<a name="line.8496"></a>
+<span class="sourceLineNo">8497</span> if (this.closed.get()) {<a name="line.8497"></a>
+<span class="sourceLineNo">8498</span> if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8498"></a>
+<span class="sourceLineNo">8499</span> else lock.readLock().unlock();<a name="line.8499"></a>
+<span class="sourceLineNo">8500</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8500"></a>
+<span class="sourceLineNo">8501</span> }<a name="line.8501"></a>
+<span class="sourceLineNo">8502</span> }<a name="line.8502"></a>
+<span class="sourceLineNo">8503</span><a name="line.8503"></a>
+<span class="sourceLineNo">8504</span> /**<a name="line.8504"></a>
+<span class="sourceLineNo">8505</span> * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8505"></a>
+<span class="sourceLineNo">8506</span> * to the try block of #startRegionOperation<a name="line.8506"></a>
+<span class="sourceLineNo">8507</span> */<a name="line.8507"></a>
+<span class="sourceLineNo">8508</span> private void closeBulkRegionOperation(){<a name="line.8508"></a>
+<span class="sourceLineNo">8509</span> if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8509"></a>
+<span class="sourceLineNo">8510</span> else lock.readLock().unlock();<a name="line.8510"></a>
+<span class="sourceLineNo">8511</span> }<a name="line.8511"></a>
+<span class="sourceLineNo">8512</span><a name="line.8512"></a>
+<span class="sourceLineNo">8513</span> /**<a name="line.8513"></a>
+<span class="sourceLineNo">8514</span> * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8514"></a>
+<span class="sourceLineNo">8515</span> * These information are exposed by the region server metrics.<a name="line.8515"></a>
+<span class="sourceLineNo">8516</span> */<a name="line.8516"></a>
+<span class="sourceLineNo">8517</span> private void recordMutationWithoutWal(final Map<byte [], List<Cell>> familyMap) {<a name="line.8517"></a>
+<span class="sourceLineNo">8518</span> numMutationsWithoutWAL.increment();<a name="line.8518"></a>
+<span class="sourceLineNo">8519</span> if (numMutationsWithoutWAL.sum() <= 1) {<a name="line.8519"></a>
+<span class="sourceLineNo">8520</span> LOG.info("writing data to region " + this +<a name="line.8520"></a>
+<span class="sourceLineNo">8521</span> " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8521"></a>
+<span class="sourceLineNo">8522</span> }<a name="line.8522"></a>
+<span class="sourceLineNo">8523</span><a name="line.8523"></a>
+<span class="sourceLineNo">8524</span> long mutationSize = 0;<a name="line.8524"></a>
+<span class="sourceLineNo">8525</span> for (List<Cell> cells: familyMap.values()) {<a name="line.8525"></a>
+<span class="sourceLineNo">8526</span> // Optimization: 'foreach' loop is not used. See:<a name="line.8526"></a>
+<span class="sourceLineNo">8527</span> // HBASE-12023 HRegion.applyFamilyMapToMemstore creates too many iterator objects<a name="line.8527"></a>
+<span class="sourceLineNo">8528</span> assert cells instanceof RandomAccess;<a name="line.8528"></a>
+<span class="sourceLineNo">8529</span> int listSize = cells.size();<a name="line.8529"></a>
+<span class="sourceLineNo">8530</span> for (int i=0; i < listSize; i++) {<a name="line.8530"></a>
+<span class="sourceLineNo">8531</span> Cell cell = cells.get(i);<a name="line.8531"></a>
+<span class="sourceLineNo">8532</span> mutationSize += cell.getSerializedSize();<a name="line.8532"></a>
+<span class="sourceLineNo">8533</span> }<a name="line.8533"></a>
+<span class="sourceLineNo">8534</span> }<a name="line.8534"></a>
+<span class="sourceLineNo">8535</span><a name="line.8535"></a>
+<span class="sourceLineNo">8536</span> dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8536"></a>
+<span class="sourceLineNo">8537</span> }<a name="line.8537"></a>
+<span class="sourceLineNo">8538</span><a name="line.8538"></a>
+<span class="sourceLineNo">8539</span> private void lock(final Lock lock) throws RegionTooBusyException, InterruptedIOException {<a name="line.8539"></a>
+<span class="sourceLineNo">8540</span> lock(lock, 1);<a name="line.8540"></a>
+<span class="sourceLineNo">8541</span> }<a name="line.8541"></a>
+<span class="sourceLineNo">8542</span><a name="line.8542"></a>
+<span class="sourceLineNo">8543</span> /**<a name="line.8543"></a>
+<span class="sourceLineNo">8544</span> * Try to acquire a lock. Throw RegionTooBusyException<a name="line.8544"></a>
+<span class="sourceLineNo">8545</span> * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8545"></a>
+<span class="sourceLineNo">8546</span> * if interrupted while waiting for the lock.<a name="line.8546"></a>
+<span class="sourceLineNo">8547</span> */<a name="line.8547"></a>
+<span class="sourceLineNo">8548</span> private void lock(final Lock lock, final int multiplier)<a name="line.8548"></a>
+<span class="sourceLineNo">8549</span> throws RegionTooBusyException, InterruptedIOException {<a name="line.8549"></a>
+<span class="sourceLineNo">8550</span> try {<a name="line.8550"></a>
+<span class="sourceLineNo">8551</span> final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8551"></a>
+<span class="sourceLineNo">8552</span> busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8552"></a>
+<span class="sourceLineNo">8553</span> if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8553"></a>
+<span class="sourceLineNo">8554</span> // Don't print millis. Message is used as a key over in<a name="line.8554"></a>
+<span class="sourceLineNo">8555</span> // RetriesExhaustedWithDetailsException processing.<a name="line.8555"></a>
+<span class="sourceLineNo">8556</span> throw new RegionTooBusyException("Failed to obtain lock; regionName=" +<a name="line.8556"></a>
+<span class="sourceLineNo">8557</span> (this.getRegionInfo() == null? "unknown":<a name="line.8557"></a>
+<span class="sourceLineNo">8558</span> this.getRegionInfo().getRegionNameAsString()) +<a name="line.8558"></a>
+<span class="sourceLineNo">8559</span> ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.8559"></a>
+<span class="sourceLineNo">8560</span> this.getRegionServerServices().getServerName()));<a name="line.8560"></a>
+<span class="sourceLineNo">8561</span> }<a name="line.8561"></a>
+<span class="sourceLineNo">8562</span> } catch (InterruptedException ie) {<a name="line.8562"></a>
+<span class="sourceLineNo">8563</span> LOG.info("Interrupted while waiting for a lock");<a name="line.8563"></a>
+<span class="sourceLineNo">8564</span> InterruptedIOException iie = new InterruptedIOException();<a name="line.8564"></a>
+<span class="sourceLineNo">8565</span> iie.initCause(ie);<a name="line.8565"></a>
+<span class="sourceLineNo">8566</span> throw iie;<a name="line.8566"></a>
+<span class="sourceLineNo">8567</span> }<a name="line.8567"></a>
+<span class="sourceLineNo">8568</span> }<a name="line.8568"></a>
+<span class="sourceLineNo">8569</span><a name="line.8569"></a>
+<span class="sourceLineNo">8570</span> /**<a name="line.8570"></a>
+<span class="sourceLineNo">8571</span> * Calls sync with the given transaction ID<a name="line.8571"></a>
+<span class="sourceLineNo">8572</span> * @param txid should sync up to which transaction<a name="line.8572"></a>
+<span class="sourceLineNo">8573</span> * @throws IOException If anything goes wrong with DFS<a name="line.8573"></a>
+<span class="sourceLineNo">8574</span> */<a name="line.8574"></a>
+<span class="sourceLineNo">8575</span> private void sync(long txid, Durability durability) throws IOException {<a name="line.8575"></a>
+<span class="sourceLineNo">8576</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8576"></a>
+<span class="sourceLineNo">8577</span> this.wal.sync(txid);<a name="line.8577"></a>
+<span class="sourceLineNo">8578</span> } else {<a name="line.8578"></a>
+<span class="sourceLineNo">8579</span> switch(durability) {<a name="line.8579"></a>
+<span class="sourceLineNo">8580</span> case USE_DEFAULT:<a name="line.8580"></a>
+<span class="sourceLineNo">8581</span> // do what table defaults to<a name="line.8581"></a>
+<span class="sourceLineNo">8582</span> if (shouldSyncWAL()) {<a name="line.8582"></a>
+<span class="sourceLineNo">8583</span> this.wal.sync(txid);<a name="line.8583"></a>
+<span class="sourceLineNo">8584</span> }<a name="line.8584"></a>
+<span class="sourceLineNo">8585</span> break;<a name="line.8585"></a>
+<span class="sourceLineNo">8586</span> case SKIP_WAL:<a name="line.8586"></a>
+<span class="sourceLineNo">8587</span> // nothing do to<a name="line.8587"></a>
+<span class="sourceLineNo">8588</span> break;<a name="line.8588"></a>
+<span class="sourceLineNo">8589</span> case ASYNC_WAL:<a name="line.8589"></a>
+<span class="sourceLineNo">8590</span> // nothing do to<a name="line.8590"></a>
+<span class="sourceLineNo">8591</span> break;<a name="line.8591"></a>
+<span class="sourceLineNo">8592</span> case SYNC_WAL:<a name="line.8592"></a>
+<span class="sourceLineNo">8593</span> this.wal.sync(txid, false);<a name="line.8593"></a>
+<span class="sourceLineNo">8594</span> break;<a name="line.8594"></a>
+<span class="sourceLineNo">8595</span> case FSYNC_WAL:<a name="line.8595"></a>
+<span class="sourceLineNo">8596</span> this.wal.sync(txid, true);<a name="line.8596"></a>
+<span class="sourceLineNo">8597</span> break;<a name="line.8597"></a>
+<span class="sourceLineNo">8598</span> default:<a name="line.8598"></a>
+<span class="sourceLineNo">8599</span> throw new RuntimeException("Unknown durability " + durability);<a name="line.8599"></a>
+<span class="sourceLineNo">8600</span> }<a name="line.8600"></a>
+<span class="sourceLineNo">8601</span> }<a name="line.8601"></a>
+<span class="sourceLineNo">8602</span> }<a name="line.8602"></a>
+<span class="sourceLineNo">8603</span><a name="line.8603"></a>
+<span class="sourceLineNo">8604</span> /**<a name="line.8604"></a>
+<span class="sourceLineNo">8605</span> * Check whether we should sync the wal from the table's durability settings<a name="line.8605"></a>
+<span class="sourceLineNo">8606</span> */<a name="line.8606"></a>
+<span class="sourceLineNo">8607</span> private boolean shouldSyncWAL() {<a name="line.8607"></a>
+<span class="sourceLineNo">8608</span> return regionDurability.ordinal() > Durability.ASYNC_WAL.ordinal();<a name="line.8608"></a>
+<span class="sourceLineNo">8609</span> }<a name="line.8609"></a>
+<span class="sourceLineNo">8610</span><a name="line.8610"></a>
+<span class="sourceLineNo">8611</span> /**<a name="line.8611"></a>
+<span class="sourceLineNo">8612</span> * A mocked list implementation - discards all updates.<a name="line.8612"></a>
+<span class="sourceLineNo">8613</span> */<a name="line.8613"></a>
+<span class="sourceLineNo">8614</span> private static final List<Cell> MOCKED_LIST = new AbstractList<Cell>() {<a name="line.8614"></a>
+<span class="sourceLineNo">8615</span><a name="line.8615"></a>
+<span class="sourceLineNo">8616</span> @Override<a name="line.8616"></a>
+<span class="sourceLineNo">8617</span> public void add(int index, Cell element) {<a name="line.8617"></a>
+<span class="sourceLineNo">8618</span> // do nothing<a name="line.8618"></a>
+<span class="sourceLineNo">8619</span> }<a name="line.8619"></a>
+<span class="sourceLineNo">8620</span><a name="line.8620"></a>
+<span class="sourceLineNo">8621</span> @Override<a name="line.8621"></a>
+<span class="sourceLineNo">8622</span> public boolean addAll(int index, Collection<? extends Cell> c) {<a name="line.8622"></a>
+<span class="sourceLineNo">8623</span> return false; // this list is never changed as a result of an update<a name="line.8623"></a>
+<span class="sourceLineNo">8624</span> }<a name="line.8624"></a>
+<span class="sourceLineNo">8625</span><a name="line.8625"></a>
+<span class="sourceLineNo">8626</span> @Override<a name="line.8626"></a>
+<span class="sourceLineNo">8627</span> public KeyValue get(int index) {<a name="line.8627"></a>
+<span class="sourceLineNo">8628</span> throw new UnsupportedOperationException();<a name="line.8628"></a>
+<span class="sourceLineNo">8629</span> }<a name="line.8629"></a>
+<span class="sourceLineNo">8630</span><a name="line.8630"></a>
+<span class="sourceLineNo">8631</span> @Override<a name="line.8631"></a>
+<span class="sourceLineNo">8632</span> public int size() {<a name="line.8632"></a>
+<span class="sourceLineNo">8633</span> return 0;<a name="line.8633"></a>
+<span class="sourceLineNo">8634</span> }<a name="line.8634"></a>
+<span class="sourceLineNo">8635</span> };<a name="line.8635"></a>
+<span class="sourceLineNo">8636</span><a name="line.8636"></a>
+<span class="sourceLineNo">8637</span> /** @return the latest sequence number that was read from storage when this region was opened */<a name="line.8637"></a>
+<span class="sourceLineNo">8638</span> public long getOpenSeqNum() {<a name="line.8638"></a>
+<span class="sourceLineNo">8639</span> return this.openSeqNum;<a name="line.8639"></a>
+<span class="sourceLineNo">8640</span> }<a name="line.8640"></a>
+<span class="sourceLineNo">8641</span><a name="line.8641"></a>
+<span class="sourceLineNo">8642</span> @Override<a name="line.8642"></a>
+<span class="sourceLineNo">8643</span> public Map<byte[], Long> getMaxStoreSeqId() {<a name="line.8643"></a>
+<span class="sourceLineNo">8644</span> return this.maxSeqIdInStores;<a name="line.8644"></a>
+<span class="sourceLineNo">8645</span> }<a name="line.8645"></a>
+<span class="sourceLineNo">8646</span><a name="line.8646"></a>
+<span class="sourceLineNo">8647</span> public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8647"></a>
+<span class="sourceLineNo">8648</span> return wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8648"></a>
+<span class="sourceLineNo">8649</span> }<a name="line.8649"></a>
+<span class="sourceLineNo">8650</span><a name="line.8650"></a>
+<span class="sourceLineNo">8651</span> @Override<a name="line.8651"></a>
+<span class="sourceLineNo">8652</span> public CompactionState getCompactionState() {<a name="line.8652"></a>
+<span class="sourceLineNo">8653</span> boolean hasMajor = majorInProgress.get() > 0, hasMinor = minorInProgress.get() > 0;<a name="line.8653"></a>
+<span class="sourceLineNo">8654</span> return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8654"></a>
+<span class="sourceLineNo">8655</span> : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8655"></a>
+<span class="sourceLineNo">8656</span> }<a name="line.8656"></a>
+<span class="sourceLineNo">8657</span><a name="line.8657"></a>
+<span class="sourceLineNo">8658</span> public void reportCompactionRequestStart(boolean isMajor){<a name="line.8658"></a>
+<span class="sourceLineNo">8659</span> (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8659"></a>
+<span class="sourceLineNo">8660</span> }<a name="line.8660"></a>
<span class="sourceLineNo">8661</span><a name="line.8661"></a>
-<span class="sourceLineNo">8662</span> assert newValue >= 0;<a name="line.8662"></a>
-<span class="sourceLineNo">8663</span> }<a name="line.8663"></a>
+<span class="sourceLineNo">8662</span> public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8662"></a>
+<span class="sourceLineNo">8663</span> int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8663"></a>
<span class="sourceLineNo">8664</span><a name="line.8664"></a>
-<span class="sourceLineNo">8665</span> public void reportCompactionRequestFailure() {<a name="line.8665"></a>
-<span class="sourceLineNo">8666</span> compactionsFailed.increment();<a name="line.8666"></a>
-<span class="sourceLineNo">8667</span> }<a name="line.8667"></a>
-<span class="sourceLineNo">8668</span><a name="line.8668"></a>
-<span class="sourceLineNo">8669</span> public void incrementCompactionsQueuedCount() {<a name="line.8669"></a>
-<span class="sourceLineNo">8670</span> compactionsQueued.increment();<a name="line.8670"></a>
+<span class="sourceLineNo">8665</span> // metrics<a name="line.8665"></a>
+<span class="sourceLineNo">8666</span> compactionsFinished.increment();<a name="line.8666"></a>
+<span class="sourceLineNo">8667</span> compactionNumFilesCompacted.add(numFiles);<a name="line.8667"></a>
+<span class="sourceLineNo">8668</span> compactionNumBytesCompacted.add(filesSizeCompacted);<a name="line.8668"></a>
+<span class="sourceLineNo">8669</span><a name="line.8669"></a>
+<span class="sourceLineNo">8670</span> assert newValue >= 0;<a name="line.8670"></a>
<span class="sourceLineNo">8671</span> }<a name="line.8671"></a>
<span class="sourceLineNo">8672</span><a name="line.8672"></a>
-<span class="sourceLineNo">8673</span> public void decrementCompactionsQueuedCount() {<a name="line.8673"></a>
-<span class="sourceLineNo">8674</span> compactionsQueued.decrement();<a name="line.8674"></a>
+<span class="sourceLineNo">8673</span> public void reportCompactionRequestFailure() {<a name="line.8673"></a>
+<span class="sourceLineNo">8674</span> compactionsFailed.increment();<a name="line.8674"></a>
<span class="sourceLineNo">8675</span> }<a name="line.8675"></a>
<span class="sourceLineNo">8676</span><a name="line.8676"></a>
-<span class="sourceLineNo">8677</span> public void incrementFlushesQueuedCount() {<a name="line.8677"></a>
-<span class="sourceLineNo">8678</span> flushesQueued.increment();<a name="line.8678"></a>
+<span class="sourceLineNo">8677</span> public void incrementCompactionsQueuedCount() {<a name="line.8677"></a>
+<span class="sourceLineNo">8678</span> compactionsQueued.increment();<a name="line.8678"></a>
<span class="sourceLineNo">8679</span> }<a name="line.8679"></a>
<span class="sourceLineNo">8680</span><a name="line.8680"></a>
-<span class="sourceLineNo">8681</span> @VisibleForTesting<a name="line.8681"></a>
-<span class="sourceLineNo">8682</span> public long getReadPoint() {<a name="line.8682"></a>
-<span class="sourceLineNo">8683</span> return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8683"></a>
-<span class="sourceLineNo">8684</span> }<a name="line.8684"></a>
-<span class="sourceLineNo">8685</span><a name="line.8685"></a>
-<span class="sourceLineNo">8686</span> /**<a name="line.8686"></a>
-<span class="sourceLineNo">8687</span> * {@inheritDoc}<a name="line.8687"></a>
-<span class="sourceLineNo">8688</span> */<a name="line.8688"></a>
-<span class="sourceLineNo">8689</span> @Override<a name="line.8689"></a>
-<span class="sourceLineNo">8690</span> public void onConfigurationChange(Configuration conf) {<a name="line.8690"></a>
-<span class="sourceLineNo">8691</span> this.storeHotnessProtector.update(conf);<a name="line.8691"></a>
+<span class="sourceLineNo">8681</span> public void decrementCompactionsQueuedCount() {<a name="line.8681"></a>
+<span class="sourceLineNo">8682</span> compactionsQueued.decrement();<a name="line.8682"></a>
+<span class="sourceLineNo">8683</span> }<a name="line.8683"></a>
+<span class="sourceLineNo">8684</span><a name="line.8684"></a>
+<span class="sourceLineNo">8685</span> public void incrementFlushesQueuedCount() {<a name="line.8685"></a>
+<span class="sourceLineNo">8686</span> flushesQueued.increment();<a name="line.8686"></a>
+<span class="sourceLineNo">8687</span> }<a name="line.8687"></a>
+<span class="sourceLineNo">8688</span><a name="line.8688"></a>
+<span class="sourceLineNo">8689</span> @VisibleForTesting<a name="line.8689"></a>
+<span class="sourceLineNo">8690</span> public long getReadPoint() {<a name="line.8690"></a>
+<span class="sourceLineNo">8691</span> return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8691"></a>
<span class="sourceLineNo">8692</span> }<a name="line.8692"></a>
<span class="sourceLineNo">8693</span><a name="line.8693"></a>
<span class="sourceLineNo">8694</span> /**<a name="line.8694"></a>
<span class="sourceLineNo">8695</span> * {@inheritDoc}<a name="line.8695"></a>
<span class="sourceLineNo">8696</span> */<a name="line.8696"></a>
<span class="sourceLineNo">8697</span> @Override<a name="line.8697"></a>
-<span class="sourceLineNo">8698</span> public void registerChildren(ConfigurationManager manager) {<a name="line.8698"></a>
-<span class="sourceLineNo">8699</span> configurationManager = Optional.of(manager);<a name="line.8699"></a>
-<span class="sourceLineNo">8700</span> stores.values().forEach(manager::registerObserver);<a name="line.8700"></a>
-<span class="sourceLineNo">8701</span> }<a name="line.8701"></a>
-<span class="sourceLineNo">8702</span><a name="line.8702"></a>
-<span class="sourceLineNo">8703</span> /**<a name="line.8703"></a>
-<span class="sourceLineNo">8704</span> * {@inheritDoc}<a name="line.8704"></a>
-<span class="sourceLineNo">8705</span> */<a name="line.8705"></a>
-<span class="sourceLineNo">8706</span> @Override<a name="line.8706"></a>
-<span class="sourceLineNo">8707</span> public void deregisterChildren(ConfigurationManager manager) {<a name="line.8707"></a>
-<span class="sourceLineNo">8708</span> stores.values().forEach(configurationManager.get()::deregisterObserver);<a name="line.8708"></a>
+<span class="sourceLineNo">8698</span> public void onConfigurationChange(Configuration conf) {<a name="line.8698"></a>
+<span class="sourceLineNo">8699</span> this.storeHotnessProtector.update(conf);<a name="line.8699"></a>
+<span class="sourceLineNo">8700</span> }<a name="line.8700"></a>
+<span class="sourceLineNo">8701</span><a name="line.8701"></a>
+<span class="sourceLineNo">8702</span> /**<a name="line.8702"></a>
+<span class="sourceLineNo">8703</span> * {@inheritDoc}<a name="line.8703"></a>
+<span class="sourceLineNo">8704</span> */<a name="line.8704"></a>
+<span class="sourceLineNo">8705</span> @Override<a name="line.8705"></a>
+<span class="sourceLineNo">8706</span> public void registerChildren(ConfigurationManager manager) {<a name="line.8706"></a>
+<span class="sourceLineNo">8707</span> configurationManager = Optional.of(manager);<a name="line.8707"></a>
+<span class="sourceLineNo">8708</span> stores.values().forEach(manager::registerObserver);<a name="line.8708"></a>
<span class="sourceLineNo">8709</span> }<a name="line.8709"></a>
<span class="sourceLineNo">8710</span><a name="line.8710"></a>
-<span class="sourceLineNo">8711</span> @Override<a name="line.8711"></a>
-<span class="sourceLineNo">8712</span> public CellComparator getCellComparator() {<a name="line.8712"></a>
-<span class="sourceLineNo">8713</span> return this.getRegionInfo().isMetaRegion() ? CellComparatorImpl.META_COMPARATOR<a name="line.8713"></a>
-<span class="sourceLineNo">8714</span> : CellComparatorImpl.COMPARATOR;<a name="line.8714"></a>
-<span class="sourceLineNo">8715</span> }<a name="line.8715"></a>
-<span class="sourceLineNo">8716</span><a name="line.8716"></a>
-<span class="sourceLineNo">8717</span> public long getMemStoreFlushSize() {<a name="line.8717"></a>
-<span class="sourceLineNo">8718</span> return this.memstoreFlushSize;<a name="line.8718"></a>
-<span class="sourceLineNo">8719</span> }<a name="line.8719"></a>
-<span class="sourceLineNo">8720</span><a name="line.8720"></a>
-<span class="sourceLineNo">8721</span><a name="line.8721"></a>
-<span class="sourceLineNo">8722</span> //// method for debugging tests<a name="line.8722"></a>
-<span class="sourceLineNo">8723</span> void throwException(String title, String regionName) {<a name="line.8723"></a>
-<span class="sourceLineNo">8724</span> StringBuilder buf = new StringBuilder();<a name="line.8724"></a>
-<span class="sourceLineNo">8725</span> buf.append(title + ", ");<a name="line.8725"></a>
-<span class="sourceLineNo">8726</span> buf.append(getRegionInfo().toString());<a name="line.8726"></a>
-<span class="sourceLineNo">8727</span> buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8727"></a>
-<span class="sourceLineNo">8728</span> buf.append("stores: ");<a name="line.8728"></a>
-<span class="sourceLineNo">8729</span> for (HStore s : stores.values()) {<a name="line.8729"></a>
-<span class="sourceLineNo">8730</span> buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8730"></a>
-<span class="sourceLineNo">8731</span> buf.append(" size: ");<a name="line.8731"></a>
-<span class="sourceLineNo">8732</span> buf.append(s.getMemStoreSize().getDataSize());<a name="line.8732"></a>
-<span class="sourceLineNo">8733</span> buf.append(" ");<a name="line.8733"></a>
-<span class="sourceLineNo">8734</span> }<a name="line.8734"></a>
-<span class="sourceLineNo">8735</span> buf.append("end-of-stores");<a name="line.8735"></a>
-<span class="sourceLineNo">8736</span> buf.append(", memstore size ");<a name="line.8736"></a>
-<span class="sourceLineNo">8737</span> buf.append(getMemStoreDataSize());<a name="line.8737"></a>
-<span class="sourceLineNo">8738</span> if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8738"></a>
-<span class="sourceLineNo">8739</span> throw new RuntimeException(buf.toString());<a name="line.8739"></a>
-<span class="sourceLineNo">8740</span> }<a name="line.8740"></a>
-<span class="sourceLineNo">8741</span> }<a name="line.8741"></a>
-<span class="sourceLineNo">8742</span><a name="line.8742"></a>
-<span class="sourceLineNo">8743</span> @Override<a name="line.8743"></a>
-<span class="sourceLineNo">8744</span> public void requestCompaction(String why, int priority, boolean major,<a name="line.8744"></a>
-<span class="sourceLineNo">8745</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8745"></a>
-<span class="sourceLineNo">8746</span> if (major) {<a name="line.8746"></a>
-<span class="sourceLineNo">8747</span> stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.8747"></a>
+<span class="sourceLineNo">8711</span> /**<a name="line.8711"></a>
+<span class="sourceLineNo">8712</span> * {@inheritDoc}<a name="line.8712"></a>
+<span class="sourceLineNo">8713</span> */<a name="line.8713"></a>
+<span class="sourceLineNo">8714</span> @Override<a name="line.8714"></a>
+<span class="sourceLineNo">8715</span> public void deregisterChildren(ConfigurationManager manager) {<a name="line.8715"></a>
+<span class="sourceLineNo">8716</span> stores.values().forEach(configurationManager.get()::deregisterObserver);<a name="line.8716"></a>
+<span class="sourceLineNo">8717</span> }<a name="line.8717"></a>
+<span class="sourceLineNo">8718</span><a name="line.8718"></a>
+<span class="sourceLineNo">8719</span> @Override<a name="line.8719"></a>
+<span class="sourceLineNo">8720</span> public CellComparator getCellComparator() {<a name="line.8720"></a>
+<span class="sourceLineNo">8721</span> return this.getRegionInfo().isMetaRegion() ? CellComparatorImpl.META_COMPARATOR<a name="line.8721"></a>
+<span class="sourceLineNo">8722</span> : CellComparatorImpl.COMPARATOR;<a name="line.8722"></a>
+<span class="sourceLineNo">8723</span> }<a name="line.8723"></a>
+<span class="sourceLineNo">8724</span><a name="line.8724"></a>
+<span class="sourceLineNo">8725</span> public long getMemStoreFlushSize() {<a name="line.8725"></a>
+<span class="sourceLineNo">8726</span> return this.memstoreFlushSize;<a name="line.8726"></a>
+<span class="sourceLineNo">8727</span> }<a name="line.8727"></a>
+<span class="sourceLineNo">8728</span><a name="line.8728"></a>
+<span class="sourceLineNo">8729</span><a name="line.8729"></a>
+<span class="sourceLineNo">8730</span> //// method for debugging tests<a name="line.8730"></a>
+<span class="sourceLineNo">8731</span> void throwException(String title, String regionName) {<a name="line.8731"></a>
+<span class="sourceLineNo">8732</span> StringBuilder buf = new StringBuilder();<a name="line.8732"></a>
+<span class="sourceLineNo">8733</span> buf.append(title + ", ");<a name="line.8733"></a>
+<span class="sourceLineNo">8734</span> buf.append(getRegionInfo().toString());<a name="line.8734"></a>
+<span class="sourceLineNo">8735</span> buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8735"></a>
+<span class="sourceLineNo">8736</span> buf.append("stores: ");<a name="line.8736"></a>
+<span class="sourceLineNo">8737</span> for (HStore s : stores.values()) {<a name="line.8737"></a>
+<span class="sourceLineNo">8738</span> buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8738"></a>
+<span class="sourceLineNo">8739</span> buf.append(" size: ");<a name="line.8739"></a>
+<span class="sourceLineNo">8740</span> buf.append(s.getMemStoreSize().getDataSize());<a name="line.8740"></a>
+<span class="sourceLineNo">8741</span> buf.append(" ");<a name="line.8741"></a>
+<span class="sourceLineNo">8742</span> }<a name="line.8742"></a>
+<span class="sourceLineNo">8743</span> buf.append("end-of-stores");<a name="line.8743"></a>
+<span class="sourceLineNo">8744</span> buf.append(", memstore size ");<a name="line.8744"></a>
+<span class="sourceLineNo">8745</span> buf.append(getMemStoreDataSize());<a name="line.8745"></a>
+<span class="sourceLineNo">8746</span> if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8746"></a>
+<span class="sourceLineNo">8747</span> throw new RuntimeException(buf.toString());<a name="line.8747"></a>
<span class="sourceLineNo">8748</span> }<a name="line.8748"></a>
-<span class="sourceLineNo">8749</span> rsServices.getCompactionRequestor().requestCompaction(this, why, priority, tracker,<a name="line.8749"></a>
-<span class="sourceLineNo">8750</span> RpcServer.getRequestUser().orElse(null));<a name="line.8750"></a>
-<span class="sourceLineNo">8751</span> }<a name="line.8751"></a>
-<span class="sourceLineNo">8752</span><a name="line.8752"></a>
-<span class="sourceLineNo">8753</span> @Override<a name="line.8753"></a>
-<span class="sourceLineNo">8754</span> public void requestCompaction(byte[] family, String why, int priority, boolean major,<a name="line.8754"></a>
-<span class="sourceLineNo">8755</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8755"></a>
-<span class="sourceLineNo">8756</span> HStore store = stores.get(family);<a name="line.8756"></a>
-<span class="sourceLineNo">8757</span> if (store == null) {<a name="line.8757"></a>
-<span class="sourceLineNo">8758</span> throw new NoSuchColumnFamilyException("column family " + Bytes.toString(family) +<a name="line.8758"></a>
-<span class="sourceLineNo">8759</span> " does not exist in region " + getRegionInfo().getRegionNameAsString());<a name="line.8759"></a>
-<span class="sourceLineNo">8760</span> }<a name="line.8760"></a>
-<span class="sourceLineNo">8761</span> if (major) {<a name="line.8761"></a>
-<span class="sourceLineNo">8762</span> store.triggerMajorCompaction();<a name="line.8762"></a>
-<span class="sourceLineNo">8763</span> }<a name="line.8763"></a>
-<span class="sourceLineNo">8764</span> rsServices.getCompactionRequestor().requestCompaction(this, store, why, priority, tracker,<a name="line.8764"></a>
-<span class="sourceLineNo">8765</span> RpcServer.getRequestUser().orElse(null));<a name="line.8765"></a>
-<span class="sourceLineNo">8766</span> }<a name="line.8766"></a>
-<span class="sourceLineNo">8767</span><a name="line.8767"></a>
-<span class="sourceLineNo">8768</span> private void requestFlushIfNeeded() throws RegionTooBusyException {<a name="line.8768"></a>
-<span class="sourceLineNo">8769</span> if(isFlushSize(this.memStoreSizing.getMemStoreSize())) {<a name="line.8769"></a>
-<span class="sourceLineNo">8770</span> requestFlush();<a name="line.8770"></a>
+<span class="sourceLineNo">8749</span> }<a name="line.8749"></a>
+<span class="sourceLineNo">8750</span><a name="line.8750"></a>
+<span class="sourceLineNo">8751</span> @Override<a name="line.8751"></a>
+<span class="sourceLineNo">8752</span> public void requestCompaction(String why, int priority, boolean major,<a name="line.8752"></a>
+<span class="sourceLineNo">8753</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8753"></a>
+<span class="sourceLineNo">8754</span> if (major) {<a name="line.8754"></a>
+<span class="sourceLineNo">8755</span> stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.8755"></a>
+<span class="sourceLineNo">8756</span> }<a name="line.8756"></a>
+<span class="sourceLineNo">8757</span> rsServices.getCompactionRequestor().requestCompaction(this, why, priority, tracker,<a name="line.8757"></a>
+<span class="sourceLineNo">8758</span> RpcServer.getRequestUser().orElse(null));<a name="line.8758"></a>
+<span class="sourceLineNo">8759</span> }<a name="line.8759"></a>
+<span class="sourceLineNo">8760</span><a name="line.8760"></a>
+<span class="sourceLineNo">8761</span> @Override<a name="line.8761"></a>
+<span class="sourceLineNo">8762</span> public void requestCompaction(byte[] family, String why, int priority, boolean major,<a name="line.8762"></a>
+<span class="sourceLineNo">8763</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8763"></a>
+<span class="sourceLineNo">8764</span> HStore store = stores.get(family);<a name="line.8764"></a>
+<span class="sourceLineNo">8765</span> if (store == null) {<a name="line.8765"></a>
+<span class="sourceLineNo">8766</span> throw new NoSuchColumnFamilyException("column family " + Bytes.toString(family) +<a name="line.8766"></a>
+<span class="sourceLineNo">8767</span> " does not exist in region " + getRegionInfo().getRegionNameAsString());<a name="line.8767"></a>
+<span class="sourceLineNo">8768</span> }<a name="line.8768"></a>
+<span class="sourceLineNo">8769</span> if (major) {<a name="line.8769"></a>
+<span class="sourceLineNo">8770</span> store.triggerMajorCompaction();<a name="line.8770"></a>
<span class="sourceLineNo">8771</span> }<a name="line.8771"></a>
-<span class="sourceLineNo">8772</span> }<a name="line.8772"></a>
-<span class="sourceLineNo">8773</span><a name="line.8773"></a>
-<span class="sourceLineNo">8774</span> private void requestFlush() {<a name="line.8774"></a>
-<span class="sourceLineNo">8775</span> if (this.rsServices == null) {<a name="line.8775"></a>
-<span class="sourceLineNo">8776</span> return;<a name="line.8776"></a>
-<span class="sourceLineNo">8777</span> }<a name="line.8777"></a>
-<span class="sourceLineNo">8778</span> requestFlush0(FlushLifeCycleTracker.DUMMY);<a name="line.8778"></a>
-<span class="sourceLineNo">8779</span> }<a name="line.8779"></a>
-<span class="sourceLineNo">8780</span><a name="line.8780"></a>
-<span class="sourceLineNo">8781</span> private void requestFlush0(FlushLifeCycleTracker tracker) {<a name="line.8781"></a>
-<span class="sourceLineNo">8782</span> boolean shouldFlush = false;<a name="line.8782"></a>
-<span class="sourceLineNo">8783</span> synchronized (writestate) {<a name="line.8783"></a>
-<span class="sourceLineNo">8784</span> if (!this.writestate.isFlushRequested()) {<a name="line.8784"></a>
-<span class="sourceLineNo">8785</span> shouldFlush = true;<a name="line.8785"></a>
-<span class="sourceLineNo">8786</span> writestate.flushRequested = true;<a name="line.8786"></a>
-<span class="sourceLineNo">8787</span> }<a name="line.8787"></a>
-<span class="sourceLineNo">8788</span> }<a name="line.8788"></a>
-<span class="sourceLineNo">8789</span> if (shouldFlush) {<a name="line.8789"></a>
-<span class="sourceLineNo">8790</span> // Make request outside of synchronize block; HBASE-818.<a name="line.8790"></a>
-<span class="sourceLineNo">8791</span> this.rsServices.getFlushRequester().requestFlush(this, false, tracker);<a name="line.8791"></a>
-<span class="sourceLineNo">8792</span> if (LOG.isDebugEnabled()) {<a name="line.8792"></a>
-<span class="sourceLineNo">8793</span> LOG.debug("Flush requested on " + this.getRegionInfo().getEncodedName());<a name="line.8793"></a>
-<span class="sourceLineNo">8794</span> }<a name="line.8794"></a>
-<span class="sourceLineNo">8795</span> } else {<a name="line.8795"></a>
-<span class="sourceLineNo">8796</span> tracker.notExecuted("Flush already requested on " + this);<a name="line.8796"></a>
-<span class="sourceLineNo">8797</span> }<a name="line.8797"></a>
-<span class="sourceLineNo">8798</span> }<a name="line.8798"></a>
-<span class="sourceLineNo">8799</span><a name="line.8799"></a>
-<span class="sourceLineNo">8800</span> @Override<a name="line.8800"></a>
-<span class="sourceLineNo">8801</span> public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8801"></a>
-<span class="sourceLineNo">8802</span> requestFlush0(tracker);<a name="line.8802"></a>
-<span class="sourceLineNo">8803</span> }<a name="line.8803"></a>
-<span class="sourceLineNo">8804</span><a name="line.8804"></a>
-<span class="sourceLineNo">8805</span> /**<a name="line.8805"></a>
-<span class="sourceLineNo">8806</span> * This method modifies the region's configuration in order to inject replication-related<a name="line.8806"></a>
-<span class="sourceLineNo">8807</span> * features<a name="line.8807"></a>
-<span class="sourceLineNo">8808</span> * @param conf region configurations<a name="line.8808"></a>
-<span class="sourceLineNo">8809</span> */<a name="line.8809"></a>
-<span class="sourceLineNo">8810</span> static void decorateRegionConfiguration(Configuration conf) {<a name="line.8810"></a>
-<span class="sourceLineNo">8811</span> if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.8811"></a>
-<span class="sourceLineNo">8812</span> String plugins = conf.get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,"");<a name="line.8812"></a>
-<span class="sourceLineNo">8813</span> String replicationCoprocessorClass = ReplicationObserver.class.getCanonicalName();<a name="line.8813"></a>
-<span class="sourceLineNo">8814</span> if (!plugins.contains(replicationCoprocessorClass)) {<a name="line.8814"></a>
-<span class="sourceLineNo">8815</span> conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,<a name="line.8815"></a>
-<span class="sourceLineNo">8816</span> (plugins.equals("") ? "" : (plugins + ",")) + replicationCoprocessorClass);<a name="line.8816"></a>
-<span class="sourceLineNo">8817</span> }<a name="line.8817"></a>
-<span class="sourceLineNo">8818</span> }<a name="line.8818"></a>
-<span class="sourceLineNo">8819</span> }<a name="line.8819"></a>
-<span class="sourceLineNo">8820</span>}<a name="line.8820"></a>
+<span class="sourceLineNo">8772</span> rsServices.getCompactionRequestor().requestCompaction(this, store, why, priority, tracker,<a name="line.8772"></a>
+<span class="sourceLineNo">8773</span> RpcServer.getRequestUser().orElse(null));<a name="line.8773"></a>
+<span class="sourceLineNo">8774</span> }<a name="line.8774"></a>
+<span class="sourceLineNo">8775</span><a name="line.8775"></a>
+<span class="sourceLineNo">8776</span> private void requestFlushIfNeeded() throws RegionTooBusyException {<a name="line.8776"></a>
+<span class="sourceLineNo">8777</span> if(isFlushSize(this.memStoreSizing.getMemStoreSize())) {<a name="line.8777"></a>
+<span class="sourceLineNo">8778</span> requestFlush();<a name="line.8778"></a>
+<span class="sourceLineNo">8779</span> }<a name="line.8779"></a>
+<span class="sourceLineNo">8780</span> }<a name="line.8780"></a>
+<span class="sourceLineNo">8781</span><a name="line.8781"></a>
+<span class="sourceLineNo">8782</span> private void requestFlush() {<a name="line.8782"></a>
+<span class="sourceLineNo">8783</span> if (this.rsServices == null) {<a name="line.8783"></a>
+<span class="sourceLineNo">8784</span> return;<a name="line.8784"></a>
+<span class="sourceLineNo">8785</span> }<a name="line.8785"></a>
+<span class="sourceLineNo">8786</span> requestFlush0(FlushLifeCycleTracker.DUMMY);<a name="line.8786"></a>
+<span class="sourceLineNo">8787</span> }<a name="line.8787"></a>
+<span class="sourceLineNo">8788</span><a name="line.8788"></a>
+<span class="sourceLineNo">8789</span> private void requestFlush0(FlushLifeCycleTracker tracker) {<a name="line.8789"></a>
+<span class="sourceLineNo">8790</span> boolean shouldFlush = false;<a name="line.8790"></a>
+<span class="sourceLineNo">8791</span> synchronized (writestate) {<a name="line.8791"></a>
+<span class="sourceLineNo">8792</span> if (!this.writestate.isFlushRequested()) {<a name="line.8792"></a>
+<span class="sourceLineNo">8793</span> shouldFlush = true;<a name="line.8793"></a>
+<span class="sourceLineNo">8794</span> writestate.flushRequested = true;<a name="line.8794"></a>
+<span class="sourceLineNo">8795</span> }<a name="line.8795"></a>
+<span class="sourceLineNo">8796</span> }<a name="line.8796"></a>
+<span class="sourceLineNo">8797</span> if (shouldFlush) {<a name="line.8797"></a>
+<span class="sourceLineNo">8798</span> // Make request outside of synchronize block; HBASE-818.<a name="line.8798"></a>
+<span class="sourceLineNo">8799</span> this.rsServices.getFlushRequester().requestFlush(this, false, tracker);<a name="line.8799"></a>
+<span class="sourceLineNo">8800</span> if (LOG.isDebugEnabled()) {<a name="line.8800"></a>
+<span class="sourceLineNo">8801</span> LOG.debug("Flush requested on " + this.getRegionInfo().getEncodedName());<a name="line.8801"></a>
+<span class="sourceLineNo">8802</span> }<a name="line.8802"></a>
+<span class="sourceLineNo">8803</span> } else {<a name="line.8803"></a>
+<span class="sourceLineNo">8804</span> tracker.notExecuted("Flush already requested on " + this);<a name="line.8804"></a>
+<span class="sourceLineNo">8805</span> }<a name="line.8805"></a>
+<span class="sourceLineNo">8806</span> }<a name="line.8806"></a>
+<span class="sourceLineNo">8807</span><a name="line.8807"></a>
+<span class="sourceLineNo">8808</span> @Override<a name="line.8808"></a>
+<span class="sourceLineNo">8809</span> public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8809"></a>
+<span class="sourceLineNo">8810</span> requestFlush0(tracker);<a name="line.8810"></a>
+<span class="sourceLineNo">8811</span> }<a name="line.8811"></a>
+<span class="sourceLineNo">8812</span><a name="line.8812"></a>
+<span class="sourceLineNo">8813</span> /**<a name="line.8813"></a>
+<span class="sourceLineNo">8814</span> * This method modifies the region's configuration in order to inject replication-related<a name="line.8814"></a>
+<span class="sourceLineNo">8815</span> * features<a name="line.8815"></a>
+<span class="sourceLineNo">8816</span> * @param conf region configurations<a name="line.8816"></a>
+<span class="sourceLineNo">8817</span> */<a name="line.8817"></a>
+<span class="sourceLineNo">8818</span> static void decorateRegionConfiguration(Configuration conf) {<a name="line.8818"></a>
+<span class="sourceLineNo">8819</span> if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.8819"></a>
+<span class="sourceLineNo">8820</span> String plugins = conf.get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,"");<a name="line.8820"></a>
+<span class="sourceLineNo">8821</span> String replicationCoprocessorClass = ReplicationObserver.class.getCanonicalName();<a name="line.8821"></a>
+<span class="sourceLineNo">8822</span> if (!plugins.contains(replicationCoprocessorClass)) {<a name="line.8822"></a>
+<span class="sourceLineNo">8823</span> conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,<a name="line.8823"></a>
+<span class="sourceLineNo">8824</span> (plugins.equals("") ? "" : (plugins + ",")) + replicationCoprocessorClass);<a name="line.8824"></a>
+<span class="sourceLineNo">8825</span> }<a name="line.8825"></a>
+<span class="sourceLineNo">8826</span> }<a name="line.8826"></a>
+<span class="sourceLineNo">8827</span> }<a name="line.8827"></a>
+<span class="sourceLineNo">8828</span>}<a name="line.8828"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
index 462c776..0384df4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
@@ -8109,723 +8109,731 @@
<span class="sourceLineNo">8101</span> break;<a name="line.8101"></a>
<span class="sourceLineNo">8102</span> default: throw new UnsupportedOperationException(op.toString());<a name="line.8102"></a>
<span class="sourceLineNo">8103</span> }<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span><a name="line.8104"></a>
-<span class="sourceLineNo">8105</span> cellPairs.add(new Pair<>(currentValue, newCell));<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span> // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span> if (results != null) {<a name="line.8107"></a>
-<span class="sourceLineNo">8108</span> results.add(newCell);<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span> }<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span> }<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span><a name="line.8111"></a>
-<span class="sourceLineNo">8112</span> // Give coprocessors a chance to update the new cells before apply to WAL or memstore<a name="line.8112"></a>
-<span class="sourceLineNo">8113</span> if (coprocessorHost != null) {<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span> // Here the operation must be increment or append.<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span> cellPairs = op == Operation.INCREMENT ?<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span> coprocessorHost.postIncrementBeforeWAL(mutation, cellPairs) :<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span> coprocessorHost.postAppendBeforeWAL(mutation, cellPairs);<a name="line.8117"></a>
+<span class="sourceLineNo">8104</span> int newCellSize = PrivateCellUtil.estimatedSerializedSizeOf(newCell);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span> if (newCellSize > this.maxCellSize) {<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span> String msg = "Cell with size " + newCellSize + " exceeds limit of " +<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span> this.maxCellSize + " bytes";<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span> if (LOG.isDebugEnabled()) {<a name="line.8108"></a>
+<span class="sourceLineNo">8109</span> LOG.debug(msg);<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span> }<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span> throw new DoNotRetryIOException(msg);<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span> }<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span> cellPairs.add(new Pair<>(currentValue, newCell));<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span> // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span> if (results != null) {<a name="line.8115"></a>
+<span class="sourceLineNo">8116</span> results.add(newCell);<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span> }<a name="line.8117"></a>
<span class="sourceLineNo">8118</span> }<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span> return cellPairs.stream().map(Pair::getSecond).collect(Collectors.toList());<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span> }<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span><a name="line.8121"></a>
-<span class="sourceLineNo">8122</span> private static Cell reckonDelta(final Cell delta, final Cell currentCell,<a name="line.8122"></a>
-<span class="sourceLineNo">8123</span> final byte[] columnFamily, final long now,<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span> Mutation mutation, Function<Cell, byte[]> supplier) throws IOException {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span> // Forward any tags found on the delta.<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span> List<Tag> tags = TagUtil.carryForwardTags(delta);<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span> tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span> if (currentCell != null) {<a name="line.8128"></a>
-<span class="sourceLineNo">8129</span> tags = TagUtil.carryForwardTags(tags, currentCell);<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span> byte[] newValue = supplier.apply(currentCell);<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span> return ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span> .setRow(mutation.getRow(), 0, mutation.getRow().length)<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span> .setFamily(columnFamily, 0, columnFamily.length)<a name="line.8133"></a>
-<span class="sourceLineNo">8134</span> // copy the qualifier if the cell is located in shared memory.<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span> .setQualifier(CellUtil.cloneQualifier(delta))<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span> .setTimestamp(Math.max(currentCell.getTimestamp() + 1, now))<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span> .setType(KeyValue.Type.Put.getCode())<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span> .setValue(newValue, 0, newValue.length)<a name="line.8138"></a>
-<span class="sourceLineNo">8139</span> .setTags(TagUtil.fromList(tags))<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span> .build();<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span> } else {<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span> PrivateCellUtil.updateLatestStamp(delta, now);<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span> return CollectionUtils.isEmpty(tags) ? delta : PrivateCellUtil.createCell(delta, tags);<a name="line.8143"></a>
-<span class="sourceLineNo">8144</span> }<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span> }<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span><a name="line.8146"></a>
-<span class="sourceLineNo">8147</span> /**<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span> * @return Get the long out of the passed in Cell<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span> */<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span> private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.8150"></a>
-<span class="sourceLineNo">8151</span> int len = cell.getValueLength();<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span> if (len != Bytes.SIZEOF_LONG) {<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span> // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span> throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.8154"></a>
-<span class="sourceLineNo">8155</span> }<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span> return PrivateCellUtil.getValueAsLong(cell);<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span> }<a name="line.8157"></a>
-<span class="sourceLineNo">8158</span><a name="line.8158"></a>
-<span class="sourceLineNo">8159</span> /**<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span> * Do a specific Get on passed <code>columnFamily</code> and column qualifiers.<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span> * @param mutation Mutation we are doing this Get for.<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span> * @param store Which column family on row (TODO: Go all Gets in one go)<a name="line.8162"></a>
-<span class="sourceLineNo">8163</span> * @param coordinates Cells from <code>mutation</code> used as coordinates applied to Get.<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span> * @return Return list of Cells found.<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span> */<a name="line.8165"></a>
-<span class="sourceLineNo">8166</span> private List<Cell> get(Mutation mutation, HStore store, List<Cell> coordinates,<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span> IsolationLevel isolation, TimeRange tr) throws IOException {<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span> // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span> // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.8169"></a>
-<span class="sourceLineNo">8170</span> // client since cells are in an array list.<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span> // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span> sort(coordinates, store.getComparator());<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span> Get get = new Get(mutation.getRow());<a name="line.8173"></a>
-<span class="sourceLineNo">8174</span> if (isolation != null) {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span> get.setIsolationLevel(isolation);<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span> }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span> for (Cell cell: coordinates) {<a name="line.8177"></a>
-<span class="sourceLineNo">8178</span> get.addColumn(store.getColumnFamilyDescriptor().getName(), CellUtil.cloneQualifier(cell));<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span> }<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span> // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span> if (tr != null) {<a name="line.8181"></a>
-<span class="sourceLineNo">8182</span> get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span> }<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span> return get(get, false);<a name="line.8184"></a>
-<span class="sourceLineNo">8185</span> }<a name="line.8185"></a>
-<span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span> /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span> * @return Sorted list of <code>cells</code> using <code>comparator</code><a name="line.8188"></a>
-<span class="sourceLineNo">8189</span> */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span> private static List<Cell> sort(List<Cell> cells, final CellComparator comparator) {<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span> cells.sort(comparator);<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span> return cells;<a name="line.8192"></a>
+<span class="sourceLineNo">8119</span><a name="line.8119"></a>
+<span class="sourceLineNo">8120</span> // Give coprocessors a chance to update the new cells before apply to WAL or memstore<a name="line.8120"></a>
+<span class="sourceLineNo">8121</span> if (coprocessorHost != null) {<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span> // Here the operation must be increment or append.<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span> cellPairs = op == Operation.INCREMENT ?<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span> coprocessorHost.postIncrementBeforeWAL(mutation, cellPairs) :<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span> coprocessorHost.postAppendBeforeWAL(mutation, cellPairs);<a name="line.8125"></a>
+<span class="sourceLineNo">8126</span> }<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span> return cellPairs.stream().map(Pair::getSecond).collect(Collectors.toList());<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span> }<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span><a name="line.8129"></a>
+<span class="sourceLineNo">8130</span> private static Cell reckonDelta(final Cell delta, final Cell currentCell,<a name="line.8130"></a>
+<span class="sourceLineNo">8131</span> final byte[] columnFamily, final long now,<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span> Mutation mutation, Function<Cell, byte[]> supplier) throws IOException {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span> // Forward any tags found on the delta.<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span> List<Tag> tags = TagUtil.carryForwardTags(delta);<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span> tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.8135"></a>
+<span class="sourceLineNo">8136</span> if (currentCell != null) {<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span> tags = TagUtil.carryForwardTags(tags, currentCell);<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span> byte[] newValue = supplier.apply(currentCell);<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span> return ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span> .setRow(mutation.getRow(), 0, mutation.getRow().length)<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span> .setFamily(columnFamily, 0, columnFamily.length)<a name="line.8141"></a>
+<span class="sourceLineNo">8142</span> // copy the qualifier if the cell is located in shared memory.<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span> .setQualifier(CellUtil.cloneQualifier(delta))<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span> .setTimestamp(Math.max(currentCell.getTimestamp() + 1, now))<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span> .setType(KeyValue.Type.Put.getCode())<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span> .setValue(newValue, 0, newValue.length)<a name="line.8146"></a>
+<span class="sourceLineNo">8147</span> .setTags(TagUtil.fromList(tags))<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span> .build();<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span> } else {<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span> PrivateCellUtil.updateLatestStamp(delta, now);<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span> return CollectionUtils.isEmpty(tags) ? delta : PrivateCellUtil.createCell(delta, tags);<a name="line.8151"></a>
+<span class="sourceLineNo">8152</span> }<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span> }<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span><a name="line.8154"></a>
+<span class="sourceLineNo">8155</span> /**<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span> * @return Get the long out of the passed in Cell<a name="line.8156"></a>
+<span class="sourceLineNo">8157</span> */<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span> private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span> int len = cell.getValueLength();<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span> if (len != Bytes.SIZEOF_LONG) {<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span> // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span> throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span> }<a name="line.8163"></a>
+<span class="sourceLineNo">8164</span> return PrivateCellUtil.getValueAsLong(cell);<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span> }<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span><a name="line.8166"></a>
+<span class="sourceLineNo">8167</span> /**<a name="line.8167"></a>
+<span class="sourceLineNo">8168</span> * Do a specific Get on passed <code>columnFamily</code> and column qualifiers.<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span> * @param mutation Mutation we are doing this Get for.<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span> * @param store Which column family on row (TODO: Go all Gets in one go)<a name="line.8170"></a>
+<span class="sourceLineNo">8171</span> * @param coordinates Cells from <code>mutation</code> used as coordinates applied to Get.<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span> * @return Return list of Cells found.<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span> */<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span> private List<Cell> get(Mutation mutation, HStore store, List<Cell> coordinates,<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span> IsolationLevel isolation, TimeRange tr) throws IOException {<a name="line.8175"></a>
+<span class="sourceLineNo">8176</span> // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span> // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span> // client since cells are in an array list.<a name="line.8178"></a>
+<span class="sourceLineNo">8179</span> // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span> sort(coordinates, store.getComparator());<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span> Get get = new Get(mutation.getRow());<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span> if (isolation != null) {<a name="line.8182"></a>
+<span class="sourceLineNo">8183</span> get.setIsolationLevel(isolation);<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span> }<a name="line.8184"></a>
+<span class="sourceLineNo">8185</span> for (Cell cell: coordinates) {<a name="line.8185"></a>
+<span class="sourceLineNo">8186</span> get.addColumn(store.getColumnFamilyDescriptor().getName(), CellUtil.cloneQualifier(cell));<a name="line.8186"></a>
+<span class="sourceLineNo">8187</span> }<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span> // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span> if (tr != null) {<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span> get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.8190"></a>
+<span class="sourceLineNo">8191</span> }<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span> return get(get, false);<a name="line.8192"></a>
<span class="sourceLineNo">8193</span> }<a name="line.8193"></a>
<span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span> public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span> ClassSize.OBJECT +<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span> ClassSize.ARRAY +<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span> 55 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT +<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span> (15 * Bytes.SIZEOF_LONG) +<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span> 3 * Bytes.SIZEOF_BOOLEAN);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span><a name="line.8201"></a>
-<span class="sourceLineNo">8202</span> // woefully out of date - currently missing:<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span> // 1 x HashMap - coprocessorServiceHandlers<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span> // 6 x LongAdder - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span> // checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.8205"></a>
-<span class="sourceLineNo">8206</span> // writeRequestsCount, cpRequestsCount<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span> // 1 x HRegion$WriteState - writestate<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span> // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span> // 1 x RegionSplitPolicy - splitPolicy<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span> // 1 x MetricsRegion - metricsRegion<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span> // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span> public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span> ClassSize.OBJECT + // closeLock<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span> (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span> (3 * ClassSize.ATOMIC_LONG) + // numPutsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8215"></a>
-<span class="sourceLineNo">8216</span> // compactionsFailed<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span> (2 * ClassSize.CONCURRENT_HASHMAP) + // lockedRows, scannerReadPoints<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span> WriteState.HEAP_SIZE + // writestate<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span> ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span> (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span> MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.8221"></a>
-<span class="sourceLineNo">8222</span> + 2 * ClassSize.TREEMAP // maxSeqIdInStores, replicationScopes<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span> + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span> + ClassSize.STORE_SERVICES // store services<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span> + StoreHotnessProtector.FIXED_SIZE<a name="line.8225"></a>
-<span class="sourceLineNo">8226</span> ;<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span><a name="line.8227"></a>
-<span class="sourceLineNo">8228</span> @Override<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span> public long heapSize() {<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span> // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span> return DEEP_OVERHEAD + stores.values().stream().mapToLong(HStore::heapSize).sum();<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span> }<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span><a name="line.8233"></a>
-<span class="sourceLineNo">8234</span> /**<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span> * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span> * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span> * org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span> *<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span> * <p><a name="line.8239"></a>
-<span class="sourceLineNo">8240</span> * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span> * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span> * After the first registration, subsequent calls with the same service name will fail with<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span> * a return value of {@code false}.<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span> * </p><a name="line.8244"></a>
-<span class="sourceLineNo">8245</span> * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span> * @return {@code true} if the registration was successful, {@code false}<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span> * otherwise<a name="line.8247"></a>
-<span class="sourceLineNo">8248</span> */<a name="line.8248"></a>
-<span class="sourceLineNo">8249</span> public boolean registerService(com.google.protobuf.Service instance) {<a name="line.8249"></a>
-<span class="sourceLineNo">8250</span> /*<a name="line.8250"></a>
-<span class="sourceLineNo">8251</span> * No stacking of instances is allowed for a single service name<a name="line.8251"></a>
-<span class="sourceLineNo">8252</span> */<a name="line.8252"></a>
-<span class="sourceLineNo">8253</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.8253"></a>
-<span class="sourceLineNo">8254</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.8254"></a>
-<span class="sourceLineNo">8255</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.8255"></a>
-<span class="sourceLineNo">8256</span> LOG.error("Coprocessor service " + serviceName +<a name="line.8256"></a>
-<span class="sourceLineNo">8257</span> " already registered, rejecting request from " + instance);<a name="line.8257"></a>
-<span class="sourceLineNo">8258</span> return false;<a name="line.8258"></a>
-<span class="sourceLineNo">8259</span> }<a name="line.8259"></a>
-<span class="sourceLineNo">8260</span><a name="line.8260"></a>
-<span class="sourceLineNo">8261</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.8261"></a>
-<span class="sourceLineNo">8262</span> if (LOG.isDebugEnabled()) {<a name="line.8262"></a>
-<span class="sourceLineNo">8263</span> LOG.debug("Registered coprocessor service: region=" +<a name="line.8263"></a>
-<span class="sourceLineNo">8264</span> Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.8264"></a>
-<span class="sourceLineNo">8265</span> " service=" + serviceName);<a name="line.8265"></a>
-<span class="sourceLineNo">8266</span> }<a name="line.8266"></a>
-<span class="sourceLineNo">8267</span> return true;<a name="line.8267"></a>
-<span class="sourceLineNo">8268</span> }<a name="line.8268"></a>
-<span class="sourceLineNo">8269</span><a name="line.8269"></a>
-<span class="sourceLineNo">8270</span> /**<a name="line.8270"></a>
-<span class="sourceLineNo">8271</span> * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.8271"></a>
-<span class="sourceLineNo">8272</span> * the registered protocol handlers. {@link Service} implementations must be registered via the<a name="line.8272"></a>
-<span class="sourceLineNo">8273</span> * {@link #registerService(com.google.protobuf.Service)}<a name="line.8273"></a>
-<span class="sourceLineNo">8274</span> * method before they are available.<a name="line.8274"></a>
-<span class="sourceLineNo">8275</span> *<a name="line.8275"></a>
-<span class="sourceLineNo">8276</span> * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.8276"></a>
-<span class="sourceLineNo">8277</span> * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.8277"></a>
-<span class="sourceLineNo">8278</span> * and parameters for the method invocation<a name="line.8278"></a>
-<span class="sourceLineNo">8279</span> * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.8279"></a>
-<span class="sourceLineNo">8280</span> * @throws IOException if no registered service handler is found or an error<a name="line.8280"></a>
-<span class="sourceLineNo">8281</span> * occurs during the invocation<a name="line.8281"></a>
-<span class="sourceLineNo">8282</span> * @see #registerService(com.google.protobuf.Service)<a name="line.8282"></a>
-<span class="sourceLineNo">8283</span> */<a name="line.8283"></a>
-<span class="sourceLineNo">8284</span> public com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.8284"></a>
-<span class="sourceLineNo">8285</span> CoprocessorServiceCall call) throws IOException {<a name="line.8285"></a>
-<span class="sourceLineNo">8286</span> String serviceName = call.getServiceName();<a name="line.8286"></a>
-<span class="sourceLineNo">8287</span> com.google.protobuf.Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.8287"></a>
-<span class="sourceLineNo">8288</span> if (service == null) {<a name="line.8288"></a>
-<span class="sourceLineNo">8289</span> throw new UnknownProtocolException(null, "No registered coprocessor service found for " +<a name="line.8289"></a>
-<span class="sourceLineNo">8290</span> serviceName + " in region " + Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.8290"></a>
-<span class="sourceLineNo">8291</span> }<a name="line.8291"></a>
-<span class="sourceLineNo">8292</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.8292"></a>
-<span class="sourceLineNo">8293</span><a name="line.8293"></a>
-<span class="sourceLineNo">8294</span> cpRequestsCount.increment();<a name="line.8294"></a>
-<span class="sourceLineNo">8295</span> String methodName = call.getMethodName();<a name="line.8295"></a>
-<span class="sourceLineNo">8296</span> com.google.protobuf.Descriptors.MethodDescriptor methodDesc =<a name="line.8296"></a>
-<span class="sourceLineNo">8297</span> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);<a name="line.8297"></a>
-<span class="sourceLineNo">8298</span><a name="line.8298"></a>
-<span class="sourceLineNo">8299</span> com.google.protobuf.Message.Builder builder =<a name="line.8299"></a>
-<span class="sourceLineNo">8300</span> service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.8300"></a>
+<span class="sourceLineNo">8195</span> /**<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span> * @return Sorted list of <code>cells</code> using <code>comparator</code><a name="line.8196"></a>
+<span class="sourceLineNo">8197</span> */<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span> private static List<Cell> sort(List<Cell> cells, final CellComparator comparator) {<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span> cells.sort(comparator);<a name="line.8199"></a>
+<span class="sourceLineNo">8200</span> return cells;<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span> }<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span><a name="line.8202"></a>
+<span class="sourceLineNo">8203</span> public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span> ClassSize.OBJECT +<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span> ClassSize.ARRAY +<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span> 55 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT +<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span> (15 * Bytes.SIZEOF_LONG) +<a name="line.8207"></a>
+<span class="sourceLineNo">8208</span> 3 * Bytes.SIZEOF_BOOLEAN);<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span><a name="line.8209"></a>
+<span class="sourceLineNo">8210</span> // woefully out of date - currently missing:<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span> // 1 x HashMap - coprocessorServiceHandlers<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span> // 6 x LongAdder - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span> // checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span> // writeRequestsCount, cpRequestsCount<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span> // 1 x HRegion$WriteState - writestate<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span> // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span> // 1 x RegionSplitPolicy - splitPolicy<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span> // 1 x MetricsRegion - metricsRegion<a name="line.8218"></a>
+<span class="sourceLineNo">8219</span> // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span> public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span> ClassSize.OBJECT + // closeLock<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span> (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span> (3 * ClassSize.ATOMIC_LONG) + // numPutsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span> // compactionsFailed<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span> (2 * ClassSize.CONCURRENT_HASHMAP) + // lockedRows, scannerReadPoints<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span> WriteState.HEAP_SIZE + // writestate<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span> ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span> (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.8228"></a>
+<span class="sourceLineNo">8229</span> MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span> + 2 * ClassSize.TREEMAP // maxSeqIdInStores, replicationScopes<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span> + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span> + ClassSize.STORE_SERVICES // store services<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span> + StoreHotnessProtector.FIXED_SIZE<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span> ;<a name="line.8234"></a>
+<span class="sourceLineNo">8235</span><a name="line.8235"></a>
+<span class="sourceLineNo">8236</span> @Override<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span> public long heapSize() {<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span> // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.8238"></a>
+<span class="sourceLineNo">8239</span> return DEEP_OVERHEAD + stores.values().stream().mapToLong(HStore::heapSize).sum();<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span> }<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span><a name="line.8241"></a>
+<span class="sourceLineNo">8242</span> /**<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span> * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span> * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span> * org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span> *<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span> * <p><a name="line.8247"></a>
+<span class="sourceLineNo">8248</span> * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span> * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span> * After the first registration, subsequent calls with the same service name will fail with<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span> * a return value of {@code false}.<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span> * </p><a name="line.8252"></a>
+<span class="sourceLineNo">8253</span> * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span> * @return {@code true} if the registration was successful, {@code false}<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span> * otherwise<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span> */<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span> public boolean registerService(com.google.protobuf.Service instance) {<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span> /*<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span> * No stacking of instances is allowed for a single service name<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span> */<a name="line.8260"></a>
+<span class="sourceLineNo">8261</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.8261"></a>
+<span class="sourceLineNo">8262</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.8262"></a>
+<span class="sourceLineNo">8263</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.8263"></a>
+<span class="sourceLineNo">8264</span> LOG.error("Coprocessor service " + serviceName +<a name="line.8264"></a>
+<span class="sourceLineNo">8265</span> " already registered, rejecting request from " + instance);<a name="line.8265"></a>
+<span class="sourceLineNo">8266</span> return false;<a name="line.8266"></a>
+<span class="sourceLineNo">8267</span> }<a name="line.8267"></a>
+<span class="sourceLineNo">8268</span><a name="line.8268"></a>
+<span class="sourceLineNo">8269</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.8269"></a>
+<span class="sourceLineNo">8270</span> if (LOG.isDebugEnabled()) {<a name="line.8270"></a>
+<span class="sourceLineNo">8271</span> LOG.debug("Registered coprocessor service: region=" +<a name="line.8271"></a>
+<span class="sourceLineNo">8272</span> Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.8272"></a>
+<span class="sourceLineNo">8273</span> " service=" + serviceName);<a name="line.8273"></a>
+<span class="sourceLineNo">8274</span> }<a name="line.8274"></a>
+<span class="sourceLineNo">8275</span> return true;<a name="line.8275"></a>
+<span class="sourceLineNo">8276</span> }<a name="line.8276"></a>
+<span class="sourceLineNo">8277</span><a name="line.8277"></a>
+<span class="sourceLineNo">8278</span> /**<a name="line.8278"></a>
+<span class="sourceLineNo">8279</span> * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.8279"></a>
+<span class="sourceLineNo">8280</span> * the registered protocol handlers. {@link Service} implementations must be registered via the<a name="line.8280"></a>
+<span class="sourceLineNo">8281</span> * {@link #registerService(com.google.protobuf.Service)}<a name="line.8281"></a>
+<span class="sourceLineNo">8282</span> * method before they are available.<a name="line.8282"></a>
+<span class="sourceLineNo">8283</span> *<a name="line.8283"></a>
+<span class="sourceLineNo">8284</span> * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.8284"></a>
+<span class="sourceLineNo">8285</span> * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.8285"></a>
+<span class="sourceLineNo">8286</span> * and parameters for the method invocation<a name="line.8286"></a>
+<span class="sourceLineNo">8287</span> * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.8287"></a>
+<span class="sourceLineNo">8288</span> * @throws IOException if no registered service handler is found or an error<a name="line.8288"></a>
+<span class="sourceLineNo">8289</span> * occurs during the invocation<a name="line.8289"></a>
+<span class="sourceLineNo">8290</span> * @see #registerService(com.google.protobuf.Service)<a name="line.8290"></a>
+<span class="sourceLineNo">8291</span> */<a name="line.8291"></a>
+<span class="sourceLineNo">8292</span> public com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.8292"></a>
+<span class="sourceLineNo">8293</span> CoprocessorServiceCall call) throws IOException {<a name="line.8293"></a>
+<span class="sourceLineNo">8294</span> String serviceName = call.getServiceName();<a name="line.8294"></a>
+<span class="sourceLineNo">8295</span> com.google.protobuf.Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.8295"></a>
+<span class="sourceLineNo">8296</span> if (service == null) {<a name="line.8296"></a>
+<span class="sourceLineNo">8297</span> throw new UnknownProtocolException(null, "No registered coprocessor service found for " +<a name="line.8297"></a>
+<span class="sourceLineNo">8298</span> serviceName + " in region " + Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.8298"></a>
+<span class="sourceLineNo">8299</span> }<a name="line.8299"></a>
+<span class="sourceLineNo">8300</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.8300"></a>
<span class="sourceLineNo">8301</span><a name="line.8301"></a>
-<span class="sourceLineNo">8302</span> org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(builder,<a name="line.8302"></a>
-<span class="sourceLineNo">8303</span> call.getRequest().toByteArray());<a name="line.8303"></a>
-<span class="sourceLineNo">8304</span> com.google.protobuf.Message request =<a name="line.8304"></a>
-<span class="sourceLineNo">8305</span> CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.8305"></a>
+<span class="sourceLineNo">8302</span> cpRequestsCount.increment();<a name="line.8302"></a>
+<span class="sourceLineNo">8303</span> String methodName = call.getMethodName();<a name="line.8303"></a>
+<span class="sourceLineNo">8304</span> com.google.protobuf.Descriptors.MethodDescriptor methodDesc =<a name="line.8304"></a>
+<span class="sourceLineNo">8305</span> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);<a name="line.8305"></a>
<span class="sourceLineNo">8306</span><a name="line.8306"></a>
-<span class="sourceLineNo">8307</span> if (coprocessorHost != null) {<a name="line.8307"></a>
-<span class="sourceLineNo">8308</span> request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.8308"></a>
-<span class="sourceLineNo">8309</span> }<a name="line.8309"></a>
-<span class="sourceLineNo">8310</span><a name="line.8310"></a>
-<span class="sourceLineNo">8311</span> final com.google.protobuf.Message.Builder responseBuilder =<a name="line.8311"></a>
-<span class="sourceLineNo">8312</span> service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.8312"></a>
-<span class="sourceLineNo">8313</span> service.callMethod(methodDesc, controller, request,<a name="line.8313"></a>
-<span class="sourceLineNo">8314</span> new com.google.protobuf.RpcCallback<com.google.protobuf.Message>() {<a name="line.8314"></a>
-<span class="sourceLineNo">8315</span> @Override<a name="line.8315"></a>
-<span class="sourceLineNo">8316</span> public void run(com.google.protobuf.Message message) {<a name="line.8316"></a>
-<span class="sourceLineNo">8317</span> if (message != null) {<a name="line.8317"></a>
-<span class="sourceLineNo">8318</span> responseBuilder.mergeFrom(message);<a name="line.8318"></a>
-<span class="sourceLineNo">8319</span> }<a name="line.8319"></a>
-<span class="sourceLineNo">8320</span> }<a name="line.8320"></a>
-<span class="sourceLineNo">8321</span> });<a name="line.8321"></a>
-<span class="sourceLineNo">8322</span><a name="line.8322"></a>
-<span class="sourceLineNo">8323</span> if (coprocessorHost != null) {<a name="line.8323"></a>
-<span class="sourceLineNo">8324</span> coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.8324"></a>
-<span class="sourceLineNo">8325</span> }<a name="line.8325"></a>
-<span class="sourceLineNo">8326</span> IOException exception =<a name="line.8326"></a>
-<span class="sourceLineNo">8327</span> org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getControllerException(controller);<a name="line.8327"></a>
-<span class="sourceLineNo">8328</span> if (exception != null) {<a name="line.8328"></a>
-<span class="sourceLineNo">8329</span> throw exception;<a name="line.8329"></a>
-<span class="sourceLineNo">8330</span> }<a name="line.8330"></a>
-<span class="sourceLineNo">8331</span><a name="line.8331"></a>
-<span class="sourceLineNo">8332</span> return responseBuilder.build();<a name="line.8332"></a>
-<span class="sourceLineNo">8333</span> }<a name="line.8333"></a>
-<span class="sourceLineNo">8334</span><a name="line.8334"></a>
-<span class="sourceLineNo">8335</span> boolean shouldForceSplit() {<a name="line.8335"></a>
-<span class="sourceLineNo">8336</span> return this.splitRequest;<a name="line.8336"></a>
-<span class="sourceLineNo">8337</span> }<a name="line.8337"></a>
-<span class="sourceLineNo">8338</span><a name="line.8338"></a>
-<span class="sourceLineNo">8339</span> byte[] getExplicitSplitPoint() {<a name="line.8339"></a>
-<span class="sourceLineNo">8340</span> return this.explicitSplitPoint;<a name="line.8340"></a>
+<span class="sourceLineNo">8307</span> com.google.protobuf.Message.Builder builder =<a name="line.8307"></a>
+<span class="sourceLineNo">8308</span> service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.8308"></a>
+<span class="sourceLineNo">8309</span><a name="line.8309"></a>
+<span class="sourceLineNo">8310</span> org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(builder,<a name="line.8310"></a>
+<span class="sourceLineNo">8311</span> call.getRequest().toByteArray());<a name="line.8311"></a>
+<span class="sourceLineNo">8312</span> com.google.protobuf.Message request =<a name="line.8312"></a>
+<span class="sourceLineNo">8313</span> CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.8313"></a>
+<span class="sourceLineNo">8314</span><a name="line.8314"></a>
+<span class="sourceLineNo">8315</span> if (coprocessorHost != null) {<a name="line.8315"></a>
+<span class="sourceLineNo">8316</span> request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.8316"></a>
+<span class="sourceLineNo">8317</span> }<a name="line.8317"></a>
+<span class="sourceLineNo">8318</span><a name="line.8318"></a>
+<span class="sourceLineNo">8319</span> final com.google.protobuf.Message.Builder responseBuilder =<a name="line.8319"></a>
+<span class="sourceLineNo">8320</span> service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.8320"></a>
+<span class="sourceLineNo">8321</span> service.callMethod(methodDesc, controller, request,<a name="line.8321"></a>
+<span class="sourceLineNo">8322</span> new com.google.protobuf.RpcCallback<com.google.protobuf.Message>() {<a name="line.8322"></a>
+<span class="sourceLineNo">8323</span> @Override<a name="line.8323"></a>
+<span class="sourceLineNo">8324</span> public void run(com.google.protobuf.Message message) {<a name="line.8324"></a>
+<span class="sourceLineNo">8325</span> if (message != null) {<a name="line.8325"></a>
+<span class="sourceLineNo">8326</span> responseBuilder.mergeFrom(message);<a name="line.8326"></a>
+<span class="sourceLineNo">8327</span> }<a name="line.8327"></a>
+<span class="sourceLineNo">8328</span> }<a name="line.8328"></a>
+<span class="sourceLineNo">8329</span> });<a name="line.8329"></a>
+<span class="sourceLineNo">8330</span><a name="line.8330"></a>
+<span class="sourceLineNo">8331</span> if (coprocessorHost != null) {<a name="line.8331"></a>
+<span class="sourceLineNo">8332</span> coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.8332"></a>
+<span class="sourceLineNo">8333</span> }<a name="line.8333"></a>
+<span class="sourceLineNo">8334</span> IOException exception =<a name="line.8334"></a>
+<span class="sourceLineNo">8335</span> org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getControllerException(controller);<a name="line.8335"></a>
+<span class="sourceLineNo">8336</span> if (exception != null) {<a name="line.8336"></a>
+<span class="sourceLineNo">8337</span> throw exception;<a name="line.8337"></a>
+<span class="sourceLineNo">8338</span> }<a name="line.8338"></a>
+<span class="sourceLineNo">8339</span><a name="line.8339"></a>
+<span class="sourceLineNo">8340</span> return responseBuilder.build();<a name="line.8340"></a>
<span class="sourceLineNo">8341</span> }<a name="line.8341"></a>
<span class="sourceLineNo">8342</span><a name="line.8342"></a>
-<span class="sourceLineNo">8343</span> void forceSplit(byte[] sp) {<a name="line.8343"></a>
-<span class="sourceLineNo">8344</span> // This HRegion will go away after the forced split is successful<a name="line.8344"></a>
-<span class="sourceLineNo">8345</span> // But if a forced split fails, we need to clear forced split.<a name="line.8345"></a>
-<span class="sourceLineNo">8346</span> this.splitRequest = true;<a name="line.8346"></a>
-<span class="sourceLineNo">8347</span> if (sp != null) {<a name="line.8347"></a>
-<span class="sourceLineNo">8348</span> this.explicitSplitPoint = sp;<a name="line.8348"></a>
-<span class="sourceLineNo">8349</span> }<a name="line.8349"></a>
-<span class="sourceLineNo">8350</span> }<a name="line.8350"></a>
-<span class="sourceLineNo">8351</span><a name="line.8351"></a>
-<span class="sourceLineNo">8352</span> void clearSplit() {<a name="line.8352"></a>
-<span class="sourceLineNo">8353</span> this.splitRequest = false;<a name="line.8353"></a>
-<span class="sourceLineNo">8354</span> this.explicitSplitPoint = null;<a name="line.8354"></a>
-<span class="sourceLineNo">8355</span> }<a name="line.8355"></a>
-<span class="sourceLineNo">8356</span><a name="line.8356"></a>
-<span class="sourceLineNo">8357</span> /**<a name="line.8357"></a>
-<span class="sourceLineNo">8358</span> * Return the splitpoint. null indicates the region isn't splittable<a name="line.8358"></a>
-<span class="sourceLineNo">8359</span> * If the splitpoint isn't explicitly specified, it will go over the stores<a name="line.8359"></a>
-<span class="sourceLineNo">8360</span> * to find the best splitpoint. Currently the criteria of best splitpoint<a name="line.8360"></a>
-<span class="sourceLineNo">8361</span> * is based on the size of the store.<a name="line.8361"></a>
-<span class="sourceLineNo">8362</span> */<a name="line.8362"></a>
-<span class="sourceLineNo">8363</span> public byte[] checkSplit() {<a name="line.8363"></a>
-<span class="sourceLineNo">8364</span> // Can't split META<a name="line.8364"></a>
-<span class="sourceLineNo">8365</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8365"></a>
-<span class="sourceLineNo">8366</span> if (shouldForceSplit()) {<a name="line.8366"></a>
-<span class="sourceLineNo">8367</span> LOG.warn("Cannot split meta region in HBase 0.20 and above");<a name="line.8367"></a>
-<span class="sourceLineNo">8368</span> }<a name="line.8368"></a>
-<span class="sourceLineNo">8369</span> return null;<a name="line.8369"></a>
-<span class="sourceLineNo">8370</span> }<a name="line.8370"></a>
-<span class="sourceLineNo">8371</span><a name="line.8371"></a>
-<span class="sourceLineNo">8372</span> // Can't split a region that is closing.<a name="line.8372"></a>
-<span class="sourceLineNo">8373</span> if (this.isClosing()) {<a name="line.8373"></a>
-<span class="sourceLineNo">8374</span> return null;<a name="line.8374"></a>
-<span class="sourceLineNo">8375</span> }<a name="line.8375"></a>
-<span class="sourceLineNo">8376</span><a name="line.8376"></a>
-<span class="sourceLineNo">8377</span> if (!splitPolicy.shouldSplit()) {<a name="line.8377"></a>
-<span class="sourceLineNo">8378</span> return null;<a name="line.8378"></a>
-<span class="sourceLineNo">8379</span> }<a name="line.8379"></a>
-<span class="sourceLineNo">8380</span><a name="line.8380"></a>
-<span class="sourceLineNo">8381</span> byte[] ret = splitPolicy.getSplitPoint();<a name="line.8381"></a>
-<span class="sourceLineNo">8382</span><a name="line.8382"></a>
-<span class="sourceLineNo">8383</span> if (ret != null) {<a name="line.8383"></a>
-<span class="sourceLineNo">8384</span> try {<a name="line.8384"></a>
-<span class="sourceLineNo">8385</span> checkRow(ret, "calculated split");<a name="line.8385"></a>
-<span class="sourceLineNo">8386</span> } catch (IOException e) {<a name="line.8386"></a>
-<span class="sourceLineNo">8387</span> LOG.error("Ignoring invalid split", e);<a name="line.8387"></a>
-<span class="sourceLineNo">8388</span> return null;<a name="line.8388"></a>
-<span class="sourceLineNo">8389</span> }<a name="line.8389"></a>
-<span class="sourceLineNo">8390</span> }<a name="line.8390"></a>
-<span class="sourceLineNo">8391</span> return ret;<a name="line.8391"></a>
-<span class="sourceLineNo">8392</span> }<a name="line.8392"></a>
-<span class="sourceLineNo">8393</span><a name="line.8393"></a>
-<span class="sourceLineNo">8394</span> /**<a name="line.8394"></a>
-<span class="sourceLineNo">8395</span> * @return The priority that this region should have in the compaction queue<a name="line.8395"></a>
-<span class="sourceLineNo">8396</span> */<a name="line.8396"></a>
-<span class="sourceLineNo">8397</span> public int getCompactPriority() {<a name="line.8397"></a>
-<span class="sourceLineNo">8398</span> return stores.values().stream().mapToInt(HStore::getCompactPriority).min()<a name="line.8398"></a>
-<span class="sourceLineNo">8399</span> .orElse(Store.NO_PRIORITY);<a name="line.8399"></a>
+<span class="sourceLineNo">8343</span> boolean shouldForceSplit() {<a name="line.8343"></a>
+<span class="sourceLineNo">8344</span> return this.splitRequest;<a name="line.8344"></a>
+<span class="sourceLineNo">8345</span> }<a name="line.8345"></a>
+<span class="sourceLineNo">8346</span><a name="line.8346"></a>
+<span class="sourceLineNo">8347</span> byte[] getExplicitSplitPoint() {<a name="line.8347"></a>
+<span class="sourceLineNo">8348</span> return this.explicitSplitPoint;<a name="line.8348"></a>
+<span class="sourceLineNo">8349</span> }<a name="line.8349"></a>
+<span class="sourceLineNo">8350</span><a name="line.8350"></a>
+<span class="sourceLineNo">8351</span> void forceSplit(byte[] sp) {<a name="line.8351"></a>
+<span class="sourceLineNo">8352</span> // This HRegion will go away after the forced split is successful<a name="line.8352"></a>
+<span class="sourceLineNo">8353</span> // But if a forced split fails, we need to clear forced split.<a name="line.8353"></a>
+<span class="sourceLineNo">8354</span> this.splitRequest = true;<a name="line.8354"></a>
+<span class="sourceLineNo">8355</span> if (sp != null) {<a name="line.8355"></a>
+<span class="sourceLineNo">8356</span> this.explicitSplitPoint = sp;<a name="line.8356"></a>
+<span class="sourceLineNo">8357</span> }<a name="line.8357"></a>
+<span class="sourceLineNo">8358</span> }<a name="line.8358"></a>
+<span class="sourceLineNo">8359</span><a name="line.8359"></a>
+<span class="sourceLineNo">8360</span> void clearSplit() {<a name="line.8360"></a>
+<span class="sourceLineNo">8361</span> this.splitRequest = false;<a name="line.8361"></a>
+<span class="sourceLineNo">8362</span> this.explicitSplitPoint = null;<a name="line.8362"></a>
+<span class="sourceLineNo">8363</span> }<a name="line.8363"></a>
+<span class="sourceLineNo">8364</span><a name="line.8364"></a>
+<span class="sourceLineNo">8365</span> /**<a name="line.8365"></a>
+<span class="sourceLineNo">8366</span> * Return the splitpoint. null indicates the region isn't splittable<a name="line.8366"></a>
+<span class="sourceLineNo">8367</span> * If the splitpoint isn't explicitly specified, it will go over the stores<a name="line.8367"></a>
+<span class="sourceLineNo">8368</span> * to find the best splitpoint. Currently the criteria of best splitpoint<a name="line.8368"></a>
+<span class="sourceLineNo">8369</span> * is based on the size of the store.<a name="line.8369"></a>
+<span class="sourceLineNo">8370</span> */<a name="line.8370"></a>
+<span class="sourceLineNo">8371</span> public byte[] checkSplit() {<a name="line.8371"></a>
+<span class="sourceLineNo">8372</span> // Can't split META<a name="line.8372"></a>
+<span class="sourceLineNo">8373</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8373"></a>
+<span class="sourceLineNo">8374</span> if (shouldForceSplit()) {<a name="line.8374"></a>
+<span class="sourceLineNo">8375</span> LOG.warn("Cannot split meta region in HBase 0.20 and above");<a name="line.8375"></a>
+<span class="sourceLineNo">8376</span> }<a name="line.8376"></a>
+<span class="sourceLineNo">8377</span> return null;<a name="line.8377"></a>
+<span class="sourceLineNo">8378</span> }<a name="line.8378"></a>
+<span class="sourceLineNo">8379</span><a name="line.8379"></a>
+<span class="sourceLineNo">8380</span> // Can't split a region that is closing.<a name="line.8380"></a>
+<span class="sourceLineNo">8381</span> if (this.isClosing()) {<a name="line.8381"></a>
+<span class="sourceLineNo">8382</span> return null;<a name="line.8382"></a>
+<span class="sourceLineNo">8383</span> }<a name="line.8383"></a>
+<span class="sourceLineNo">8384</span><a name="line.8384"></a>
+<span class="sourceLineNo">8385</span> if (!splitPolicy.shouldSplit()) {<a name="line.8385"></a>
+<span class="sourceLineNo">8386</span> return null;<a name="line.8386"></a>
+<span class="sourceLineNo">8387</span> }<a name="line.8387"></a>
+<span class="sourceLineNo">8388</span><a name="line.8388"></a>
+<span class="sourceLineNo">8389</span> byte[] ret = splitPolicy.getSplitPoint();<a name="line.8389"></a>
+<span class="sourceLineNo">8390</span><a name="line.8390"></a>
+<span class="sourceLineNo">8391</span> if (ret != null) {<a name="line.8391"></a>
+<span class="sourceLineNo">8392</span> try {<a name="line.8392"></a>
+<span class="sourceLineNo">8393</span> checkRow(ret, "calculated split");<a name="line.8393"></a>
+<span class="sourceLineNo">8394</span> } catch (IOException e) {<a name="line.8394"></a>
+<span class="sourceLineNo">8395</span> LOG.error("Ignoring invalid split", e);<a name="line.8395"></a>
+<span class="sourceLineNo">8396</span> return null;<a name="line.8396"></a>
+<span class="sourceLineNo">8397</span> }<a name="line.8397"></a>
+<span class="sourceLineNo">8398</span> }<a name="line.8398"></a>
+<span class="sourceLineNo">8399</span> return ret;<a name="line.8399"></a>
<span class="sourceLineNo">8400</span> }<a name="line.8400"></a>
<span class="sourceLineNo">8401</span><a name="line.8401"></a>
-<span class="sourceLineNo">8402</span> /** @return the coprocessor host */<a name="line.8402"></a>
-<span class="sourceLineNo">8403</span> public RegionCoprocessorHost getCoprocessorHost() {<a name="line.8403"></a>
-<span class="sourceLineNo">8404</span> return coprocessorHost;<a name="line.8404"></a>
-<span class="sourceLineNo">8405</span> }<a name="line.8405"></a>
-<span class="sourceLineNo">8406</span><a name="line.8406"></a>
-<span class="sourceLineNo">8407</span> /** @param coprocessorHost the new coprocessor host */<a name="line.8407"></a>
-<span class="sourceLineNo">8408</span> @VisibleForTesting<a name="line.8408"></a>
-<span class="sourceLineNo">8409</span> public void setCoprocessorHost(final RegionCoprocessorHost coprocessorHost) {<a name="line.8409"></a>
-<span class="sourceLineNo">8410</span> this.coprocessorHost = coprocessorHost;<a name="line.8410"></a>
-<span class="sourceLineNo">8411</span> }<a name="line.8411"></a>
-<span class="sourceLineNo">8412</span><a name="line.8412"></a>
-<span class="sourceLineNo">8413</span> @Override<a name="line.8413"></a>
-<span class="sourceLineNo">8414</span> public void startRegionOperation() throws IOException {<a name="line.8414"></a>
-<span class="sourceLineNo">8415</span> startRegionOperation(Operation.ANY);<a name="line.8415"></a>
-<span class="sourceLineNo">8416</span> }<a name="line.8416"></a>
-<span class="sourceLineNo">8417</span><a name="line.8417"></a>
-<span class="sourceLineNo">8418</span> @Override<a name="line.8418"></a>
-<span class="sourceLineNo">8419</span> public void startRegionOperation(Operation op) throws IOException {<a name="line.8419"></a>
-<span class="sourceLineNo">8420</span> switch (op) {<a name="line.8420"></a>
-<span class="sourceLineNo">8421</span> case GET: // read operations<a name="line.8421"></a>
-<span class="sourceLineNo">8422</span> case SCAN:<a name="line.8422"></a>
-<span class="sourceLineNo">8423</span> checkReadsEnabled();<a name="line.8423"></a>
-<span class="sourceLineNo">8424</span> break;<a name="line.8424"></a>
-<span class="sourceLineNo">8425</span> default:<a name="line.8425"></a>
-<span class="sourceLineNo">8426</span> break;<a name="line.8426"></a>
-<span class="sourceLineNo">8427</span> }<a name="line.8427"></a>
-<span class="sourceLineNo">8428</span> if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.8428"></a>
-<span class="sourceLineNo">8429</span> || op == Operation.COMPACT_REGION || op == Operation.COMPACT_SWITCH) {<a name="line.8429"></a>
-<span class="sourceLineNo">8430</span> // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.8430"></a>
-<span class="sourceLineNo">8431</span> // region<a name="line.8431"></a>
-<span class="sourceLineNo">8432</span> return;<a name="line.8432"></a>
-<span class="sourceLineNo">8433</span> }<a name="line.8433"></a>
-<span class="sourceLineNo">8434</span> if (this.closing.get()) {<a name="line.8434"></a>
-<span class="sourceLineNo">8435</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8435"></a>
-<span class="sourceLineNo">8436</span> }<a name="line.8436"></a>
-<span class="sourceLineNo">8437</span> lock(lock.readLock());<a name="line.8437"></a>
-<span class="sourceLineNo">8438</span> if (this.closed.get()) {<a name="line.8438"></a>
-<span class="sourceLineNo">8439</span> lock.readLock().unlock();<a name="line.8439"></a>
-<span class="sourceLineNo">8440</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8440"></a>
+<span class="sourceLineNo">8402</span> /**<a name="line.8402"></a>
+<span class="sourceLineNo">8403</span> * @return The priority that this region should have in the compaction queue<a name="line.8403"></a>
+<span class="sourceLineNo">8404</span> */<a name="line.8404"></a>
+<span class="sourceLineNo">8405</span> public int getCompactPriority() {<a name="line.8405"></a>
+<span class="sourceLineNo">8406</span> return stores.values().stream().mapToInt(HStore::getCompactPriority).min()<a name="line.8406"></a>
+<span class="sourceLineNo">8407</span> .orElse(Store.NO_PRIORITY);<a name="line.8407"></a>
+<span class="sourceLineNo">8408</span> }<a name="line.8408"></a>
+<span class="sourceLineNo">8409</span><a name="line.8409"></a>
+<span class="sourceLineNo">8410</span> /** @return the coprocessor host */<a name="line.8410"></a>
+<span class="sourceLineNo">8411</span> public RegionCoprocessorHost getCoprocessorHost() {<a name="line.8411"></a>
+<span class="sourceLineNo">8412</span> return coprocessorHost;<a name="line.8412"></a>
+<span class="sourceLineNo">8413</span> }<a name="line.8413"></a>
+<span class="sourceLineNo">8414</span><a name="line.8414"></a>
+<span class="sourceLineNo">8415</span> /** @param coprocessorHost the new coprocessor host */<a name="line.8415"></a>
+<span class="sourceLineNo">8416</span> @VisibleForTesting<a name="line.8416"></a>
+<span class="sourceLineNo">8417</span> public void setCoprocessorHost(final RegionCoprocessorHost coprocessorHost) {<a name="line.8417"></a>
+<span class="sourceLineNo">8418</span> this.coprocessorHost = coprocessorHost;<a name="line.8418"></a>
+<span class="sourceLineNo">8419</span> }<a name="line.8419"></a>
+<span class="sourceLineNo">8420</span><a name="line.8420"></a>
+<span class="sourceLineNo">8421</span> @Override<a name="line.8421"></a>
+<span class="sourceLineNo">8422</span> public void startRegionOperation() throws IOException {<a name="line.8422"></a>
+<span class="sourceLineNo">8423</span> startRegionOperation(Operation.ANY);<a name="line.8423"></a>
+<span class="sourceLineNo">8424</span> }<a name="line.8424"></a>
+<span class="sourceLineNo">8425</span><a name="line.8425"></a>
+<span class="sourceLineNo">8426</span> @Override<a name="line.8426"></a>
+<span class="sourceLineNo">8427</span> public void startRegionOperation(Operation op) throws IOException {<a name="line.8427"></a>
+<span class="sourceLineNo">8428</span> switch (op) {<a name="line.8428"></a>
+<span class="sourceLineNo">8429</span> case GET: // read operations<a name="line.8429"></a>
+<span class="sourceLineNo">8430</span> case SCAN:<a name="line.8430"></a>
+<span class="sourceLineNo">8431</span> checkReadsEnabled();<a name="line.8431"></a>
+<span class="sourceLineNo">8432</span> break;<a name="line.8432"></a>
+<span class="sourceLineNo">8433</span> default:<a name="line.8433"></a>
+<span class="sourceLineNo">8434</span> break;<a name="line.8434"></a>
+<span class="sourceLineNo">8435</span> }<a name="line.8435"></a>
+<span class="sourceLineNo">8436</span> if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.8436"></a>
+<span class="sourceLineNo">8437</span> || op == Operation.COMPACT_REGION || op == Operation.COMPACT_SWITCH) {<a name="line.8437"></a>
+<span class="sourceLineNo">8438</span> // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.8438"></a>
+<span class="sourceLineNo">8439</span> // region<a name="line.8439"></a>
+<span class="sourceLineNo">8440</span> return;<a name="line.8440"></a>
<span class="sourceLineNo">8441</span> }<a name="line.8441"></a>
-<span class="sourceLineNo">8442</span> // The unit for snapshot is a region. So, all stores for this region must be<a name="line.8442"></a>
-<span class="sourceLineNo">8443</span> // prepared for snapshot operation before proceeding.<a name="line.8443"></a>
-<span class="sourceLineNo">8444</span> if (op == Operation.SNAPSHOT) {<a name="line.8444"></a>
-<span class="sourceLineNo">8445</span> stores.values().forEach(HStore::preSnapshotOperation);<a name="line.8445"></a>
-<span class="sourceLineNo">8446</span> }<a name="line.8446"></a>
-<span class="sourceLineNo">8447</span> try {<a name="line.8447"></a>
-<span class="sourceLineNo">8448</span> if (coprocessorHost != null) {<a name="line.8448"></a>
-<span class="sourceLineNo">8449</span> coprocessorHost.postStartRegionOperation(op);<a name="line.8449"></a>
-<span class="sourceLineNo">8450</span> }<a name="line.8450"></a>
-<span class="sourceLineNo">8451</span> } catch (Exception e) {<a name="line.8451"></a>
-<span class="sourceLineNo">8452</span> lock.readLock().unlock();<a name="line.8452"></a>
-<span class="sourceLineNo">8453</span> throw new IOException(e);<a name="line.8453"></a>
+<span class="sourceLineNo">8442</span> if (this.closing.get()) {<a name="line.8442"></a>
+<span class="sourceLineNo">8443</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8443"></a>
+<span class="sourceLineNo">8444</span> }<a name="line.8444"></a>
+<span class="sourceLineNo">8445</span> lock(lock.readLock());<a name="line.8445"></a>
+<span class="sourceLineNo">8446</span> if (this.closed.get()) {<a name="line.8446"></a>
+<span class="sourceLineNo">8447</span> lock.readLock().unlock();<a name="line.8447"></a>
+<span class="sourceLineNo">8448</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8448"></a>
+<span class="sourceLineNo">8449</span> }<a name="line.8449"></a>
+<span class="sourceLineNo">8450</span> // The unit for snapshot is a region. So, all stores for this region must be<a name="line.8450"></a>
+<span class="sourceLineNo">8451</span> // prepared for snapshot operation before proceeding.<a name="line.8451"></a>
+<span class="sourceLineNo">8452</span> if (op == Operation.SNAPSHOT) {<a name="line.8452"></a>
+<span class="sourceLineNo">8453</span> stores.values().forEach(HStore::preSnapshotOperation);<a name="line.8453"></a>
<span class="sourceLineNo">8454</span> }<a name="line.8454"></a>
-<span class="sourceLineNo">8455</span> }<a name="line.8455"></a>
-<span class="sourceLineNo">8456</span><a name="line.8456"></a>
-<span class="sourceLineNo">8457</span> @Override<a name="line.8457"></a>
-<span class="sourceLineNo">8458</span> public void closeRegionOperation() throws IOException {<a name="line.8458"></a>
-<span class="sourceLineNo">8459</span> closeRegionOperation(Operation.ANY);<a name="line.8459"></a>
-<span class="sourceLineNo">8460</span> }<a name="line.8460"></a>
-<span class="sourceLineNo">8461</span><a name="line.8461"></a>
-<span class="sourceLineNo">8462</span> @Override<a name="line.8462"></a>
-<span class="sourceLineNo">8463</span> public void closeRegionOperation(Operation operation) throws IOException {<a name="line.8463"></a>
-<span class="sourceLineNo">8464</span> if (operation == Operation.SNAPSHOT) {<a name="line.8464"></a>
-<span class="sourceLineNo">8465</span> stores.values().forEach(HStore::postSnapshotOperation);<a name="line.8465"></a>
-<span class="sourceLineNo">8466</span> }<a name="line.8466"></a>
-<span class="sourceLineNo">8467</span> lock.readLock().unlock();<a name="line.8467"></a>
-<span class="sourceLineNo">8468</span> if (coprocessorHost != null) {<a name="line.8468"></a>
-<span class="sourceLineNo">8469</span> coprocessorHost.postCloseRegionOperation(operation);<a name="line.8469"></a>
-<span class="sourceLineNo">8470</span> }<a name="line.8470"></a>
-<span class="sourceLineNo">8471</span> }<a name="line.8471"></a>
-<span class="sourceLineNo">8472</span><a name="line.8472"></a>
-<span class="sourceLineNo">8473</span> /**<a name="line.8473"></a>
-<span class="sourceLineNo">8474</span> * This method needs to be called before any public call that reads or<a name="line.8474"></a>
-<span class="sourceLineNo">8475</span> * modifies stores in bulk. It has to be called just before a try.<a name="line.8475"></a>
-<span class="sourceLineNo">8476</span> * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.8476"></a>
-<span class="sourceLineNo">8477</span> * Acquires a writelock and checks if the region is closing or closed.<a name="line.8477"></a>
-<span class="sourceLineNo">8478</span> * @throws NotServingRegionException when the region is closing or closed<a name="line.8478"></a>
-<span class="sourceLineNo">8479</span> * @throws RegionTooBusyException if failed to get the lock in time<a name="line.8479"></a>
-<span class="sourceLineNo">8480</span> * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.8480"></a>
-<span class="sourceLineNo">8481</span> */<a name="line.8481"></a>
-<span class="sourceLineNo">8482</span> private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.8482"></a>
-<span class="sourceLineNo">8483</span> throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.8483"></a>
-<span class="sourceLineNo">8484</span> if (this.closing.get()) {<a name="line.8484"></a>
-<span class="sourceLineNo">8485</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8485"></a>
-<span class="sourceLineNo">8486</span> }<a name="line.8486"></a>
-<span class="sourceLineNo">8487</span> if (writeLockNeeded) lock(lock.writeLock());<a name="line.8487"></a>
-<span class="sourceLineNo">8488</span> else lock(lock.readLock());<a name="line.8488"></a>
-<span class="sourceLineNo">8489</span> if (this.closed.get()) {<a name="line.8489"></a>
-<span class="sourceLineNo">8490</span> if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8490"></a>
-<span class="sourceLineNo">8491</span> else lock.readLock().unlock();<a name="line.8491"></a>
-<span class="sourceLineNo">8492</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8492"></a>
-<span class="sourceLineNo">8493</span> }<a name="line.8493"></a>
-<span class="sourceLineNo">8494</span> }<a name="line.8494"></a>
-<span class="sourceLineNo">8495</span><a name="line.8495"></a>
-<span class="sourceLineNo">8496</span> /**<a name="line.8496"></a>
-<span class="sourceLineNo">8497</span> * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8497"></a>
-<span class="sourceLineNo">8498</span> * to the try block of #startRegionOperation<a name="line.8498"></a>
-<span class="sourceLineNo">8499</span> */<a name="line.8499"></a>
-<span class="sourceLineNo">8500</span> private void closeBulkRegionOperation(){<a name="line.8500"></a>
-<span class="sourceLineNo">8501</span> if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8501"></a>
-<span class="sourceLineNo">8502</span> else lock.readLock().unlock();<a name="line.8502"></a>
-<span class="sourceLineNo">8503</span> }<a name="line.8503"></a>
-<span class="sourceLineNo">8504</span><a name="line.8504"></a>
-<span class="sourceLineNo">8505</span> /**<a name="line.8505"></a>
-<span class="sourceLineNo">8506</span> * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8506"></a>
-<span class="sourceLineNo">8507</span> * These information are exposed by the region server metrics.<a name="line.8507"></a>
-<span class="sourceLineNo">8508</span> */<a name="line.8508"></a>
-<span class="sourceLineNo">8509</span> private void recordMutationWithoutWal(final Map<byte [], List<Cell>> familyMap) {<a name="line.8509"></a>
-<span class="sourceLineNo">8510</span> numMutationsWithoutWAL.increment();<a name="line.8510"></a>
-<span class="sourceLineNo">8511</span> if (numMutationsWithoutWAL.sum() <= 1) {<a name="line.8511"></a>
-<span class="sourceLineNo">8512</span> LOG.info("writing data to region " + this +<a name="line.8512"></a>
-<span class="sourceLineNo">8513</span> " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8513"></a>
-<span class="sourceLineNo">8514</span> }<a name="line.8514"></a>
-<span class="sourceLineNo">8515</span><a name="line.8515"></a>
-<span class="sourceLineNo">8516</span> long mutationSize = 0;<a name="line.8516"></a>
-<span class="sourceLineNo">8517</span> for (List<Cell> cells: familyMap.values()) {<a name="line.8517"></a>
-<span class="sourceLineNo">8518</span> // Optimization: 'foreach' loop is not used. See:<a name="line.8518"></a>
-<span class="sourceLineNo">8519</span> // HBASE-12023 HRegion.applyFamilyMapToMemstore creates too many iterator objects<a name="line.8519"></a>
-<span class="sourceLineNo">8520</span> assert cells instanceof RandomAccess;<a name="line.8520"></a>
-<span class="sourceLineNo">8521</span> int listSize = cells.size();<a name="line.8521"></a>
-<span class="sourceLineNo">8522</span> for (int i=0; i < listSize; i++) {<a name="line.8522"></a>
-<span class="sourceLineNo">8523</span> Cell cell = cells.get(i);<a name="line.8523"></a>
-<span class="sourceLineNo">8524</span> mutationSize += cell.getSerializedSize();<a name="line.8524"></a>
-<span class="sourceLineNo">8525</span> }<a name="line.8525"></a>
-<span class="sourceLineNo">8526</span> }<a name="line.8526"></a>
-<span class="sourceLineNo">8527</span><a name="line.8527"></a>
-<span class="sourceLineNo">8528</span> dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8528"></a>
-<span class="sourceLineNo">8529</span> }<a name="line.8529"></a>
-<span class="sourceLineNo">8530</span><a name="line.8530"></a>
-<span class="sourceLineNo">8531</span> private void lock(final Lock lock) throws RegionTooBusyException, InterruptedIOException {<a name="line.8531"></a>
-<span class="sourceLineNo">8532</span> lock(lock, 1);<a name="line.8532"></a>
-<span class="sourceLineNo">8533</span> }<a name="line.8533"></a>
-<span class="sourceLineNo">8534</span><a name="line.8534"></a>
-<span class="sourceLineNo">8535</span> /**<a name="line.8535"></a>
-<span class="sourceLineNo">8536</span> * Try to acquire a lock. Throw RegionTooBusyException<a name="line.8536"></a>
-<span class="sourceLineNo">8537</span> * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8537"></a>
-<span class="sourceLineNo">8538</span> * if interrupted while waiting for the lock.<a name="line.8538"></a>
-<span class="sourceLineNo">8539</span> */<a name="line.8539"></a>
-<span class="sourceLineNo">8540</span> private void lock(final Lock lock, final int multiplier)<a name="line.8540"></a>
-<span class="sourceLineNo">8541</span> throws RegionTooBusyException, InterruptedIOException {<a name="line.8541"></a>
-<span class="sourceLineNo">8542</span> try {<a name="line.8542"></a>
-<span class="sourceLineNo">8543</span> final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8543"></a>
-<span class="sourceLineNo">8544</span> busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8544"></a>
-<span class="sourceLineNo">8545</span> if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8545"></a>
-<span class="sourceLineNo">8546</span> // Don't print millis. Message is used as a key over in<a name="line.8546"></a>
-<span class="sourceLineNo">8547</span> // RetriesExhaustedWithDetailsException processing.<a name="line.8547"></a>
-<span class="sourceLineNo">8548</span> throw new RegionTooBusyException("Failed to obtain lock; regionName=" +<a name="line.8548"></a>
-<span class="sourceLineNo">8549</span> (this.getRegionInfo() == null? "unknown":<a name="line.8549"></a>
-<span class="sourceLineNo">8550</span> this.getRegionInfo().getRegionNameAsString()) +<a name="line.8550"></a>
-<span class="sourceLineNo">8551</span> ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.8551"></a>
-<span class="sourceLineNo">8552</span> this.getRegionServerServices().getServerName()));<a name="line.8552"></a>
-<span class="sourceLineNo">8553</span> }<a name="line.8553"></a>
-<span class="sourceLineNo">8554</span> } catch (InterruptedException ie) {<a name="line.8554"></a>
-<span class="sourceLineNo">8555</span> LOG.info("Interrupted while waiting for a lock");<a name="line.8555"></a>
-<span class="sourceLineNo">8556</span> InterruptedIOException iie = new InterruptedIOException();<a name="line.8556"></a>
-<span class="sourceLineNo">8557</span> iie.initCause(ie);<a name="line.8557"></a>
-<span class="sourceLineNo">8558</span> throw iie;<a name="line.8558"></a>
-<span class="sourceLineNo">8559</span> }<a name="line.8559"></a>
-<span class="sourceLineNo">8560</span> }<a name="line.8560"></a>
-<span class="sourceLineNo">8561</span><a name="line.8561"></a>
-<span class="sourceLineNo">8562</span> /**<a name="line.8562"></a>
-<span class="sourceLineNo">8563</span> * Calls sync with the given transaction ID<a name="line.8563"></a>
-<span class="sourceLineNo">8564</span> * @param txid should sync up to which transaction<a name="line.8564"></a>
-<span class="sourceLineNo">8565</span> * @throws IOException If anything goes wrong with DFS<a name="line.8565"></a>
-<span class="sourceLineNo">8566</span> */<a name="line.8566"></a>
-<span class="sourceLineNo">8567</span> private void sync(long txid, Durability durability) throws IOException {<a name="line.8567"></a>
-<span class="sourceLineNo">8568</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8568"></a>
-<span class="sourceLineNo">8569</span> this.wal.sync(txid);<a name="line.8569"></a>
-<span class="sourceLineNo">8570</span> } else {<a name="line.8570"></a>
-<span class="sourceLineNo">8571</span> switch(durability) {<a name="line.8571"></a>
-<span class="sourceLineNo">8572</span> case USE_DEFAULT:<a name="line.8572"></a>
-<span class="sourceLineNo">8573</span> // do what table defaults to<a name="line.8573"></a>
-<span class="sourceLineNo">8574</span> if (shouldSyncWAL()) {<a name="line.8574"></a>
-<span class="sourceLineNo">8575</span> this.wal.sync(txid);<a name="line.8575"></a>
-<span class="sourceLineNo">8576</span> }<a name="line.8576"></a>
-<span class="sourceLineNo">8577</span> break;<a name="line.8577"></a>
-<span class="sourceLineNo">8578</span> case SKIP_WAL:<a name="line.8578"></a>
-<span class="sourceLineNo">8579</span> // nothing do to<a name="line.8579"></a>
-<span class="sourceLineNo">8580</span> break;<a name="line.8580"></a>
-<span class="sourceLineNo">8581</span> case ASYNC_WAL:<a name="line.8581"></a>
-<span class="sourceLineNo">8582</span> // nothing do to<a name="line.8582"></a>
-<span class="sourceLineNo">8583</span> break;<a name="line.8583"></a>
-<span class="sourceLineNo">8584</span> case SYNC_WAL:<a name="line.8584"></a>
-<span class="sourceLineNo">8585</span> this.wal.sync(txid, false);<a name="line.8585"></a>
-<span class="sourceLineNo">8586</span> break;<a name="line.8586"></a>
-<span class="sourceLineNo">8587</span> case FSYNC_WAL:<a name="line.8587"></a>
-<span class="sourceLineNo">8588</span> this.wal.sync(txid, true);<a name="line.8588"></a>
-<span class="sourceLineNo">8589</span> break;<a name="line.8589"></a>
-<span class="sourceLineNo">8590</span> default:<a name="line.8590"></a>
-<span class="sourceLineNo">8591</span> throw new RuntimeException("Unknown durability " + durability);<a name="line.8591"></a>
-<span class="sourceLineNo">8592</span> }<a name="line.8592"></a>
-<span class="sourceLineNo">8593</span> }<a name="line.8593"></a>
-<span class="sourceLineNo">8594</span> }<a name="line.8594"></a>
-<span class="sourceLineNo">8595</span><a name="line.8595"></a>
-<span class="sourceLineNo">8596</span> /**<a name="line.8596"></a>
-<span class="sourceLineNo">8597</span> * Check whether we should sync the wal from the table's durability settings<a name="line.8597"></a>
-<span class="sourceLineNo">8598</span> */<a name="line.8598"></a>
-<span class="sourceLineNo">8599</span> private boolean shouldSyncWAL() {<a name="line.8599"></a>
-<span class="sourceLineNo">8600</span> return regionDurability.ordinal() > Durability.ASYNC_WAL.ordinal();<a name="line.8600"></a>
-<span class="sourceLineNo">8601</span> }<a name="line.8601"></a>
-<span class="sourceLineNo">8602</span><a name="line.8602"></a>
-<span class="sourceLineNo">8603</span> /**<a name="line.8603"></a>
-<span class="sourceLineNo">8604</span> * A mocked list implementation - discards all updates.<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span> */<a name="line.8605"></a>
-<span class="sourceLineNo">8606</span> private static final List<Cell> MOCKED_LIST = new AbstractList<Cell>() {<a name="line.8606"></a>
-<span class="sourceLineNo">8607</span><a name="line.8607"></a>
-<span class="sourceLineNo">8608</span> @Override<a name="line.8608"></a>
-<span class="sourceLineNo">8609</span> public void add(int index, Cell element) {<a name="line.8609"></a>
-<span class="sourceLineNo">8610</span> // do nothing<a name="line.8610"></a>
-<span class="sourceLineNo">8611</span> }<a name="line.8611"></a>
-<span class="sourceLineNo">8612</span><a name="line.8612"></a>
-<span class="sourceLineNo">8613</span> @Override<a name="line.8613"></a>
-<span class="sourceLineNo">8614</span> public boolean addAll(int index, Collection<? extends Cell> c) {<a name="line.8614"></a>
-<span class="sourceLineNo">8615</span> return false; // this list is never changed as a result of an update<a name="line.8615"></a>
-<span class="sourceLineNo">8616</span> }<a name="line.8616"></a>
-<span class="sourceLineNo">8617</span><a name="line.8617"></a>
-<span class="sourceLineNo">8618</span> @Override<a name="line.8618"></a>
-<span class="sourceLineNo">8619</span> public KeyValue get(int index) {<a name="line.8619"></a>
-<span class="sourceLineNo">8620</span> throw new UnsupportedOperationException();<a name="line.8620"></a>
-<span class="sourceLineNo">8621</span> }<a name="line.8621"></a>
-<span class="sourceLineNo">8622</span><a name="line.8622"></a>
-<span class="sourceLineNo">8623</span> @Override<a name="line.8623"></a>
-<span class="sourceLineNo">8624</span> public int size() {<a name="line.8624"></a>
-<span class="sourceLineNo">8625</span> return 0;<a name="line.8625"></a>
-<span class="sourceLineNo">8626</span> }<a name="line.8626"></a>
-<span class="sourceLineNo">8627</span> };<a name="line.8627"></a>
-<span class="sourceLineNo">8628</span><a name="line.8628"></a>
-<span class="sourceLineNo">8629</span> /** @return the latest sequence number that was read from storage when this region was opened */<a name="line.8629"></a>
-<span class="sourceLineNo">8630</span> public long getOpenSeqNum() {<a name="line.8630"></a>
-<span class="sourceLineNo">8631</span> return this.openSeqNum;<a name="line.8631"></a>
-<span class="sourceLineNo">8632</span> }<a name="line.8632"></a>
-<span class="sourceLineNo">8633</span><a name="line.8633"></a>
-<span class="sourceLineNo">8634</span> @Override<a name="line.8634"></a>
-<span class="sourceLineNo">8635</span> public Map<byte[], Long> getMaxStoreSeqId() {<a name="line.8635"></a>
-<span class="sourceLineNo">8636</span> return this.maxSeqIdInStores;<a name="line.8636"></a>
-<span class="sourceLineNo">8637</span> }<a name="line.8637"></a>
-<span class="sourceLineNo">8638</span><a name="line.8638"></a>
-<span class="sourceLineNo">8639</span> public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8639"></a>
-<span class="sourceLineNo">8640</span> return wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8640"></a>
-<span class="sourceLineNo">8641</span> }<a name="line.8641"></a>
-<span class="sourceLineNo">8642</span><a name="line.8642"></a>
-<span class="sourceLineNo">8643</span> @Override<a name="line.8643"></a>
-<span class="sourceLineNo">8644</span> public CompactionState getCompactionState() {<a name="line.8644"></a>
-<span class="sourceLineNo">8645</span> boolean hasMajor = majorInProgress.get() > 0, hasMinor = minorInProgress.get() > 0;<a name="line.8645"></a>
-<span class="sourceLineNo">8646</span> return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8646"></a>
-<span class="sourceLineNo">8647</span> : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8647"></a>
-<span class="sourceLineNo">8648</span> }<a name="line.8648"></a>
-<span class="sourceLineNo">8649</span><a name="line.8649"></a>
-<span class="sourceLineNo">8650</span> public void reportCompactionRequestStart(boolean isMajor){<a name="line.8650"></a>
-<span class="sourceLineNo">8651</span> (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8651"></a>
-<span class="sourceLineNo">8652</span> }<a name="line.8652"></a>
-<span class="sourceLineNo">8653</span><a name="line.8653"></a>
-<span class="sourceLineNo">8654</span> public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8654"></a>
-<span class="sourceLineNo">8655</span> int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8655"></a>
-<span class="sourceLineNo">8656</span><a name="line.8656"></a>
-<span class="sourceLineNo">8657</span> // metrics<a name="line.8657"></a>
-<span class="sourceLineNo">8658</span> compactionsFinished.increment();<a name="line.8658"></a>
-<span class="sourceLineNo">8659</span> compactionNumFilesCompacted.add(numFiles);<a name="line.8659"></a>
-<span class="sourceLineNo">8660</span> compactionNumBytesCompacted.add(filesSizeCompacted);<a name="line.8660"></a>
+<span class="sourceLineNo">8455</span> try {<a name="line.8455"></a>
+<span class="sourceLineNo">8456</span> if (coprocessorHost != null) {<a name="line.8456"></a>
+<span class="sourceLineNo">8457</span> coprocessorHost.postStartRegionOperation(op);<a name="line.8457"></a>
+<span class="sourceLineNo">8458</span> }<a name="line.8458"></a>
+<span class="sourceLineNo">8459</span> } catch (Exception e) {<a name="line.8459"></a>
+<span class="sourceLineNo">8460</span> lock.readLock().unlock();<a name="line.8460"></a>
+<span class="sourceLineNo">8461</span> throw new IOException(e);<a name="line.8461"></a>
+<span class="sourceLineNo">8462</span> }<a name="line.8462"></a>
+<span class="sourceLineNo">8463</span> }<a name="line.8463"></a>
+<span class="sourceLineNo">8464</span><a name="line.8464"></a>
+<span class="sourceLineNo">8465</span> @Override<a name="line.8465"></a>
+<span class="sourceLineNo">8466</span> public void closeRegionOperation() throws IOException {<a name="line.8466"></a>
+<span class="sourceLineNo">8467</span> closeRegionOperation(Operation.ANY);<a name="line.8467"></a>
+<span class="sourceLineNo">8468</span> }<a name="line.8468"></a>
+<span class="sourceLineNo">8469</span><a name="line.8469"></a>
+<span class="sourceLineNo">8470</span> @Override<a name="line.8470"></a>
+<span class="sourceLineNo">8471</span> public void closeRegionOperation(Operation operation) throws IOException {<a name="line.8471"></a>
+<span class="sourceLineNo">8472</span> if (operation == Operation.SNAPSHOT) {<a name="line.8472"></a>
+<span class="sourceLineNo">8473</span> stores.values().forEach(HStore::postSnapshotOperation);<a name="line.8473"></a>
+<span class="sourceLineNo">8474</span> }<a name="line.8474"></a>
+<span class="sourceLineNo">8475</span> lock.readLock().unlock();<a name="line.8475"></a>
+<span class="sourceLineNo">8476</span> if (coprocessorHost != null) {<a name="line.8476"></a>
+<span class="sourceLineNo">8477</span> coprocessorHost.postCloseRegionOperation(operation);<a name="line.8477"></a>
+<span class="sourceLineNo">8478</span> }<a name="line.8478"></a>
+<span class="sourceLineNo">8479</span> }<a name="line.8479"></a>
+<span class="sourceLineNo">8480</span><a name="line.8480"></a>
+<span class="sourceLineNo">8481</span> /**<a name="line.8481"></a>
+<span class="sourceLineNo">8482</span> * This method needs to be called before any public call that reads or<a name="line.8482"></a>
+<span class="sourceLineNo">8483</span> * modifies stores in bulk. It has to be called just before a try.<a name="line.8483"></a>
+<span class="sourceLineNo">8484</span> * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.8484"></a>
+<span class="sourceLineNo">8485</span> * Acquires a writelock and checks if the region is closing or closed.<a name="line.8485"></a>
+<span class="sourceLineNo">8486</span> * @throws NotServingRegionException when the region is closing or closed<a name="line.8486"></a>
+<span class="sourceLineNo">8487</span> * @throws RegionTooBusyException if failed to get the lock in time<a name="line.8487"></a>
+<span class="sourceLineNo">8488</span> * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.8488"></a>
+<span class="sourceLineNo">8489</span> */<a name="line.8489"></a>
+<span class="sourceLineNo">8490</span> private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.8490"></a>
+<span class="sourceLineNo">8491</span> throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.8491"></a>
+<span class="sourceLineNo">8492</span> if (this.closing.get()) {<a name="line.8492"></a>
+<span class="sourceLineNo">8493</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8493"></a>
+<span class="sourceLineNo">8494</span> }<a name="line.8494"></a>
+<span class="sourceLineNo">8495</span> if (writeLockNeeded) lock(lock.writeLock());<a name="line.8495"></a>
+<span class="sourceLineNo">8496</span> else lock(lock.readLock());<a name="line.8496"></a>
+<span class="sourceLineNo">8497</span> if (this.closed.get()) {<a name="line.8497"></a>
+<span class="sourceLineNo">8498</span> if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8498"></a>
+<span class="sourceLineNo">8499</span> else lock.readLock().unlock();<a name="line.8499"></a>
+<span class="sourceLineNo">8500</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8500"></a>
+<span class="sourceLineNo">8501</span> }<a name="line.8501"></a>
+<span class="sourceLineNo">8502</span> }<a name="line.8502"></a>
+<span class="sourceLineNo">8503</span><a name="line.8503"></a>
+<span class="sourceLineNo">8504</span> /**<a name="line.8504"></a>
+<span class="sourceLineNo">8505</span> * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8505"></a>
+<span class="sourceLineNo">8506</span> * to the try block of #startRegionOperation<a name="line.8506"></a>
+<span class="sourceLineNo">8507</span> */<a name="line.8507"></a>
+<span class="sourceLineNo">8508</span> private void closeBulkRegionOperation(){<a name="line.8508"></a>
+<span class="sourceLineNo">8509</span> if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8509"></a>
+<span class="sourceLineNo">8510</span> else lock.readLock().unlock();<a name="line.8510"></a>
+<span class="sourceLineNo">8511</span> }<a name="line.8511"></a>
+<span class="sourceLineNo">8512</span><a name="line.8512"></a>
+<span class="sourceLineNo">8513</span> /**<a name="line.8513"></a>
+<span class="sourceLineNo">8514</span> * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8514"></a>
+<span class="sourceLineNo">8515</span> * These information are exposed by the region server metrics.<a name="line.8515"></a>
+<span class="sourceLineNo">8516</span> */<a name="line.8516"></a>
+<span class="sourceLineNo">8517</span> private void recordMutationWithoutWal(final Map<byte [], List<Cell>> familyMap) {<a name="line.8517"></a>
+<span class="sourceLineNo">8518</span> numMutationsWithoutWAL.increment();<a name="line.8518"></a>
+<span class="sourceLineNo">8519</span> if (numMutationsWithoutWAL.sum() <= 1) {<a name="line.8519"></a>
+<span class="sourceLineNo">8520</span> LOG.info("writing data to region " + this +<a name="line.8520"></a>
+<span class="sourceLineNo">8521</span> " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8521"></a>
+<span class="sourceLineNo">8522</span> }<a name="line.8522"></a>
+<span class="sourceLineNo">8523</span><a name="line.8523"></a>
+<span class="sourceLineNo">8524</span> long mutationSize = 0;<a name="line.8524"></a>
+<span class="sourceLineNo">8525</span> for (List<Cell> cells: familyMap.values()) {<a name="line.8525"></a>
+<span class="sourceLineNo">8526</span> // Optimization: 'foreach' loop is not used. See:<a name="line.8526"></a>
+<span class="sourceLineNo">8527</span> // HBASE-12023 HRegion.applyFamilyMapToMemstore creates too many iterator objects<a name="line.8527"></a>
+<span class="sourceLineNo">8528</span> assert cells instanceof RandomAccess;<a name="line.8528"></a>
+<span class="sourceLineNo">8529</span> int listSize = cells.size();<a name="line.8529"></a>
+<span class="sourceLineNo">8530</span> for (int i=0; i < listSize; i++) {<a name="line.8530"></a>
+<span class="sourceLineNo">8531</span> Cell cell = cells.get(i);<a name="line.8531"></a>
+<span class="sourceLineNo">8532</span> mutationSize += cell.getSerializedSize();<a name="line.8532"></a>
+<span class="sourceLineNo">8533</span> }<a name="line.8533"></a>
+<span class="sourceLineNo">8534</span> }<a name="line.8534"></a>
+<span class="sourceLineNo">8535</span><a name="line.8535"></a>
+<span class="sourceLineNo">8536</span> dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8536"></a>
+<span class="sourceLineNo">8537</span> }<a name="line.8537"></a>
+<span class="sourceLineNo">8538</span><a name="line.8538"></a>
+<span class="sourceLineNo">8539</span> private void lock(final Lock lock) throws RegionTooBusyException, InterruptedIOException {<a name="line.8539"></a>
+<span class="sourceLineNo">8540</span> lock(lock, 1);<a name="line.8540"></a>
+<span class="sourceLineNo">8541</span> }<a name="line.8541"></a>
+<span class="sourceLineNo">8542</span><a name="line.8542"></a>
+<span class="sourceLineNo">8543</span> /**<a name="line.8543"></a>
+<span class="sourceLineNo">8544</span> * Try to acquire a lock. Throw RegionTooBusyException<a name="line.8544"></a>
+<span class="sourceLineNo">8545</span> * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8545"></a>
+<span class="sourceLineNo">8546</span> * if interrupted while waiting for the lock.<a name="line.8546"></a>
+<span class="sourceLineNo">8547</span> */<a name="line.8547"></a>
+<span class="sourceLineNo">8548</span> private void lock(final Lock lock, final int multiplier)<a name="line.8548"></a>
+<span class="sourceLineNo">8549</span> throws RegionTooBusyException, InterruptedIOException {<a name="line.8549"></a>
+<span class="sourceLineNo">8550</span> try {<a name="line.8550"></a>
+<span class="sourceLineNo">8551</span> final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8551"></a>
+<span class="sourceLineNo">8552</span> busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8552"></a>
+<span class="sourceLineNo">8553</span> if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8553"></a>
+<span class="sourceLineNo">8554</span> // Don't print millis. Message is used as a key over in<a name="line.8554"></a>
+<span class="sourceLineNo">8555</span> // RetriesExhaustedWithDetailsException processing.<a name="line.8555"></a>
+<span class="sourceLineNo">8556</span> throw new RegionTooBusyException("Failed to obtain lock; regionName=" +<a name="line.8556"></a>
+<span class="sourceLineNo">8557</span> (this.getRegionInfo() == null? "unknown":<a name="line.8557"></a>
+<span class="sourceLineNo">8558</span> this.getRegionInfo().getRegionNameAsString()) +<a name="line.8558"></a>
+<span class="sourceLineNo">8559</span> ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.8559"></a>
+<span class="sourceLineNo">8560</span> this.getRegionServerServices().getServerName()));<a name="line.8560"></a>
+<span class="sourceLineNo">8561</span> }<a name="line.8561"></a>
+<span class="sourceLineNo">8562</span> } catch (InterruptedException ie) {<a name="line.8562"></a>
+<span class="sourceLineNo">8563</span> LOG.info("Interrupted while waiting for a lock");<a name="line.8563"></a>
+<span class="sourceLineNo">8564</span> InterruptedIOException iie = new InterruptedIOException();<a name="line.8564"></a>
+<span class="sourceLineNo">8565</span> iie.initCause(ie);<a name="line.8565"></a>
+<span class="sourceLineNo">8566</span> throw iie;<a name="line.8566"></a>
+<span class="sourceLineNo">8567</span> }<a name="line.8567"></a>
+<span class="sourceLineNo">8568</span> }<a name="line.8568"></a>
+<span class="sourceLineNo">8569</span><a name="line.8569"></a>
+<span class="sourceLineNo">8570</span> /**<a name="line.8570"></a>
+<span class="sourceLineNo">8571</span> * Calls sync with the given transaction ID<a name="line.8571"></a>
+<span class="sourceLineNo">8572</span> * @param txid should sync up to which transaction<a name="line.8572"></a>
+<span class="sourceLineNo">8573</span> * @throws IOException If anything goes wrong with DFS<a name="line.8573"></a>
+<span class="sourceLineNo">8574</span> */<a name="line.8574"></a>
+<span class="sourceLineNo">8575</span> private void sync(long txid, Durability durability) throws IOException {<a name="line.8575"></a>
+<span class="sourceLineNo">8576</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8576"></a>
+<span class="sourceLineNo">8577</span> this.wal.sync(txid);<a name="line.8577"></a>
+<span class="sourceLineNo">8578</span> } else {<a name="line.8578"></a>
+<span class="sourceLineNo">8579</span> switch(durability) {<a name="line.8579"></a>
+<span class="sourceLineNo">8580</span> case USE_DEFAULT:<a name="line.8580"></a>
+<span class="sourceLineNo">8581</span> // do what table defaults to<a name="line.8581"></a>
+<span class="sourceLineNo">8582</span> if (shouldSyncWAL()) {<a name="line.8582"></a>
+<span class="sourceLineNo">8583</span> this.wal.sync(txid);<a name="line.8583"></a>
+<span class="sourceLineNo">8584</span> }<a name="line.8584"></a>
+<span class="sourceLineNo">8585</span> break;<a name="line.8585"></a>
+<span class="sourceLineNo">8586</span> case SKIP_WAL:<a name="line.8586"></a>
+<span class="sourceLineNo">8587</span> // nothing do to<a name="line.8587"></a>
+<span class="sourceLineNo">8588</span> break;<a name="line.8588"></a>
+<span class="sourceLineNo">8589</span> case ASYNC_WAL:<a name="line.8589"></a>
+<span class="sourceLineNo">8590</span> // nothing do to<a name="line.8590"></a>
+<span class="sourceLineNo">8591</span> break;<a name="line.8591"></a>
+<span class="sourceLineNo">8592</span> case SYNC_WAL:<a name="line.8592"></a>
+<span class="sourceLineNo">8593</span> this.wal.sync(txid, false);<a name="line.8593"></a>
+<span class="sourceLineNo">8594</span> break;<a name="line.8594"></a>
+<span class="sourceLineNo">8595</span> case FSYNC_WAL:<a name="line.8595"></a>
+<span class="sourceLineNo">8596</span> this.wal.sync(txid, true);<a name="line.8596"></a>
+<span class="sourceLineNo">8597</span> break;<a name="line.8597"></a>
+<span class="sourceLineNo">8598</span> default:<a name="line.8598"></a>
+<span class="sourceLineNo">8599</span> throw new RuntimeException("Unknown durability " + durability);<a name="line.8599"></a>
+<span class="sourceLineNo">8600</span> }<a name="line.8600"></a>
+<span class="sourceLineNo">8601</span> }<a name="line.8601"></a>
+<span class="sourceLineNo">8602</span> }<a name="line.8602"></a>
+<span class="sourceLineNo">8603</span><a name="line.8603"></a>
+<span class="sourceLineNo">8604</span> /**<a name="line.8604"></a>
+<span class="sourceLineNo">8605</span> * Check whether we should sync the wal from the table's durability settings<a name="line.8605"></a>
+<span class="sourceLineNo">8606</span> */<a name="line.8606"></a>
+<span class="sourceLineNo">8607</span> private boolean shouldSyncWAL() {<a name="line.8607"></a>
+<span class="sourceLineNo">8608</span> return regionDurability.ordinal() > Durability.ASYNC_WAL.ordinal();<a name="line.8608"></a>
+<span class="sourceLineNo">8609</span> }<a name="line.8609"></a>
+<span class="sourceLineNo">8610</span><a name="line.8610"></a>
+<span class="sourceLineNo">8611</span> /**<a name="line.8611"></a>
+<span class="sourceLineNo">8612</span> * A mocked list implementation - discards all updates.<a name="line.8612"></a>
+<span class="sourceLineNo">8613</span> */<a name="line.8613"></a>
+<span class="sourceLineNo">8614</span> private static final List<Cell> MOCKED_LIST = new AbstractList<Cell>() {<a name="line.8614"></a>
+<span class="sourceLineNo">8615</span><a name="line.8615"></a>
+<span class="sourceLineNo">8616</span> @Override<a name="line.8616"></a>
+<span class="sourceLineNo">8617</span> public void add(int index, Cell element) {<a name="line.8617"></a>
+<span class="sourceLineNo">8618</span> // do nothing<a name="line.8618"></a>
+<span class="sourceLineNo">8619</span> }<a name="line.8619"></a>
+<span class="sourceLineNo">8620</span><a name="line.8620"></a>
+<span class="sourceLineNo">8621</span> @Override<a name="line.8621"></a>
+<span class="sourceLineNo">8622</span> public boolean addAll(int index, Collection<? extends Cell> c) {<a name="line.8622"></a>
+<span class="sourceLineNo">8623</span> return false; // this list is never changed as a result of an update<a name="line.8623"></a>
+<span class="sourceLineNo">8624</span> }<a name="line.8624"></a>
+<span class="sourceLineNo">8625</span><a name="line.8625"></a>
+<span class="sourceLineNo">8626</span> @Override<a name="line.8626"></a>
+<span class="sourceLineNo">8627</span> public KeyValue get(int index) {<a name="line.8627"></a>
+<span class="sourceLineNo">8628</span> throw new UnsupportedOperationException();<a name="line.8628"></a>
+<span class="sourceLineNo">8629</span> }<a name="line.8629"></a>
+<span class="sourceLineNo">8630</span><a name="line.8630"></a>
+<span class="sourceLineNo">8631</span> @Override<a name="line.8631"></a>
+<span class="sourceLineNo">8632</span> public int size() {<a name="line.8632"></a>
+<span class="sourceLineNo">8633</span> return 0;<a name="line.8633"></a>
+<span class="sourceLineNo">8634</span> }<a name="line.8634"></a>
+<span class="sourceLineNo">8635</span> };<a name="line.8635"></a>
+<span class="sourceLineNo">8636</span><a name="line.8636"></a>
+<span class="sourceLineNo">8637</span> /** @return the latest sequence number that was read from storage when this region was opened */<a name="line.8637"></a>
+<span class="sourceLineNo">8638</span> public long getOpenSeqNum() {<a name="line.8638"></a>
+<span class="sourceLineNo">8639</span> return this.openSeqNum;<a name="line.8639"></a>
+<span class="sourceLineNo">8640</span> }<a name="line.8640"></a>
+<span class="sourceLineNo">8641</span><a name="line.8641"></a>
+<span class="sourceLineNo">8642</span> @Override<a name="line.8642"></a>
+<span class="sourceLineNo">8643</span> public Map<byte[], Long> getMaxStoreSeqId() {<a name="line.8643"></a>
+<span class="sourceLineNo">8644</span> return this.maxSeqIdInStores;<a name="line.8644"></a>
+<span class="sourceLineNo">8645</span> }<a name="line.8645"></a>
+<span class="sourceLineNo">8646</span><a name="line.8646"></a>
+<span class="sourceLineNo">8647</span> public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8647"></a>
+<span class="sourceLineNo">8648</span> return wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8648"></a>
+<span class="sourceLineNo">8649</span> }<a name="line.8649"></a>
+<span class="sourceLineNo">8650</span><a name="line.8650"></a>
+<span class="sourceLineNo">8651</span> @Override<a name="line.8651"></a>
+<span class="sourceLineNo">8652</span> public CompactionState getCompactionState() {<a name="line.8652"></a>
+<span class="sourceLineNo">8653</span> boolean hasMajor = majorInProgress.get() > 0, hasMinor = minorInProgress.get() > 0;<a name="line.8653"></a>
+<span class="sourceLineNo">8654</span> return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8654"></a>
+<span class="sourceLineNo">8655</span> : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8655"></a>
+<span class="sourceLineNo">8656</span> }<a name="line.8656"></a>
+<span class="sourceLineNo">8657</span><a name="line.8657"></a>
+<span class="sourceLineNo">8658</span> public void reportCompactionRequestStart(boolean isMajor){<a name="line.8658"></a>
+<span class="sourceLineNo">8659</span> (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8659"></a>
+<span class="sourceLineNo">8660</span> }<a name="line.8660"></a>
<span class="sourceLineNo">8661</span><a name="line.8661"></a>
-<span class="sourceLineNo">8662</span> assert newValue >= 0;<a name="line.8662"></a>
-<span class="sourceLineNo">8663</span> }<a name="line.8663"></a>
+<span class="sourceLineNo">8662</span> public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8662"></a>
+<span class="sourceLineNo">8663</span> int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8663"></a>
<span class="sourceLineNo">8664</span><a name="line.8664"></a>
-<span class="sourceLineNo">8665</span> public void reportCompactionRequestFailure() {<a name="line.8665"></a>
-<span class="sourceLineNo">8666</span> compactionsFailed.increment();<a name="line.8666"></a>
-<span class="sourceLineNo">8667</span> }<a name="line.8667"></a>
-<span class="sourceLineNo">8668</span><a name="line.8668"></a>
-<span class="sourceLineNo">8669</span> public void incrementCompactionsQueuedCount() {<a name="line.8669"></a>
-<span class="sourceLineNo">8670</span> compactionsQueued.increment();<a name="line.8670"></a>
+<span class="sourceLineNo">8665</span> // metrics<a name="line.8665"></a>
+<span class="sourceLineNo">8666</span> compactionsFinished.increment();<a name="line.8666"></a>
+<span class="sourceLineNo">8667</span> compactionNumFilesCompacted.add(numFiles);<a name="line.8667"></a>
+<span class="sourceLineNo">8668</span> compactionNumBytesCompacted.add(filesSizeCompacted);<a name="line.8668"></a>
+<span class="sourceLineNo">8669</span><a name="line.8669"></a>
+<span class="sourceLineNo">8670</span> assert newValue >= 0;<a name="line.8670"></a>
<span class="sourceLineNo">8671</span> }<a name="line.8671"></a>
<span class="sourceLineNo">8672</span><a name="line.8672"></a>
-<span class="sourceLineNo">8673</span> public void decrementCompactionsQueuedCount() {<a name="line.8673"></a>
-<span class="sourceLineNo">8674</span> compactionsQueued.decrement();<a name="line.8674"></a>
+<span class="sourceLineNo">8673</span> public void reportCompactionRequestFailure() {<a name="line.8673"></a>
+<span class="sourceLineNo">8674</span> compactionsFailed.increment();<a name="line.8674"></a>
<span class="sourceLineNo">8675</span> }<a name="line.8675"></a>
<span class="sourceLineNo">8676</span><a name="line.8676"></a>
-<span class="sourceLineNo">8677</span> public void incrementFlushesQueuedCount() {<a name="line.8677"></a>
-<span class="sourceLineNo">8678</span> flushesQueued.increment();<a name="line.8678"></a>
+<span class="sourceLineNo">8677</span> public void incrementCompactionsQueuedCount() {<a name="line.8677"></a>
+<span class="sourceLineNo">8678</span> compactionsQueued.increment();<a name="line.8678"></a>
<span class="sourceLineNo">8679</span> }<a name="line.8679"></a>
<span class="sourceLineNo">8680</span><a name="line.8680"></a>
-<span class="sourceLineNo">8681</span> @VisibleForTesting<a name="line.8681"></a>
-<span class="sourceLineNo">8682</span> public long getReadPoint() {<a name="line.8682"></a>
-<span class="sourceLineNo">8683</span> return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8683"></a>
-<span class="sourceLineNo">8684</span> }<a name="line.8684"></a>
-<span class="sourceLineNo">8685</span><a name="line.8685"></a>
-<span class="sourceLineNo">8686</span> /**<a name="line.8686"></a>
-<span class="sourceLineNo">8687</span> * {@inheritDoc}<a name="line.8687"></a>
-<span class="sourceLineNo">8688</span> */<a name="line.8688"></a>
-<span class="sourceLineNo">8689</span> @Override<a name="line.8689"></a>
-<span class="sourceLineNo">8690</span> public void onConfigurationChange(Configuration conf) {<a name="line.8690"></a>
-<span class="sourceLineNo">8691</span> this.storeHotnessProtector.update(conf);<a name="line.8691"></a>
+<span class="sourceLineNo">8681</span> public void decrementCompactionsQueuedCount() {<a name="line.8681"></a>
+<span class="sourceLineNo">8682</span> compactionsQueued.decrement();<a name="line.8682"></a>
+<span class="sourceLineNo">8683</span> }<a name="line.8683"></a>
+<span class="sourceLineNo">8684</span><a name="line.8684"></a>
+<span class="sourceLineNo">8685</span> public void incrementFlushesQueuedCount() {<a name="line.8685"></a>
+<span class="sourceLineNo">8686</span> flushesQueued.increment();<a name="line.8686"></a>
+<span class="sourceLineNo">8687</span> }<a name="line.8687"></a>
+<span class="sourceLineNo">8688</span><a name="line.8688"></a>
+<span class="sourceLineNo">8689</span> @VisibleForTesting<a name="line.8689"></a>
+<span class="sourceLineNo">8690</span> public long getReadPoint() {<a name="line.8690"></a>
+<span class="sourceLineNo">8691</span> return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8691"></a>
<span class="sourceLineNo">8692</span> }<a name="line.8692"></a>
<span class="sourceLineNo">8693</span><a name="line.8693"></a>
<span class="sourceLineNo">8694</span> /**<a name="line.8694"></a>
<span class="sourceLineNo">8695</span> * {@inheritDoc}<a name="line.8695"></a>
<span class="sourceLineNo">8696</span> */<a name="line.8696"></a>
<span class="sourceLineNo">8697</span> @Override<a name="line.8697"></a>
-<span class="sourceLineNo">8698</span> public void registerChildren(ConfigurationManager manager) {<a name="line.8698"></a>
-<span class="sourceLineNo">8699</span> configurationManager = Optional.of(manager);<a name="line.8699"></a>
-<span class="sourceLineNo">8700</span> stores.values().forEach(manager::registerObserver);<a name="line.8700"></a>
-<span class="sourceLineNo">8701</span> }<a name="line.8701"></a>
-<span class="sourceLineNo">8702</span><a name="line.8702"></a>
-<span class="sourceLineNo">8703</span> /**<a name="line.8703"></a>
-<span class="sourceLineNo">8704</span> * {@inheritDoc}<a name="line.8704"></a>
-<span class="sourceLineNo">8705</span> */<a name="line.8705"></a>
-<span class="sourceLineNo">8706</span> @Override<a name="line.8706"></a>
-<span class="sourceLineNo">8707</span> public void deregisterChildren(ConfigurationManager manager) {<a name="line.8707"></a>
-<span class="sourceLineNo">8708</span> stores.values().forEach(configurationManager.get()::deregisterObserver);<a name="line.8708"></a>
+<span class="sourceLineNo">8698</span> public void onConfigurationChange(Configuration conf) {<a name="line.8698"></a>
+<span class="sourceLineNo">8699</span> this.storeHotnessProtector.update(conf);<a name="line.8699"></a>
+<span class="sourceLineNo">8700</span> }<a name="line.8700"></a>
+<span class="sourceLineNo">8701</span><a name="line.8701"></a>
+<span class="sourceLineNo">8702</span> /**<a name="line.8702"></a>
+<span class="sourceLineNo">8703</span> * {@inheritDoc}<a name="line.8703"></a>
+<span class="sourceLineNo">8704</span> */<a name="line.8704"></a>
+<span class="sourceLineNo">8705</span> @Override<a name="line.8705"></a>
+<span class="sourceLineNo">8706</span> public void registerChildren(ConfigurationManager manager) {<a name="line.8706"></a>
+<span class="sourceLineNo">8707</span> configurationManager = Optional.of(manager);<a name="line.8707"></a>
+<span class="sourceLineNo">8708</span> stores.values().forEach(manager::registerObserver);<a name="line.8708"></a>
<span class="sourceLineNo">8709</span> }<a name="line.8709"></a>
<span class="sourceLineNo">8710</span><a name="line.8710"></a>
-<span class="sourceLineNo">8711</span> @Override<a name="line.8711"></a>
-<span class="sourceLineNo">8712</span> public CellComparator getCellComparator() {<a name="line.8712"></a>
-<span class="sourceLineNo">8713</span> return this.getRegionInfo().isMetaRegion() ? CellComparatorImpl.META_COMPARATOR<a name="line.8713"></a>
-<span class="sourceLineNo">8714</span> : CellComparatorImpl.COMPARATOR;<a name="line.8714"></a>
-<span class="sourceLineNo">8715</span> }<a name="line.8715"></a>
-<span class="sourceLineNo">8716</span><a name="line.8716"></a>
-<span class="sourceLineNo">8717</span> public long getMemStoreFlushSize() {<a name="line.8717"></a>
-<span class="sourceLineNo">8718</span> return this.memstoreFlushSize;<a name="line.8718"></a>
-<span class="sourceLineNo">8719</span> }<a name="line.8719"></a>
-<span class="sourceLineNo">8720</span><a name="line.8720"></a>
-<span class="sourceLineNo">8721</span><a name="line.8721"></a>
-<span class="sourceLineNo">8722</span> //// method for debugging tests<a name="line.8722"></a>
-<span class="sourceLineNo">8723</span> void throwException(String title, String regionName) {<a name="line.8723"></a>
-<span class="sourceLineNo">8724</span> StringBuilder buf = new StringBuilder();<a name="line.8724"></a>
-<span class="sourceLineNo">8725</span> buf.append(title + ", ");<a name="line.8725"></a>
-<span class="sourceLineNo">8726</span> buf.append(getRegionInfo().toString());<a name="line.8726"></a>
-<span class="sourceLineNo">8727</span> buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8727"></a>
-<span class="sourceLineNo">8728</span> buf.append("stores: ");<a name="line.8728"></a>
-<span class="sourceLineNo">8729</span> for (HStore s : stores.values()) {<a name="line.8729"></a>
-<span class="sourceLineNo">8730</span> buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8730"></a>
-<span class="sourceLineNo">8731</span> buf.append(" size: ");<a name="line.8731"></a>
-<span class="sourceLineNo">8732</span> buf.append(s.getMemStoreSize().getDataSize());<a name="line.8732"></a>
-<span class="sourceLineNo">8733</span> buf.append(" ");<a name="line.8733"></a>
-<span class="sourceLineNo">8734</span> }<a name="line.8734"></a>
-<span class="sourceLineNo">8735</span> buf.append("end-of-stores");<a name="line.8735"></a>
-<span class="sourceLineNo">8736</span> buf.append(", memstore size ");<a name="line.8736"></a>
-<span class="sourceLineNo">8737</span> buf.append(getMemStoreDataSize());<a name="line.8737"></a>
-<span class="sourceLineNo">8738</span> if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8738"></a>
-<span class="sourceLineNo">8739</span> throw new RuntimeException(buf.toString());<a name="line.8739"></a>
-<span class="sourceLineNo">8740</span> }<a name="line.8740"></a>
-<span class="sourceLineNo">8741</span> }<a name="line.8741"></a>
-<span class="sourceLineNo">8742</span><a name="line.8742"></a>
-<span class="sourceLineNo">8743</span> @Override<a name="line.8743"></a>
-<span class="sourceLineNo">8744</span> public void requestCompaction(String why, int priority, boolean major,<a name="line.8744"></a>
-<span class="sourceLineNo">8745</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8745"></a>
-<span class="sourceLineNo">8746</span> if (major) {<a name="line.8746"></a>
-<span class="sourceLineNo">8747</span> stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.8747"></a>
+<span class="sourceLineNo">8711</span> /**<a name="line.8711"></a>
+<span class="sourceLineNo">8712</span> * {@inheritDoc}<a name="line.8712"></a>
+<span class="sourceLineNo">8713</span> */<a name="line.8713"></a>
+<span class="sourceLineNo">8714</span> @Override<a name="line.8714"></a>
+<span class="sourceLineNo">8715</span> public void deregisterChildren(ConfigurationManager manager) {<a name="line.8715"></a>
+<span class="sourceLineNo">8716</span> stores.values().forEach(configurationManager.get()::deregisterObserver);<a name="line.8716"></a>
+<span class="sourceLineNo">8717</span> }<a name="line.8717"></a>
+<span class="sourceLineNo">8718</span><a name="line.8718"></a>
+<span class="sourceLineNo">8719</span> @Override<a name="line.8719"></a>
+<span class="sourceLineNo">8720</span> public CellComparator getCellComparator() {<a name="line.8720"></a>
+<span class="sourceLineNo">8721</span> return this.getRegionInfo().isMetaRegion() ? CellComparatorImpl.META_COMPARATOR<a name="line.8721"></a>
+<span class="sourceLineNo">8722</span> : CellComparatorImpl.COMPARATOR;<a name="line.8722"></a>
+<span class="sourceLineNo">8723</span> }<a name="line.8723"></a>
+<span class="sourceLineNo">8724</span><a name="line.8724"></a>
+<span class="sourceLineNo">8725</span> public long getMemStoreFlushSize() {<a name="line.8725"></a>
+<span class="sourceLineNo">8726</span> return this.memstoreFlushSize;<a name="line.8726"></a>
+<span class="sourceLineNo">8727</span> }<a name="line.8727"></a>
+<span class="sourceLineNo">8728</span><a name="line.8728"></a>
+<span class="sourceLineNo">8729</span><a name="line.8729"></a>
+<span class="sourceLineNo">8730</span> //// method for debugging tests<a name="line.8730"></a>
+<span class="sourceLineNo">8731</span> void throwException(String title, String regionName) {<a name="line.8731"></a>
+<span class="sourceLineNo">8732</span> StringBuilder buf = new StringBuilder();<a name="line.8732"></a>
+<span class="sourceLineNo">8733</span> buf.append(title + ", ");<a name="line.8733"></a>
+<span class="sourceLineNo">8734</span> buf.append(getRegionInfo().toString());<a name="line.8734"></a>
+<span class="sourceLineNo">8735</span> buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8735"></a>
+<span class="sourceLineNo">8736</span> buf.append("stores: ");<a name="line.8736"></a>
+<span class="sourceLineNo">8737</span> for (HStore s : stores.values()) {<a name="line.8737"></a>
+<span class="sourceLineNo">8738</span> buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8738"></a>
+<span class="sourceLineNo">8739</span> buf.append(" size: ");<a name="line.8739"></a>
+<span class="sourceLineNo">8740</span> buf.append(s.getMemStoreSize().getDataSize());<a name="line.8740"></a>
+<span class="sourceLineNo">8741</span> buf.append(" ");<a name="line.8741"></a>
+<span class="sourceLineNo">8742</span> }<a name="line.8742"></a>
+<span class="sourceLineNo">8743</span> buf.append("end-of-stores");<a name="line.8743"></a>
+<span class="sourceLineNo">8744</span> buf.append(", memstore size ");<a name="line.8744"></a>
+<span class="sourceLineNo">8745</span> buf.append(getMemStoreDataSize());<a name="line.8745"></a>
+<span class="sourceLineNo">8746</span> if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8746"></a>
+<span class="sourceLineNo">8747</span> throw new RuntimeException(buf.toString());<a name="line.8747"></a>
<span class="sourceLineNo">8748</span> }<a name="line.8748"></a>
-<span class="sourceLineNo">8749</span> rsServices.getCompactionRequestor().requestCompaction(this, why, priority, tracker,<a name="line.8749"></a>
-<span class="sourceLineNo">8750</span> RpcServer.getRequestUser().orElse(null));<a name="line.8750"></a>
-<span class="sourceLineNo">8751</span> }<a name="line.8751"></a>
-<span class="sourceLineNo">8752</span><a name="line.8752"></a>
-<span class="sourceLineNo">8753</span> @Override<a name="line.8753"></a>
-<span class="sourceLineNo">8754</span> public void requestCompaction(byte[] family, String why, int priority, boolean major,<a name="line.8754"></a>
-<span class="sourceLineNo">8755</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8755"></a>
-<span class="sourceLineNo">8756</span> HStore store = stores.get(family);<a name="line.8756"></a>
-<span class="sourceLineNo">8757</span> if (store == null) {<a name="line.8757"></a>
-<span class="sourceLineNo">8758</span> throw new NoSuchColumnFamilyException("column family " + Bytes.toString(family) +<a name="line.8758"></a>
-<span class="sourceLineNo">8759</span> " does not exist in region " + getRegionInfo().getRegionNameAsString());<a name="line.8759"></a>
-<span class="sourceLineNo">8760</span> }<a name="line.8760"></a>
-<span class="sourceLineNo">8761</span> if (major) {<a name="line.8761"></a>
-<span class="sourceLineNo">8762</span> store.triggerMajorCompaction();<a name="line.8762"></a>
-<span class="sourceLineNo">8763</span> }<a name="line.8763"></a>
-<span class="sourceLineNo">8764</span> rsServices.getCompactionRequestor().requestCompaction(this, store, why, priority, tracker,<a name="line.8764"></a>
-<span class="sourceLineNo">8765</span> RpcServer.getRequestUser().orElse(null));<a name="line.8765"></a>
-<span class="sourceLineNo">8766</span> }<a name="line.8766"></a>
-<span class="sourceLineNo">8767</span><a name="line.8767"></a>
-<span class="sourceLineNo">8768</span> private void requestFlushIfNeeded() throws RegionTooBusyException {<a name="line.8768"></a>
-<span class="sourceLineNo">8769</span> if(isFlushSize(this.memStoreSizing.getMemStoreSize())) {<a name="line.8769"></a>
-<span class="sourceLineNo">8770</span> requestFlush();<a name="line.8770"></a>
+<span class="sourceLineNo">8749</span> }<a name="line.8749"></a>
+<span class="sourceLineNo">8750</span><a name="line.8750"></a>
+<span class="sourceLineNo">8751</span> @Override<a name="line.8751"></a>
+<span class="sourceLineNo">8752</span> public void requestCompaction(String why, int priority, boolean major,<a name="line.8752"></a>
+<span class="sourceLineNo">8753</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8753"></a>
+<span class="sourceLineNo">8754</span> if (major) {<a name="line.8754"></a>
+<span class="sourceLineNo">8755</span> stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.8755"></a>
+<span class="sourceLineNo">8756</span> }<a name="line.8756"></a>
+<span class="sourceLineNo">8757</span> rsServices.getCompactionRequestor().requestCompaction(this, why, priority, tracker,<a name="line.8757"></a>
+<span class="sourceLineNo">8758</span> RpcServer.getRequestUser().orElse(null));<a name="line.8758"></a>
+<span class="sourceLineNo">8759</span> }<a name="line.8759"></a>
+<span class="sourceLineNo">8760</span><a name="line.8760"></a>
+<span class="sourceLineNo">8761</span> @Override<a name="line.8761"></a>
+<span class="sourceLineNo">8762</span> public void requestCompaction(byte[] family, String why, int priority, boolean major,<a name="line.8762"></a>
+<span class="sourceLineNo">8763</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8763"></a>
+<span class="sourceLineNo">8764</span> HStore store = stores.get(family);<a name="line.8764"></a>
+<span class="sourceLineNo">8765</span> if (store == null) {<a name="line.8765"></a>
+<span class="sourceLineNo">8766</span> throw new NoSuchColumnFamilyException("column family " + Bytes.toString(family) +<a name="line.8766"></a>
+<span class="sourceLineNo">8767</span> " does not exist in region " + getRegionInfo().getRegionNameAsString());<a name="line.8767"></a>
+<span class="sourceLineNo">8768</span> }<a name="line.8768"></a>
+<span class="sourceLineNo">8769</span> if (major) {<a name="line.8769"></a>
+<span class="sourceLineNo">8770</span> store.triggerMajorCompaction();<a name="line.8770"></a>
<span class="sourceLineNo">8771</span> }<a name="line.8771"></a>
-<span class="sourceLineNo">8772</span> }<a name="line.8772"></a>
-<span class="sourceLineNo">8773</span><a name="line.8773"></a>
-<span class="sourceLineNo">8774</span> private void requestFlush() {<a name="line.8774"></a>
-<span class="sourceLineNo">8775</span> if (this.rsServices == null) {<a name="line.8775"></a>
-<span class="sourceLineNo">8776</span> return;<a name="line.8776"></a>
-<span class="sourceLineNo">8777</span> }<a name="line.8777"></a>
-<span class="sourceLineNo">8778</span> requestFlush0(FlushLifeCycleTracker.DUMMY);<a name="line.8778"></a>
-<span class="sourceLineNo">8779</span> }<a name="line.8779"></a>
-<span class="sourceLineNo">8780</span><a name="line.8780"></a>
-<span class="sourceLineNo">8781</span> private void requestFlush0(FlushLifeCycleTracker tracker) {<a name="line.8781"></a>
-<span class="sourceLineNo">8782</span> boolean shouldFlush = false;<a name="line.8782"></a>
-<span class="sourceLineNo">8783</span> synchronized (writestate) {<a name="line.8783"></a>
-<span class="sourceLineNo">8784</span> if (!this.writestate.isFlushRequested()) {<a name="line.8784"></a>
-<span class="sourceLineNo">8785</span> shouldFlush = true;<a name="line.8785"></a>
-<span class="sourceLineNo">8786</span> writestate.flushRequested = true;<a name="line.8786"></a>
-<span class="sourceLineNo">8787</span> }<a name="line.8787"></a>
-<span class="sourceLineNo">8788</span> }<a name="line.8788"></a>
-<span class="sourceLineNo">8789</span> if (shouldFlush) {<a name="line.8789"></a>
-<span class="sourceLineNo">8790</span> // Make request outside of synchronize block; HBASE-818.<a name="line.8790"></a>
-<span class="sourceLineNo">8791</span> this.rsServices.getFlushRequester().requestFlush(this, false, tracker);<a name="line.8791"></a>
-<span class="sourceLineNo">8792</span> if (LOG.isDebugEnabled()) {<a name="line.8792"></a>
-<span class="sourceLineNo">8793</span> LOG.debug("Flush requested on " + this.getRegionInfo().getEncodedName());<a name="line.8793"></a>
-<span class="sourceLineNo">8794</span> }<a name="line.8794"></a>
-<span class="sourceLineNo">8795</span> } else {<a name="line.8795"></a>
-<span class="sourceLineNo">8796</span> tracker.notExecuted("Flush already requested on " + this);<a name="line.8796"></a>
-<span class="sourceLineNo">8797</span> }<a name="line.8797"></a>
-<span class="sourceLineNo">8798</span> }<a name="line.8798"></a>
-<span class="sourceLineNo">8799</span><a name="line.8799"></a>
-<span class="sourceLineNo">8800</span> @Override<a name="line.8800"></a>
-<span class="sourceLineNo">8801</span> public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8801"></a>
-<span class="sourceLineNo">8802</span> requestFlush0(tracker);<a name="line.8802"></a>
-<span class="sourceLineNo">8803</span> }<a name="line.8803"></a>
-<span class="sourceLineNo">8804</span><a name="line.8804"></a>
-<span class="sourceLineNo">8805</span> /**<a name="line.8805"></a>
-<span class="sourceLineNo">8806</span> * This method modifies the region's configuration in order to inject replication-related<a name="line.8806"></a>
-<span class="sourceLineNo">8807</span> * features<a name="line.8807"></a>
-<span class="sourceLineNo">8808</span> * @param conf region configurations<a name="line.8808"></a>
-<span class="sourceLineNo">8809</span> */<a name="line.8809"></a>
-<span class="sourceLineNo">8810</span> static void decorateRegionConfiguration(Configuration conf) {<a name="line.8810"></a>
-<span class="sourceLineNo">8811</span> if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.8811"></a>
-<span class="sourceLineNo">8812</span> String plugins = conf.get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,"");<a name="line.8812"></a>
-<span class="sourceLineNo">8813</span> String replicationCoprocessorClass = ReplicationObserver.class.getCanonicalName();<a name="line.8813"></a>
-<span class="sourceLineNo">8814</span> if (!plugins.contains(replicationCoprocessorClass)) {<a name="line.8814"></a>
-<span class="sourceLineNo">8815</span> conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,<a name="line.8815"></a>
-<span class="sourceLineNo">8816</span> (plugins.equals("") ? "" : (plugins + ",")) + replicationCoprocessorClass);<a name="line.8816"></a>
-<span class="sourceLineNo">8817</span> }<a name="line.8817"></a>
-<span class="sourceLineNo">8818</span> }<a name="line.8818"></a>
-<span class="sourceLineNo">8819</span> }<a name="line.8819"></a>
-<span class="sourceLineNo">8820</span>}<a name="line.8820"></a>
+<span class="sourceLineNo">8772</span> rsServices.getCompactionRequestor().requestCompaction(this, store, why, priority, tracker,<a name="line.8772"></a>
+<span class="sourceLineNo">8773</span> RpcServer.getRequestUser().orElse(null));<a name="line.8773"></a>
+<span class="sourceLineNo">8774</span> }<a name="line.8774"></a>
+<span class="sourceLineNo">8775</span><a name="line.8775"></a>
+<span class="sourceLineNo">8776</span> private void requestFlushIfNeeded() throws RegionTooBusyException {<a name="line.8776"></a>
+<span class="sourceLineNo">8777</span> if(isFlushSize(this.memStoreSizing.getMemStoreSize())) {<a name="line.8777"></a>
+<span class="sourceLineNo">8778</span> requestFlush();<a name="line.8778"></a>
+<span class="sourceLineNo">8779</span> }<a name="line.8779"></a>
+<span class="sourceLineNo">8780</span> }<a name="line.8780"></a>
+<span class="sourceLineNo">8781</span><a name="line.8781"></a>
+<span class="sourceLineNo">8782</span> private void requestFlush() {<a name="line.8782"></a>
+<span class="sourceLineNo">8783</span> if (this.rsServices == null) {<a name="line.8783"></a>
+<span class="sourceLineNo">8784</span> return;<a name="line.8784"></a>
+<span class="sourceLineNo">8785</span> }<a name="line.8785"></a>
+<span class="sourceLineNo">8786</span> requestFlush0(FlushLifeCycleTracker.DUMMY);<a name="line.8786"></a>
+<span class="sourceLineNo">8787</span> }<a name="line.8787"></a>
+<span class="sourceLineNo">8788</span><a name="line.8788"></a>
+<span class="sourceLineNo">8789</span> private void requestFlush0(FlushLifeCycleTracker tracker) {<a name="line.8789"></a>
+<span class="sourceLineNo">8790</span> boolean shouldFlush = false;<a name="line.8790"></a>
+<span class="sourceLineNo">8791</span> synchronized (writestate) {<a name="line.8791"></a>
+<span class="sourceLineNo">8792</span> if (!this.writestate.isFlushRequested()) {<a name="line.8792"></a>
+<span class="sourceLineNo">8793</span> shouldFlush = true;<a name="line.8793"></a>
+<span class="sourceLineNo">8794</span> writestate.flushRequested = true;<a name="line.8794"></a>
+<span class="sourceLineNo">8795</span> }<a name="line.8795"></a>
+<span class="sourceLineNo">8796</span> }<a name="line.8796"></a>
+<span class="sourceLineNo">8797</span> if (shouldFlush) {<a name="line.8797"></a>
+<span class="sourceLineNo">8798</span> // Make request outside of synchronize block; HBASE-818.<a name="line.8798"></a>
+<span class="sourceLineNo">8799</span> this.rsServices.getFlushRequester().requestFlush(this, false, tracker);<a name="line.8799"></a>
+<span class="sourceLineNo">8800</span> if (LOG.isDebugEnabled()) {<a name="line.8800"></a>
+<span class="sourceLineNo">8801</span> LOG.debug("Flush requested on " + this.getRegionInfo().getEncodedName());<a name="line.8801"></a>
+<span class="sourceLineNo">8802</span> }<a name="line.8802"></a>
+<span class="sourceLineNo">8803</span> } else {<a name="line.8803"></a>
+<span class="sourceLineNo">8804</span> tracker.notExecuted("Flush already requested on " + this);<a name="line.8804"></a>
+<span class="sourceLineNo">8805</span> }<a name="line.8805"></a>
+<span class="sourceLineNo">8806</span> }<a name="line.8806"></a>
+<span class="sourceLineNo">8807</span><a name="line.8807"></a>
+<span class="sourceLineNo">8808</span> @Override<a name="line.8808"></a>
+<span class="sourceLineNo">8809</span> public void requestFlush(FlushLifeCycleTracker tracker) throws IOException {<a name="line.8809"></a>
+<span class="sourceLineNo">8810</span> requestFlush0(tracker);<a name="line.8810"></a>
+<span class="sourceLineNo">8811</span> }<a name="line.8811"></a>
+<span class="sourceLineNo">8812</span><a name="line.8812"></a>
+<span class="sourceLineNo">8813</span> /**<a name="line.8813"></a>
+<span class="sourceLineNo">8814</span> * This method modifies the region's configuration in order to inject replication-related<a name="line.8814"></a>
+<span class="sourceLineNo">8815</span> * features<a name="line.8815"></a>
+<span class="sourceLineNo">8816</span> * @param conf region configurations<a name="line.8816"></a>
+<span class="sourceLineNo">8817</span> */<a name="line.8817"></a>
+<span class="sourceLineNo">8818</span> static void decorateRegionConfiguration(Configuration conf) {<a name="line.8818"></a>
+<span class="sourceLineNo">8819</span> if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.8819"></a>
+<span class="sourceLineNo">8820</span> String plugins = conf.get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,"");<a name="line.8820"></a>
+<span class="sourceLineNo">8821</span> String replicationCoprocessorClass = ReplicationObserver.class.getCanonicalName();<a name="line.8821"></a>
+<span class="sourceLineNo">8822</span> if (!plugins.contains(replicationCoprocessorClass)) {<a name="line.8822"></a>
+<span class="sourceLineNo">8823</span> conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,<a name="line.8823"></a>
+<span class="sourceLineNo">8824</span> (plugins.equals("") ? "" : (plugins + ",")) + replicationCoprocessorClass);<a name="line.8824"></a>
+<span class="sourceLineNo">8825</span> }<a name="line.8825"></a>
+<span class="sourceLineNo">8826</span> }<a name="line.8826"></a>
+<span class="sourceLineNo">8827</span> }<a name="line.8827"></a>
+<span class="sourceLineNo">8828</span>}<a name="line.8828"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
index 462c776..0384df4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
@@ -8109,723 +8109,731 @@
<span class="sourceLineNo">8101</span> break;<a name="line.8101"></a>
<span class="sourceLineNo">8102</span> default: throw new UnsupportedOperationException(op.toString());<a name="line.8102"></a>
<span class="sourceLineNo">8103</span> }<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span><a name="line.8104"></a>
-<span class="sourceLineNo">8105</span> cellPairs.add(new Pair<>(currentValue, newCell));<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span> // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span> if (results != null) {<a name="line.8107"></a>
-<span class="sourceLineNo">8108</span> results.add(newCell);<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span> }<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span> }<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span><a name="line.8111"></a>
-<span class="sourceLineNo">8112</span> // Give coprocessors a chance to update the new cells before apply to WAL or memstore<a name="line.8112"></a>
-<span class="sourceLineNo">8113</span> if (coprocessorHost != null) {<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span> // Here the operation must be increment or append.<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span> cellPairs = op == Operation.INCREMENT ?<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span> coprocessorHost.postIncrementBeforeWAL(mutation, cellPairs) :<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span> coprocessorHost.postAppendBeforeWAL(mutation, cellPairs);<a name="line.8117"></a>
+<span class="sourceLineNo">8104</span> int newCellSize = PrivateCellUtil.estimatedSerializedSizeOf(newCell);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span> if (newCellSize > this.maxCellSize) {<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span> String msg = "Cell with size " + newCellSize + " exceeds limit of " +<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span> this.maxCellSize + " bytes";<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span> if (LOG.isDebugEnabled()) {<a name="line.8108"></a>
+<span class="sourceLineNo">8109</span> LOG.debug(msg);<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span> }<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span> throw new DoNotRetryIOException(msg);<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span> }<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span> cellPairs.add(new Pair<>(currentValue, newCell));<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span> // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span> if (results != null) {<a name="line.8115"></a>
+<span class="sourceLineNo">8116</span> results.add(newCell);<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span> }<a name="line.8117"></a>
<span class="sourceLineNo">8118</span> }<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span> return cellPairs.stream().map(Pair::getSecond).collect(Collectors.toList());<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span> }<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span><a name="line.8121"></a>
-<span class="sourceLineNo">8122</span> private static Cell reckonDelta(final Cell delta, final Cell currentCell,<a name="line.8122"></a>
-<span class="sourceLineNo">8123</span> final byte[] columnFamily, final long now,<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span> Mutation mutation, Function<Cell, byte[]> supplier) throws IOException {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span> // Forward any tags found on the delta.<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span> List<Tag> tags = TagUtil.carryForwardTags(delta);<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span> tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span> if (currentCell != null) {<a name="line.8128"></a>
-<span class="sourceLineNo">8129</span> tags = TagUtil.carryForwardTags(tags, currentCell);<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span> byte[] newValue = supplier.apply(currentCell);<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span> return ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span> .setRow(mutation.getRow(), 0, mutation.getRow().length)<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span> .setFamily(columnFamily, 0, columnFamily.length)<a name="line.8133"></a>
-<span class="sourceLineNo">8134</span> // copy the qualifier if the cell is located in shared memory.<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span> .setQualifier(CellUtil.cloneQualifier(delta))<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span> .setTimestamp(Math.max(currentCell.getTimestamp() + 1, now))<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span> .setType(KeyValue.Type.Put.getCode())<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span> .setValue(newValue, 0, newValue.length)<a name="line.8138"></a>
-<span class="sourceLineNo">8139</span> .setTags(TagUtil.fromList(tags))<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span> .build();<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span> } else {<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span> PrivateCellUtil.updateLatestStamp(delta, now);<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span> return CollectionUtils.isEmpty(tags) ? delta : PrivateCellUtil.createCell(delta, tags);<a name="line.8143"></a>
-<span class="sourceLineNo">8144</span> }<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span> }<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span><a name="line.8146"></a>
-<span class="sourceLineNo">8147</span> /**<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span> * @return Get the long out of the passed in Cell<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span> */<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span> private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.8150"></a>
-<span class="sourceLineNo">8151</span> int len = cell.getValueLength();<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span> if (len != Bytes.SIZEOF_LONG) {<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span> // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span> throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.8154"></a>
-<span class="sourceLineNo">8155</span> }<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span> return PrivateCellUtil.getValueAsLong(cell);<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span> }<a name="line.8157"></a>
-<span class="sourceLineNo">8158</span><a name="line.8158"></a>
-<span class="sourceLineNo">8159</span> /**<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span> * Do a specific Get on passed <code>columnFamily</code> and column qualifiers.<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span> * @param mutation Mutation we are doing this Get for.<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span> * @param store Which column family on row (TODO: Go all Gets in one go)<a name="line.8162"></a>
-<span class="sourceLineNo">8163</span> * @param coordinates Cells from <code>mutation</code> used as coordinates applied to Get.<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span> * @return Return list of Cells found.<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span> */<a name="line.8165"></a>
-<span class="sourceLineNo">8166</span> private List<Cell> get(Mutation mutation, HStore store, List<Cell> coordinates,<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span> IsolationLevel isolation, TimeRange tr) throws IOException {<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span> // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span> // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.8169"></a>
-<span class="sourceLineNo">8170</span> // client since cells are in an array list.<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span> // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span> sort(coordinates, store.getComparator());<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span> Get get = new Get(mutation.getRow());<a name="line.8173"></a>
-<span class="sourceLineNo">8174</span> if (isolation != null) {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span> get.setIsolationLevel(isolation);<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span> }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span> for (Cell cell: coordinates) {<a name="line.8177"></a>
-<span class="sourceLineNo">8178</span> get.addColumn(store.getColumnFamilyDescriptor().getName(), CellUtil.cloneQualifier(cell));<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span> }<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span> // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span> if (tr != null) {<a name="line.8181"></a>
-<span class="sourceLineNo">8182</span> get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span> }<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span> return get(get, false);<a name="line.8184"></a>
-<span class="sourceLineNo">8185</span> }<a name="line.8185"></a>
-<span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span> /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span> * @return Sorted list of <code>cells</code> using <code>comparator</code><a name="line.8188"></a>
-<span class="sourceLineNo">8189</span> */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span> private static List<Cell> sort(List<Cell> cells, final CellComparator comparator) {<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span> cells.sort(comparator);<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span> return cells;<a name="line.8192"></a>
+<span class="sourceLineNo">8119</span><a name="line.8119"></a>
+<span class="sourceLineNo">8120</span> // Give coprocessors a chance to update the new cells before apply to WAL or memstore<a name="line.8120"></a>
+<span class="sourceLineNo">8121</span> if (coprocessorHost != null) {<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span> // Here the operation must be increment or append.<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span> cellPairs = op == Operation.INCREMENT ?<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span> coprocessorHost.postIncrementBeforeWAL(mutation, cellPairs) :<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span> coprocessorHost.postAppendBeforeWAL(mutation, cellPairs);<a name="line.8125"></a>
+<span class="sourceLineNo">8126</span> }<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span> return cellPairs.stream().map(Pair::getSecond).collect(Collectors.toList());<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span> }<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span><a name="line.8129"></a>
+<span class="sourceLineNo">8130</span> private static Cell reckonDelta(final Cell delta, final Cell currentCell,<a name="line.8130"></a>
+<span class="sourceLineNo">8131</span> final byte[] columnFamily, final long now,<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span> Mutation mutation, Function<Cell, byte[]> supplier) throws IOException {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span> // Forward any tags found on the delta.<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span> List<Tag> tags = TagUtil.carryForwardTags(delta);<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span> tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.8135"></a>
+<span class="sourceLineNo">8136</span> if (currentCell != null) {<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span> tags = TagUtil.carryForwardTags(tags, currentCell);<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span> byte[] newValue = supplier.apply(currentCell);<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span> return ExtendedCellBuilderFactory.create(CellBuilderType.SHALLOW_COPY)<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span> .setRow(mutation.getRow(), 0, mutation.getRow().length)<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span> .setFamily(columnFamily, 0, columnFamily.length)<a name="line.8141"></a>
+<span class="sourceLineNo">8142</span> // copy the qualifier if the cell is located in shared memory.<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span> .setQualifier(CellUtil.cloneQualifier(delta))<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span> .setTimestamp(Math.max(currentCell.getTimestamp() + 1, now))<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span> .setType(KeyValue.Type.Put.getCode())<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span> .setValue(newValue, 0, newValue.length)<a name="line.8146"></a>
+<span class="sourceLineNo">8147</span> .setTags(TagUtil.fromList(tags))<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span> .build();<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span> } else {<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span> PrivateCellUtil.updateLatestStamp(delta, now);<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span> return CollectionUtils.isEmpty(tags) ? delta : PrivateCellUtil.createCell(delta, tags);<a name="line.8151"></a>
+<span class="sourceLineNo">8152</span> }<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span> }<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span><a name="line.8154"></a>
+<span class="sourceLineNo">8155</span> /**<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span> * @return Get the long out of the passed in Cell<a name="line.8156"></a>
+<span class="sourceLineNo">8157</span> */<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span> private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span> int len = cell.getValueLength();<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span> if (len != Bytes.SIZEOF_LONG) {<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span> // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span> throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span> }<a name="line.8163"></a>
+<span class="sourceLineNo">8164</span> return PrivateCellUtil.getValueAsLong(cell);<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span> }<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span><a name="line.8166"></a>
+<span class="sourceLineNo">8167</span> /**<a name="line.8167"></a>
+<span class="sourceLineNo">8168</span> * Do a specific Get on passed <code>columnFamily</code> and column qualifiers.<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span> * @param mutation Mutation we are doing this Get for.<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span> * @param store Which column family on row (TODO: Go all Gets in one go)<a name="line.8170"></a>
+<span class="sourceLineNo">8171</span> * @param coordinates Cells from <code>mutation</code> used as coordinates applied to Get.<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span> * @return Return list of Cells found.<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span> */<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span> private List<Cell> get(Mutation mutation, HStore store, List<Cell> coordinates,<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span> IsolationLevel isolation, TimeRange tr) throws IOException {<a name="line.8175"></a>
+<span class="sourceLineNo">8176</span> // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span> // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span> // client since cells are in an array list.<a name="line.8178"></a>
+<span class="sourceLineNo">8179</span> // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span> sort(coordinates, store.getComparator());<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span> Get get = new Get(mutation.getRow());<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span> if (isolation != null) {<a name="line.8182"></a>
+<span class="sourceLineNo">8183</span> get.setIsolationLevel(isolation);<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span> }<a name="line.8184"></a>
+<span class="sourceLineNo">8185</span> for (Cell cell: coordinates) {<a name="line.8185"></a>
+<span class="sourceLineNo">8186</span> get.addColumn(store.getColumnFamilyDescriptor().getName(), CellUtil.cloneQualifier(cell));<a name="line.8186"></a>
+<span class="sourceLineNo">8187</span> }<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span> // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span> if (tr != null) {<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span> get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.8190"></a>
+<span class="sourceLineNo">8191</span> }<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span> return get(get, false);<a name="line.8192"></a>
<span class="sourceLineNo">8193</span> }<a name="line.8193"></a>
<span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span> public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span> ClassSize.OBJECT +<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span> ClassSize.ARRAY +<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span> 55 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT +<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span> (15 * Bytes.SIZEOF_LONG) +<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span> 3 * Bytes.SIZEOF_BOOLEAN);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span><a name="line.8201"></a>
-<span class="sourceLineNo">8202</span> // woefully out of date - currently missing:<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span> // 1 x HashMap - coprocessorServiceHandlers<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span> // 6 x LongAdder - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span> // checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.8205"></a>
-<span class="sourceLineNo">8206</span> // writeRequestsCount, cpRequestsCount<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span> // 1 x HRegion$WriteState - writestate<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span> // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span> // 1 x RegionSplitPolicy - splitPolicy<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span> // 1 x MetricsRegion - metricsRegion<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span> // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span> public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span> ClassSize.OBJECT + // closeLock<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span> (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span> (3 * ClassSize.ATOMIC_LONG) + // numPutsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8215"></a>
-<span class="sourceLineNo">8216</span> // compactionsFailed<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span> (2 * ClassSize.CONCURRENT_HASHMAP) + // lockedRows, scannerReadPoints<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span> WriteState.HEAP_SIZE + // writestate<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span> ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span> (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span> MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.8221"></a>
-<span class="sourceLineNo">8222</span> + 2 * ClassSize.TREEMAP // maxSeqIdInStores, replicationScopes<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span> + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span> + ClassSize.STORE_SERVICES // store services<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span> + StoreHotnessProtector.FIXED_SIZE<a name="line.8225"></a>
-<span class="sourceLineNo">8226</span> ;<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span><a name="line.8227"></a>
-<span class="sourceLineNo">8228</span> @Override<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span> public long heapSize() {<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span> // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span> return DEEP_OVERHEAD + stores.values().stream().mapToLong(HStore::heapSize).sum();<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span> }<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span><a name="line.8233"></a>
-<span class="sourceLineNo">8234</span> /**<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span> * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span> * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span> * org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span> *<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span> * <p><a name="line.8239"></a>
-<span class="sourceLineNo">8240</span> * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span> * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span> * After the first registration, subsequent calls with the same service name will fail with<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span> * a return value of {@code false}.<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span> * </p><a name="line.8244"></a>
-<span class="sourceLineNo">8245</span> * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span> * @return {@code true} if the registration was successful, {@code false}<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span> * otherwise<a name="line.8247"></a>
-<span class="sourceLineNo">8248</span> */<a name="line.8248"></a>
-<span class="sourceLineNo">8249</span> public boolean registerService(com.google.protobuf.Service instance) {<a name="line.8249"></a>
-<span class="sourceLineNo">8250</span> /*<a name="line.8250"></a>
-<span class="sourceLineNo">8251</span> * No stacking of instances is allowed for a single service name<a name="line.8251"></a>
-<span class="sourceLineNo">8252</span> */<a name="line.8252"></a>
-<span class="sourceLineNo">8253</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.8253"></a>
-<span class="sourceLineNo">8254</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.8254"></a>
-<span class="sourceLineNo">8255</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.8255"></a>
-<span class="sourceLineNo">8256</span> LOG.error("Coprocessor service " + serviceName +<a name="line.8256"></a>
-<span class="sourceLineNo">8257</span> " already registered, rejecting request from " + instance);<a name="line.8257"></a>
-<span class="sourceLineNo">8258</span> return false;<a name="line.8258"></a>
-<span class="sourceLineNo">8259</span> }<a name="line.8259"></a>
-<span class="sourceLineNo">8260</span><a name="line.8260"></a>
-<span class="sourceLineNo">8261</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.8261"></a>
-<span class="sourceLineNo">8262</span> if (LOG.isDebugEnabled()) {<a name="line.8262"></a>
-<span class="sourceLineNo">8263</span> LOG.debug("Registered coprocessor service: region=" +<a name="line.8263"></a>
-<span class="sourceLineNo">8264</span> Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.8264"></a>
-<span class="sourceLineNo">8265</span> " service=" + serviceName);<a name="line.8265"></a>
-<span class="sourceLineNo">8266</span> }<a name="line.8266"></a>
-<span class="sourceLineNo">8267</span> return true;<a name="line.8267"></a>
-<span class="sourceLineNo">8268</span> }<a name="line.8268"></a>
-<span class="sourceLineNo">8269</span><a name="line.8269"></a>
-<span class="sourceLineNo">8270</span> /**<a name="line.8270"></a>
-<span class="sourceLineNo">8271</span> * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.8271"></a>
-<span class="sourceLineNo">8272</span> * the registered protocol handlers. {@link Service} implementations must be registered via the<a name="line.8272"></a>
-<span class="sourceLineNo">8273</span> * {@link #registerService(com.google.protobuf.Service)}<a name="line.8273"></a>
-<span class="sourceLineNo">8274</span> * method before they are available.<a name="line.8274"></a>
-<span class="sourceLineNo">8275</span> *<a name="line.8275"></a>
-<span class="sourceLineNo">8276</span> * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.8276"></a>
-<span class="sourceLineNo">8277</span> * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.8277"></a>
-<span class="sourceLineNo">8278</span> * and parameters for the method invocation<a name="line.8278"></a>
-<span class="sourceLineNo">8279</span> * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.8279"></a>
-<span class="sourceLineNo">8280</span> * @throws IOException if no registered service handler is found or an error<a name="line.8280"></a>
-<span class="sourceLineNo">8281</span> * occurs during the invocation<a name="line.8281"></a>
-<span class="sourceLineNo">8282</span> * @see #registerService(com.google.protobuf.Service)<a name="line.8282"></a>
-<span class="sourceLineNo">8283</span> */<a name="line.8283"></a>
-<span class="sourceLineNo">8284</span> public com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.8284"></a>
-<span class="sourceLineNo">8285</span> CoprocessorServiceCall call) throws IOException {<a name="line.8285"></a>
-<span class="sourceLineNo">8286</span> String serviceName = call.getServiceName();<a name="line.8286"></a>
-<span class="sourceLineNo">8287</span> com.google.protobuf.Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.8287"></a>
-<span class="sourceLineNo">8288</span> if (service == null) {<a name="line.8288"></a>
-<span class="sourceLineNo">8289</span> throw new UnknownProtocolException(null, "No registered coprocessor service found for " +<a name="line.8289"></a>
-<span class="sourceLineNo">8290</span> serviceName + " in region " + Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.8290"></a>
-<span class="sourceLineNo">8291</span> }<a name="line.8291"></a>
-<span class="sourceLineNo">8292</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.8292"></a>
-<span class="sourceLineNo">8293</span><a name="line.8293"></a>
-<span class="sourceLineNo">8294</span> cpRequestsCount.increment();<a name="line.8294"></a>
-<span class="sourceLineNo">8295</span> String methodName = call.getMethodName();<a name="line.8295"></a>
-<span class="sourceLineNo">8296</span> com.google.protobuf.Descriptors.MethodDescriptor methodDesc =<a name="line.8296"></a>
-<span class="sourceLineNo">8297</span> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);<a name="line.8297"></a>
-<span class="sourceLineNo">8298</span><a name="line.8298"></a>
-<span class="sourceLineNo">8299</span> com.google.protobuf.Message.Builder builder =<a name="line.8299"></a>
-<span class="sourceLineNo">8300</span> service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.8300"></a>
+<span class="sourceLineNo">8195</span> /**<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span> * @return Sorted list of <code>cells</code> using <code>comparator</code><a name="line.8196"></a>
+<span class="sourceLineNo">8197</span> */<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span> private static List<Cell> sort(List<Cell> cells, final CellComparator comparator) {<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span> cells.sort(comparator);<a name="line.8199"></a>
+<span class="sourceLineNo">8200</span> return cells;<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span> }<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span><a name="line.8202"></a>
+<span class="sourceLineNo">8203</span> public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span> ClassSize.OBJECT +<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span> ClassSize.ARRAY +<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span> 55 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT +<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span> (15 * Bytes.SIZEOF_LONG) +<a name="line.8207"></a>
+<span class="sourceLineNo">8208</span> 3 * Bytes.SIZEOF_BOOLEAN);<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span><a name="line.8209"></a>
+<span class="sourceLineNo">8210</span> // woefully out of date - currently missing:<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span> // 1 x HashMap - coprocessorServiceHandlers<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span> // 6 x LongAdder - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span> // checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span> // writeRequestsCount, cpRequestsCount<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span> // 1 x HRegion$WriteState - writestate<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span> // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span> // 1 x RegionSplitPolicy - splitPolicy<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span> // 1 x MetricsRegion - metricsRegion<a name="line.8218"></a>
+<span class="sourceLineNo">8219</span> // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span> public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span> ClassSize.OBJECT + // closeLock<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span> (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span> (3 * ClassSize.ATOMIC_LONG) + // numPutsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span> // compactionsFailed<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span> (2 * ClassSize.CONCURRENT_HASHMAP) + // lockedRows, scannerReadPoints<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span> WriteState.HEAP_SIZE + // writestate<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span> ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span> (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.8228"></a>
+<span class="sourceLineNo">8229</span> MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span> + 2 * ClassSize.TREEMAP // maxSeqIdInStores, replicationScopes<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span> + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span> + ClassSize.STORE_SERVICES // store services<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span> + StoreHotnessProtector.FIXED_SIZE<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span> ;<a name="line.8234"></a>
+<span class="sourceLineNo">8235</span><a name="line.8235"></a>
+<span class="sourceLineNo">8236</span> @Override<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span> public long heapSize() {<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span> // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.8238"></a>
+<span class="sourceLineNo">8239</span> return DEEP_OVERHEAD + stores.values().stream().mapToLong(HStore::heapSize).sum();<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span> }<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span><a name="line.8241"></a>
+<span class="sourceLineNo">8242</span> /**<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span> * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span> * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span> * org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span> *<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span> * <p><a name="line.8247"></a>
+<span class="sourceLineNo">8248</span> * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span> * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span> * After the first registration, subsequent calls with the same service name will fail with<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span> * a return value of {@code false}.<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span> * </p><a name="line.8252"></a>
+<span class="sourceLineNo">8253</span> * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span> * @return {@code true} if the registration was successful, {@code false}<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span> * otherwise<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span> */<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span> public boolean registerService(com.google.protobuf.Service instance) {<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span> /*<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span> * No stacking of instances is allowed for a single service name<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span> */<a name="line.8260"></a>
+<span class="sourceLineNo">8261</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.8261"></a>
+<span class="sourceLineNo">8262</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.8262"></a>
+<span class="sourceLineNo">8263</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.8263"></a>
+<span class="sourceLineNo">8264</span> LOG.error("Coprocessor service " + serviceName +<a name="line.8264"></a>
+<span class="sourceLineNo">8265</span> " already registered, rejecting request from " + instance);<a name="line.8265"></a>
+<span class="sourceLineNo">8266</span> return false;<a name="line.8266"></a>
+<span class="sourceLineNo">8267</span> }<a name="line.8267"></a>
+<span class="sourceLineNo">8268</span><a name="line.8268"></a>
+<span class="sourceLineNo">8269</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.8269"></a>
+<span class="sourceLineNo">8270</span> if (LOG.isDebugEnabled()) {<a name="line.8270"></a>
+<span class="sourceLineNo">8271</span> LOG.debug("Registered coprocessor service: region=" +<a name="line.8271"></a>
+<span class="sourceLineNo">8272</span> Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.8272"></a>
+<span class="sourceLineNo">8273</span> " service=" + serviceName);<a name="line.8273"></a>
+<span class="sourceLineNo">8274</span> }<a name="line.8274"></a>
+<span class="sourceLineNo">8275</span> return true;<a name="line.8275"></a>
+<span class="sourceLineNo">8276</span> }<a name="line.8276"></a>
+<span class="sourceLineNo">8277</span><a name="line.8277"></a>
+<span class="sourceLineNo">8278</span> /**<a name="line.8278"></a>
+<span class="sourceLineNo">8279</span> * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.8279"></a>
+<span class="sourceLineNo">8280</span> * the registered protocol handlers. {@link Service} implementations must be registered via the<a name="line.8280"></a>
+<span class="sourceLineNo">8281</span> * {@link #registerService(com.google.protobuf.Service)}<a name="line.8281"></a>
+<span class="sourceLineNo">8282</span> * method before they are available.<a name="line.8282"></a>
+<span class="sourceLineNo">8283</span> *<a name="line.8283"></a>
+<span class="sourceLineNo">8284</span> * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.8284"></a>
+<span class="sourceLineNo">8285</span> * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.8285"></a>
+<span class="sourceLineNo">8286</span> * and parameters for the method invocation<a name="line.8286"></a>
+<span class="sourceLineNo">8287</span> * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.8287"></a>
+<span class="sourceLineNo">8288</span> * @throws IOException if no registered service handler is found or an error<a name="line.8288"></a>
+<span class="sourceLineNo">8289</span> * occurs during the invocation<a name="line.8289"></a>
+<span class="sourceLineNo">8290</span> * @see #registerService(com.google.protobuf.Service)<a name="line.8290"></a>
+<span class="sourceLineNo">8291</span> */<a name="line.8291"></a>
+<span class="sourceLineNo">8292</span> public com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.8292"></a>
+<span class="sourceLineNo">8293</span> CoprocessorServiceCall call) throws IOException {<a name="line.8293"></a>
+<span class="sourceLineNo">8294</span> String serviceName = call.getServiceName();<a name="line.8294"></a>
+<span class="sourceLineNo">8295</span> com.google.protobuf.Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.8295"></a>
+<span class="sourceLineNo">8296</span> if (service == null) {<a name="line.8296"></a>
+<span class="sourceLineNo">8297</span> throw new UnknownProtocolException(null, "No registered coprocessor service found for " +<a name="line.8297"></a>
+<span class="sourceLineNo">8298</span> serviceName + " in region " + Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.8298"></a>
+<span class="sourceLineNo">8299</span> }<a name="line.8299"></a>
+<span class="sourceLineNo">8300</span> com.google.protobuf.Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.8300"></a>
<span class="sourceLineNo">8301</span><a name="line.8301"></a>
-<span class="sourceLineNo">8302</span> org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(builder,<a name="line.8302"></a>
-<span class="sourceLineNo">8303</span> call.getRequest().toByteArray());<a name="line.8303"></a>
-<span class="sourceLineNo">8304</span> com.google.protobuf.Message request =<a name="line.8304"></a>
-<span class="sourceLineNo">8305</span> CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.8305"></a>
+<span class="sourceLineNo">8302</span> cpRequestsCount.increment();<a name="line.8302"></a>
+<span class="sourceLineNo">8303</span> String methodName = call.getMethodName();<a name="line.8303"></a>
+<span class="sourceLineNo">8304</span> com.google.protobuf.Descriptors.MethodDescriptor methodDesc =<a name="line.8304"></a>
+<span class="sourceLineNo">8305</span> CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);<a name="line.8305"></a>
<span class="sourceLineNo">8306</span><a name="line.8306"></a>
-<span class="sourceLineNo">8307</span> if (coprocessorHost != null) {<a name="line.8307"></a>
-<span class="sourceLineNo">8308</span> request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.8308"></a>
-<span class="sourceLineNo">8309</span> }<a name="line.8309"></a>
-<span class="sourceLineNo">8310</span><a name="line.8310"></a>
-<span class="sourceLineNo">8311</span> final com.google.protobuf.Message.Builder responseBuilder =<a name="line.8311"></a>
-<span class="sourceLineNo">8312</span> service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.8312"></a>
-<span class="sourceLineNo">8313</span> service.callMethod(methodDesc, controller, request,<a name="line.8313"></a>
-<span class="sourceLineNo">8314</span> new com.google.protobuf.RpcCallback<com.google.protobuf.Message>() {<a name="line.8314"></a>
-<span class="sourceLineNo">8315</span> @Override<a name="line.8315"></a>
-<span class="sourceLineNo">8316</span> public void run(com.google.protobuf.Message message) {<a name="line.8316"></a>
-<span class="sourceLineNo">8317</span> if (message != null) {<a name="line.8317"></a>
-<span class="sourceLineNo">8318</span> responseBuilder.mergeFrom(message);<a name="line.8318"></a>
-<span class="sourceLineNo">8319</span> }<a name="line.8319"></a>
-<span class="sourceLineNo">8320</span> }<a name="line.8320"></a>
-<span class="sourceLineNo">8321</span> });<a name="line.8321"></a>
-<span class="sourceLineNo">8322</span><a name="line.8322"></a>
-<span class="sourceLineNo">8323</span> if (coprocessorHost != null) {<a name="line.8323"></a>
-<span class="sourceLineNo">8324</span> coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.8324"></a>
-<span class="sourceLineNo">8325</span> }<a name="line.8325"></a>
-<span class="sourceLineNo">8326</span> IOException exception =<a name="line.8326"></a>
-<span class="sourceLineNo">8327</span> org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getControllerException(controller);<a name="line.8327"></a>
-<span class="sourceLineNo">8328</span> if (exception != null) {<a name="line.8328"></a>
-<span class="sourceLineNo">8329</span> throw exception;<a name="line.8329"></a>
-<span class="sourceLineNo">8330</span> }<a name="line.8330"></a>
-<span class="sourceLineNo">8331</span><a name="line.8331"></a>
-<span class="sourceLineNo">8332</span> return responseBuilder.build();<a name="line.8332"></a>
-<span class="sourceLineNo">8333</span> }<a name="line.8333"></a>
-<span class="sourceLineNo">8334</span><a name="line.8334"></a>
-<span class="sourceLineNo">8335</span> boolean shouldForceSplit() {<a name="line.8335"></a>
-<span class="sourceLineNo">8336</span> return this.splitRequest;<a name="line.8336"></a>
-<span class="sourceLineNo">8337</span> }<a name="line.8337"></a>
-<span class="sourceLineNo">8338</span><a name="line.8338"></a>
-<span class="sourceLineNo">8339</span> byte[] getExplicitSplitPoint() {<a name="line.8339"></a>
-<span class="sourceLineNo">8340</span> return this.explicitSplitPoint;<a name="line.8340"></a>
+<span class="sourceLineNo">8307</span> com.google.protobuf.Message.Builder builder =<a name="line.8307"></a>
+<span class="sourceLineNo">8308</span> service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.8308"></a>
+<span class="sourceLineNo">8309</span><a name="line.8309"></a>
+<span class="sourceLineNo">8310</span> org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(builder,<a name="line.8310"></a>
+<span class="sourceLineNo">8311</span> call.getRequest().toByteArray());<a name="line.8311"></a>
+<span class="sourceLineNo">8312</span> com.google.protobuf.Message request =<a name="line.8312"></a>
+<span class="sourceLineNo">8313</span> CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.8313"></a>
+<span class="sourceLineNo">8314</span><a name="line.8314"></a>
+<span class="sourceLineNo">8315</span> if (coprocessorHost != null) {<a name="line.8315"></a>
+<span class="sourceLineNo">8316</span> request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.8316"></a>
+<span class="sourceLineNo">8317</span> }<a name="line.8317"></a>
+<span class="sourceLineNo">8318</span><a name="line.8318"></a>
+<span class="sourceLineNo">8319</span> final com.google.protobuf.Message.Builder responseBuilder =<a name="line.8319"></a>
+<span class="sourceLineNo">8320</span> service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.8320"></a>
+<span class="sourceLineNo">8321</span> service.callMethod(methodDesc, controller, request,<a name="line.8321"></a>
+<span class="sourceLineNo">8322</span> new com.google.protobuf.RpcCallback<com.google.protobuf.Message>() {<a name="line.8322"></a>
+<span class="sourceLineNo">8323</span> @Override<a name="line.8323"></a>
+<span class="sourceLineNo">8324</span> public void run(com.google.protobuf.Message message) {<a name="line.8324"></a>
+<span class="sourceLineNo">8325</span> if (message != null) {<a name="line.8325"></a>
+<span class="sourceLineNo">8326</span> responseBuilder.mergeFrom(message);<a name="line.8326"></a>
+<span class="sourceLineNo">8327</span> }<a name="line.8327"></a>
+<span class="sourceLineNo">8328</span> }<a name="line.8328"></a>
+<span class="sourceLineNo">8329</span> });<a name="line.8329"></a>
+<span class="sourceLineNo">8330</span><a name="line.8330"></a>
+<span class="sourceLineNo">8331</span> if (coprocessorHost != null) {<a name="line.8331"></a>
+<span class="sourceLineNo">8332</span> coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.8332"></a>
+<span class="sourceLineNo">8333</span> }<a name="line.8333"></a>
+<span class="sourceLineNo">8334</span> IOException exception =<a name="line.8334"></a>
+<span class="sourceLineNo">8335</span> org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.getControllerException(controller);<a name="line.8335"></a>
+<span class="sourceLineNo">8336</span> if (exception != null) {<a name="line.8336"></a>
+<span class="sourceLineNo">8337</span> throw exception;<a name="line.8337"></a>
+<span class="sourceLineNo">8338</span> }<a name="line.8338"></a>
+<span class="sourceLineNo">8339</span><a name="line.8339"></a>
+<span class="sourceLineNo">8340</span> return responseBuilder.build();<a name="line.8340"></a>
<span class="sourceLineNo">8341</span> }<a name="line.8341"></a>
<span class="sourceLineNo">8342</span><a name="line.8342"></a>
-<span class="sourceLineNo">8343</span> void forceSplit(byte[] sp) {<a name="line.8343"></a>
-<span class="sourceLineNo">8344</span> // This HRegion will go away after the forced split is successful<a name="line.8344"></a>
-<span class="sourceLineNo">8345</span> // But if a forced split fails, we need to clear forced split.<a name="line.8345"></a>
-<span class="sourceLineNo">8346</span> this.splitRequest = true;<a name="line.8346"></a>
-<span class="sourceLineNo">8347</span> if (sp != null) {<a name="line.8347"></a>
-<span class="sourceLineNo">8348</span> this.explicitSplitPoint = sp;<a name="line.8348"></a>
-<span class="sourceLineNo">8349</span> }<a name="line.8349"></a>
-<span class="sourceLineNo">8350</span> }<a name="line.8350"></a>
-<span class="sourceLineNo">8351</span><a name="line.8351"></a>
-<span class="sourceLineNo">8352</span> void clearSplit() {<a name="line.8352"></a>
-<span class="sourceLineNo">8353</span> this.splitRequest = false;<a name="line.8353"></a>
-<span class="sourceLineNo">8354</span> this.explicitSplitPoint = null;<a name="line.8354"></a>
-<span class="sourceLineNo">8355</span> }<a name="line.8355"></a>
-<span class="sourceLineNo">8356</span><a name="line.8356"></a>
-<span class="sourceLineNo">8357</span> /**<a name="line.8357"></a>
-<span class="sourceLineNo">8358</span> * Return the splitpoint. null indicates the region isn't splittable<a name="line.8358"></a>
-<span class="sourceLineNo">8359</span> * If the splitpoint isn't explicitly specified, it will go over the stores<a name="line.8359"></a>
-<span class="sourceLineNo">8360</span> * to find the best splitpoint. Currently the criteria of best splitpoint<a name="line.8360"></a>
-<span class="sourceLineNo">8361</span> * is based on the size of the store.<a name="line.8361"></a>
-<span class="sourceLineNo">8362</span> */<a name="line.8362"></a>
-<span class="sourceLineNo">8363</span> public byte[] checkSplit() {<a name="line.8363"></a>
-<span class="sourceLineNo">8364</span> // Can't split META<a name="line.8364"></a>
-<span class="sourceLineNo">8365</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8365"></a>
-<span class="sourceLineNo">8366</span> if (shouldForceSplit()) {<a name="line.8366"></a>
-<span class="sourceLineNo">8367</span> LOG.warn("Cannot split meta region in HBase 0.20 and above");<a name="line.8367"></a>
-<span class="sourceLineNo">8368</span> }<a name="line.8368"></a>
-<span class="sourceLineNo">8369</span> return null;<a name="line.8369"></a>
-<span class="sourceLineNo">8370</span> }<a name="line.8370"></a>
-<span class="sourceLineNo">8371</span><a name="line.8371"></a>
-<span class="sourceLineNo">8372</span> // Can't split a region that is closing.<a name="line.8372"></a>
-<span class="sourceLineNo">8373</span> if (this.isClosing()) {<a name="line.8373"></a>
-<span class="sourceLineNo">8374</span> return null;<a name="line.8374"></a>
-<span class="sourceLineNo">8375</span> }<a name="line.8375"></a>
-<span class="sourceLineNo">8376</span><a name="line.8376"></a>
-<span class="sourceLineNo">8377</span> if (!splitPolicy.shouldSplit()) {<a name="line.8377"></a>
-<span class="sourceLineNo">8378</span> return null;<a name="line.8378"></a>
-<span class="sourceLineNo">8379</span> }<a name="line.8379"></a>
-<span class="sourceLineNo">8380</span><a name="line.8380"></a>
-<span class="sourceLineNo">8381</span> byte[] ret = splitPolicy.getSplitPoint();<a name="line.8381"></a>
-<span class="sourceLineNo">8382</span><a name="line.8382"></a>
-<span class="sourceLineNo">8383</span> if (ret != null) {<a name="line.8383"></a>
-<span class="sourceLineNo">8384</span> try {<a name="line.8384"></a>
-<span class="sourceLineNo">8385</span> checkRow(ret, "calculated split");<a name="line.8385"></a>
-<span class="sourceLineNo">8386</span> } catch (IOException e) {<a name="line.8386"></a>
-<span class="sourceLineNo">8387</span> LOG.error("Ignoring invalid split", e);<a name="line.8387"></a>
-<span class="sourceLineNo">8388</span> return null;<a name="line.8388"></a>
-<span class="sourceLineNo">8389</span> }<a name="line.8389"></a>
-<span class="sourceLineNo">8390</span> }<a name="line.8390"></a>
-<span class="sourceLineNo">8391</span> return ret;<a name="line.8391"></a>
-<span class="sourceLineNo">8392</span> }<a name="line.8392"></a>
-<span class="sourceLineNo">8393</span><a name="line.8393"></a>
-<span class="sourceLineNo">8394</span> /**<a name="line.8394"></a>
-<span class="sourceLineNo">8395</span> * @return The priority that this region should have in the compaction queue<a name="line.8395"></a>
-<span class="sourceLineNo">8396</span> */<a name="line.8396"></a>
-<span class="sourceLineNo">8397</span> public int getCompactPriority() {<a name="line.8397"></a>
-<span class="sourceLineNo">8398</span> return stores.values().stream().mapToInt(HStore::getCompactPriority).min()<a name="line.8398"></a>
-<span class="sourceLineNo">8399</span> .orElse(Store.NO_PRIORITY);<a name="line.8399"></a>
+<span class="sourceLineNo">8343</span> boolean shouldForceSplit() {<a name="line.8343"></a>
+<span class="sourceLineNo">8344</span> return this.splitRequest;<a name="line.8344"></a>
+<span class="sourceLineNo">8345</span> }<a name="line.8345"></a>
+<span class="sourceLineNo">8346</span><a name="line.8346"></a>
+<span class="sourceLineNo">8347</span> byte[] getExplicitSplitPoint() {<a name="line.8347"></a>
+<span class="sourceLineNo">8348</span> return this.explicitSplitPoint;<a name="line.8348"></a>
+<span class="sourceLineNo">8349</span> }<a name="line.8349"></a>
+<span class="sourceLineNo">8350</span><a name="line.8350"></a>
+<span class="sourceLineNo">8351</span> void forceSplit(byte[] sp) {<a name="line.8351"></a>
+<span class="sourceLineNo">8352</span> // This HRegion will go away after the forced split is successful<a name="line.8352"></a>
+<span class="sourceLineNo">8353</span> // But if a forced split fails, we need to clear forced split.<a name="line.8353"></a>
+<span class="sourceLineNo">8354</span> this.splitRequest = true;<a name="line.8354"></a>
+<span class="sourceLineNo">8355</span> if (sp != null) {<a name="line.8355"></a>
+<span class="sourceLineNo">8356</span> this.explicitSplitPoint = sp;<a name="line.8356"></a>
+<span class="sourceLineNo">8357</span> }<a name="line.8357"></a>
+<span class="sourceLineNo">8358</span> }<a name="line.8358"></a>
+<span class="sourceLineNo">8359</span><a name="line.8359"></a>
+<span class="sourceLineNo">8360</span> void clearSplit() {<a name="line.8360"></a>
+<span class="sourceLineNo">8361</span> this.splitRequest = false;<a name="line.8361"></a>
+<span class="sourceLineNo">8362</span> this.explicitSplitPoint = null;<a name="line.8362"></a>
+<span class="sourceLineNo">8363</span> }<a name="line.8363"></a>
+<span class="sourceLineNo">8364</span><a name="line.8364"></a>
+<span class="sourceLineNo">8365</span> /**<a name="line.8365"></a>
+<span class="sourceLineNo">8366</span> * Return the splitpoint. null indicates the region isn't splittable<a name="line.8366"></a>
+<span class="sourceLineNo">8367</span> * If the splitpoint isn't explicitly specified, it will go over the stores<a name="line.8367"></a>
+<span class="sourceLineNo">8368</span> * to find the best splitpoint. Currently the criteria of best splitpoint<a name="line.8368"></a>
+<span class="sourceLineNo">8369</span> * is based on the size of the store.<a name="line.8369"></a>
+<span class="sourceLineNo">8370</span> */<a name="line.8370"></a>
+<span class="sourceLineNo">8371</span> public byte[] checkSplit() {<a name="line.8371"></a>
+<span class="sourceLineNo">8372</span> // Can't split META<a name="line.8372"></a>
+<span class="sourceLineNo">8373</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8373"></a>
+<span class="sourceLineNo">8374</span> if (shouldForceSplit()) {<a name="line.8374"></a>
+<span class="sourceLineNo">8375</span> LOG.warn("Cannot split meta region in HBase 0.20 and above");<a name="line.8375"></a>
+<span class="sourceLineNo">8376</span> }<a name="line.8376"></a>
+<span class="sourceLineNo">8377</span> return null;<a name="line.8377"></a>
+<span class="sourceLineNo">8378</span> }<a name="line.8378"></a>
+<span class="sourceLineNo">8379</span><a name="line.8379"></a>
+<span class="sourceLineNo">8380</span> // Can't split a region that is closing.<a name="line.8380"></a>
+<span class="sourceLineNo">8381</span> if (this.isClosing()) {<a name="line.8381"></a>
+<span class="sourceLineNo">8382</span> return null;<a name="line.8382"></a>
+<span class="sourceLineNo">8383</span> }<a name="line.8383"></a>
+<span class="sourceLineNo">8384</span><a name="line.8384"></a>
+<span class="sourceLineNo">8385</span> if (!splitPolicy.shouldSplit()) {<a name="line.8385"></a>
+<span class="sourceLineNo">8386</span> return null;<a name="line.8386"></a>
+<span class="sourceLineNo">8387</span> }<a name="line.8387"></a>
+<span class="sourceLineNo">8388</span><a name="line.8388"></a>
+<span class="sourceLineNo">8389</span> byte[] ret = splitPolicy.getSplitPoint();<a name="line.8389"></a>
+<span class="sourceLineNo">8390</span><a name="line.8390"></a>
+<span class="sourceLineNo">8391</span> if (ret != null) {<a name="line.8391"></a>
+<span class="sourceLineNo">8392</span> try {<a name="line.8392"></a>
+<span class="sourceLineNo">8393</span> checkRow(ret, "calculated split");<a name="line.8393"></a>
+<span class="sourceLineNo">8394</span> } catch (IOException e) {<a name="line.8394"></a>
+<span class="sourceLineNo">8395</span> LOG.error("Ignoring invalid split", e);<a name="line.8395"></a>
+<span class="sourceLineNo">8396</span> return null;<a name="line.8396"></a>
+<span class="sourceLineNo">8397</span> }<a name="line.8397"></a>
+<span class="sourceLineNo">8398</span> }<a name="line.8398"></a>
+<span class="sourceLineNo">8399</span> return ret;<a name="line.8399"></a>
<span class="sourceLineNo">8400</span> }<a name="line.8400"></a>
<span class="sourceLineNo">8401</span><a name="line.8401"></a>
-<span class="sourceLineNo">8402</span> /** @return the coprocessor host */<a name="line.8402"></a>
-<span class="sourceLineNo">8403</span> public RegionCoprocessorHost getCoprocessorHost() {<a name="line.8403"></a>
-<span class="sourceLineNo">8404</span> return coprocessorHost;<a name="line.8404"></a>
-<span class="sourceLineNo">8405</span> }<a name="line.8405"></a>
-<span class="sourceLineNo">8406</span><a name="line.8406"></a>
-<span class="sourceLineNo">8407</span> /** @param coprocessorHost the new coprocessor host */<a name="line.8407"></a>
-<span class="sourceLineNo">8408</span> @VisibleForTesting<a name="line.8408"></a>
-<span class="sourceLineNo">8409</span> public void setCoprocessorHost(final RegionCoprocessorHost coprocessorHost) {<a name="line.8409"></a>
-<span class="sourceLineNo">8410</span> this.coprocessorHost = coprocessorHost;<a name="line.8410"></a>
-<span class="sourceLineNo">8411</span> }<a name="line.8411"></a>
-<span class="sourceLineNo">8412</span><a name="line.8412"></a>
-<span class="sourceLineNo">8413</span> @Override<a name="line.8413"></a>
-<span class="sourceLineNo">8414</span> public void startRegionOperation() throws IOException {<a name="line.8414"></a>
-<span class="sourceLineNo">8415</span> startRegionOperation(Operation.ANY);<a name="line.8415"></a>
-<span class="sourceLineNo">8416</span> }<a name="line.8416"></a>
-<span class="sourceLineNo">8417</span><a name="line.8417"></a>
-<span class="sourceLineNo">8418</span> @Override<a name="line.8418"></a>
-<span class="sourceLineNo">8419</span> public void startRegionOperation(Operation op) throws IOException {<a name="line.8419"></a>
-<span class="sourceLineNo">8420</span> switch (op) {<a name="line.8420"></a>
-<span class="sourceLineNo">8421</span> case GET: // read operations<a name="line.8421"></a>
-<span class="sourceLineNo">8422</span> case SCAN:<a name="line.8422"></a>
-<span class="sourceLineNo">8423</span> checkReadsEnabled();<a name="line.8423"></a>
-<span class="sourceLineNo">8424</span> break;<a name="line.8424"></a>
-<span class="sourceLineNo">8425</span> default:<a name="line.8425"></a>
-<span class="sourceLineNo">8426</span> break;<a name="line.8426"></a>
-<span class="sourceLineNo">8427</span> }<a name="line.8427"></a>
-<span class="sourceLineNo">8428</span> if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.8428"></a>
-<span class="sourceLineNo">8429</span> || op == Operation.COMPACT_REGION || op == Operation.COMPACT_SWITCH) {<a name="line.8429"></a>
-<span class="sourceLineNo">8430</span> // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.8430"></a>
-<span class="sourceLineNo">8431</span> // region<a name="line.8431"></a>
-<span class="sourceLineNo">8432</span> return;<a name="line.8432"></a>
-<span class="sourceLineNo">8433</span> }<a name="line.8433"></a>
-<span class="sourceLineNo">8434</span> if (this.closing.get()) {<a name="line.8434"></a>
-<span class="sourceLineNo">8435</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8435"></a>
-<span class="sourceLineNo">8436</span> }<a name="line.8436"></a>
-<span class="sourceLineNo">8437</span> lock(lock.readLock());<a name="line.8437"></a>
-<span class="sourceLineNo">8438</span> if (this.closed.get()) {<a name="line.8438"></a>
-<span class="sourceLineNo">8439</span> lock.readLock().unlock();<a name="line.8439"></a>
-<span class="sourceLineNo">8440</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8440"></a>
+<span class="sourceLineNo">8402</span> /**<a name="line.8402"></a>
+<span class="sourceLineNo">8403</span> * @return The priority that this region should have in the compaction queue<a name="line.8403"></a>
+<span class="sourceLineNo">8404</span> */<a name="line.8404"></a>
+<span class="sourceLineNo">8405</span> public int getCompactPriority() {<a name="line.8405"></a>
+<span class="sourceLineNo">8406</span> return stores.values().stream().mapToInt(HStore::getCompactPriority).min()<a name="line.8406"></a>
+<span class="sourceLineNo">8407</span> .orElse(Store.NO_PRIORITY);<a name="line.8407"></a>
+<span class="sourceLineNo">8408</span> }<a name="line.8408"></a>
+<span class="sourceLineNo">8409</span><a name="line.8409"></a>
+<span class="sourceLineNo">8410</span> /** @return the coprocessor host */<a name="line.8410"></a>
+<span class="sourceLineNo">8411</span> public RegionCoprocessorHost getCoprocessorHost() {<a name="line.8411"></a>
+<span class="sourceLineNo">8412</span> return coprocessorHost;<a name="line.8412"></a>
+<span class="sourceLineNo">8413</span> }<a name="line.8413"></a>
+<span class="sourceLineNo">8414</span><a name="line.8414"></a>
+<span class="sourceLineNo">8415</span> /** @param coprocessorHost the new coprocessor host */<a name="line.8415"></a>
+<span class="sourceLineNo">8416</span> @VisibleForTesting<a name="line.8416"></a>
+<span class="sourceLineNo">8417</span> public void setCoprocessorHost(final RegionCoprocessorHost coprocessorHost) {<a name="line.8417"></a>
+<span class="sourceLineNo">8418</span> this.coprocessorHost = coprocessorHost;<a name="line.8418"></a>
+<span class="sourceLineNo">8419</span> }<a name="line.8419"></a>
+<span class="sourceLineNo">8420</span><a name="line.8420"></a>
+<span class="sourceLineNo">8421</span> @Override<a name="line.8421"></a>
+<span class="sourceLineNo">8422</span> public void startRegionOperation() throws IOException {<a name="line.8422"></a>
+<span class="sourceLineNo">8423</span> startRegionOperation(Operation.ANY);<a name="line.8423"></a>
+<span class="sourceLineNo">8424</span> }<a name="line.8424"></a>
+<span class="sourceLineNo">8425</span><a name="line.8425"></a>
+<span class="sourceLineNo">8426</span> @Override<a name="line.8426"></a>
+<span class="sourceLineNo">8427</span> public void startRegionOperation(Operation op) throws IOException {<a name="line.8427"></a>
+<span class="sourceLineNo">8428</span> switch (op) {<a name="line.8428"></a>
+<span class="sourceLineNo">8429</span> case GET: // read operations<a name="line.8429"></a>
+<span class="sourceLineNo">8430</span> case SCAN:<a name="line.8430"></a>
+<span class="sourceLineNo">8431</span> checkReadsEnabled();<a name="line.8431"></a>
+<span class="sourceLineNo">8432</span> break;<a name="line.8432"></a>
+<span class="sourceLineNo">8433</span> default:<a name="line.8433"></a>
+<span class="sourceLineNo">8434</span> break;<a name="line.8434"></a>
+<span class="sourceLineNo">8435</span> }<a name="line.8435"></a>
+<span class="sourceLineNo">8436</span> if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.8436"></a>
+<span class="sourceLineNo">8437</span> || op == Operation.COMPACT_REGION || op == Operation.COMPACT_SWITCH) {<a name="line.8437"></a>
+<span class="sourceLineNo">8438</span> // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.8438"></a>
+<span class="sourceLineNo">8439</span> // region<a name="line.8439"></a>
+<span class="sourceLineNo">8440</span> return;<a name="line.8440"></a>
<span class="sourceLineNo">8441</span> }<a name="line.8441"></a>
-<span class="sourceLineNo">8442</span> // The unit for snapshot is a region. So, all stores for this region must be<a name="line.8442"></a>
-<span class="sourceLineNo">8443</span> // prepared for snapshot operation before proceeding.<a name="line.8443"></a>
-<span class="sourceLineNo">8444</span> if (op == Operation.SNAPSHOT) {<a name="line.8444"></a>
-<span class="sourceLineNo">8445</span> stores.values().forEach(HStore::preSnapshotOperation);<a name="line.8445"></a>
-<span class="sourceLineNo">8446</span> }<a name="line.8446"></a>
-<span class="sourceLineNo">8447</span> try {<a name="line.8447"></a>
-<span class="sourceLineNo">8448</span> if (coprocessorHost != null) {<a name="line.8448"></a>
-<span class="sourceLineNo">8449</span> coprocessorHost.postStartRegionOperation(op);<a name="line.8449"></a>
-<span class="sourceLineNo">8450</span> }<a name="line.8450"></a>
-<span class="sourceLineNo">8451</span> } catch (Exception e) {<a name="line.8451"></a>
-<span class="sourceLineNo">8452</span> lock.readLock().unlock();<a name="line.8452"></a>
-<span class="sourceLineNo">8453</span> throw new IOException(e);<a name="line.8453"></a>
+<span class="sourceLineNo">8442</span> if (this.closing.get()) {<a name="line.8442"></a>
+<span class="sourceLineNo">8443</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8443"></a>
+<span class="sourceLineNo">8444</span> }<a name="line.8444"></a>
+<span class="sourceLineNo">8445</span> lock(lock.readLock());<a name="line.8445"></a>
+<span class="sourceLineNo">8446</span> if (this.closed.get()) {<a name="line.8446"></a>
+<span class="sourceLineNo">8447</span> lock.readLock().unlock();<a name="line.8447"></a>
+<span class="sourceLineNo">8448</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8448"></a>
+<span class="sourceLineNo">8449</span> }<a name="line.8449"></a>
+<span class="sourceLineNo">8450</span> // The unit for snapshot is a region. So, all stores for this region must be<a name="line.8450"></a>
+<span class="sourceLineNo">8451</span> // prepared for snapshot operation before proceeding.<a name="line.8451"></a>
+<span class="sourceLineNo">8452</span> if (op == Operation.SNAPSHOT) {<a name="line.8452"></a>
+<span class="sourceLineNo">8453</span> stores.values().forEach(HStore::preSnapshotOperation);<a name="line.8453"></a>
<span class="sourceLineNo">8454</span> }<a name="line.8454"></a>
-<span class="sourceLineNo">8455</span> }<a name="line.8455"></a>
-<span class="sourceLineNo">8456</span><a name="line.8456"></a>
-<span class="sourceLineNo">8457</span> @Override<a name="line.8457"></a>
-<span class="sourceLineNo">8458</span> public void closeRegionOperation() throws IOException {<a name="line.8458"></a>
-<span class="sourceLineNo">8459</span> closeRegionOperation(Operation.ANY);<a name="line.8459"></a>
-<span class="sourceLineNo">8460</span> }<a name="line.8460"></a>
-<span class="sourceLineNo">8461</span><a name="line.8461"></a>
-<span class="sourceLineNo">8462</span> @Override<a name="line.8462"></a>
-<span class="sourceLineNo">8463</span> public void closeRegionOperation(Operation operation) throws IOException {<a name="line.8463"></a>
-<span class="sourceLineNo">8464</span> if (operation == Operation.SNAPSHOT) {<a name="line.8464"></a>
-<span class="sourceLineNo">8465</span> stores.values().forEach(HStore::postSnapshotOperation);<a name="line.8465"></a>
-<span class="sourceLineNo">8466</span> }<a name="line.8466"></a>
-<span class="sourceLineNo">8467</span> lock.readLock().unlock();<a name="line.8467"></a>
-<span class="sourceLineNo">8468</span> if (coprocessorHost != null) {<a name="line.8468"></a>
-<span class="sourceLineNo">8469</span> coprocessorHost.postCloseRegionOperation(operation);<a name="line.8469"></a>
-<span class="sourceLineNo">8470</span> }<a name="line.8470"></a>
-<span class="sourceLineNo">8471</span> }<a name="line.8471"></a>
-<span class="sourceLineNo">8472</span><a name="line.8472"></a>
-<span class="sourceLineNo">8473</span> /**<a name="line.8473"></a>
-<span class="sourceLineNo">8474</span> * This method needs to be called before any public call that reads or<a name="line.8474"></a>
-<span class="sourceLineNo">8475</span> * modifies stores in bulk. It has to be called just before a try.<a name="line.8475"></a>
-<span class="sourceLineNo">8476</span> * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.8476"></a>
-<span class="sourceLineNo">8477</span> * Acquires a writelock and checks if the region is closing or closed.<a name="line.8477"></a>
-<span class="sourceLineNo">8478</span> * @throws NotServingRegionException when the region is closing or closed<a name="line.8478"></a>
-<span class="sourceLineNo">8479</span> * @throws RegionTooBusyException if failed to get the lock in time<a name="line.8479"></a>
-<span class="sourceLineNo">8480</span> * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.8480"></a>
-<span class="sourceLineNo">8481</span> */<a name="line.8481"></a>
-<span class="sourceLineNo">8482</span> private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.8482"></a>
-<span class="sourceLineNo">8483</span> throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.8483"></a>
-<span class="sourceLineNo">8484</span> if (this.closing.get()) {<a name="line.8484"></a>
-<span class="sourceLineNo">8485</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8485"></a>
-<span class="sourceLineNo">8486</span> }<a name="line.8486"></a>
-<span class="sourceLineNo">8487</span> if (writeLockNeeded) lock(lock.writeLock());<a name="line.8487"></a>
-<span class="sourceLineNo">8488</span> else lock(lock.readLock());<a name="line.8488"></a>
-<span class="sourceLineNo">8489</span> if (this.closed.get()) {<a name="line.8489"></a>
-<span class="sourceLineNo">8490</span> if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8490"></a>
-<span class="sourceLineNo">8491</span> else lock.readLock().unlock();<a name="line.8491"></a>
-<span class="sourceLineNo">8492</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8492"></a>
-<span class="sourceLineNo">8493</span> }<a name="line.8493"></a>
-<span class="sourceLineNo">8494</span> }<a name="line.8494"></a>
-<span class="sourceLineNo">8495</span><a name="line.8495"></a>
-<span class="sourceLineNo">8496</span> /**<a name="line.8496"></a>
-<span class="sourceLineNo">8497</span> * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8497"></a>
-<span class="sourceLineNo">8498</span> * to the try block of #startRegionOperation<a name="line.8498"></a>
-<span class="sourceLineNo">8499</span> */<a name="line.8499"></a>
-<span class="sourceLineNo">8500</span> private void closeBulkRegionOperation(){<a name="line.8500"></a>
-<span class="sourceLineNo">8501</span> if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8501"></a>
-<span class="sourceLineNo">8502</span> else lock.readLock().unlock();<a name="line.8502"></a>
-<span class="sourceLineNo">8503</span> }<a name="line.8503"></a>
-<span class="sourceLineNo">8504</span><a name="line.8504"></a>
-<span class="sourceLineNo">8505</span> /**<a name="line.8505"></a>
-<span class="sourceLineNo">8506</span> * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8506"></a>
-<span class="sourceLineNo">8507</span> * These information are exposed by the region server metrics.<a name="line.8507"></a>
-<span class="sourceLineNo">8508</span> */<a name="line.8508"></a>
-<span class="sourceLineNo">8509</span> private void recordMutationWithoutWal(final Map<byte [], List<Cell>> familyMap) {<a name="line.8509"></a>
-<span class="sourceLineNo">8510</span> numMutationsWithoutWAL.increment();<a name="line.8510"></a>
-<span class="sourceLineNo">8511</span> if (numMutationsWithoutWAL.sum() <= 1) {<a name="line.8511"></a>
-<span class="sourceLineNo">8512</span> LOG.info("writing data to region " + this +<a name="line.8512"></a>
-<span class="sourceLineNo">8513</span> " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8513"></a>
-<span class="sourceLineNo">8514</span> }<a name="line.8514"></a>
-<span class="sourceLineNo">8515</span><a name="line.8515"></a>
-<span class="sourceLineNo">8516</span> long mutationSize = 0;<a name="line.8516"></a>
-<span class="sourceLineNo">8517</span> for (List<Cell> cells: familyMap.values()) {<a name="line.8517"></a>
-<span class="sourceLineNo">8518</span> // Optimization: 'foreach' loop is not used. See:<a name="line.8518"></a>
-<span class="sourceLineNo">8519</span> // HBASE-12023 HRegion.applyFamilyMapToMemstore creates too many iterator objects<a name="line.8519"></a>
-<span class="sourceLineNo">8520</span> assert cells instanceof RandomAccess;<a name="line.8520"></a>
-<span class="sourceLineNo">8521</span> int listSize = cells.size();<a name="line.8521"></a>
-<span class="sourceLineNo">8522</span> for (int i=0; i < listSize; i++) {<a name="line.8522"></a>
-<span class="sourceLineNo">8523</span> Cell cell = cells.get(i);<a name="line.8523"></a>
-<span class="sourceLineNo">8524</span> mutationSize += cell.getSerializedSize();<a name="line.8524"></a>
-<span class="sourceLineNo">8525</span> }<a name="line.8525"></a>
-<span class="sourceLineNo">8526</span> }<a name="line.8526"></a>
-<span class="sourceLineNo">8527</span><a name="line.8527"></a>
-<span class="sourceLineNo">8528</span> dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8528"></a>
-<span class="sourceLineNo">8529</span> }<a name="line.8529"></a>
-<span class="sourceLineNo">8530</span><a name="line.8530"></a>
-<span class="sourceLineNo">8531</span> private void lock(final Lock lock) throws RegionTooBusyException, InterruptedIOException {<a name="line.8531"></a>
-<span class="sourceLineNo">8532</span> lock(lock, 1);<a name="line.8532"></a>
-<span class="sourceLineNo">8533</span> }<a name="line.8533"></a>
-<span class="sourceLineNo">8534</span><a name="line.8534"></a>
-<span class="sourceLineNo">8535</span> /**<a name="line.8535"></a>
-<span class="sourceLineNo">8536</span> * Try to acquire a lock. Throw RegionTooBusyException<a name="line.8536"></a>
-<span class="sourceLineNo">8537</span> * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8537"></a>
-<span class="sourceLineNo">8538</span> * if interrupted while waiting for the lock.<a name="line.8538"></a>
-<span class="sourceLineNo">8539</span> */<a name="line.8539"></a>
-<span class="sourceLineNo">8540</span> private void lock(final Lock lock, final int multiplier)<a name="line.8540"></a>
-<span class="sourceLineNo">8541</span> throws RegionTooBusyException, InterruptedIOException {<a name="line.8541"></a>
-<span class="sourceLineNo">8542</span> try {<a name="line.8542"></a>
-<span class="sourceLineNo">8543</span> final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8543"></a>
-<span class="sourceLineNo">8544</span> busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8544"></a>
-<span class="sourceLineNo">8545</span> if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8545"></a>
-<span class="sourceLineNo">8546</span> // Don't print millis. Message is used as a key over in<a name="line.8546"></a>
-<span class="sourceLineNo">8547</span> // RetriesExhaustedWithDetailsException processing.<a name="line.8547"></a>
-<span class="sourceLineNo">8548</span> throw new RegionTooBusyException("Failed to obtain lock; regionName=" +<a name="line.8548"></a>
-<span class="sourceLineNo">8549</span> (this.getRegionInfo() == null? "unknown":<a name="line.8549"></a>
-<span class="sourceLineNo">8550</span> this.getRegionInfo().getRegionNameAsString()) +<a name="line.8550"></a>
-<span class="sourceLineNo">8551</span> ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.8551"></a>
-<span class="sourceLineNo">8552</span> this.getRegionServerServices().getServerName()));<a name="line.8552"></a>
-<span class="sourceLineNo">8553</span> }<a name="line.8553"></a>
-<span class="sourceLineNo">8554</span> } catch (InterruptedException ie) {<a name="line.8554"></a>
-<span class="sourceLineNo">8555</span> LOG.info("Interrupted while waiting for a lock");<a name="line.8555"></a>
-<span class="sourceLineNo">8556</span> InterruptedIOException iie = new InterruptedIOException();<a name="line.8556"></a>
-<span class="sourceLineNo">8557</span> iie.initCause(ie);<a name="line.8557"></a>
-<span class="sourceLineNo">8558</span> throw iie;<a name="line.8558"></a>
-<span class="sourceLineNo">8559</span> }<a name="line.8559"></a>
-<span class="sourceLineNo">8560</span> }<a name="line.8560"></a>
-<span class="sourceLineNo">8561</span><a name="line.8561"></a>
-<span class="sourceLineNo">8562</span> /**<a name="line.8562"></a>
-<span class="sourceLineNo">8563</span> * Calls sync with the given transaction ID<a name="line.8563"></a>
-<span class="sourceLineNo">8564</span> * @param txid should sync up to which transaction<a name="line.8564"></a>
-<span class="sourceLineNo">8565</span> * @throws IOException If anything goes wrong with DFS<a name="line.8565"></a>
-<span class="sourceLineNo">8566</span> */<a name="line.8566"></a>
-<span class="sourceLineNo">8567</span> private void sync(long txid, Durability durability) throws IOException {<a name="line.8567"></a>
-<span class="sourceLineNo">8568</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8568"></a>
-<span class="sourceLineNo">8569</span> this.wal.sync(txid);<a name="line.8569"></a>
-<span class="sourceLineNo">8570</span> } else {<a name="line.8570"></a>
-<span class="sourceLineNo">8571</span> switch(durability) {<a name="line.8571"></a>
-<span class="sourceLineNo">8572</span> case USE_DEFAULT:<a name="line.8572"></a>
-<span class="sourceLineNo">8573</span> // do what table defaults to<a name="line.8573"></a>
-<span class="sourceLineNo">8574</span> if (shouldSyncWAL()) {<a name="line.8574"></a>
-<span class="sourceLineNo">8575</span> this.wal.sync(txid);<a name="line.8575"></a>
-<span class="sourceLineNo">8576</span> }<a name="line.8576"></a>
-<span class="sourceLineNo">8577</span> break;<a name="line.8577"></a>
-<span class="sourceLineNo">8578</span> case SKIP_WAL:<a name="line.8578"></a>
-<span class="sourceLineNo">8579</span> // nothing do to<a name="line.8579"></a>
-<span class="sourceLineNo">8580</span> break;<a name="line.8580"></a>
-<span class="sourceLineNo">8581</span> case ASYNC_WAL:<a name="line.8581"></a>
-<span class="sourceLineNo">8582</span> // nothing do to<a name="line.8582"></a>
-<span class="sourceLineNo">8583</span> break;<a name="line.8583"></a>
-<span class="sourceLineNo">8584</span> case SYNC_WAL:<a name="line.8584"></a>
-<span class="sourceLineNo">8585</span> this.wal.sync(txid, false);<a name="line.8585"></a>
-<span class="sourceLineNo">8586</span> break;<a name="line.8586"></a>
-<span class="sourceLineNo">8587</span> case FSYNC_WAL:<a name="line.8587"></a>
-<span class="sourceLineNo">8588</span> this.wal.sync(txid, true);<a name="line.8588"></a>
-<span class="sourceLineNo">8589</span> break;<a name="line.8589"></a>
-<span class="sourceLineNo">8590</span> default:<a name="line.8590"></a>
-<span class="sourceLineNo">8591</span> throw new RuntimeException("Unknown durability " + durability);<a name="line.8591"></a>
-<span class="sourceLineNo">8592</span> }<a name="line.8592"></a>
-<span class="sourceLineNo">8593</span> }<a name="line.8593"></a>
-<span class="sourceLineNo">8594</span> }<a name="line.8594"></a>
-<span class="sourceLineNo">8595</span><a name="line.8595"></a>
-<span class="sourceLineNo">8596</span> /**<a name="line.8596"></a>
-<span class="sourceLineNo">8597</span> * Check whether we should sync the wal from the table's durability settings<a name="line.8597"></a>
-<span class="sourceLineNo">8598</span> */<a name="line.8598"></a>
-<span class="sourceLineNo">8599</span> private boolean shouldSyncWAL() {<a name="line.8599"></a>
-<span class="sourceLineNo">8600</span> return regionDurability.ordinal() > Durability.ASYNC_WAL.ordinal();<a name="line.8600"></a>
-<span class="sourceLineNo">8601</span> }<a name="line.8601"></a>
-<span class="sourceLineNo">8602</span><a name="line.8602"></a>
-<span class="sourceLineNo">8603</span> /**<a name="line.8603"></a>
-<span class="sourceLineNo">8604</span> * A mocked list implementation - discards all updates.<a name="line.8604"></a>
-<span class="sourceLineNo">8605</span> */<a name="line.8605"></a>
-<span class="sourceLineNo">8606</span> private static final List<Cell> MOCKED_LIST = new AbstractList<Cell>() {<a name="line.8606"></a>
-<span class="sourceLineNo">8607</span><a name="line.8607"></a>
-<span class="sourceLineNo">8608</span> @Override<a name="line.8608"></a>
-<span class="sourceLineNo">8609</span> public void add(int index, Cell element) {<a name="line.8609"></a>
-<span class="sourceLineNo">8610</span> // do nothing<a name="line.8610"></a>
-<span class="sourceLineNo">8611</span> }<a name="line.8611"></a>
-<span class="sourceLineNo">8612</span><a name="line.8612"></a>
-<span class="sourceLineNo">8613</span> @Override<a name="line.8613"></a>
-<span class="sourceLineNo">8614</span> public boolean addAll(int index, Collection<? extends Cell> c) {<a name="line.8614"></a>
-<span class="sourceLineNo">8615</span> return false; // this list is never changed as a result of an update<a name="line.8615"></a>
-<span class="sourceLineNo">8616</span> }<a name="line.8616"></a>
-<span class="sourceLineNo">8617</span><a name="line.8617"></a>
-<span class="sourceLineNo">8618</span> @Override<a name="line.8618"></a>
-<span class="sourceLineNo">8619</span> public KeyValue get(int index) {<a name="line.8619"></a>
-<span class="sourceLineNo">8620</span> throw new UnsupportedOperationException();<a name="line.8620"></a>
-<span class="sourceLineNo">8621</span> }<a name="line.8621"></a>
-<span class="sourceLineNo">8622</span><a name="line.8622"></a>
-<span class="sourceLineNo">8623</span> @Override<a name="line.8623"></a>
-<span class="sourceLineNo">8624</span> public int size() {<a name="line.8624"></a>
-<span class="sourceLineNo">8625</span> return 0;<a name="line.8625"></a>
-<span class="sourceLineNo">8626</span> }<a name="line.8626"></a>
-<span class="sourceLineNo">8627</span> };<a name="line.8627"></a>
-<span class="sourceLineNo">8628</span><a name="line.8628"></a>
-<span class="sourceLineNo">8629</span> /** @return the latest sequence number that was read from storage when this region was opened */<a name="line.8629"></a>
-<span class="sourceLineNo">8630</span> public long getOpenSeqNum() {<a name="line.8630"></a>
-<span class="sourceLineNo">8631</span> return this.openSeqNum;<a name="line.8631"></a>
-<span class="sourceLineNo">8632</span> }<a name="line.8632"></a>
-<span class="sourceLineNo">8633</span><a name="line.8633"></a>
-<span class="sourceLineNo">8634</span> @Override<a name="line.8634"></a>
-<span class="sourceLineNo">8635</span> public Map<byte[], Long> getMaxStoreSeqId() {<a name="line.8635"></a>
-<span class="sourceLineNo">8636</span> return this.maxSeqIdInStores;<a name="line.8636"></a>
-<span class="sourceLineNo">8637</span> }<a name="line.8637"></a>
-<span class="sourceLineNo">8638</span><a name="line.8638"></a>
-<span class="sourceLineNo">8639</span> public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8639"></a>
-<span class="sourceLineNo">8640</span> return wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8640"></a>
-<span class="sourceLineNo">8641</span> }<a name="line.8641"></a>
-<span class="sourceLineNo">8642</span><a name="line.8642"></a>
-<span class="sourceLineNo">8643</span> @Override<a name="line.8643"></a>
-<span class="sourceLineNo">8644</span> public CompactionState getCompactionState() {<a name="line.8644"></a>
-<span class="sourceLineNo">8645</span> boolean hasMajor = majorInProgress.get() > 0, hasMinor = minorInProgress.get() > 0;<a name="line.8645"></a>
-<span class="sourceLineNo">8646</span> return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8646"></a>
-<span class="sourceLineNo">8647</span> : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8647"></a>
-<span class="sourceLineNo">8648</span> }<a name="line.8648"></a>
-<span class="sourceLineNo">8649</span><a name="line.8649"></a>
-<span class="sourceLineNo">8650</span> public void reportCompactionRequestStart(boolean isMajor){<a name="line.8650"></a>
-<span class="sourceLineNo">8651</span> (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8651"></a>
-<span class="sourceLineNo">8652</span> }<a name="line.8652"></a>
-<span class="sourceLineNo">8653</span><a name="line.8653"></a>
-<span class="sourceLineNo">8654</span> public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8654"></a>
-<span class="sourceLineNo">8655</span> int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8655"></a>
-<span class="sourceLineNo">8656</span><a name="line.8656"></a>
-<span class="sourceLineNo">8657</span> // metrics<a name="line.8657"></a>
-<span class="sourceLineNo">8658</span> compactionsFinished.increment();<a name="line.8658"></a>
-<span class="sourceLineNo">8659</span> compactionNumFilesCompacted.add(numFiles);<a name="line.8659"></a>
-<span class="sourceLineNo">8660</span> compactionNumBytesCompacted.add(filesSizeCompacted);<a name="line.8660"></a>
+<span class="sourceLineNo">8455</span> try {<a name="line.8455"></a>
+<span class="sourceLineNo">8456</span> if (coprocessorHost != null) {<a name="line.8456"></a>
+<span class="sourceLineNo">8457</span> coprocessorHost.postStartRegionOperation(op);<a name="line.8457"></a>
+<span class="sourceLineNo">8458</span> }<a name="line.8458"></a>
+<span class="sourceLineNo">8459</span> } catch (Exception e) {<a name="line.8459"></a>
+<span class="sourceLineNo">8460</span> lock.readLock().unlock();<a name="line.8460"></a>
+<span class="sourceLineNo">8461</span> throw new IOException(e);<a name="line.8461"></a>
+<span class="sourceLineNo">8462</span> }<a name="line.8462"></a>
+<span class="sourceLineNo">8463</span> }<a name="line.8463"></a>
+<span class="sourceLineNo">8464</span><a name="line.8464"></a>
+<span class="sourceLineNo">8465</span> @Override<a name="line.8465"></a>
+<span class="sourceLineNo">8466</span> public void closeRegionOperation() throws IOException {<a name="line.8466"></a>
+<span class="sourceLineNo">8467</span> closeRegionOperation(Operation.ANY);<a name="line.8467"></a>
+<span class="sourceLineNo">8468</span> }<a name="line.8468"></a>
+<span class="sourceLineNo">8469</span><a name="line.8469"></a>
+<span class="sourceLineNo">8470</span> @Override<a name="line.8470"></a>
+<span class="sourceLineNo">8471</span> public void closeRegionOperation(Operation operation) throws IOException {<a name="line.8471"></a>
+<span class="sourceLineNo">8472</span> if (operation == Operation.SNAPSHOT) {<a name="line.8472"></a>
+<span class="sourceLineNo">8473</span> stores.values().forEach(HStore::postSnapshotOperation);<a name="line.8473"></a>
+<span class="sourceLineNo">8474</span> }<a name="line.8474"></a>
+<span class="sourceLineNo">8475</span> lock.readLock().unlock();<a name="line.8475"></a>
+<span class="sourceLineNo">8476</span> if (coprocessorHost != null) {<a name="line.8476"></a>
+<span class="sourceLineNo">8477</span> coprocessorHost.postCloseRegionOperation(operation);<a name="line.8477"></a>
+<span class="sourceLineNo">8478</span> }<a name="line.8478"></a>
+<span class="sourceLineNo">8479</span> }<a name="line.8479"></a>
+<span class="sourceLineNo">8480</span><a name="line.8480"></a>
+<span class="sourceLineNo">8481</span> /**<a name="line.8481"></a>
+<span class="sourceLineNo">8482</span> * This method needs to be called before any public call that reads or<a name="line.8482"></a>
+<span class="sourceLineNo">8483</span> * modifies stores in bulk. It has to be called just before a try.<a name="line.8483"></a>
+<span class="sourceLineNo">8484</span> * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.8484"></a>
+<span class="sourceLineNo">8485</span> * Acquires a writelock and checks if the region is closing or closed.<a name="line.8485"></a>
+<span class="sourceLineNo">8486</span> * @throws NotServingRegionException when the region is closing or closed<a name="line.8486"></a>
+<span class="sourceLineNo">8487</span> * @throws RegionTooBusyException if failed to get the lock in time<a name="line.8487"></a>
+<span class="sourceLineNo">8488</span> * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.8488"></a>
+<span class="sourceLineNo">8489</span> */<a name="line.8489"></a>
+<span class="sourceLineNo">8490</span> private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.8490"></a>
+<span class="sourceLineNo">8491</span> throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.8491"></a>
+<span class="sourceLineNo">8492</span> if (this.closing.get()) {<a name="line.8492"></a>
+<span class="sourceLineNo">8493</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8493"></a>
+<span class="sourceLineNo">8494</span> }<a name="line.8494"></a>
+<span class="sourceLineNo">8495</span> if (writeLockNeeded) lock(lock.writeLock());<a name="line.8495"></a>
+<span class="sourceLineNo">8496</span> else lock(lock.readLock());<a name="line.8496"></a>
+<span class="sourceLineNo">8497</span> if (this.closed.get()) {<a name="line.8497"></a>
+<span class="sourceLineNo">8498</span> if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8498"></a>
+<span class="sourceLineNo">8499</span> else lock.readLock().unlock();<a name="line.8499"></a>
+<span class="sourceLineNo">8500</span> throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8500"></a>
+<span class="sourceLineNo">8501</span> }<a name="line.8501"></a>
+<span class="sourceLineNo">8502</span> }<a name="line.8502"></a>
+<span class="sourceLineNo">8503</span><a name="line.8503"></a>
+<span class="sourceLineNo">8504</span> /**<a name="line.8504"></a>
+<span class="sourceLineNo">8505</span> * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8505"></a>
+<span class="sourceLineNo">8506</span> * to the try block of #startRegionOperation<a name="line.8506"></a>
+<span class="sourceLineNo">8507</span> */<a name="line.8507"></a>
+<span class="sourceLineNo">8508</span> private void closeBulkRegionOperation(){<a name="line.8508"></a>
+<span class="sourceLineNo">8509</span> if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8509"></a>
+<span class="sourceLineNo">8510</span> else lock.readLock().unlock();<a name="line.8510"></a>
+<span class="sourceLineNo">8511</span> }<a name="line.8511"></a>
+<span class="sourceLineNo">8512</span><a name="line.8512"></a>
+<span class="sourceLineNo">8513</span> /**<a name="line.8513"></a>
+<span class="sourceLineNo">8514</span> * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8514"></a>
+<span class="sourceLineNo">8515</span> * These information are exposed by the region server metrics.<a name="line.8515"></a>
+<span class="sourceLineNo">8516</span> */<a name="line.8516"></a>
+<span class="sourceLineNo">8517</span> private void recordMutationWithoutWal(final Map<byte [], List<Cell>> familyMap) {<a name="line.8517"></a>
+<span class="sourceLineNo">8518</span> numMutationsWithoutWAL.increment();<a name="line.8518"></a>
+<span class="sourceLineNo">8519</span> if (numMutationsWithoutWAL.sum() <= 1) {<a name="line.8519"></a>
+<span class="sourceLineNo">8520</span> LOG.info("writing data to region " + this +<a name="line.8520"></a>
+<span class="sourceLineNo">8521</span> " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8521"></a>
+<span class="sourceLineNo">8522</span> }<a name="line.8522"></a>
+<span class="sourceLineNo">8523</span><a name="line.8523"></a>
+<span class="sourceLineNo">8524</span> long mutationSize = 0;<a name="line.8524"></a>
+<span class="sourceLineNo">8525</span> for (List<Cell> cells: familyMap.values()) {<a name="line.8525"></a>
+<span class="sourceLineNo">8526</span> // Optimization: 'foreach' loop is not used. See:<a name="line.8526"></a>
+<span class="sourceLineNo">8527</span> // HBASE-12023 HRegion.applyFamilyMapToMemstore creates too many iterator objects<a name="line.8527"></a>
+<span class="sourceLineNo">8528</span> assert cells instanceof RandomAccess;<a name="line.8528"></a>
+<span class="sourceLineNo">8529</span> int listSize = cells.size();<a name="line.8529"></a>
+<span class="sourceLineNo">8530</span> for (int i=0; i < listSize; i++) {<a name="line.8530"></a>
+<span class="sourceLineNo">8531</span> Cell cell = cells.get(i);<a name="line.8531"></a>
+<span class="sourceLineNo">8532</span> mutationSize += cell.getSerializedSize();<a name="line.8532"></a>
+<span class="sourceLineNo">8533</span> }<a name="line.8533"></a>
+<span class="sourceLineNo">8534</span> }<a name="line.8534"></a>
+<span class="sourceLineNo">8535</span><a name="line.8535"></a>
+<span class="sourceLineNo">8536</span> dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8536"></a>
+<span class="sourceLineNo">8537</span> }<a name="line.8537"></a>
+<span class="sourceLineNo">8538</span><a name="line.8538"></a>
+<span class="sourceLineNo">8539</span> private void lock(final Lock lock) throws RegionTooBusyException, InterruptedIOException {<a name="line.8539"></a>
+<span class="sourceLineNo">8540</span> lock(lock, 1);<a name="line.8540"></a>
+<span class="sourceLineNo">8541</span> }<a name="line.8541"></a>
+<span class="sourceLineNo">8542</span><a name="line.8542"></a>
+<span class="sourceLineNo">8543</span> /**<a name="line.8543"></a>
+<span class="sourceLineNo">8544</span> * Try to acquire a lock. Throw RegionTooBusyException<a name="line.8544"></a>
+<span class="sourceLineNo">8545</span> * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8545"></a>
+<span class="sourceLineNo">8546</span> * if interrupted while waiting for the lock.<a name="line.8546"></a>
+<span class="sourceLineNo">8547</span> */<a name="line.8547"></a>
+<span class="sourceLineNo">8548</span> private void lock(final Lock lock, final int multiplier)<a name="line.8548"></a>
+<span class="sourceLineNo">8549</span> throws RegionTooBusyException, InterruptedIOException {<a name="line.8549"></a>
+<span class="sourceLineNo">8550</span> try {<a name="line.8550"></a>
+<span class="sourceLineNo">8551</span> final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8551"></a>
+<span class="sourceLineNo">8552</span> busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8552"></a>
+<span class="sourceLineNo">8553</span> if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8553"></a>
+<span class="sourceLineNo">8554</span> // Don't print millis. Message is used as a key over in<a name="line.8554"></a>
+<span class="sourceLineNo">8555</span> // RetriesExhaustedWithDetailsException processing.<a name="line.8555"></a>
+<span class="sourceLineNo">8556</span> throw new RegionTooBusyException("Failed to obtain lock; regionName=" +<a name="line.8556"></a>
+<span class="sourceLineNo">8557</span> (this.getRegionInfo() == null? "unknown":<a name="line.8557"></a>
+<span class="sourceLineNo">8558</span> this.getRegionInfo().getRegionNameAsString()) +<a name="line.8558"></a>
+<span class="sourceLineNo">8559</span> ", server=" + (this.getRegionServerServices() == null? "unknown":<a name="line.8559"></a>
+<span class="sourceLineNo">8560</span> this.getRegionServerServices().getServerName()));<a name="line.8560"></a>
+<span class="sourceLineNo">8561</span> }<a name="line.8561"></a>
+<span class="sourceLineNo">8562</span> } catch (InterruptedException ie) {<a name="line.8562"></a>
+<span class="sourceLineNo">8563</span> LOG.info("Interrupted while waiting for a lock");<a name="line.8563"></a>
+<span class="sourceLineNo">8564</span> InterruptedIOException iie = new InterruptedIOException();<a name="line.8564"></a>
+<span class="sourceLineNo">8565</span> iie.initCause(ie);<a name="line.8565"></a>
+<span class="sourceLineNo">8566</span> throw iie;<a name="line.8566"></a>
+<span class="sourceLineNo">8567</span> }<a name="line.8567"></a>
+<span class="sourceLineNo">8568</span> }<a name="line.8568"></a>
+<span class="sourceLineNo">8569</span><a name="line.8569"></a>
+<span class="sourceLineNo">8570</span> /**<a name="line.8570"></a>
+<span class="sourceLineNo">8571</span> * Calls sync with the given transaction ID<a name="line.8571"></a>
+<span class="sourceLineNo">8572</span> * @param txid should sync up to which transaction<a name="line.8572"></a>
+<span class="sourceLineNo">8573</span> * @throws IOException If anything goes wrong with DFS<a name="line.8573"></a>
+<span class="sourceLineNo">8574</span> */<a name="line.8574"></a>
+<span class="sourceLineNo">8575</span> private void sync(long txid, Durability durability) throws IOException {<a name="line.8575"></a>
+<span class="sourceLineNo">8576</span> if (this.getRegionInfo().isMetaRegion()) {<a name="line.8576"></a>
+<span class="sourceLineNo">8577</span> this.wal.sync(txid);<a name="line.8577"></a>
+<span class="sourceLineNo">8578</span> } else {<a name="line.8578"></a>
+<span class="sourceLineNo">8579</span> switch(durability) {<a name="line.8579"></a>
+<span class="sourceLineNo">8580</span> case USE_DEFAULT:<a name="line.8580"></a>
+<span class="sourceLineNo">8581</span> // do what table defaults to<a name="line.8581"></a>
+<span class="sourceLineNo">8582</span> if (shouldSyncWAL()) {<a name="line.8582"></a>
+<span class="sourceLineNo">8583</span> this.wal.sync(txid);<a name="line.8583"></a>
+<span class="sourceLineNo">8584</span> }<a name="line.8584"></a>
+<span class="sourceLineNo">8585</span> break;<a name="line.8585"></a>
+<span class="sourceLineNo">8586</span> case SKIP_WAL:<a name="line.8586"></a>
+<span class="sourceLineNo">8587</span> // nothing do to<a name="line.8587"></a>
+<span class="sourceLineNo">8588</span> break;<a name="line.8588"></a>
+<span class="sourceLineNo">8589</span> case ASYNC_WAL:<a name="line.8589"></a>
+<span class="sourceLineNo">8590</span> // nothing do to<a name="line.8590"></a>
+<span class="sourceLineNo">8591</span> break;<a name="line.8591"></a>
+<span class="sourceLineNo">8592</span> case SYNC_WAL:<a name="line.8592"></a>
+<span class="sourceLineNo">8593</span> this.wal.sync(txid, false);<a name="line.8593"></a>
+<span class="sourceLineNo">8594</span> break;<a name="line.8594"></a>
+<span class="sourceLineNo">8595</span> case FSYNC_WAL:<a name="line.8595"></a>
+<span class="sourceLineNo">8596</span> this.wal.sync(txid, true);<a name="line.8596"></a>
+<span class="sourceLineNo">8597</span> break;<a name="line.8597"></a>
+<span class="sourceLineNo">8598</span> default:<a name="line.8598"></a>
+<span class="sourceLineNo">8599</span> throw new RuntimeException("Unknown durability " + durability);<a name="line.8599"></a>
+<span class="sourceLineNo">8600</span> }<a name="line.8600"></a>
+<span class="sourceLineNo">8601</span> }<a name="line.8601"></a>
+<span class="sourceLineNo">8602</span> }<a name="line.8602"></a>
+<span class="sourceLineNo">8603</span><a name="line.8603"></a>
+<span class="sourceLineNo">8604</span> /**<a name="line.8604"></a>
+<span class="sourceLineNo">8605</span> * Check whether we should sync the wal from the table's durability settings<a name="line.8605"></a>
+<span class="sourceLineNo">8606</span> */<a name="line.8606"></a>
+<span class="sourceLineNo">8607</span> private boolean shouldSyncWAL() {<a name="line.8607"></a>
+<span class="sourceLineNo">8608</span> return regionDurability.ordinal() > Durability.ASYNC_WAL.ordinal();<a name="line.8608"></a>
+<span class="sourceLineNo">8609</span> }<a name="line.8609"></a>
+<span class="sourceLineNo">8610</span><a name="line.8610"></a>
+<span class="sourceLineNo">8611</span> /**<a name="line.8611"></a>
+<span class="sourceLineNo">8612</span> * A mocked list implementation - discards all updates.<a name="line.8612"></a>
+<span class="sourceLineNo">8613</span> */<a name="line.8613"></a>
+<span class="sourceLineNo">8614</span> private static final List<Cell> MOCKED_LIST = new AbstractList<Cell>() {<a name="line.8614"></a>
+<span class="sourceLineNo">8615</span><a name="line.8615"></a>
+<span class="sourceLineNo">8616</span> @Override<a name="line.8616"></a>
+<span class="sourceLineNo">8617</span> public void add(int index, Cell element) {<a name="line.8617"></a>
+<span class="sourceLineNo">8618</span> // do nothing<a name="line.8618"></a>
+<span class="sourceLineNo">8619</span> }<a name="line.8619"></a>
+<span class="sourceLineNo">8620</span><a name="line.8620"></a>
+<span class="sourceLineNo">8621</span> @Override<a name="line.8621"></a>
+<span class="sourceLineNo">8622</span> public boolean addAll(int index, Collection<? extends Cell> c) {<a name="line.8622"></a>
+<span class="sourceLineNo">8623</span> return false; // this list is never changed as a result of an update<a name="line.8623"></a>
+<span class="sourceLineNo">8624</span> }<a name="line.8624"></a>
+<span class="sourceLineNo">8625</span><a name="line.8625"></a>
+<span class="sourceLineNo">8626</span> @Override<a name="line.8626"></a>
+<span class="sourceLineNo">8627</span> public KeyValue get(int index) {<a name="line.8627"></a>
+<span class="sourceLineNo">8628</span> throw new UnsupportedOperationException();<a name="line.8628"></a>
+<span class="sourceLineNo">8629</span> }<a name="line.8629"></a>
+<span class="sourceLineNo">8630</span><a name="line.8630"></a>
+<span class="sourceLineNo">8631</span> @Override<a name="line.8631"></a>
+<span class="sourceLineNo">8632</span> public int size() {<a name="line.8632"></a>
+<span class="sourceLineNo">8633</span> return 0;<a name="line.8633"></a>
+<span class="sourceLineNo">8634</span> }<a name="line.8634"></a>
+<span class="sourceLineNo">8635</span> };<a name="line.8635"></a>
+<span class="sourceLineNo">8636</span><a name="line.8636"></a>
+<span class="sourceLineNo">8637</span> /** @return the latest sequence number that was read from storage when this region was opened */<a name="line.8637"></a>
+<span class="sourceLineNo">8638</span> public long getOpenSeqNum() {<a name="line.8638"></a>
+<span class="sourceLineNo">8639</span> return this.openSeqNum;<a name="line.8639"></a>
+<span class="sourceLineNo">8640</span> }<a name="line.8640"></a>
+<span class="sourceLineNo">8641</span><a name="line.8641"></a>
+<span class="sourceLineNo">8642</span> @Override<a name="line.8642"></a>
+<span class="sourceLineNo">8643</span> public Map<byte[], Long> getMaxStoreSeqId() {<a name="line.8643"></a>
+<span class="sourceLineNo">8644</span> return this.maxSeqIdInStores;<a name="line.8644"></a>
+<span class="sourceLineNo">8645</span> }<a name="line.8645"></a>
+<span class="sourceLineNo">8646</span><a name="line.8646"></a>
+<span class="sourceLineNo">8647</span> public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8647"></a>
+<span class="sourceLineNo">8648</span> return wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8648"></a>
+<span class="sourceLineNo">8649</span> }<a name="line.8649"></a>
+<span class="sourceLineNo">8650</span><a name="line.8650"></a>
+<span class="sourceLineNo">8651</span> @Override<a name="line.8651"></a>
+<span class="sourceLineNo">8652</span> public CompactionState getCompactionState() {<a name="line.8652"></a>
+<span class="sourceLineNo">8653</span> boolean hasMajor = majorInProgress.get() > 0, hasMinor = minorInProgress.get() > 0;<a name="line.8653"></a>
+<span class="sourceLineNo">8654</span> return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8654"></a>
+<span class="sourceLineNo">8655</span> : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8655"></a>
+<span class="sourceLineNo">8656</span> }<a name="line.8656"></a>
+<span class="sourceLineNo">8657</span><a name="line.8657"></a>
+<span class="sourceLineNo">8658</span> public void reportCompactionRequestStart(boolean isMajor){<a name="line.8658"></a>
+<span class="sourceLineNo">8659</span> (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8659"></a>
+<span class="sourceLineNo">8660</span> }<a name="line.8660"></a>
<span class="sourceLineNo">8661</span><a name="line.8661"></a>
-<span class="sourceLineNo">8662</span> assert newValue >= 0;<a name="line.8662"></a>
-<span class="sourceLineNo">8663</span> }<a name="line.8663"></a>
+<span class="sourceLineNo">8662</span> public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8662"></a>
+<span class="sourceLineNo">8663</span> int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8663"></a>
<span class="sourceLineNo">8664</span><a name="line.8664"></a>
-<span class="sourceLineNo">8665</span> public void reportCompactionRequestFailure() {<a name="line.8665"></a>
-<span class="sourceLineNo">8666</span> compactionsFailed.increment();<a name="line.8666"></a>
-<span class="sourceLineNo">8667</span> }<a name="line.8667"></a>
-<span class="sourceLineNo">8668</span><a name="line.8668"></a>
-<span class="sourceLineNo">8669</span> public void incrementCompactionsQueuedCount() {<a name="line.8669"></a>
-<span class="sourceLineNo">8670</span> compactionsQueued.increment();<a name="line.8670"></a>
+<span class="sourceLineNo">8665</span> // metrics<a name="line.8665"></a>
+<span class="sourceLineNo">8666</span> compactionsFinished.increment();<a name="line.8666"></a>
+<span class="sourceLineNo">8667</span> compactionNumFilesCompacted.add(numFiles);<a name="line.8667"></a>
+<span class="sourceLineNo">8668</span> compactionNumBytesCompacted.add(filesSizeCompacted);<a name="line.8668"></a>
+<span class="sourceLineNo">8669</span><a name="line.8669"></a>
+<span class="sourceLineNo">8670</span> assert newValue >= 0;<a name="line.8670"></a>
<span class="sourceLineNo">8671</span> }<a name="line.8671"></a>
<span class="sourceLineNo">8672</span><a name="line.8672"></a>
-<span class="sourceLineNo">8673</span> public void decrementCompactionsQueuedCount() {<a name="line.8673"></a>
-<span class="sourceLineNo">8674</span> compactionsQueued.decrement();<a name="line.8674"></a>
+<span class="sourceLineNo">8673</span> public void reportCompactionRequestFailure() {<a name="line.8673"></a>
+<span class="sourceLineNo">8674</span> compactionsFailed.increment();<a name="line.8674"></a>
<span class="sourceLineNo">8675</span> }<a name="line.8675"></a>
<span class="sourceLineNo">8676</span><a name="line.8676"></a>
-<span class="sourceLineNo">8677</span> public void incrementFlushesQueuedCount() {<a name="line.8677"></a>
-<span class="sourceLineNo">8678</span> flushesQueued.increment();<a name="line.8678"></a>
+<span class="sourceLineNo">8677</span> public void incrementCompactionsQueuedCount() {<a name="line.8677"></a>
+<span class="sourceLineNo">8678</span> compactionsQueued.increment();<a name="line.8678"></a>
<span class="sourceLineNo">8679</span> }<a name="line.8679"></a>
<span class="sourceLineNo">8680</span><a name="line.8680"></a>
-<span class="sourceLineNo">8681</span> @VisibleForTesting<a name="line.8681"></a>
-<span class="sourceLineNo">8682</span> public long getReadPoint() {<a name="line.8682"></a>
-<span class="sourceLineNo">8683</span> return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8683"></a>
-<span class="sourceLineNo">8684</span> }<a name="line.8684"></a>
-<span class="sourceLineNo">8685</span><a name="line.8685"></a>
-<span class="sourceLineNo">8686</span> /**<a name="line.8686"></a>
-<span class="sourceLineNo">8687</span> * {@inheritDoc}<a name="line.8687"></a>
-<span class="sourceLineNo">8688</span> */<a name="line.8688"></a>
-<span class="sourceLineNo">8689</span> @Override<a name="line.8689"></a>
-<span class="sourceLineNo">8690</span> public void onConfigurationChange(Configuration conf) {<a name="line.8690"></a>
-<span class="sourceLineNo">8691</span> this.storeHotnessProtector.update(conf);<a name="line.8691"></a>
+<span class="sourceLineNo">8681</span> public void decrementCompactionsQueuedCount() {<a name="line.8681"></a>
+<span class="sourceLineNo">8682</span> compactionsQueued.decrement();<a name="line.8682"></a>
+<span class="sourceLineNo">8683</span> }<a name="line.8683"></a>
+<span class="sourceLineNo">8684</span><a name="line.8684"></a>
+<span class="sourceLineNo">8685</span> public void incrementFlushesQueuedCount() {<a name="line.8685"></a>
+<span class="sourceLineNo">8686</span> flushesQueued.increment();<a name="line.8686"></a>
+<span class="sourceLineNo">8687</span> }<a name="line.8687"></a>
+<span class="sourceLineNo">8688</span><a name="line.8688"></a>
+<span class="sourceLineNo">8689</span> @VisibleForTesting<a name="line.8689"></a>
+<span class="sourceLineNo">8690</span> public long getReadPoint() {<a name="line.8690"></a>
+<span class="sourceLineNo">8691</span> return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8691"></a>
<span class="sourceLineNo">8692</span> }<a name="line.8692"></a>
<span class="sourceLineNo">8693</span><a name="line.8693"></a>
<span class="sourceLineNo">8694</span> /**<a name="line.8694"></a>
<span class="sourceLineNo">8695</span> * {@inheritDoc}<a name="line.8695"></a>
<span class="sourceLineNo">8696</span> */<a name="line.8696"></a>
<span class="sourceLineNo">8697</span> @Override<a name="line.8697"></a>
-<span class="sourceLineNo">8698</span> public void registerChildren(ConfigurationManager manager) {<a name="line.8698"></a>
-<span class="sourceLineNo">8699</span> configurationManager = Optional.of(manager);<a name="line.8699"></a>
-<span class="sourceLineNo">8700</span> stores.values().forEach(manager::registerObserver);<a name="line.8700"></a>
-<span class="sourceLineNo">8701</span> }<a name="line.8701"></a>
-<span class="sourceLineNo">8702</span><a name="line.8702"></a>
-<span class="sourceLineNo">8703</span> /**<a name="line.8703"></a>
-<span class="sourceLineNo">8704</span> * {@inheritDoc}<a name="line.8704"></a>
-<span class="sourceLineNo">8705</span> */<a name="line.8705"></a>
-<span class="sourceLineNo">8706</span> @Override<a name="line.8706"></a>
-<span class="sourceLineNo">8707</span> public void deregisterChildren(ConfigurationManager manager) {<a name="line.8707"></a>
-<span class="sourceLineNo">8708</span> stores.values().forEach(configurationManager.get()::deregisterObserver);<a name="line.8708"></a>
+<span class="sourceLineNo">8698</span> public void onConfigurationChange(Configuration conf) {<a name="line.8698"></a>
+<span class="sourceLineNo">8699</span> this.storeHotnessProtector.update(conf);<a name="line.8699"></a>
+<span class="sourceLineNo">8700</span> }<a name="line.8700"></a>
+<span class="sourceLineNo">8701</span><a name="line.8701"></a>
+<span class="sourceLineNo">8702</span> /**<a name="line.8702"></a>
+<span class="sourceLineNo">8703</span> * {@inheritDoc}<a name="line.8703"></a>
+<span class="sourceLineNo">8704</span> */<a name="line.8704"></a>
+<span class="sourceLineNo">8705</span> @Override<a name="line.8705"></a>
+<span class="sourceLineNo">8706</span> public void registerChildren(ConfigurationManager manager) {<a name="line.8706"></a>
+<span class="sourceLineNo">8707</span> configurationManager = Optional.of(manager);<a name="line.8707"></a>
+<span class="sourceLineNo">8708</span> stores.values().forEach(manager::registerObserver);<a name="line.8708"></a>
<span class="sourceLineNo">8709</span> }<a name="line.8709"></a>
<span class="sourceLineNo">8710</span><a name="line.8710"></a>
-<span class="sourceLineNo">8711</span> @Override<a name="line.8711"></a>
-<span class="sourceLineNo">8712</span> public CellComparator getCellComparator() {<a name="line.8712"></a>
-<span class="sourceLineNo">8713</span> return this.getRegionInfo().isMetaRegion() ? CellComparatorImpl.META_COMPARATOR<a name="line.8713"></a>
-<span class="sourceLineNo">8714</span> : CellComparatorImpl.COMPARATOR;<a name="line.8714"></a>
-<span class="sourceLineNo">8715</span> }<a name="line.8715"></a>
-<span class="sourceLineNo">8716</span><a name="line.8716"></a>
-<span class="sourceLineNo">8717</span> public long getMemStoreFlushSize() {<a name="line.8717"></a>
-<span class="sourceLineNo">8718</span> return this.memstoreFlushSize;<a name="line.8718"></a>
-<span class="sourceLineNo">8719</span> }<a name="line.8719"></a>
-<span class="sourceLineNo">8720</span><a name="line.8720"></a>
-<span class="sourceLineNo">8721</span><a name="line.8721"></a>
-<span class="sourceLineNo">8722</span> //// method for debugging tests<a name="line.8722"></a>
-<span class="sourceLineNo">8723</span> void throwException(String title, String regionName) {<a name="line.8723"></a>
-<span class="sourceLineNo">8724</span> StringBuilder buf = new StringBuilder();<a name="line.8724"></a>
-<span class="sourceLineNo">8725</span> buf.append(title + ", ");<a name="line.8725"></a>
-<span class="sourceLineNo">8726</span> buf.append(getRegionInfo().toString());<a name="line.8726"></a>
-<span class="sourceLineNo">8727</span> buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8727"></a>
-<span class="sourceLineNo">8728</span> buf.append("stores: ");<a name="line.8728"></a>
-<span class="sourceLineNo">8729</span> for (HStore s : stores.values()) {<a name="line.8729"></a>
-<span class="sourceLineNo">8730</span> buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8730"></a>
-<span class="sourceLineNo">8731</span> buf.append(" size: ");<a name="line.8731"></a>
-<span class="sourceLineNo">8732</span> buf.append(s.getMemStoreSize().getDataSize());<a name="line.8732"></a>
-<span class="sourceLineNo">8733</span> buf.append(" ");<a name="line.8733"></a>
-<span class="sourceLineNo">8734</span> }<a name="line.8734"></a>
-<span class="sourceLineNo">8735</span> buf.append("end-of-stores");<a name="line.8735"></a>
-<span class="sourceLineNo">8736</span> buf.append(", memstore size ");<a name="line.8736"></a>
-<span class="sourceLineNo">8737</span> buf.append(getMemStoreDataSize());<a name="line.8737"></a>
-<span class="sourceLineNo">8738</span> if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8738"></a>
-<span class="sourceLineNo">8739</span> throw new RuntimeException(buf.toString());<a name="line.8739"></a>
-<span class="sourceLineNo">8740</span> }<a name="line.8740"></a>
-<span class="sourceLineNo">8741</span> }<a name="line.8741"></a>
-<span class="sourceLineNo">8742</span><a name="line.8742"></a>
-<span class="sourceLineNo">8743</span> @Override<a name="line.8743"></a>
-<span class="sourceLineNo">8744</span> public void requestCompaction(String why, int priority, boolean major,<a name="line.8744"></a>
-<span class="sourceLineNo">8745</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8745"></a>
-<span class="sourceLineNo">8746</span> if (major) {<a name="line.8746"></a>
-<span class="sourceLineNo">8747</span> stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.8747"></a>
+<span class="sourceLineNo">8711</span> /**<a name="line.8711"></a>
+<span class="sourceLineNo">8712</span> * {@inheritDoc}<a name="line.8712"></a>
+<span class="sourceLineNo">8713</span> */<a name="line.8713"></a>
+<span class="sourceLineNo">8714</span> @Override<a name="line.8714"></a>
+<span class="sourceLineNo">8715</span> public void deregisterChildren(ConfigurationManager manager) {<a name="line.8715"></a>
+<span class="sourceLineNo">8716</span> stores.values().forEach(configurationManager.get()::deregisterObserver);<a name="line.8716"></a>
+<span class="sourceLineNo">8717</span> }<a name="line.8717"></a>
+<span class="sourceLineNo">8718</span><a name="line.8718"></a>
+<span class="sourceLineNo">8719</span> @Override<a name="line.8719"></a>
+<span class="sourceLineNo">8720</span> public CellComparator getCellComparator() {<a name="line.8720"></a>
+<span class="sourceLineNo">8721</span> return this.getRegionInfo().isMetaRegion() ? CellComparatorImpl.META_COMPARATOR<a name="line.8721"></a>
+<span class="sourceLineNo">8722</span> : CellComparatorImpl.COMPARATOR;<a name="line.8722"></a>
+<span class="sourceLineNo">8723</span> }<a name="line.8723"></a>
+<span class="sourceLineNo">8724</span><a name="line.8724"></a>
+<span class="sourceLineNo">8725</span> public long getMemStoreFlushSize() {<a name="line.8725"></a>
+<span class="sourceLineNo">8726</span> return this.memstoreFlushSize;<a name="line.8726"></a>
+<span class="sourceLineNo">8727</span> }<a name="line.8727"></a>
+<span class="sourceLineNo">8728</span><a name="line.8728"></a>
+<span class="sourceLineNo">8729</span><a name="line.8729"></a>
+<span class="sourceLineNo">8730</span> //// method for debugging tests<a name="line.8730"></a>
+<span class="sourceLineNo">8731</span> void throwException(String title, String regionName) {<a name="line.8731"></a>
+<span class="sourceLineNo">8732</span> StringBuilder buf = new StringBuilder();<a name="line.8732"></a>
+<span class="sourceLineNo">8733</span> buf.append(title + ", ");<a name="line.8733"></a>
+<span class="sourceLineNo">8734</span> buf.append(getRegionInfo().toString());<a name="line.8734"></a>
+<span class="sourceLineNo">8735</span> buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8735"></a>
+<span class="sourceLineNo">8736</span> buf.append("stores: ");<a name="line.8736"></a>
+<span class="sourceLineNo">8737</span> for (HStore s : stores.values()) {<a name="line.8737"></a>
+<span class="sourceLineNo">8738</span> buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8738"></a>
+<span class="sourceLineNo">8739</span> buf.append(" size: ");<a name="line.8739"></a>
+<span class="sourceLineNo">8740</span> buf.append(s.getMemStoreSize().getDataSize());<a name="line.8740"></a>
+<span class="sourceLineNo">8741</span> buf.append(" ");<a name="line.8741"></a>
+<span class="sourceLineNo">8742</span> }<a name="line.8742"></a>
+<span class="sourceLineNo">8743</span> buf.append("end-of-stores");<a name="line.8743"></a>
+<span class="sourceLineNo">8744</span> buf.append(", memstore size ");<a name="line.8744"></a>
+<span class="sourceLineNo">8745</span> buf.append(getMemStoreDataSize());<a name="line.8745"></a>
+<span class="sourceLineNo">8746</span> if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8746"></a>
+<span class="sourceLineNo">8747</span> throw new RuntimeException(buf.toString());<a name="line.8747"></a>
<span class="sourceLineNo">8748</span> }<a name="line.8748"></a>
-<span class="sourceLineNo">8749</span> rsServices.getCompactionRequestor().requestCompaction(this, why, priority, tracker,<a name="line.8749"></a>
-<span class="sourceLineNo">8750</span> RpcServer.getRequestUser().orElse(null));<a name="line.8750"></a>
-<span class="sourceLineNo">8751</span> }<a name="line.8751"></a>
-<span class="sourceLineNo">8752</span><a name="line.8752"></a>
-<span class="sourceLineNo">8753</span> @Override<a name="line.8753"></a>
-<span class="sourceLineNo">8754</span> public void requestCompaction(byte[] family, String why, int priority, boolean major,<a name="line.8754"></a>
-<span class="sourceLineNo">8755</span> CompactionLifeCycleTracker tracker) throws IOException {<a name="line.8755"></a>
-<span class="sourceLineNo">8756</span> HStore store = stores.get(family);<a name="line.8756"></a>
-<span class="sourceLineNo">8757</span> if (store == null) {<a name="line.8757"></a>
-<span class="sourceLineNo">8758</span> throw new NoSuchColumnFamilyException("column family " + Bytes.toString(family) +<a name="line.8758"></a>
-<span class="sourceLineNo">8759</span> " does not exist in region " + getRegionInfo().getRegionNameAsString());<a name="line.8759"></a>
-<span class="sourceLineNo">8760</span> }<a name="line.8760"></a>
-<span class="sourceLineNo">8761</span> if (major) {<a name="line.8761"></a>
-<span class="sourceLineNo">8762</span> store.triggerMajorCompaction();<a name="line.8762"></a>
-<span class="sourceLineNo">8763</span> }<a name="line.8763"></a>
-<span class="sourceLineNo">8764</span> rsServices.getCompactionRequestor().requestCompaction(this, store, why, priority, tracker,<a name="line.8764"></a>
-<span class="sourceLineNo">8765</span> RpcServer.getRequestUser().orElse(null));<a name="line.8765"></a>
-<span class="sourceLineNo">8766</span> }<a name="line.8766"></a>
-<span class="sourceLineNo">8767</span><a name="line.8767"></a>
-<span class="sourceLineNo">8768</span> private void requestFlushIfNeeded() throws RegionTooBusyException {<a name="line.8768"></a>
-<span class="sourceLineNo">8769</span> if(isFlushSize(this.memStoreSizing.getMemStoreSize())) {<a name="line.8769"></a>
... 24101 lines suppressed ...