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 2025/04/11 14:47:23 UTC
(hbase-site) branch asf-site updated: Published site at 0b3c17302843d1f4d6f3c6b458f837cb9c274510.
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 1cb5dddb2ea Published site at 0b3c17302843d1f4d6f3c6b458f837cb9c274510.
1cb5dddb2ea is described below
commit 1cb5dddb2eaaeb2c68b5cd45726394772a0f584b
Author: jenkins <bu...@apache.org>
AuthorDate: Fri Apr 11 14:47:09 2025 +0000
Published site at 0b3c17302843d1f4d6f3c6b458f837cb9c274510.
---
acid-semantics.html | 2 +-
apache_hbase_reference_guide.pdf | 3266 ++++++++++----------
apidocs/index-all.html | 4 +
apidocs/member-search-index.js | 2 +-
.../AsyncAdminRequestRetryingCaller.Callable.html | 110 +-
.../client/AsyncAdminRequestRetryingCaller.html | 110 +-
.../hadoop/hbase/rest/RowResultGenerator.html | 123 +-
.../org/apache/hadoop/hbase/rest/RowSpec.html | 769 ++---
.../hadoop/hbase/rest/ScannerResultGenerator.html | 226 +-
book.html | 6 +-
bulk-loads.html | 2 +-
checkstyle-aggregate.html | 6 +-
coc.html | 2 +-
dependencies.html | 2 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 8 +-
devapidocs/index-all.html | 6 +
devapidocs/member-search-index.js | 2 +-
.../AsyncAdminRequestRetryingCaller.Callable.html | 4 +-
.../client/AsyncAdminRequestRetryingCaller.html | 25 +-
.../hadoop/hbase/rest/RowResultGenerator.html | 10 +-
.../org/apache/hadoop/hbase/rest/RowSpec.html | 114 +-
.../hadoop/hbase/rest/ScannerResultGenerator.html | 12 +-
.../AsyncAdminRequestRetryingCaller.Callable.html | 110 +-
.../client/AsyncAdminRequestRetryingCaller.html | 110 +-
.../AsyncNonMetaRegionLocator.LocateRequest.html | 2 +-
...aRegionLocator.RegionLocationsFutureResult.html | 2 +-
.../AsyncNonMetaRegionLocator.TableCache.html | 2 +-
.../hbase/client/AsyncNonMetaRegionLocator.html | 2 +-
.../hadoop/hbase/rest/RowResultGenerator.html | 123 +-
.../org/apache/hadoop/hbase/rest/RowSpec.html | 769 ++---
.../hadoop/hbase/rest/ScannerResultGenerator.html | 226 +-
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 +-
...estCatalogReplicaLoadBalanceSimpleSelector.html | 4 +-
...estCatalogReplicaLoadBalanceSimpleSelector.html | 4 +-
56 files changed, 3173 insertions(+), 3038 deletions(-)
diff --git a/acid-semantics.html b/acid-semantics.html
index bc1e04be68a..d2ee1220546 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -469,7 +469,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 6c2fdf6eb0c..8139f9adb34 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
/Producer (Apache HBase Team)
-/ModDate (D:20250410143001+00'00')
-/CreationDate (D:20250410144400+00'00')
+/ModDate (D:20250411143001+00'00')
+/CreationDate (D:20250411144339+00'00')
>>
endobj
2 0 obj
@@ -1146035,10 +1146035,7 @@ endobj
endobj
4441 0 obj
<< /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (hbase.rpc)
->>
+/Dest (hbase.rpc)
/Subtype /Link
/Rect [292.68077 718.58 317.07227 732.86]
/Type /Annot
@@ -1146054,10 +1146051,7 @@ endobj
endobj
4443 0 obj
<< /Border [0 0 0]
-/A << /Type /Action
-/S /URI
-/URI (shaded.protobuf)
->>
+/Dest (shaded.protobuf)
/Subtype /Link
/Rect [74.3745 252.08 129.8355 266.36]
/Type /Annot
@@ -1336092,1636 +1336086,1636 @@ xref
0016248652 00000 n
0016248700 00000 n
0016248896 00000 n
-0016249054 00000 n
-0016249169 00000 n
-0016249330 00000 n
-0016249378 00000 n
-0016273235 00000 n
-0016273596 00000 n
-0016273645 00000 n
-0016292283 00000 n
-0016292631 00000 n
-0016297755 00000 n
-0016298103 00000 n
-0016303602 00000 n
-0016304006 00000 n
-0016304054 00000 n
-0016304248 00000 n
-0016304428 00000 n
-0016304661 00000 n
-0016321569 00000 n
-0016321957 00000 n
-0016322005 00000 n
-0016333117 00000 n
-0016333478 00000 n
-0016333526 00000 n
-0016333574 00000 n
-0016333622 00000 n
-0016333670 00000 n
-0016341012 00000 n
-0016341405 00000 n
-0016341453 00000 n
-0016341689 00000 n
-0016344491 00000 n
-0016344852 00000 n
-0016344900 00000 n
-0016349957 00000 n
-0016350318 00000 n
-0016350366 00000 n
-0016352067 00000 n
-0016352415 00000 n
-0016352463 00000 n
-0016355591 00000 n
-0016355939 00000 n
-0016355987 00000 n
-0016363458 00000 n
-0016363819 00000 n
-0016363867 00000 n
-0016372332 00000 n
-0016372706 00000 n
-0016372754 00000 n
-0016372802 00000 n
-0016373287 00000 n
-0016373335 00000 n
-0016375664 00000 n
-0016376040 00000 n
-0016376088 00000 n
-0016376306 00000 n
-0016376540 00000 n
-0016378871 00000 n
-0016379232 00000 n
-0016379280 00000 n
-0016390607 00000 n
-0016391018 00000 n
-0016391066 00000 n
-0016391263 00000 n
-0016391460 00000 n
-0016391581 00000 n
-0016397916 00000 n
-0016398277 00000 n
-0016398325 00000 n
-0016447905 00000 n
-0016448279 00000 n
-0016448327 00000 n
-0016448375 00000 n
-0016491053 00000 n
-0016491401 00000 n
-0016493296 00000 n
-0016493644 00000 n
-0016493692 00000 n
-0016494698 00000 n
-0016495046 00000 n
-0016495094 00000 n
-0016501261 00000 n
-0016501622 00000 n
-0016501670 00000 n
-0016501718 00000 n
-0016501766 00000 n
-0016504024 00000 n
-0016504372 00000 n
-0016504420 00000 n
-0016504468 00000 n
-0016504516 00000 n
-0016504564 00000 n
-0016504612 00000 n
-0016528264 00000 n
-0016528653 00000 n
-0016528701 00000 n
-0016528896 00000 n
-0016529120 00000 n
-0016529168 00000 n
-0016548467 00000 n
-0016548873 00000 n
-0016548921 00000 n
-0016548977 00000 n
-0016549124 00000 n
-0016567786 00000 n
-0016568192 00000 n
-0016568417 00000 n
-0016582483 00000 n
-0016582903 00000 n
-0016582951 00000 n
-0016583157 00000 n
-0016583364 00000 n
-0016583593 00000 n
-0016583824 00000 n
-0016604046 00000 n
-0016604448 00000 n
-0016604496 00000 n
-0016604693 00000 n
-0016604889 00000 n
-0016604937 00000 n
-0016628185 00000 n
-0016628578 00000 n
-0016628626 00000 n
-0016628871 00000 n
-0016660410 00000 n
-0016660784 00000 n
-0016660832 00000 n
-0016680151 00000 n
-0016680512 00000 n
-0016741939 00000 n
-0016742300 00000 n
-0016742348 00000 n
-0016742396 00000 n
-0016797168 00000 n
-0016797529 00000 n
-0016797577 00000 n
-0016798190 00000 n
-0016798238 00000 n
-0016798286 00000 n
-0016799942 00000 n
-0016800323 00000 n
-0016800371 00000 n
-0016800569 00000 n
-0016800617 00000 n
-0016813248 00000 n
-0016813663 00000 n
-0016813711 00000 n
-0016813759 00000 n
-0016813982 00000 n
-0016814030 00000 n
-0016814227 00000 n
-0016819033 00000 n
-0016819394 00000 n
-0016819782 00000 n
-0016820130 00000 n
-0016820178 00000 n
-0016829888 00000 n
-0016830281 00000 n
-0016830329 00000 n
-0016830614 00000 n
-0016830663 00000 n
-0016830712 00000 n
-0016830761 00000 n
-0016870710 00000 n
-0016871108 00000 n
-0016871156 00000 n
-0016871204 00000 n
-0016871390 00000 n
-0016871578 00000 n
-0016871766 00000 n
-0016874915 00000 n
-0016875276 00000 n
-0016875324 00000 n
-0016875704 00000 n
-0016876052 00000 n
-0016876100 00000 n
-0016877986 00000 n
-0016878347 00000 n
-0016878395 00000 n
-0016899279 00000 n
-0016899653 00000 n
-0016899701 00000 n
-0016899749 00000 n
-0016899797 00000 n
-0016900309 00000 n
-0016925760 00000 n
-0016926121 00000 n
-0016926169 00000 n
-0016926217 00000 n
-0016967473 00000 n
-0016967834 00000 n
-0016967882 00000 n
-0017005463 00000 n
-0017005824 00000 n
-0017005872 00000 n
-0017005920 00000 n
-0017034154 00000 n
-0017034528 00000 n
-0017034576 00000 n
-0017034624 00000 n
-0017034672 00000 n
-0017047366 00000 n
-0017047740 00000 n
-0017047788 00000 n
-0017047836 00000 n
-0017047884 00000 n
-0017048593 00000 n
-0017048641 00000 n
-0017048689 00000 n
-0017056822 00000 n
-0017057209 00000 n
-0017060304 00000 n
-0017060678 00000 n
-0017060726 00000 n
-0017060774 00000 n
-0017062177 00000 n
-0017062525 00000 n
-0017062573 00000 n
-0017062621 00000 n
-0017063021 00000 n
-0017063369 00000 n
-0017063417 00000 n
-0017067538 00000 n
-0017067941 00000 n
-0017067989 00000 n
-0017068161 00000 n
-0017068359 00000 n
-0017068533 00000 n
-0017068745 00000 n
-0017068957 00000 n
-0017077280 00000 n
-0017077713 00000 n
-0017077761 00000 n
-0017077809 00000 n
-0017078025 00000 n
-0017078327 00000 n
-0017078375 00000 n
-0017078569 00000 n
-0017078827 00000 n
-0017079249 00000 n
-0017079597 00000 n
-0017079645 00000 n
-0017087061 00000 n
-0017087422 00000 n
-0017087470 00000 n
-0017093547 00000 n
-0017093908 00000 n
-0017093956 00000 n
-0017094004 00000 n
-0017094052 00000 n
-0017094100 00000 n
-0017120010 00000 n
-0017120397 00000 n
-0017120445 00000 n
-0017120493 00000 n
-0017120541 00000 n
-0017141186 00000 n
-0017141573 00000 n
-0017141621 00000 n
-0017142984 00000 n
-0017143332 00000 n
-0017143380 00000 n
-0017166914 00000 n
-0017167275 00000 n
-0017167323 00000 n
-0017189331 00000 n
-0017189692 00000 n
-0017189740 00000 n
-0017190148 00000 n
-0017190196 00000 n
-0017190244 00000 n
-0017190292 00000 n
-0017207029 00000 n
-0017207390 00000 n
-0017207438 00000 n
-0017207826 00000 n
-0017208174 00000 n
-0017208222 00000 n
-0017220784 00000 n
-0017221195 00000 n
-0017221243 00000 n
-0017222232 00000 n
-0017222409 00000 n
-0017222576 00000 n
-0017222699 00000 n
-0017222747 00000 n
-0017222795 00000 n
-0017242608 00000 n
-0017243016 00000 n
-0017243064 00000 n
-0017243287 00000 n
-0017265429 00000 n
-0017265840 00000 n
-0017265982 00000 n
-0017266030 00000 n
-0017266078 00000 n
-0017266126 00000 n
-0017266294 00000 n
-0017266479 00000 n
-0017296103 00000 n
-0017296501 00000 n
-0017296704 00000 n
-0017296907 00000 n
-0017297109 00000 n
-0017323507 00000 n
-0017323896 00000 n
-0017324096 00000 n
-0017324296 00000 n
-0017350432 00000 n
-0017350821 00000 n
-0017351020 00000 n
-0017351220 00000 n
-0017359647 00000 n
-0017360045 00000 n
-0017360253 00000 n
-0017360463 00000 n
-0017360672 00000 n
-0017384306 00000 n
-0017384708 00000 n
-0017384900 00000 n
-0017385092 00000 n
-0017403699 00000 n
-0017404092 00000 n
-0017404140 00000 n
-0017404271 00000 n
-0017404319 00000 n
-0017414750 00000 n
-0017415124 00000 n
-0017415172 00000 n
-0017415220 00000 n
-0017429188 00000 n
-0017429617 00000 n
-0017429665 00000 n
-0017429713 00000 n
-0017429841 00000 n
-0017430011 00000 n
-0017430139 00000 n
-0017430267 00000 n
-0017430395 00000 n
-0017430443 00000 n
-0017441886 00000 n
-0017442378 00000 n
-0017442427 00000 n
-0017442555 00000 n
-0017442604 00000 n
-0017442730 00000 n
-0017442861 00000 n
-0017442910 00000 n
-0017443035 00000 n
-0017443159 00000 n
-0017443293 00000 n
-0017443427 00000 n
-0017443564 00000 n
-0017443689 00000 n
-0017443827 00000 n
-0017443959 00000 n
-0017444008 00000 n
-0017444132 00000 n
-0017449326 00000 n
-0017449747 00000 n
-0017449795 00000 n
-0017449920 00000 n
-0017450041 00000 n
-0017450089 00000 n
-0017450214 00000 n
-0017450335 00000 n
-0017450383 00000 n
-0017450506 00000 n
-0017450629 00000 n
-0017450677 00000 n
-0017450802 00000 n
-0017459189 00000 n
-0017459550 00000 n
-0017459598 00000 n
-0017459647 00000 n
-0017459696 00000 n
-0017480237 00000 n
-0017480612 00000 n
-0017515599 00000 n
-0017515947 00000 n
-0017553857 00000 n
-0017554205 00000 n
-0017580078 00000 n
-0017580426 00000 n
-0017622219 00000 n
-0017622567 00000 n
-0017625763 00000 n
-0017626111 00000 n
-0017638121 00000 n
-0017638568 00000 n
-0017638616 00000 n
-0017638670 00000 n
-0017638819 00000 n
-0017638953 00000 n
-0017639090 00000 n
-0017639229 00000 n
-0017639370 00000 n
-0017639512 00000 n
-0017639692 00000 n
-0017652164 00000 n
-0017652572 00000 n
-0017652750 00000 n
-0017652936 00000 n
-0017653138 00000 n
-0017653359 00000 n
-0017653566 00000 n
-0017653763 00000 n
-0017653939 00000 n
-0017659745 00000 n
-0017660147 00000 n
-0017700804 00000 n
-0017728567 00000 n
-0017736653 00000 n
-0017737028 00000 n
-0017783069 00000 n
-0017801969 00000 n
-0017802375 00000 n
-0017802423 00000 n
-0017802702 00000 n
-0017802750 00000 n
-0017842521 00000 n
-0017842895 00000 n
-0017887400 00000 n
-0017887798 00000 n
-0017887991 00000 n
-0017888184 00000 n
-0017888395 00000 n
-0017914301 00000 n
-0017914681 00000 n
-0017914729 00000 n
-0017914777 00000 n
-0017914960 00000 n
-0017944654 00000 n
-0017945061 00000 n
-0017945239 00000 n
-0017945419 00000 n
-0017945602 00000 n
-0017945782 00000 n
-0017989826 00000 n
-0017990219 00000 n
-0017990415 00000 n
-0018022278 00000 n
-0018022707 00000 n
-0018022904 00000 n
-0018023041 00000 n
-0018023090 00000 n
-0018023295 00000 n
-0018023499 00000 n
-0018023643 00000 n
-0018023692 00000 n
-0018043216 00000 n
-0018043627 00000 n
-0018043762 00000 n
-0018043810 00000 n
-0018043944 00000 n
-0018044088 00000 n
-0018044137 00000 n
-0018044185 00000 n
-0018089859 00000 n
-0018090233 00000 n
-0018090282 00000 n
-0018090331 00000 n
-0018135221 00000 n
-0018135582 00000 n
-0018165176 00000 n
-0018165550 00000 n
-0018165598 00000 n
-0018166938 00000 n
-0018167314 00000 n
-0018167362 00000 n
-0018167410 00000 n
-0018167579 00000 n
-0018167627 00000 n
-0018167810 00000 n
-0018170810 00000 n
-0018171204 00000 n
-0018171252 00000 n
-0018171713 00000 n
-0018171899 00000 n
-0018172094 00000 n
-0018172272 00000 n
-0018172449 00000 n
-0018179918 00000 n
-0018180293 00000 n
-0018180341 00000 n
-0018180389 00000 n
-0018180437 00000 n
-0018181311 00000 n
-0018207198 00000 n
-0018211761 00000 n
-0018211810 00000 n
-0018211859 00000 n
-0018211908 00000 n
-0018212264 00000 n
-0018220013 00000 n
-0018220361 00000 n
-0018220409 00000 n
-0018267177 00000 n
-0018274494 00000 n
-0018274869 00000 n
-0018274918 00000 n
-0018285608 00000 n
-0018285969 00000 n
-0018286017 00000 n
-0018286065 00000 n
-0018299409 00000 n
-0018299770 00000 n
-0018299818 00000 n
-0018314242 00000 n
-0018314603 00000 n
-0018314651 00000 n
-0018314699 00000 n
-0018314747 00000 n
-0018315370 00000 n
-0018333388 00000 n
-0018333736 00000 n
-0018333784 00000 n
-0018334289 00000 n
-0018347000 00000 n
-0018347443 00000 n
-0018347491 00000 n
-0018347539 00000 n
-0018347680 00000 n
-0018347808 00000 n
-0018347959 00000 n
-0018348097 00000 n
-0018348145 00000 n
-0018348274 00000 n
-0018348322 00000 n
-0018348447 00000 n
-0018348495 00000 n
-0018348622 00000 n
-0018348837 00000 n
-0018359252 00000 n
-0018359632 00000 n
-0018359680 00000 n
-0018359816 00000 n
-0018366894 00000 n
-0018367382 00000 n
-0018367430 00000 n
-0018367478 00000 n
-0018367649 00000 n
-0018367839 00000 n
-0018367888 00000 n
-0018368138 00000 n
-0018368366 00000 n
-0018368611 00000 n
-0018368660 00000 n
-0018368854 00000 n
-0018369064 00000 n
-0018369277 00000 n
-0018369326 00000 n
-0018369519 00000 n
-0018369752 00000 n
-0018369937 00000 n
-0018369986 00000 n
-0018370179 00000 n
-0018370228 00000 n
-0018370622 00000 n
-0018370816 00000 n
-0018372977 00000 n
-0018373344 00000 n
-0018373392 00000 n
-0018373587 00000 n
-0018376981 00000 n
-0018377357 00000 n
-0018377405 00000 n
-0018377453 00000 n
-0018377639 00000 n
-0018377687 00000 n
-0018377881 00000 n
-0018381570 00000 n
-0018382009 00000 n
-0018382057 00000 n
-0018386317 00000 n
-0018386847 00000 n
-0018387042 00000 n
-0018387227 00000 n
-0018387421 00000 n
-0018387619 00000 n
-0018387814 00000 n
-0018388000 00000 n
-0018398613 00000 n
-0018399034 00000 n
-0018399082 00000 n
-0018399278 00000 n
-0018399500 00000 n
-0018399717 00000 n
-0018399933 00000 n
-0018400166 00000 n
-0018400214 00000 n
-0018400262 00000 n
-0018400310 00000 n
-0018400542 00000 n
-0018400777 00000 n
-0018400825 00000 n
-0018400873 00000 n
-0018414996 00000 n
-0018415383 00000 n
-0018415432 00000 n
-0018415481 00000 n
-0018415530 00000 n
-0018423684 00000 n
-0018424045 00000 n
-0018424094 00000 n
-0018424143 00000 n
-0018424192 00000 n
-0018424241 00000 n
-0018424290 00000 n
-0018436512 00000 n
-0018436899 00000 n
-0018436948 00000 n
-0018437549 00000 n
-0018437897 00000 n
-0018437945 00000 n
-0018450397 00000 n
-0018450760 00000 n
-0018450808 00000 n
-0018450856 00000 n
-0018450904 00000 n
-0018450952 00000 n
-0018450999 00000 n
-0018466056 00000 n
-0018466419 00000 n
-0018466467 00000 n
-0018466515 00000 n
-0018466563 00000 n
-0018467222 00000 n
-0018482347 00000 n
-0018482682 00000 n
-0018497787 00000 n
-0018498150 00000 n
-0018498198 00000 n
-0018498246 00000 n
-0018512224 00000 n
-0018512587 00000 n
-0018512635 00000 n
-0018512683 00000 n
-0018512731 00000 n
-0018526032 00000 n
-0018526395 00000 n
-0018526443 00000 n
-0018526491 00000 n
-0018526539 00000 n
-0018526587 00000 n
-0018540491 00000 n
-0018540854 00000 n
-0018540902 00000 n
-0018540950 00000 n
-0018540998 00000 n
-0018541046 00000 n
-0018541094 00000 n
-0018561566 00000 n
-0018561929 00000 n
-0018561977 00000 n
-0018562025 00000 n
-0018580482 00000 n
-0018580845 00000 n
-0018580893 00000 n
-0018580941 00000 n
-0018580989 00000 n
-0018594706 00000 n
-0018595054 00000 n
-0018595102 00000 n
-0018595150 00000 n
-0018595198 00000 n
-0018595246 00000 n
-0018595294 00000 n
-0018613903 00000 n
-0018614266 00000 n
-0018614314 00000 n
-0018627886 00000 n
-0018628249 00000 n
-0018628297 00000 n
-0018628345 00000 n
-0018628393 00000 n
-0018628441 00000 n
-0018643462 00000 n
-0018643825 00000 n
-0018643873 00000 n
-0018643921 00000 n
-0018643969 00000 n
-0018644017 00000 n
-0018657951 00000 n
-0018658314 00000 n
-0018658362 00000 n
-0018658410 00000 n
-0018658458 00000 n
-0018658506 00000 n
-0018658554 00000 n
-0018674736 00000 n
-0018675099 00000 n
-0018675147 00000 n
-0018675195 00000 n
-0018675243 00000 n
-0018675919 00000 n
-0018675967 00000 n
-0018676015 00000 n
-0018676063 00000 n
-0018691448 00000 n
-0018691811 00000 n
-0018691859 00000 n
-0018691907 00000 n
-0018691955 00000 n
-0018692003 00000 n
-0018706244 00000 n
-0018706607 00000 n
-0018706655 00000 n
-0018706703 00000 n
-0018706751 00000 n
-0018706799 00000 n
-0018725793 00000 n
-0018726156 00000 n
-0018726204 00000 n
-0018726252 00000 n
-0018726300 00000 n
-0018736413 00000 n
-0018736776 00000 n
-0018736824 00000 n
-0018736872 00000 n
-0018736920 00000 n
-0018736968 00000 n
-0018737016 00000 n
-0018737064 00000 n
-0018737112 00000 n
-0018749366 00000 n
-0018749729 00000 n
-0018749777 00000 n
-0018749825 00000 n
-0018750298 00000 n
-0018750346 00000 n
-0018750394 00000 n
-0018765393 00000 n
-0018765756 00000 n
-0018765804 00000 n
-0018765852 00000 n
-0018765900 00000 n
-0018773349 00000 n
-0018773697 00000 n
-0018773816 00000 n
-0018773938 00000 n
-0018774067 00000 n
-0018774197 00000 n
-0018774322 00000 n
-0018774449 00000 n
-0018774572 00000 n
-0018774697 00000 n
-0018774825 00000 n
-0018774952 00000 n
-0018775086 00000 n
-0018775219 00000 n
-0018775351 00000 n
-0018775484 00000 n
-0018775612 00000 n
-0018775741 00000 n
-0018775863 00000 n
-0018775984 00000 n
-0018776111 00000 n
-0018776237 00000 n
-0018776366 00000 n
-0018776494 00000 n
-0018776633 00000 n
-0018776771 00000 n
-0018776896 00000 n
-0018777020 00000 n
-0018777144 00000 n
-0018777267 00000 n
-0018777397 00000 n
-0018777527 00000 n
-0018777648 00000 n
-0018777771 00000 n
-0018777899 00000 n
-0018778027 00000 n
-0018778145 00000 n
-0018778265 00000 n
-0018778389 00000 n
-0018778513 00000 n
-0018778669 00000 n
-0018778825 00000 n
-0018778964 00000 n
-0018779105 00000 n
-0018779264 00000 n
-0018779424 00000 n
-0018779568 00000 n
-0018779714 00000 n
-0018779878 00000 n
-0018780042 00000 n
-0018780168 00000 n
-0018780295 00000 n
-0018780417 00000 n
-0018780541 00000 n
-0018780669 00000 n
-0018780799 00000 n
-0018780927 00000 n
-0018781055 00000 n
-0018781177 00000 n
-0018781301 00000 n
-0018781421 00000 n
-0018781541 00000 n
-0018781654 00000 n
-0018781772 00000 n
-0018781899 00000 n
-0018782026 00000 n
-0018782144 00000 n
-0018782264 00000 n
-0018782400 00000 n
-0018782536 00000 n
-0018782659 00000 n
-0018782782 00000 n
-0018782903 00000 n
-0018783025 00000 n
-0018783154 00000 n
-0018783285 00000 n
-0018783402 00000 n
-0018783520 00000 n
-0018783639 00000 n
-0018783758 00000 n
-0018783878 00000 n
-0018783999 00000 n
-0018784127 00000 n
-0018784257 00000 n
-0018784399 00000 n
-0018784541 00000 n
-0018784688 00000 n
-0018784837 00000 n
-0018784964 00000 n
-0018785092 00000 n
-0018785220 00000 n
-0018785348 00000 n
-0018785478 00000 n
-0018785608 00000 n
-0018785741 00000 n
-0018785875 00000 n
-0018786001 00000 n
-0018786128 00000 n
-0018786246 00000 n
-0018786364 00000 n
-0018786494 00000 n
-0018786624 00000 n
-0018786754 00000 n
-0018786886 00000 n
-0018787012 00000 n
-0018787138 00000 n
-0018787270 00000 n
-0018787403 00000 n
-0018787528 00000 n
-0018787653 00000 n
-0018787779 00000 n
-0018787907 00000 n
-0018788030 00000 n
-0018788154 00000 n
-0018788294 00000 n
-0018788434 00000 n
-0018788569 00000 n
-0018788706 00000 n
-0018788848 00000 n
-0018788991 00000 n
-0018789155 00000 n
-0018789320 00000 n
-0018789476 00000 n
-0018789633 00000 n
-0018789765 00000 n
-0018789898 00000 n
-0018790021 00000 n
-0018790144 00000 n
-0018790274 00000 n
-0018790406 00000 n
-0018790544 00000 n
-0018790682 00000 n
-0018790812 00000 n
-0018790943 00000 n
-0018791065 00000 n
-0018791189 00000 n
-0018791311 00000 n
-0018791434 00000 n
-0018791564 00000 n
-0018791694 00000 n
-0018791835 00000 n
-0018791976 00000 n
-0018792123 00000 n
-0018792270 00000 n
-0018792440 00000 n
-0018792610 00000 n
-0018792762 00000 n
-0018792914 00000 n
-0018793056 00000 n
-0018793199 00000 n
-0018793337 00000 n
-0018793475 00000 n
-0018793600 00000 n
-0018793727 00000 n
-0018793852 00000 n
-0018793979 00000 n
-0018794104 00000 n
-0018794229 00000 n
-0018794360 00000 n
-0018794492 00000 n
-0018794619 00000 n
-0018794747 00000 n
-0018794880 00000 n
-0018795014 00000 n
-0018795144 00000 n
-0018795276 00000 n
-0018795402 00000 n
-0018795529 00000 n
-0018795656 00000 n
-0018795785 00000 n
-0018795907 00000 n
-0018796031 00000 n
-0018796175 00000 n
-0018796319 00000 n
-0018796441 00000 n
-0018796565 00000 n
-0018796694 00000 n
-0018796825 00000 n
-0018796957 00000 n
-0018797091 00000 n
-0018797216 00000 n
-0018797343 00000 n
-0018797464 00000 n
-0018797587 00000 n
-0018797718 00000 n
-0018797851 00000 n
-0018797993 00000 n
-0018798137 00000 n
-0018798279 00000 n
-0018798423 00000 n
-0018798572 00000 n
-0018798723 00000 n
-0018798867 00000 n
-0018799012 00000 n
-0018799138 00000 n
-0018799266 00000 n
-0018799390 00000 n
-0018799516 00000 n
-0018799645 00000 n
-0018799774 00000 n
-0018799899 00000 n
-0018800025 00000 n
-0018800156 00000 n
-0018800287 00000 n
-0018800427 00000 n
-0018800569 00000 n
-0018800701 00000 n
-0018800833 00000 n
-0018800971 00000 n
-0018801109 00000 n
-0018801241 00000 n
-0018801373 00000 n
-0018801508 00000 n
-0018801644 00000 n
-0018801774 00000 n
-0018801905 00000 n
-0018802040 00000 n
-0018802175 00000 n
-0018802318 00000 n
-0018802461 00000 n
-0018802602 00000 n
-0018802744 00000 n
-0018802872 00000 n
-0018803001 00000 n
-0018803131 00000 n
-0018803261 00000 n
-0018803388 00000 n
-0018803515 00000 n
-0018803634 00000 n
-0018803755 00000 n
-0018803895 00000 n
-0018804035 00000 n
-0018804159 00000 n
-0018804284 00000 n
-0018804405 00000 n
-0018804528 00000 n
-0018804653 00000 n
-0018804780 00000 n
-0018804897 00000 n
-0018805014 00000 n
-0018805132 00000 n
-0018805251 00000 n
-0018805366 00000 n
-0018805482 00000 n
-0018805599 00000 n
-0018805717 00000 n
-0018805836 00000 n
-0018805956 00000 n
-0018806075 00000 n
-0018806196 00000 n
-0018806315 00000 n
-0018806436 00000 n
-0018806571 00000 n
-0018806708 00000 n
-0018806826 00000 n
-0018806946 00000 n
-0018807071 00000 n
-0018807197 00000 n
-0018807326 00000 n
-0018807456 00000 n
-0018807579 00000 n
-0018807703 00000 n
-0018807836 00000 n
-0018807969 00000 n
-0018808085 00000 n
-0018808202 00000 n
-0018808335 00000 n
-0018808470 00000 n
-0018808604 00000 n
-0018808740 00000 n
-0018808864 00000 n
-0018808989 00000 n
-0018809112 00000 n
-0018809237 00000 n
-0018809390 00000 n
-0018809543 00000 n
-0018809686 00000 n
-0018809830 00000 n
-0018809955 00000 n
-0018810081 00000 n
-0018810203 00000 n
-0018810325 00000 n
-0018810451 00000 n
-0018810578 00000 n
-0018810695 00000 n
-0018810813 00000 n
-0018810947 00000 n
-0018811081 00000 n
-0018811210 00000 n
-0018811339 00000 n
-0018811463 00000 n
-0018811589 00000 n
-0018811716 00000 n
-0018811843 00000 n
-0018811968 00000 n
-0018812095 00000 n
-0018812221 00000 n
-0018812348 00000 n
-0018812475 00000 n
-0018812603 00000 n
-0018812726 00000 n
-0018812850 00000 n
-0018812971 00000 n
-0018813094 00000 n
-0018813229 00000 n
-0018813365 00000 n
-0018813493 00000 n
-0018813622 00000 n
-0018813742 00000 n
-0018813865 00000 n
-0018813992 00000 n
-0018814119 00000 n
-0018814247 00000 n
-0018814377 00000 n
-0018814495 00000 n
-0018814615 00000 n
-0018814730 00000 n
-0018814847 00000 n
-0018814964 00000 n
-0018815083 00000 n
-0018815201 00000 n
-0018815321 00000 n
-0018815449 00000 n
-0018815577 00000 n
-0018815702 00000 n
-0018815828 00000 n
-0018815959 00000 n
-0018816091 00000 n
-0018816219 00000 n
-0018816347 00000 n
-0018816473 00000 n
-0018816602 00000 n
-0018816732 00000 n
-0018816864 00000 n
-0018816993 00000 n
-0018817124 00000 n
-0018817253 00000 n
-0018817383 00000 n
-0018817507 00000 n
-0018817632 00000 n
-0018817759 00000 n
-0018817888 00000 n
-0018818020 00000 n
-0018818152 00000 n
-0018818276 00000 n
-0018818402 00000 n
-0018818532 00000 n
-0018818663 00000 n
-0018818790 00000 n
-0018818919 00000 n
-0018819047 00000 n
-0018819175 00000 n
-0018819306 00000 n
-0018819438 00000 n
-0018819567 00000 n
-0018819696 00000 n
-0018819843 00000 n
-0018819990 00000 n
-0018820114 00000 n
-0018820239 00000 n
-0018820364 00000 n
-0018820490 00000 n
-0018820624 00000 n
-0018820759 00000 n
-0018820890 00000 n
-0018821023 00000 n
-0018821157 00000 n
-0018821293 00000 n
-0018821415 00000 n
-0018821537 00000 n
-0018821657 00000 n
-0018821777 00000 n
-0018821904 00000 n
-0018822032 00000 n
-0018822160 00000 n
-0018822290 00000 n
-0018822417 00000 n
-0018822545 00000 n
-0018822672 00000 n
-0018822801 00000 n
-0018822933 00000 n
-0018823067 00000 n
-0018823228 00000 n
-0018823389 00000 n
-0018823512 00000 n
-0018823637 00000 n
-0018823763 00000 n
-0018823891 00000 n
-0018824021 00000 n
-0018824151 00000 n
-0018824279 00000 n
-0018824407 00000 n
-0018824533 00000 n
-0018824660 00000 n
-0018824787 00000 n
-0018824914 00000 n
-0018825034 00000 n
-0018825156 00000 n
-0018825280 00000 n
-0018825405 00000 n
-0018825538 00000 n
-0018825671 00000 n
-0018825792 00000 n
-0018825914 00000 n
-0018826041 00000 n
-0018826170 00000 n
-0018826289 00000 n
-0018826409 00000 n
-0018826526 00000 n
-0018826645 00000 n
-0018826764 00000 n
-0018826884 00000 n
-0018827006 00000 n
-0018827130 00000 n
-0018827260 00000 n
-0018827390 00000 n
-0018827529 00000 n
-0018827670 00000 n
-0018827798 00000 n
-0018827926 00000 n
-0018828049 00000 n
-0018828219 00000 n
-0018828344 00000 n
-0018828468 00000 n
-0018828594 00000 n
-0018828720 00000 n
-0018828844 00000 n
-0018828969 00000 n
-0018829094 00000 n
-0018829219 00000 n
-0018829337 00000 n
-0018829457 00000 n
-0018829577 00000 n
-0018829699 00000 n
-0018829820 00000 n
-0018829941 00000 n
-0018830102 00000 n
-0018830263 00000 n
-0018830384 00000 n
-0018830507 00000 n
-0018830631 00000 n
-0018830756 00000 n
-0018830874 00000 n
-0018831072 00000 n
-0018831194 00000 n
-0018831312 00000 n
-0018831436 00000 n
-0018831561 00000 n
-0018831687 00000 n
-0018831815 00000 n
-0018831944 00000 n
-0018832076 00000 n
-0018832196 00000 n
-0018832317 00000 n
-0018832451 00000 n
-0018832586 00000 n
-0018832706 00000 n
-0018832828 00000 n
-0018832956 00000 n
-0018833086 00000 n
-0018833210 00000 n
-0018833335 00000 n
-0018833453 00000 n
-0018833572 00000 n
-0018833699 00000 n
-0018833826 00000 n
-0018833951 00000 n
-0018834076 00000 n
-0018834207 00000 n
-0018834339 00000 n
-0018834456 00000 n
-0018834575 00000 n
-0018834695 00000 n
-0018834817 00000 n
-0018834951 00000 n
-0018835086 00000 n
-0018835210 00000 n
-0018835336 00000 n
-0018835458 00000 n
-0018835580 00000 n
-0018835704 00000 n
-0018835758 00000 n
-0018835882 00000 n
-0018836030 00000 n
-0018836178 00000 n
-0018836305 00000 n
-0018836432 00000 n
-0018836573 00000 n
-0018836714 00000 n
-0018836834 00000 n
-0018836956 00000 n
-0018837076 00000 n
-0018837198 00000 n
-0018837327 00000 n
-0018837457 00000 n
-0018837594 00000 n
-0018837732 00000 n
-0018837850 00000 n
-0018837970 00000 n
-0018838094 00000 n
-0018838219 00000 n
-0018838339 00000 n
-0018838461 00000 n
-0018838583 00000 n
-0018838706 00000 n
-0018838827 00000 n
-0018838949 00000 n
-0018839073 00000 n
-0018839198 00000 n
-0018839318 00000 n
-0018839440 00000 n
-0018839572 00000 n
-0018839704 00000 n
-0018839828 00000 n
-0018839953 00000 n
-0018840093 00000 n
-0018840233 00000 n
-0018840353 00000 n
-0018840475 00000 n
-0018840611 00000 n
-0018840747 00000 n
-0018840867 00000 n
-0018840989 00000 n
-0018841113 00000 n
-0018841238 00000 n
-0018841359 00000 n
-0018841482 00000 n
-0018841633 00000 n
-0018841786 00000 n
-0018841904 00000 n
-0018842022 00000 n
-0018842156 00000 n
-0018842290 00000 n
-0018842414 00000 n
-0018842466 00000 n
-0018842818 00000 n
-0018842944 00000 n
-0018843061 00000 n
-0018843179 00000 n
-0018843298 00000 n
-0018843417 00000 n
-0018843545 00000 n
-0018843674 00000 n
-0018843797 00000 n
-0018843922 00000 n
-0018844048 00000 n
-0018844176 00000 n
-0018844294 00000 n
-0018844412 00000 n
-0018844529 00000 n
-0018844648 00000 n
-0018844770 00000 n
-0018844894 00000 n
-0018845053 00000 n
-0018845212 00000 n
-0018845356 00000 n
-0018845501 00000 n
-0018845583 00000 n
-0018845811 00000 n
-0018845971 00000 n
-0018846127 00000 n
-0018846346 00000 n
-0018846551 00000 n
-0018846828 00000 n
-0018847092 00000 n
-0018847326 00000 n
-0018847575 00000 n
-0018847920 00000 n
-0018848253 00000 n
-0018848510 00000 n
-0018848771 00000 n
-0018849056 00000 n
-0018849302 00000 n
-0018849498 00000 n
-0018849812 00000 n
-0018850021 00000 n
-0018850235 00000 n
-0018850483 00000 n
-0018850721 00000 n
-0018851062 00000 n
-0018851339 00000 n
-0018851696 00000 n
-0018851997 00000 n
-0018852370 00000 n
-0018852580 00000 n
-0018852781 00000 n
-0018853003 00000 n
-0018853232 00000 n
-0018853445 00000 n
-0018853642 00000 n
-0018853831 00000 n
-0018854060 00000 n
-0018854257 00000 n
-0018854518 00000 n
-0018854728 00000 n
-0018854946 00000 n
-0018855184 00000 n
-0018855382 00000 n
-0018855561 00000 n
-0018855814 00000 n
-0018856037 00000 n
-0018856308 00000 n
-0018856606 00000 n
-0018856897 00000 n
-0018857127 00000 n
-0018857377 00000 n
-0018857631 00000 n
-0018857829 00000 n
-0018858079 00000 n
-0018858341 00000 n
-0018858691 00000 n
-0018858913 00000 n
-0018859195 00000 n
-0018859569 00000 n
-0018859784 00000 n
-0018860022 00000 n
-0018860325 00000 n
-0018860591 00000 n
-0018860881 00000 n
-0018861259 00000 n
-0018861605 00000 n
-0018861855 00000 n
-0018862105 00000 n
-0018862379 00000 n
-0018862745 00000 n
-0018863007 00000 n
-0018863206 00000 n
-0018863451 00000 n
-0018863674 00000 n
-0018863996 00000 n
-0018864310 00000 n
-0018864716 00000 n
-0018865042 00000 n
-0018865332 00000 n
-0018865615 00000 n
-0018865825 00000 n
-0018866020 00000 n
-0018866254 00000 n
-0018866456 00000 n
-0018866722 00000 n
-0018866924 00000 n
-0018867150 00000 n
-0018867356 00000 n
-0018867582 00000 n
-0018867776 00000 n
-0018868114 00000 n
-0018868428 00000 n
-0018868663 00000 n
-0018868904 00000 n
-0018869099 00000 n
-0018869294 00000 n
-0018869599 00000 n
-0018869794 00000 n
-0018870040 00000 n
-0018870378 00000 n
-0018870613 00000 n
-0018870847 00000 n
-0018871042 00000 n
-0018871264 00000 n
-0018871474 00000 n
-0018871772 00000 n
-0018872058 00000 n
-0018872360 00000 n
-0018872610 00000 n
-0018872844 00000 n
-0018873246 00000 n
-0018873516 00000 n
-0018873898 00000 n
-0018874200 00000 n
-0018874446 00000 n
-0018874789 00000 n
-0018875042 00000 n
-0018875245 00000 n
-0018875447 00000 n
-0018875714 00000 n
-0018875943 00000 n
-0018876127 00000 n
-0018876392 00000 n
-0018876575 00000 n
-0018876781 00000 n
-0018877063 00000 n
-0018877405 00000 n
-0018877607 00000 n
-0018877798 00000 n
-0018878079 00000 n
-0018878291 00000 n
-0018878512 00000 n
-0018878723 00000 n
-0018878965 00000 n
-0018879183 00000 n
-0018879426 00000 n
-0018879687 00000 n
-0018879934 00000 n
-0018880200 00000 n
-0018880462 00000 n
-0018880676 00000 n
-0018881010 00000 n
-0018881293 00000 n
-0018881579 00000 n
-0018881810 00000 n
-0018882020 00000 n
-0018882218 00000 n
-0018882480 00000 n
-0018882698 00000 n
-0018882932 00000 n
-0018883202 00000 n
-0018883448 00000 n
-0018883702 00000 n
-0018883960 00000 n
-0018884158 00000 n
-0018884380 00000 n
-0018884686 00000 n
-0018884901 00000 n
-0018885126 00000 n
-0018885333 00000 n
-0018885567 00000 n
-0018885769 00000 n
-0018885959 00000 n
-0018886146 00000 n
-0018886476 00000 n
-0018886715 00000 n
-0018886913 00000 n
-0018887131 00000 n
-0018887333 00000 n
-0018887539 00000 n
-0018887757 00000 n
-0018887971 00000 n
-0018888181 00000 n
-0018888411 00000 n
-0018888617 00000 n
-0018888835 00000 n
-0018889057 00000 n
-0018889363 00000 n
-0018889601 00000 n
-0018889915 00000 n
-0018890145 00000 n
-0018890415 00000 n
-0018890725 00000 n
-0018890932 00000 n
-0018891193 00000 n
-0018891392 00000 n
-0018891626 00000 n
-0018891901 00000 n
-0018892203 00000 n
-0018892470 00000 n
-0018892720 00000 n
-0018892962 00000 n
-0018893196 00000 n
-0018893442 00000 n
-0018893700 00000 n
-0018894066 00000 n
-0018894296 00000 n
-0018894538 00000 n
-0018894916 00000 n
-0018895298 00000 n
-0018895620 00000 n
-0018895850 00000 n
-0018896116 00000 n
-0018896366 00000 n
-0018896605 00000 n
-0018896911 00000 n
-0018897142 00000 n
-0018897424 00000 n
-0018897622 00000 n
-0018897888 00000 n
-0018898158 00000 n
-0018898452 00000 n
-0018898710 00000 n
-0018899036 00000 n
-0018899318 00000 n
-0018899520 00000 n
-0018899767 00000 n
-0018900052 00000 n
-0018900239 00000 n
-0018900449 00000 n
-0018900655 00000 n
-0018901006 00000 n
-0018901235 00000 n
-0018901419 00000 n
-0018901732 00000 n
-0018901939 00000 n
-0018902173 00000 n
-0018902423 00000 n
-0018902629 00000 n
-0018902903 00000 n
-0018903113 00000 n
-0018903355 00000 n
-0018903562 00000 n
-0018903823 00000 n
-0018904030 00000 n
-0018904252 00000 n
-0018904502 00000 n
-0018904692 00000 n
-0018904902 00000 n
-0018905164 00000 n
-0018905390 00000 n
-0018905577 00000 n
-0018905774 00000 n
-0018906073 00000 n
-0018906391 00000 n
-0018906666 00000 n
-0018906863 00000 n
-0018907066 00000 n
-0018907308 00000 n
-0018907559 00000 n
-0018907740 00000 n
-0018907939 00000 n
-0018908141 00000 n
-0018908332 00000 n
-0018908521 00000 n
-0018908720 00000 n
-0018908907 00000 n
-0018909144 00000 n
-0018909343 00000 n
-0018909625 00000 n
-0018909812 00000 n
-0018910069 00000 n
-0018910256 00000 n
-0018910455 00000 n
-0018910634 00000 n
-0018910913 00000 n
-0018911103 00000 n
-0018911365 00000 n
-0018911719 00000 n
-0018911953 00000 n
-0018912147 00000 n
-0018912373 00000 n
-0018912667 00000 n
-0018912897 00000 n
-0018913235 00000 n
-0018913481 00000 n
-0018913747 00000 n
-0018914101 00000 n
-0018914388 00000 n
-0018931372 00000 n
-0018931418 00000 n
-0018931693 00000 n
-0018931968 00000 n
-0018945142 00000 n
-0018945358 00000 n
-0018946714 00000 n
-0018947632 00000 n
-0018959359 00000 n
-0018959580 00000 n
-0018960936 00000 n
-0018961853 00000 n
-0018972751 00000 n
-0018972977 00000 n
-0018974333 00000 n
-0018975251 00000 n
-0018982137 00000 n
-0018982352 00000 n
-0018983708 00000 n
-0018984625 00000 n
-0018988911 00000 n
-0018989127 00000 n
-0018989470 00000 n
-0018990389 00000 n
-0018991668 00000 n
-0018991892 00000 n
-0018992212 00000 n
-0018993351 00000 n
-0019002870 00000 n
-0019003100 00000 n
-0019004456 00000 n
-0019005373 00000 n
-0019006648 00000 n
-0019006874 00000 n
-0019007190 00000 n
-0019008329 00000 n
-0019013191 00000 n
-0019013403 00000 n
-0019014759 00000 n
-0019015675 00000 n
-0019017760 00000 n
-0019017975 00000 n
-0019018301 00000 n
-0019019219 00000 n
-0019022703 00000 n
-0019022917 00000 n
-0019024273 00000 n
-0019025189 00000 n
-0019028887 00000 n
-0019029108 00000 n
-0019029424 00000 n
-0019030341 00000 n
-0019033896 00000 n
-0019034122 00000 n
-0019034426 00000 n
+0016249024 00000 n
+0016249139 00000 n
+0016249270 00000 n
+0016249318 00000 n
+0016273175 00000 n
+0016273536 00000 n
+0016273585 00000 n
+0016292223 00000 n
+0016292571 00000 n
+0016297695 00000 n
+0016298043 00000 n
+0016303542 00000 n
+0016303946 00000 n
+0016303994 00000 n
+0016304188 00000 n
+0016304368 00000 n
+0016304601 00000 n
+0016321509 00000 n
+0016321897 00000 n
+0016321945 00000 n
+0016333057 00000 n
+0016333418 00000 n
+0016333466 00000 n
+0016333514 00000 n
+0016333562 00000 n
+0016333610 00000 n
+0016340952 00000 n
+0016341345 00000 n
+0016341393 00000 n
+0016341629 00000 n
+0016344431 00000 n
+0016344792 00000 n
+0016344840 00000 n
+0016349897 00000 n
+0016350258 00000 n
+0016350306 00000 n
+0016352007 00000 n
+0016352355 00000 n
+0016352403 00000 n
+0016355531 00000 n
+0016355879 00000 n
+0016355927 00000 n
+0016363398 00000 n
+0016363759 00000 n
+0016363807 00000 n
+0016372272 00000 n
+0016372646 00000 n
+0016372694 00000 n
+0016372742 00000 n
+0016373227 00000 n
+0016373275 00000 n
+0016375604 00000 n
+0016375980 00000 n
+0016376028 00000 n
+0016376246 00000 n
+0016376480 00000 n
+0016378811 00000 n
+0016379172 00000 n
+0016379220 00000 n
+0016390547 00000 n
+0016390958 00000 n
+0016391006 00000 n
+0016391203 00000 n
+0016391400 00000 n
+0016391521 00000 n
+0016397856 00000 n
+0016398217 00000 n
+0016398265 00000 n
+0016447845 00000 n
+0016448219 00000 n
+0016448267 00000 n
+0016448315 00000 n
+0016490993 00000 n
+0016491341 00000 n
+0016493236 00000 n
+0016493584 00000 n
+0016493632 00000 n
+0016494638 00000 n
+0016494986 00000 n
+0016495034 00000 n
+0016501201 00000 n
+0016501562 00000 n
+0016501610 00000 n
+0016501658 00000 n
+0016501706 00000 n
+0016503964 00000 n
+0016504312 00000 n
+0016504360 00000 n
+0016504408 00000 n
+0016504456 00000 n
+0016504504 00000 n
+0016504552 00000 n
+0016528204 00000 n
+0016528593 00000 n
+0016528641 00000 n
+0016528836 00000 n
+0016529060 00000 n
+0016529108 00000 n
+0016548407 00000 n
+0016548813 00000 n
+0016548861 00000 n
+0016548917 00000 n
+0016549064 00000 n
+0016567726 00000 n
+0016568132 00000 n
+0016568357 00000 n
+0016582423 00000 n
+0016582843 00000 n
+0016582891 00000 n
+0016583097 00000 n
+0016583304 00000 n
+0016583533 00000 n
+0016583764 00000 n
+0016603986 00000 n
+0016604388 00000 n
+0016604436 00000 n
+0016604633 00000 n
+0016604829 00000 n
+0016604877 00000 n
+0016628125 00000 n
+0016628518 00000 n
+0016628566 00000 n
+0016628811 00000 n
+0016660350 00000 n
+0016660724 00000 n
+0016660772 00000 n
+0016680091 00000 n
+0016680452 00000 n
+0016741879 00000 n
+0016742240 00000 n
+0016742288 00000 n
+0016742336 00000 n
+0016797108 00000 n
+0016797469 00000 n
+0016797517 00000 n
+0016798130 00000 n
+0016798178 00000 n
+0016798226 00000 n
+0016799882 00000 n
+0016800263 00000 n
+0016800311 00000 n
+0016800509 00000 n
+0016800557 00000 n
+0016813188 00000 n
+0016813603 00000 n
+0016813651 00000 n
+0016813699 00000 n
+0016813922 00000 n
+0016813970 00000 n
+0016814167 00000 n
+0016818973 00000 n
+0016819334 00000 n
+0016819722 00000 n
+0016820070 00000 n
+0016820118 00000 n
+0016829828 00000 n
+0016830221 00000 n
+0016830269 00000 n
+0016830554 00000 n
+0016830603 00000 n
+0016830652 00000 n
+0016830701 00000 n
+0016870650 00000 n
+0016871048 00000 n
+0016871096 00000 n
+0016871144 00000 n
+0016871330 00000 n
+0016871518 00000 n
+0016871706 00000 n
+0016874855 00000 n
+0016875216 00000 n
+0016875264 00000 n
+0016875644 00000 n
+0016875992 00000 n
+0016876040 00000 n
+0016877926 00000 n
+0016878287 00000 n
+0016878335 00000 n
+0016899219 00000 n
+0016899593 00000 n
+0016899641 00000 n
+0016899689 00000 n
+0016899737 00000 n
+0016900249 00000 n
+0016925700 00000 n
+0016926061 00000 n
+0016926109 00000 n
+0016926157 00000 n
+0016967413 00000 n
+0016967774 00000 n
+0016967822 00000 n
+0017005403 00000 n
+0017005764 00000 n
+0017005812 00000 n
+0017005860 00000 n
+0017034094 00000 n
+0017034468 00000 n
+0017034516 00000 n
+0017034564 00000 n
+0017034612 00000 n
+0017047306 00000 n
+0017047680 00000 n
+0017047728 00000 n
+0017047776 00000 n
+0017047824 00000 n
+0017048533 00000 n
+0017048581 00000 n
+0017048629 00000 n
+0017056762 00000 n
+0017057149 00000 n
+0017060244 00000 n
+0017060618 00000 n
+0017060666 00000 n
+0017060714 00000 n
+0017062117 00000 n
+0017062465 00000 n
+0017062513 00000 n
+0017062561 00000 n
+0017062961 00000 n
+0017063309 00000 n
+0017063357 00000 n
+0017067478 00000 n
+0017067881 00000 n
+0017067929 00000 n
+0017068101 00000 n
+0017068299 00000 n
+0017068473 00000 n
+0017068685 00000 n
+0017068897 00000 n
+0017077220 00000 n
+0017077653 00000 n
+0017077701 00000 n
+0017077749 00000 n
+0017077965 00000 n
+0017078267 00000 n
+0017078315 00000 n
+0017078509 00000 n
+0017078767 00000 n
+0017079189 00000 n
+0017079537 00000 n
+0017079585 00000 n
+0017087001 00000 n
+0017087362 00000 n
+0017087410 00000 n
+0017093487 00000 n
+0017093848 00000 n
+0017093896 00000 n
+0017093944 00000 n
+0017093992 00000 n
+0017094040 00000 n
+0017119950 00000 n
+0017120337 00000 n
+0017120385 00000 n
+0017120433 00000 n
+0017120481 00000 n
+0017141126 00000 n
+0017141513 00000 n
+0017141561 00000 n
+0017142924 00000 n
+0017143272 00000 n
+0017143320 00000 n
+0017166854 00000 n
+0017167215 00000 n
+0017167263 00000 n
+0017189271 00000 n
+0017189632 00000 n
+0017189680 00000 n
+0017190088 00000 n
+0017190136 00000 n
+0017190184 00000 n
+0017190232 00000 n
+0017206969 00000 n
+0017207330 00000 n
+0017207378 00000 n
+0017207766 00000 n
+0017208114 00000 n
+0017208162 00000 n
+0017220724 00000 n
+0017221135 00000 n
+0017221183 00000 n
+0017222172 00000 n
+0017222349 00000 n
+0017222516 00000 n
+0017222639 00000 n
+0017222687 00000 n
+0017222735 00000 n
+0017242548 00000 n
+0017242956 00000 n
+0017243004 00000 n
+0017243227 00000 n
+0017265369 00000 n
+0017265780 00000 n
+0017265922 00000 n
+0017265970 00000 n
+0017266018 00000 n
+0017266066 00000 n
+0017266234 00000 n
+0017266419 00000 n
+0017296043 00000 n
+0017296441 00000 n
+0017296644 00000 n
+0017296847 00000 n
+0017297049 00000 n
+0017323447 00000 n
+0017323836 00000 n
+0017324036 00000 n
+0017324236 00000 n
+0017350372 00000 n
+0017350761 00000 n
+0017350960 00000 n
+0017351160 00000 n
+0017359587 00000 n
+0017359985 00000 n
+0017360193 00000 n
+0017360403 00000 n
+0017360612 00000 n
+0017384246 00000 n
+0017384648 00000 n
+0017384840 00000 n
+0017385032 00000 n
+0017403639 00000 n
+0017404032 00000 n
+0017404080 00000 n
+0017404211 00000 n
+0017404259 00000 n
+0017414690 00000 n
+0017415064 00000 n
+0017415112 00000 n
+0017415160 00000 n
+0017429128 00000 n
+0017429557 00000 n
+0017429605 00000 n
+0017429653 00000 n
+0017429781 00000 n
+0017429951 00000 n
+0017430079 00000 n
+0017430207 00000 n
+0017430335 00000 n
+0017430383 00000 n
+0017441826 00000 n
+0017442318 00000 n
+0017442367 00000 n
+0017442495 00000 n
+0017442544 00000 n
+0017442670 00000 n
+0017442801 00000 n
+0017442850 00000 n
+0017442975 00000 n
+0017443099 00000 n
+0017443233 00000 n
+0017443367 00000 n
+0017443504 00000 n
+0017443629 00000 n
+0017443767 00000 n
+0017443899 00000 n
+0017443948 00000 n
+0017444072 00000 n
+0017449266 00000 n
+0017449687 00000 n
+0017449735 00000 n
+0017449860 00000 n
+0017449981 00000 n
+0017450029 00000 n
+0017450154 00000 n
+0017450275 00000 n
+0017450323 00000 n
+0017450446 00000 n
+0017450569 00000 n
+0017450617 00000 n
+0017450742 00000 n
+0017459129 00000 n
+0017459490 00000 n
+0017459538 00000 n
+0017459587 00000 n
+0017459636 00000 n
+0017480177 00000 n
+0017480552 00000 n
+0017515539 00000 n
+0017515887 00000 n
+0017553797 00000 n
+0017554145 00000 n
+0017580018 00000 n
+0017580366 00000 n
+0017622159 00000 n
+0017622507 00000 n
+0017625703 00000 n
+0017626051 00000 n
+0017638061 00000 n
+0017638508 00000 n
+0017638556 00000 n
+0017638610 00000 n
+0017638759 00000 n
+0017638893 00000 n
+0017639030 00000 n
+0017639169 00000 n
+0017639310 00000 n
+0017639452 00000 n
+0017639632 00000 n
+0017652104 00000 n
+0017652512 00000 n
+0017652690 00000 n
+0017652876 00000 n
+0017653078 00000 n
+0017653299 00000 n
+0017653506 00000 n
+0017653703 00000 n
+0017653879 00000 n
+0017659685 00000 n
+0017660087 00000 n
+0017700744 00000 n
+0017728507 00000 n
+0017736593 00000 n
+0017736968 00000 n
+0017783009 00000 n
+0017801909 00000 n
+0017802315 00000 n
+0017802363 00000 n
+0017802642 00000 n
+0017802690 00000 n
+0017842461 00000 n
+0017842835 00000 n
+0017887340 00000 n
+0017887738 00000 n
+0017887931 00000 n
+0017888124 00000 n
+0017888335 00000 n
+0017914241 00000 n
+0017914621 00000 n
+0017914669 00000 n
+0017914717 00000 n
+0017914900 00000 n
+0017944594 00000 n
+0017945001 00000 n
+0017945179 00000 n
+0017945359 00000 n
+0017945542 00000 n
+0017945722 00000 n
+0017989766 00000 n
+0017990159 00000 n
+0017990355 00000 n
+0018022218 00000 n
+0018022647 00000 n
+0018022844 00000 n
+0018022981 00000 n
+0018023030 00000 n
+0018023235 00000 n
+0018023439 00000 n
+0018023583 00000 n
+0018023632 00000 n
+0018043156 00000 n
+0018043567 00000 n
+0018043702 00000 n
+0018043750 00000 n
+0018043884 00000 n
+0018044028 00000 n
+0018044077 00000 n
+0018044125 00000 n
+0018089799 00000 n
+0018090173 00000 n
+0018090222 00000 n
+0018090271 00000 n
+0018135161 00000 n
+0018135522 00000 n
+0018165116 00000 n
+0018165490 00000 n
+0018165538 00000 n
+0018166878 00000 n
+0018167254 00000 n
+0018167302 00000 n
+0018167350 00000 n
+0018167519 00000 n
+0018167567 00000 n
+0018167750 00000 n
+0018170750 00000 n
+0018171144 00000 n
+0018171192 00000 n
+0018171653 00000 n
+0018171839 00000 n
+0018172034 00000 n
+0018172212 00000 n
+0018172389 00000 n
+0018179858 00000 n
+0018180233 00000 n
+0018180281 00000 n
+0018180329 00000 n
+0018180377 00000 n
+0018181251 00000 n
+0018207138 00000 n
+0018211701 00000 n
+0018211750 00000 n
+0018211799 00000 n
+0018211848 00000 n
+0018212204 00000 n
+0018219953 00000 n
+0018220301 00000 n
+0018220349 00000 n
+0018267117 00000 n
+0018274434 00000 n
+0018274809 00000 n
+0018274858 00000 n
+0018285548 00000 n
+0018285909 00000 n
+0018285957 00000 n
+0018286005 00000 n
+0018299349 00000 n
+0018299710 00000 n
+0018299758 00000 n
+0018314182 00000 n
+0018314543 00000 n
+0018314591 00000 n
+0018314639 00000 n
+0018314687 00000 n
+0018315310 00000 n
+0018333328 00000 n
+0018333676 00000 n
+0018333724 00000 n
+0018334229 00000 n
+0018346940 00000 n
+0018347383 00000 n
+0018347431 00000 n
+0018347479 00000 n
+0018347620 00000 n
+0018347748 00000 n
+0018347899 00000 n
+0018348037 00000 n
+0018348085 00000 n
+0018348214 00000 n
+0018348262 00000 n
+0018348387 00000 n
+0018348435 00000 n
+0018348562 00000 n
+0018348777 00000 n
+0018359192 00000 n
+0018359572 00000 n
+0018359620 00000 n
+0018359756 00000 n
+0018366834 00000 n
+0018367322 00000 n
+0018367370 00000 n
+0018367418 00000 n
+0018367589 00000 n
+0018367779 00000 n
+0018367828 00000 n
+0018368078 00000 n
+0018368306 00000 n
+0018368551 00000 n
+0018368600 00000 n
+0018368794 00000 n
+0018369004 00000 n
+0018369217 00000 n
+0018369266 00000 n
+0018369459 00000 n
+0018369692 00000 n
+0018369877 00000 n
+0018369926 00000 n
+0018370119 00000 n
+0018370168 00000 n
+0018370562 00000 n
+0018370756 00000 n
+0018372917 00000 n
+0018373284 00000 n
+0018373332 00000 n
+0018373527 00000 n
+0018376921 00000 n
+0018377297 00000 n
+0018377345 00000 n
+0018377393 00000 n
+0018377579 00000 n
+0018377627 00000 n
+0018377821 00000 n
+0018381510 00000 n
+0018381949 00000 n
+0018381997 00000 n
+0018386257 00000 n
+0018386787 00000 n
+0018386982 00000 n
+0018387167 00000 n
+0018387361 00000 n
+0018387559 00000 n
+0018387754 00000 n
+0018387940 00000 n
+0018398553 00000 n
+0018398974 00000 n
+0018399022 00000 n
+0018399218 00000 n
+0018399440 00000 n
+0018399657 00000 n
+0018399873 00000 n
+0018400106 00000 n
+0018400154 00000 n
+0018400202 00000 n
+0018400250 00000 n
+0018400482 00000 n
+0018400717 00000 n
+0018400765 00000 n
+0018400813 00000 n
+0018414936 00000 n
+0018415323 00000 n
+0018415372 00000 n
+0018415421 00000 n
+0018415470 00000 n
+0018423624 00000 n
+0018423985 00000 n
+0018424034 00000 n
+0018424083 00000 n
+0018424132 00000 n
+0018424181 00000 n
+0018424230 00000 n
+0018436452 00000 n
+0018436839 00000 n
+0018436888 00000 n
+0018437489 00000 n
+0018437837 00000 n
+0018437885 00000 n
+0018450337 00000 n
+0018450700 00000 n
+0018450748 00000 n
+0018450796 00000 n
+0018450844 00000 n
+0018450892 00000 n
+0018450939 00000 n
+0018465996 00000 n
+0018466359 00000 n
+0018466407 00000 n
+0018466455 00000 n
+0018466503 00000 n
+0018467162 00000 n
+0018482287 00000 n
+0018482622 00000 n
+0018497727 00000 n
+0018498090 00000 n
+0018498138 00000 n
+0018498186 00000 n
+0018512164 00000 n
+0018512527 00000 n
+0018512575 00000 n
+0018512623 00000 n
+0018512671 00000 n
+0018525972 00000 n
+0018526335 00000 n
+0018526383 00000 n
+0018526431 00000 n
+0018526479 00000 n
+0018526527 00000 n
+0018540431 00000 n
+0018540794 00000 n
+0018540842 00000 n
+0018540890 00000 n
+0018540938 00000 n
+0018540986 00000 n
+0018541034 00000 n
+0018561506 00000 n
+0018561869 00000 n
+0018561917 00000 n
+0018561965 00000 n
+0018580422 00000 n
+0018580785 00000 n
+0018580833 00000 n
+0018580881 00000 n
+0018580929 00000 n
+0018594646 00000 n
+0018594994 00000 n
+0018595042 00000 n
+0018595090 00000 n
+0018595138 00000 n
+0018595186 00000 n
+0018595234 00000 n
+0018613843 00000 n
+0018614206 00000 n
+0018614254 00000 n
+0018627826 00000 n
+0018628189 00000 n
+0018628237 00000 n
+0018628285 00000 n
+0018628333 00000 n
+0018628381 00000 n
+0018643402 00000 n
+0018643765 00000 n
+0018643813 00000 n
+0018643861 00000 n
+0018643909 00000 n
+0018643957 00000 n
+0018657891 00000 n
+0018658254 00000 n
+0018658302 00000 n
+0018658350 00000 n
+0018658398 00000 n
+0018658446 00000 n
+0018658494 00000 n
+0018674676 00000 n
+0018675039 00000 n
+0018675087 00000 n
+0018675135 00000 n
+0018675183 00000 n
+0018675859 00000 n
+0018675907 00000 n
+0018675955 00000 n
+0018676003 00000 n
+0018691388 00000 n
+0018691751 00000 n
+0018691799 00000 n
+0018691847 00000 n
+0018691895 00000 n
+0018691943 00000 n
+0018706184 00000 n
+0018706547 00000 n
+0018706595 00000 n
+0018706643 00000 n
+0018706691 00000 n
+0018706739 00000 n
+0018725733 00000 n
+0018726096 00000 n
+0018726144 00000 n
+0018726192 00000 n
+0018726240 00000 n
+0018736353 00000 n
+0018736716 00000 n
+0018736764 00000 n
+0018736812 00000 n
+0018736860 00000 n
+0018736908 00000 n
+0018736956 00000 n
+0018737004 00000 n
+0018737052 00000 n
+0018749306 00000 n
+0018749669 00000 n
+0018749717 00000 n
+0018749765 00000 n
+0018750238 00000 n
+0018750286 00000 n
+0018750334 00000 n
+0018765333 00000 n
+0018765696 00000 n
+0018765744 00000 n
+0018765792 00000 n
+0018765840 00000 n
+0018773289 00000 n
+0018773637 00000 n
+0018773756 00000 n
+0018773878 00000 n
+0018774007 00000 n
+0018774137 00000 n
+0018774262 00000 n
+0018774389 00000 n
+0018774512 00000 n
+0018774637 00000 n
+0018774765 00000 n
+0018774892 00000 n
+0018775026 00000 n
+0018775159 00000 n
+0018775291 00000 n
+0018775424 00000 n
+0018775552 00000 n
+0018775681 00000 n
+0018775803 00000 n
+0018775924 00000 n
+0018776051 00000 n
+0018776177 00000 n
+0018776306 00000 n
+0018776434 00000 n
+0018776573 00000 n
+0018776711 00000 n
+0018776836 00000 n
+0018776960 00000 n
+0018777084 00000 n
+0018777207 00000 n
+0018777337 00000 n
+0018777467 00000 n
+0018777588 00000 n
+0018777711 00000 n
+0018777839 00000 n
+0018777967 00000 n
+0018778085 00000 n
+0018778205 00000 n
+0018778329 00000 n
+0018778453 00000 n
+0018778609 00000 n
+0018778765 00000 n
+0018778904 00000 n
+0018779045 00000 n
+0018779204 00000 n
+0018779364 00000 n
+0018779508 00000 n
+0018779654 00000 n
+0018779818 00000 n
+0018779982 00000 n
+0018780108 00000 n
+0018780235 00000 n
+0018780357 00000 n
+0018780481 00000 n
+0018780609 00000 n
+0018780739 00000 n
+0018780867 00000 n
+0018780995 00000 n
+0018781117 00000 n
+0018781241 00000 n
+0018781361 00000 n
+0018781481 00000 n
+0018781594 00000 n
+0018781712 00000 n
+0018781839 00000 n
+0018781966 00000 n
+0018782084 00000 n
+0018782204 00000 n
+0018782340 00000 n
+0018782476 00000 n
+0018782599 00000 n
+0018782722 00000 n
+0018782843 00000 n
+0018782965 00000 n
+0018783094 00000 n
+0018783225 00000 n
+0018783342 00000 n
+0018783460 00000 n
+0018783579 00000 n
+0018783698 00000 n
+0018783818 00000 n
+0018783939 00000 n
+0018784067 00000 n
+0018784197 00000 n
+0018784339 00000 n
+0018784481 00000 n
+0018784628 00000 n
+0018784777 00000 n
+0018784904 00000 n
+0018785032 00000 n
+0018785160 00000 n
+0018785288 00000 n
+0018785418 00000 n
+0018785548 00000 n
+0018785681 00000 n
+0018785815 00000 n
+0018785941 00000 n
+0018786068 00000 n
+0018786186 00000 n
+0018786304 00000 n
+0018786434 00000 n
+0018786564 00000 n
+0018786694 00000 n
+0018786826 00000 n
+0018786952 00000 n
+0018787078 00000 n
+0018787210 00000 n
+0018787343 00000 n
+0018787468 00000 n
+0018787593 00000 n
+0018787719 00000 n
+0018787847 00000 n
+0018787970 00000 n
+0018788094 00000 n
+0018788234 00000 n
+0018788374 00000 n
+0018788509 00000 n
+0018788646 00000 n
+0018788788 00000 n
+0018788931 00000 n
+0018789095 00000 n
+0018789260 00000 n
+0018789416 00000 n
+0018789573 00000 n
+0018789705 00000 n
+0018789838 00000 n
+0018789961 00000 n
+0018790084 00000 n
+0018790214 00000 n
+0018790346 00000 n
+0018790484 00000 n
+0018790622 00000 n
+0018790752 00000 n
+0018790883 00000 n
+0018791005 00000 n
+0018791129 00000 n
+0018791251 00000 n
+0018791374 00000 n
+0018791504 00000 n
+0018791634 00000 n
+0018791775 00000 n
+0018791916 00000 n
+0018792063 00000 n
+0018792210 00000 n
+0018792380 00000 n
+0018792550 00000 n
+0018792702 00000 n
+0018792854 00000 n
+0018792996 00000 n
+0018793139 00000 n
+0018793277 00000 n
+0018793415 00000 n
+0018793540 00000 n
+0018793667 00000 n
+0018793792 00000 n
+0018793919 00000 n
+0018794044 00000 n
+0018794169 00000 n
+0018794300 00000 n
+0018794432 00000 n
+0018794559 00000 n
+0018794687 00000 n
+0018794820 00000 n
+0018794954 00000 n
+0018795084 00000 n
+0018795216 00000 n
+0018795342 00000 n
+0018795469 00000 n
+0018795596 00000 n
+0018795725 00000 n
+0018795847 00000 n
+0018795971 00000 n
+0018796115 00000 n
+0018796259 00000 n
+0018796381 00000 n
+0018796505 00000 n
+0018796634 00000 n
+0018796765 00000 n
+0018796897 00000 n
+0018797031 00000 n
+0018797156 00000 n
+0018797283 00000 n
+0018797404 00000 n
+0018797527 00000 n
+0018797658 00000 n
+0018797791 00000 n
+0018797933 00000 n
+0018798077 00000 n
+0018798219 00000 n
+0018798363 00000 n
+0018798512 00000 n
+0018798663 00000 n
+0018798807 00000 n
+0018798952 00000 n
+0018799078 00000 n
+0018799206 00000 n
+0018799330 00000 n
+0018799456 00000 n
+0018799585 00000 n
+0018799714 00000 n
+0018799839 00000 n
+0018799965 00000 n
+0018800096 00000 n
+0018800227 00000 n
+0018800367 00000 n
+0018800509 00000 n
+0018800641 00000 n
+0018800773 00000 n
+0018800911 00000 n
+0018801049 00000 n
+0018801181 00000 n
+0018801313 00000 n
+0018801448 00000 n
+0018801584 00000 n
+0018801714 00000 n
+0018801845 00000 n
+0018801980 00000 n
+0018802115 00000 n
+0018802258 00000 n
+0018802401 00000 n
+0018802542 00000 n
+0018802684 00000 n
+0018802812 00000 n
+0018802941 00000 n
+0018803071 00000 n
+0018803201 00000 n
+0018803328 00000 n
+0018803455 00000 n
+0018803574 00000 n
+0018803695 00000 n
+0018803835 00000 n
+0018803975 00000 n
+0018804099 00000 n
+0018804224 00000 n
+0018804345 00000 n
+0018804468 00000 n
+0018804593 00000 n
+0018804720 00000 n
+0018804837 00000 n
+0018804954 00000 n
+0018805072 00000 n
+0018805191 00000 n
+0018805306 00000 n
+0018805422 00000 n
+0018805539 00000 n
+0018805657 00000 n
+0018805776 00000 n
+0018805896 00000 n
+0018806015 00000 n
+0018806136 00000 n
+0018806255 00000 n
+0018806376 00000 n
+0018806511 00000 n
+0018806648 00000 n
+0018806766 00000 n
+0018806886 00000 n
+0018807011 00000 n
+0018807137 00000 n
+0018807266 00000 n
+0018807396 00000 n
+0018807519 00000 n
+0018807643 00000 n
+0018807776 00000 n
+0018807909 00000 n
+0018808025 00000 n
+0018808142 00000 n
+0018808275 00000 n
+0018808410 00000 n
+0018808544 00000 n
+0018808680 00000 n
+0018808804 00000 n
+0018808929 00000 n
+0018809052 00000 n
+0018809177 00000 n
+0018809330 00000 n
+0018809483 00000 n
+0018809626 00000 n
+0018809770 00000 n
+0018809895 00000 n
+0018810021 00000 n
+0018810143 00000 n
+0018810265 00000 n
+0018810391 00000 n
+0018810518 00000 n
+0018810635 00000 n
+0018810753 00000 n
+0018810887 00000 n
+0018811021 00000 n
+0018811150 00000 n
+0018811279 00000 n
+0018811403 00000 n
+0018811529 00000 n
+0018811656 00000 n
+0018811783 00000 n
+0018811908 00000 n
+0018812035 00000 n
+0018812161 00000 n
+0018812288 00000 n
+0018812415 00000 n
+0018812543 00000 n
+0018812666 00000 n
+0018812790 00000 n
+0018812911 00000 n
+0018813034 00000 n
+0018813169 00000 n
+0018813305 00000 n
+0018813433 00000 n
+0018813562 00000 n
+0018813682 00000 n
+0018813805 00000 n
+0018813932 00000 n
+0018814059 00000 n
+0018814187 00000 n
+0018814317 00000 n
+0018814435 00000 n
+0018814555 00000 n
+0018814670 00000 n
+0018814787 00000 n
+0018814904 00000 n
+0018815023 00000 n
+0018815141 00000 n
+0018815261 00000 n
+0018815389 00000 n
+0018815517 00000 n
+0018815642 00000 n
+0018815768 00000 n
+0018815899 00000 n
+0018816031 00000 n
+0018816159 00000 n
+0018816287 00000 n
+0018816413 00000 n
+0018816542 00000 n
+0018816672 00000 n
+0018816804 00000 n
+0018816933 00000 n
+0018817064 00000 n
+0018817193 00000 n
+0018817323 00000 n
+0018817447 00000 n
+0018817572 00000 n
+0018817699 00000 n
+0018817828 00000 n
+0018817960 00000 n
+0018818092 00000 n
+0018818216 00000 n
+0018818342 00000 n
+0018818472 00000 n
+0018818603 00000 n
+0018818730 00000 n
+0018818859 00000 n
+0018818987 00000 n
+0018819115 00000 n
+0018819246 00000 n
+0018819378 00000 n
+0018819507 00000 n
+0018819636 00000 n
+0018819783 00000 n
+0018819930 00000 n
+0018820054 00000 n
+0018820179 00000 n
+0018820304 00000 n
+0018820430 00000 n
+0018820564 00000 n
+0018820699 00000 n
+0018820830 00000 n
+0018820963 00000 n
+0018821097 00000 n
+0018821233 00000 n
+0018821355 00000 n
+0018821477 00000 n
+0018821597 00000 n
+0018821717 00000 n
+0018821844 00000 n
+0018821972 00000 n
+0018822100 00000 n
+0018822230 00000 n
+0018822357 00000 n
+0018822485 00000 n
+0018822612 00000 n
+0018822741 00000 n
+0018822873 00000 n
+0018823007 00000 n
+0018823168 00000 n
+0018823329 00000 n
+0018823452 00000 n
+0018823577 00000 n
+0018823703 00000 n
+0018823831 00000 n
+0018823961 00000 n
+0018824091 00000 n
+0018824219 00000 n
+0018824347 00000 n
+0018824473 00000 n
+0018824600 00000 n
+0018824727 00000 n
+0018824854 00000 n
+0018824974 00000 n
+0018825096 00000 n
+0018825220 00000 n
+0018825345 00000 n
+0018825478 00000 n
+0018825611 00000 n
+0018825732 00000 n
+0018825854 00000 n
+0018825981 00000 n
+0018826110 00000 n
+0018826229 00000 n
+0018826349 00000 n
+0018826466 00000 n
+0018826585 00000 n
+0018826704 00000 n
+0018826824 00000 n
+0018826946 00000 n
+0018827070 00000 n
+0018827200 00000 n
+0018827330 00000 n
+0018827469 00000 n
+0018827610 00000 n
+0018827738 00000 n
+0018827866 00000 n
+0018827989 00000 n
+0018828159 00000 n
+0018828284 00000 n
+0018828408 00000 n
+0018828534 00000 n
+0018828660 00000 n
+0018828784 00000 n
+0018828909 00000 n
+0018829034 00000 n
+0018829159 00000 n
+0018829277 00000 n
+0018829397 00000 n
+0018829517 00000 n
+0018829639 00000 n
+0018829760 00000 n
+0018829881 00000 n
+0018830042 00000 n
+0018830203 00000 n
+0018830324 00000 n
+0018830447 00000 n
+0018830571 00000 n
+0018830696 00000 n
+0018830814 00000 n
+0018831012 00000 n
+0018831134 00000 n
+0018831252 00000 n
+0018831376 00000 n
+0018831501 00000 n
+0018831627 00000 n
+0018831755 00000 n
+0018831884 00000 n
+0018832016 00000 n
+0018832136 00000 n
+0018832257 00000 n
+0018832391 00000 n
+0018832526 00000 n
+0018832646 00000 n
+0018832768 00000 n
+0018832896 00000 n
+0018833026 00000 n
+0018833150 00000 n
+0018833275 00000 n
+0018833393 00000 n
+0018833512 00000 n
+0018833639 00000 n
+0018833766 00000 n
+0018833891 00000 n
+0018834016 00000 n
+0018834147 00000 n
+0018834279 00000 n
+0018834396 00000 n
+0018834515 00000 n
+0018834635 00000 n
+0018834757 00000 n
+0018834891 00000 n
+0018835026 00000 n
+0018835150 00000 n
+0018835276 00000 n
+0018835398 00000 n
+0018835520 00000 n
+0018835644 00000 n
+0018835698 00000 n
+0018835822 00000 n
+0018835970 00000 n
+0018836118 00000 n
+0018836245 00000 n
+0018836372 00000 n
+0018836513 00000 n
+0018836654 00000 n
+0018836774 00000 n
+0018836896 00000 n
+0018837016 00000 n
+0018837138 00000 n
+0018837267 00000 n
+0018837397 00000 n
+0018837534 00000 n
+0018837672 00000 n
+0018837790 00000 n
+0018837910 00000 n
+0018838034 00000 n
+0018838159 00000 n
+0018838279 00000 n
+0018838401 00000 n
+0018838523 00000 n
+0018838646 00000 n
+0018838767 00000 n
+0018838889 00000 n
+0018839013 00000 n
+0018839138 00000 n
+0018839258 00000 n
+0018839380 00000 n
+0018839512 00000 n
+0018839644 00000 n
+0018839768 00000 n
+0018839893 00000 n
+0018840033 00000 n
+0018840173 00000 n
+0018840293 00000 n
+0018840415 00000 n
+0018840551 00000 n
+0018840687 00000 n
+0018840807 00000 n
+0018840929 00000 n
+0018841053 00000 n
+0018841178 00000 n
+0018841299 00000 n
+0018841422 00000 n
+0018841573 00000 n
+0018841726 00000 n
+0018841844 00000 n
+0018841962 00000 n
+0018842096 00000 n
+0018842230 00000 n
+0018842354 00000 n
+0018842406 00000 n
+0018842758 00000 n
+0018842884 00000 n
+0018843001 00000 n
+0018843119 00000 n
+0018843238 00000 n
+0018843357 00000 n
+0018843485 00000 n
+0018843614 00000 n
+0018843737 00000 n
+0018843862 00000 n
+0018843988 00000 n
+0018844116 00000 n
+0018844234 00000 n
+0018844352 00000 n
+0018844469 00000 n
+0018844588 00000 n
+0018844710 00000 n
+0018844834 00000 n
+0018844993 00000 n
+0018845152 00000 n
+0018845296 00000 n
+0018845441 00000 n
+0018845523 00000 n
+0018845751 00000 n
+0018845911 00000 n
+0018846067 00000 n
+0018846286 00000 n
+0018846491 00000 n
+0018846768 00000 n
+0018847032 00000 n
+0018847266 00000 n
+0018847515 00000 n
+0018847860 00000 n
+0018848193 00000 n
+0018848450 00000 n
+0018848711 00000 n
+0018848996 00000 n
+0018849242 00000 n
+0018849438 00000 n
+0018849752 00000 n
+0018849961 00000 n
+0018850175 00000 n
+0018850423 00000 n
+0018850661 00000 n
+0018851002 00000 n
+0018851279 00000 n
+0018851636 00000 n
+0018851937 00000 n
+0018852310 00000 n
+0018852520 00000 n
+0018852721 00000 n
+0018852943 00000 n
+0018853172 00000 n
+0018853385 00000 n
+0018853582 00000 n
+0018853771 00000 n
+0018854000 00000 n
+0018854197 00000 n
+0018854458 00000 n
+0018854668 00000 n
+0018854886 00000 n
+0018855124 00000 n
+0018855322 00000 n
+0018855501 00000 n
+0018855754 00000 n
+0018855977 00000 n
+0018856248 00000 n
+0018856546 00000 n
+0018856837 00000 n
+0018857067 00000 n
+0018857317 00000 n
+0018857571 00000 n
+0018857769 00000 n
+0018858019 00000 n
+0018858281 00000 n
+0018858631 00000 n
+0018858853 00000 n
+0018859135 00000 n
+0018859509 00000 n
+0018859724 00000 n
+0018859962 00000 n
+0018860265 00000 n
+0018860531 00000 n
+0018860821 00000 n
+0018861199 00000 n
+0018861545 00000 n
+0018861795 00000 n
+0018862045 00000 n
+0018862319 00000 n
+0018862685 00000 n
+0018862947 00000 n
+0018863146 00000 n
+0018863391 00000 n
+0018863614 00000 n
+0018863936 00000 n
+0018864250 00000 n
+0018864656 00000 n
+0018864982 00000 n
+0018865272 00000 n
+0018865555 00000 n
+0018865765 00000 n
+0018865960 00000 n
+0018866194 00000 n
+0018866396 00000 n
+0018866662 00000 n
+0018866864 00000 n
+0018867090 00000 n
+0018867296 00000 n
+0018867522 00000 n
+0018867716 00000 n
+0018868054 00000 n
+0018868368 00000 n
+0018868603 00000 n
+0018868844 00000 n
+0018869039 00000 n
+0018869234 00000 n
+0018869539 00000 n
+0018869734 00000 n
+0018869980 00000 n
+0018870318 00000 n
+0018870553 00000 n
+0018870787 00000 n
+0018870982 00000 n
+0018871204 00000 n
+0018871414 00000 n
+0018871712 00000 n
+0018871998 00000 n
+0018872300 00000 n
+0018872550 00000 n
+0018872784 00000 n
+0018873186 00000 n
+0018873456 00000 n
+0018873838 00000 n
+0018874140 00000 n
+0018874386 00000 n
+0018874729 00000 n
+0018874982 00000 n
+0018875185 00000 n
+0018875387 00000 n
+0018875654 00000 n
+0018875883 00000 n
+0018876067 00000 n
+0018876332 00000 n
+0018876515 00000 n
+0018876721 00000 n
+0018877003 00000 n
+0018877345 00000 n
+0018877547 00000 n
+0018877738 00000 n
+0018878019 00000 n
+0018878231 00000 n
+0018878452 00000 n
+0018878663 00000 n
+0018878905 00000 n
+0018879123 00000 n
+0018879366 00000 n
+0018879627 00000 n
+0018879874 00000 n
+0018880140 00000 n
+0018880402 00000 n
+0018880616 00000 n
+0018880950 00000 n
+0018881233 00000 n
+0018881519 00000 n
+0018881750 00000 n
+0018881960 00000 n
+0018882158 00000 n
+0018882420 00000 n
+0018882638 00000 n
+0018882872 00000 n
+0018883142 00000 n
+0018883388 00000 n
+0018883642 00000 n
+0018883900 00000 n
+0018884098 00000 n
+0018884320 00000 n
+0018884626 00000 n
+0018884841 00000 n
+0018885066 00000 n
+0018885273 00000 n
+0018885507 00000 n
+0018885709 00000 n
+0018885899 00000 n
+0018886086 00000 n
+0018886416 00000 n
+0018886655 00000 n
+0018886853 00000 n
+0018887071 00000 n
+0018887273 00000 n
+0018887479 00000 n
+0018887697 00000 n
+0018887911 00000 n
+0018888121 00000 n
+0018888351 00000 n
+0018888557 00000 n
+0018888775 00000 n
+0018888997 00000 n
+0018889303 00000 n
+0018889541 00000 n
+0018889855 00000 n
+0018890085 00000 n
+0018890355 00000 n
+0018890665 00000 n
+0018890872 00000 n
+0018891133 00000 n
+0018891332 00000 n
+0018891566 00000 n
+0018891841 00000 n
+0018892143 00000 n
+0018892410 00000 n
+0018892660 00000 n
+0018892902 00000 n
+0018893136 00000 n
+0018893382 00000 n
+0018893640 00000 n
+0018894006 00000 n
+0018894236 00000 n
+0018894478 00000 n
+0018894856 00000 n
+0018895238 00000 n
+0018895560 00000 n
+0018895790 00000 n
+0018896056 00000 n
+0018896306 00000 n
+0018896545 00000 n
+0018896851 00000 n
+0018897082 00000 n
+0018897364 00000 n
+0018897562 00000 n
+0018897828 00000 n
+0018898098 00000 n
+0018898392 00000 n
+0018898650 00000 n
+0018898976 00000 n
+0018899258 00000 n
+0018899460 00000 n
+0018899707 00000 n
+0018899992 00000 n
+0018900179 00000 n
+0018900389 00000 n
+0018900595 00000 n
+0018900946 00000 n
+0018901175 00000 n
+0018901359 00000 n
+0018901672 00000 n
+0018901879 00000 n
+0018902113 00000 n
+0018902363 00000 n
+0018902569 00000 n
+0018902843 00000 n
+0018903053 00000 n
+0018903295 00000 n
+0018903502 00000 n
+0018903763 00000 n
+0018903970 00000 n
+0018904192 00000 n
+0018904442 00000 n
+0018904632 00000 n
+0018904842 00000 n
+0018905104 00000 n
+0018905330 00000 n
+0018905517 00000 n
+0018905714 00000 n
+0018906013 00000 n
+0018906331 00000 n
+0018906606 00000 n
+0018906803 00000 n
+0018907006 00000 n
+0018907248 00000 n
+0018907499 00000 n
+0018907680 00000 n
+0018907879 00000 n
+0018908081 00000 n
+0018908272 00000 n
+0018908461 00000 n
+0018908660 00000 n
+0018908847 00000 n
+0018909084 00000 n
+0018909283 00000 n
+0018909565 00000 n
+0018909752 00000 n
+0018910009 00000 n
+0018910196 00000 n
+0018910395 00000 n
+0018910574 00000 n
+0018910853 00000 n
+0018911043 00000 n
+0018911305 00000 n
+0018911659 00000 n
+0018911893 00000 n
+0018912087 00000 n
+0018912313 00000 n
+0018912607 00000 n
+0018912837 00000 n
+0018913175 00000 n
+0018913421 00000 n
+0018913687 00000 n
+0018914041 00000 n
+0018914328 00000 n
+0018931312 00000 n
+0018931358 00000 n
+0018931633 00000 n
+0018931908 00000 n
+0018945082 00000 n
+0018945298 00000 n
+0018946654 00000 n
+0018947572 00000 n
+0018959299 00000 n
+0018959520 00000 n
+0018960876 00000 n
+0018961793 00000 n
+0018972691 00000 n
+0018972917 00000 n
+0018974273 00000 n
+0018975191 00000 n
+0018982077 00000 n
+0018982292 00000 n
+0018983648 00000 n
+0018984565 00000 n
+0018988851 00000 n
+0018989067 00000 n
+0018989410 00000 n
+0018990329 00000 n
+0018991608 00000 n
+0018991832 00000 n
+0018992152 00000 n
+0018993291 00000 n
+0019002810 00000 n
+0019003040 00000 n
+0019004396 00000 n
+0019005313 00000 n
+0019006588 00000 n
+0019006814 00000 n
+0019007130 00000 n
+0019008269 00000 n
+0019013131 00000 n
+0019013343 00000 n
+0019014699 00000 n
+0019015615 00000 n
+0019017700 00000 n
+0019017915 00000 n
+0019018241 00000 n
+0019019159 00000 n
+0019022643 00000 n
+0019022857 00000 n
+0019024213 00000 n
+0019025129 00000 n
+0019028827 00000 n
+0019029048 00000 n
+0019029364 00000 n
+0019030281 00000 n
+0019033836 00000 n
+0019034062 00000 n
+0019034366 00000 n
trailer
<< /Size 6067
/Root 2 0 R
/Info 1 0 R
>>
startxref
-19035342
+19035282
%%EOF
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 7ac1386c676..8b2e7aa9597 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -41933,6 +41933,8 @@ loadScripts(document, 'script');</script>
<dd>
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>
</dd>
+<dt>isPartialTimeRange() - Method in class org.apache.hadoop.hbase.rest.RowSpec</dt>
+<dd> </dd>
<dt>isPBMagicPrefix(byte[]) - Static method in class org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil</dt>
<dd>
<div class="block">Returns True if passed <code>bytes</code> has <code>ProtobufMagic.PB_MAGIC</code> for a prefix.</div>
@@ -54175,6 +54177,8 @@ service.</div>
VisibilityController still needs this, need to change the logic there first.</div>
</div>
</dd>
+<dt>preProcessError(Throwable) - Method in class org.apache.hadoop.hbase.client.AsyncAdminRequestRetryingCaller</dt>
+<dd> </dd>
<dt>preProcessError(Throwable) - Method in class org.apache.hadoop.hbase.client.AsyncRegionReplicationRetryingCaller</dt>
<dd> </dd>
<dt>preProcessError(Throwable) - Method in class org.apache.hadoop.hbase.client.AsyncRpcRetryingCaller</dt>
diff --git a/apidocs/member-search-index.js b/apidocs/member-search-index.js
index 37a78c2da5f..2466138a1d7 100644
--- a/apidocs/member-search-index.js
+++ b/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
index bf8365da5d4..32789d66210 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
@@ -35,55 +35,71 @@
<span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
<span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36"> @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37"> public interface Callable<T> {</span>
-<span class="source-line-no">038</span><span id="line-38"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39"> }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41"> private final Callable<T> callable;</span>
-<span class="source-line-no">042</span><span id="line-42"> private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
-<span class="source-line-no">047</span><span id="line-47"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49"> this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50"> this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51"> }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53"> @Override</span>
-<span class="source-line-no">054</span><span id="line-54"> protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55"> AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56"> try {</span>
-<span class="source-line-no">057</span><span id="line-57"> adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58"> } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
-<span class="source-line-no">060</span><span id="line-60"> });</span>
-<span class="source-line-no">061</span><span id="line-61"> return;</span>
-<span class="source-line-no">062</span><span id="line-62"> }</span>
-<span class="source-line-no">063</span><span id="line-63"> resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
-<span class="source-line-no">065</span><span id="line-65"> if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66"> onError(error, () -> "Call to admin stub failed", err -> {</span>
-<span class="source-line-no">067</span><span id="line-67"> });</span>
-<span class="source-line-no">068</span><span id="line-68"> return;</span>
-<span class="source-line-no">069</span><span id="line-69"> }</span>
-<span class="source-line-no">070</span><span id="line-70"> future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71"> });</span>
-<span class="source-line-no">072</span><span id="line-72"> }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38"> @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39"> public interface Callable<T> {</span>
+<span class="source-line-no">040</span><span id="line-40"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41"> }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> private final Callable<T> callable;</span>
+<span class="source-line-no">044</span><span id="line-44"> private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
+<span class="source-line-no">049</span><span id="line-49"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51"> this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52"> this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57"> // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58"> // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59"> // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60"> // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61"> // immediately</span>
+<span class="source-line-no">062</span><span id="line-62"> if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63"> return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64"> error);</span>
+<span class="source-line-no">065</span><span id="line-65"> }</span>
+<span class="source-line-no">066</span><span id="line-66"> return error;</span>
+<span class="source-line-no">067</span><span id="line-67"> }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69"> @Override</span>
+<span class="source-line-no">070</span><span id="line-70"> protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71"> AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72"> try {</span>
+<span class="source-line-no">073</span><span id="line-73"> adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74"> } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
+<span class="source-line-no">076</span><span id="line-76"> });</span>
+<span class="source-line-no">077</span><span id="line-77"> return;</span>
+<span class="source-line-no">078</span><span id="line-78"> }</span>
+<span class="source-line-no">079</span><span id="line-79"> resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
+<span class="source-line-no">081</span><span id="line-81"> if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82"> onError(error, () -> "Call to admin stub failed", err -> {</span>
+<span class="source-line-no">083</span><span id="line-83"> });</span>
+<span class="source-line-no">084</span><span id="line-84"> return;</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87"> });</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
index 0dd75340481..51321263b96 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
@@ -35,55 +35,71 @@
<span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
<span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36"> @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37"> public interface Callable<T> {</span>
-<span class="source-line-no">038</span><span id="line-38"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39"> }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41"> private final Callable<T> callable;</span>
-<span class="source-line-no">042</span><span id="line-42"> private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
-<span class="source-line-no">047</span><span id="line-47"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49"> this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50"> this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51"> }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53"> @Override</span>
-<span class="source-line-no">054</span><span id="line-54"> protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55"> AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56"> try {</span>
-<span class="source-line-no">057</span><span id="line-57"> adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58"> } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
-<span class="source-line-no">060</span><span id="line-60"> });</span>
-<span class="source-line-no">061</span><span id="line-61"> return;</span>
-<span class="source-line-no">062</span><span id="line-62"> }</span>
-<span class="source-line-no">063</span><span id="line-63"> resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
-<span class="source-line-no">065</span><span id="line-65"> if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66"> onError(error, () -> "Call to admin stub failed", err -> {</span>
-<span class="source-line-no">067</span><span id="line-67"> });</span>
-<span class="source-line-no">068</span><span id="line-68"> return;</span>
-<span class="source-line-no">069</span><span id="line-69"> }</span>
-<span class="source-line-no">070</span><span id="line-70"> future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71"> });</span>
-<span class="source-line-no">072</span><span id="line-72"> }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38"> @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39"> public interface Callable<T> {</span>
+<span class="source-line-no">040</span><span id="line-40"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41"> }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> private final Callable<T> callable;</span>
+<span class="source-line-no">044</span><span id="line-44"> private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
+<span class="source-line-no">049</span><span id="line-49"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51"> this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52"> this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57"> // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58"> // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59"> // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60"> // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61"> // immediately</span>
+<span class="source-line-no">062</span><span id="line-62"> if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63"> return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64"> error);</span>
+<span class="source-line-no">065</span><span id="line-65"> }</span>
+<span class="source-line-no">066</span><span id="line-66"> return error;</span>
+<span class="source-line-no">067</span><span id="line-67"> }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69"> @Override</span>
+<span class="source-line-no">070</span><span id="line-70"> protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71"> AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72"> try {</span>
+<span class="source-line-no">073</span><span id="line-73"> adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74"> } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
+<span class="source-line-no">076</span><span id="line-76"> });</span>
+<span class="source-line-no">077</span><span id="line-77"> return;</span>
+<span class="source-line-no">078</span><span id="line-78"> }</span>
+<span class="source-line-no">079</span><span id="line-79"> resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
+<span class="source-line-no">081</span><span id="line-81"> if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82"> onError(error, () -> "Call to admin stub failed", err -> {</span>
+<span class="source-line-no">083</span><span id="line-83"> });</span>
+<span class="source-line-no">084</span><span id="line-84"> return;</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87"> });</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
index e50655d1a8f..55c4e4967ac 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
@@ -69,73 +69,78 @@
<span class="source-line-no">056</span><span id="line-56"> }</span>
<span class="source-line-no">057</span><span id="line-57"> }</span>
<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"> get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">060</span><span id="line-60"> get.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">061</span><span id="line-61"> if (filter != null) {</span>
-<span class="source-line-no">062</span><span id="line-62"> get.setFilter(filter);</span>
+<span class="source-line-no">059</span><span id="line-59"> if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">060</span><span id="line-60"> get.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">061</span><span id="line-61"> } else {</span>
+<span class="source-line-no">062</span><span id="line-62"> get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
<span class="source-line-no">063</span><span id="line-63"> }</span>
-<span class="source-line-no">064</span><span id="line-64"> get.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">065</span><span id="line-65"> Result result = table.get(get);</span>
-<span class="source-line-no">066</span><span id="line-66"> if (result != null && !result.isEmpty()) {</span>
-<span class="source-line-no">067</span><span id="line-67"> valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65"> get.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">066</span><span id="line-66"> if (filter != null) {</span>
+<span class="source-line-no">067</span><span id="line-67"> get.setFilter(filter);</span>
<span class="source-line-no">068</span><span id="line-68"> }</span>
-<span class="source-line-no">069</span><span id="line-69"> } catch (DoNotRetryIOException e) {</span>
-<span class="source-line-no">070</span><span id="line-70"> // Warn here because Stargate will return 404 in the case if multiple</span>
-<span class="source-line-no">071</span><span id="line-71"> // column families were specified but one did not exist -- currently</span>
-<span class="source-line-no">072</span><span id="line-72"> // HBase will fail the whole Get.</span>
-<span class="source-line-no">073</span><span id="line-73"> // Specifying multiple columns in a URI should be uncommon usage but</span>
-<span class="source-line-no">074</span><span id="line-74"> // help to avoid confusion by leaving a record of what happened here in</span>
-<span class="source-line-no">075</span><span id="line-75"> // the log.</span>
-<span class="source-line-no">076</span><span id="line-76"> LOG.warn(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">077</span><span id="line-77"> // Lets get the exception rethrown to get a more meaningful error message than 404</span>
-<span class="source-line-no">078</span><span id="line-78"> if (e instanceof AccessDeniedException) {</span>
-<span class="source-line-no">079</span><span id="line-79"> throw e;</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> }</span>
-<span class="source-line-no">082</span><span id="line-82"> }</span>
-<span class="source-line-no">083</span><span id="line-83"></span>
-<span class="source-line-no">084</span><span id="line-84"> @Override</span>
-<span class="source-line-no">085</span><span id="line-85"> public void close() {</span>
-<span class="source-line-no">086</span><span id="line-86"> }</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> @Override</span>
-<span class="source-line-no">089</span><span id="line-89"> public boolean hasNext() {</span>
-<span class="source-line-no">090</span><span id="line-90"> if (cache != null) {</span>
-<span class="source-line-no">091</span><span id="line-91"> return true;</span>
-<span class="source-line-no">092</span><span id="line-92"> }</span>
-<span class="source-line-no">093</span><span id="line-93"> if (valuesI == null) {</span>
-<span class="source-line-no">094</span><span id="line-94"> return false;</span>
-<span class="source-line-no">095</span><span id="line-95"> }</span>
-<span class="source-line-no">096</span><span id="line-96"> return valuesI.hasNext();</span>
-<span class="source-line-no">097</span><span id="line-97"> }</span>
-<span class="source-line-no">098</span><span id="line-98"></span>
-<span class="source-line-no">099</span><span id="line-99"> @Override</span>
-<span class="source-line-no">100</span><span id="line-100"> public Cell next() {</span>
-<span class="source-line-no">101</span><span id="line-101"> if (cache != null) {</span>
-<span class="source-line-no">102</span><span id="line-102"> Cell kv = cache;</span>
-<span class="source-line-no">103</span><span id="line-103"> cache = null;</span>
-<span class="source-line-no">104</span><span id="line-104"> return kv;</span>
-<span class="source-line-no">105</span><span id="line-105"> }</span>
-<span class="source-line-no">106</span><span id="line-106"> if (valuesI == null) {</span>
-<span class="source-line-no">107</span><span id="line-107"> return null;</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> try {</span>
-<span class="source-line-no">110</span><span id="line-110"> return valuesI.next();</span>
-<span class="source-line-no">111</span><span id="line-111"> } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">069</span><span id="line-69"> get.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">070</span><span id="line-70"> Result result = table.get(get);</span>
+<span class="source-line-no">071</span><span id="line-71"> if (result != null && !result.isEmpty()) {</span>
+<span class="source-line-no">072</span><span id="line-72"> valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">073</span><span id="line-73"> }</span>
+<span class="source-line-no">074</span><span id="line-74"> } catch (DoNotRetryIOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75"> // Warn here because Stargate will return 404 in the case if multiple</span>
+<span class="source-line-no">076</span><span id="line-76"> // column families were specified but one did not exist -- currently</span>
+<span class="source-line-no">077</span><span id="line-77"> // HBase will fail the whole Get.</span>
+<span class="source-line-no">078</span><span id="line-78"> // Specifying multiple columns in a URI should be uncommon usage but</span>
+<span class="source-line-no">079</span><span id="line-79"> // help to avoid confusion by leaving a record of what happened here in</span>
+<span class="source-line-no">080</span><span id="line-80"> // the log.</span>
+<span class="source-line-no">081</span><span id="line-81"> LOG.warn(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">082</span><span id="line-82"> // Lets get the exception rethrown to get a more meaningful error message than 404</span>
+<span class="source-line-no">083</span><span id="line-83"> if (e instanceof AccessDeniedException) {</span>
+<span class="source-line-no">084</span><span id="line-84"> throw e;</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> }</span>
+<span class="source-line-no">087</span><span id="line-87"> }</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89"> @Override</span>
+<span class="source-line-no">090</span><span id="line-90"> public void close() {</span>
+<span class="source-line-no">091</span><span id="line-91"> }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93"> @Override</span>
+<span class="source-line-no">094</span><span id="line-94"> public boolean hasNext() {</span>
+<span class="source-line-no">095</span><span id="line-95"> if (cache != null) {</span>
+<span class="source-line-no">096</span><span id="line-96"> return true;</span>
+<span class="source-line-no">097</span><span id="line-97"> }</span>
+<span class="source-line-no">098</span><span id="line-98"> if (valuesI == null) {</span>
+<span class="source-line-no">099</span><span id="line-99"> return false;</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"> return valuesI.hasNext();</span>
+<span class="source-line-no">102</span><span id="line-102"> }</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104"> @Override</span>
+<span class="source-line-no">105</span><span id="line-105"> public Cell next() {</span>
+<span class="source-line-no">106</span><span id="line-106"> if (cache != null) {</span>
+<span class="source-line-no">107</span><span id="line-107"> Cell kv = cache;</span>
+<span class="source-line-no">108</span><span id="line-108"> cache = null;</span>
+<span class="source-line-no">109</span><span id="line-109"> return kv;</span>
+<span class="source-line-no">110</span><span id="line-110"> }</span>
+<span class="source-line-no">111</span><span id="line-111"> if (valuesI == null) {</span>
<span class="source-line-no">112</span><span id="line-112"> return null;</span>
<span class="source-line-no">113</span><span id="line-113"> }</span>
-<span class="source-line-no">114</span><span id="line-114"> }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116"> @Override</span>
-<span class="source-line-no">117</span><span id="line-117"> public void putBack(Cell kv) {</span>
-<span class="source-line-no">118</span><span id="line-118"> this.cache = kv;</span>
+<span class="source-line-no">114</span><span id="line-114"> try {</span>
+<span class="source-line-no">115</span><span id="line-115"> return valuesI.next();</span>
+<span class="source-line-no">116</span><span id="line-116"> } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">117</span><span id="line-117"> return null;</span>
+<span class="source-line-no">118</span><span id="line-118"> }</span>
<span class="source-line-no">119</span><span id="line-119"> }</span>
<span class="source-line-no">120</span><span id="line-120"></span>
<span class="source-line-no">121</span><span id="line-121"> @Override</span>
-<span class="source-line-no">122</span><span id="line-122"> public void remove() {</span>
-<span class="source-line-no">123</span><span id="line-123"> throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">122</span><span id="line-122"> public void putBack(Cell kv) {</span>
+<span class="source-line-no">123</span><span id="line-123"> this.cache = kv;</span>
<span class="source-line-no">124</span><span id="line-124"> }</span>
-<span class="source-line-no">125</span><span id="line-125">}</span>
+<span class="source-line-no">125</span><span id="line-125"></span>
+<span class="source-line-no">126</span><span id="line-126"> @Override</span>
+<span class="source-line-no">127</span><span id="line-127"> public void remove() {</span>
+<span class="source-line-no">128</span><span id="line-128"> throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">129</span><span id="line-129"> }</span>
+<span class="source-line-no">130</span><span id="line-130">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
index dfc7f292a8a..76546670279 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
@@ -59,387 +59,394 @@
<span class="source-line-no">046</span><span id="line-46"> private long endTime = DEFAULT_END_TIMESTAMP;</span>
<span class="source-line-no">047</span><span id="line-47"> private int maxVersions = 1;</span>
<span class="source-line-no">048</span><span id="line-48"> private int maxValues = Integer.MAX_VALUE;</span>
-<span class="source-line-no">049</span><span id="line-49"></span>
-<span class="source-line-no">050</span><span id="line-50"> public RowSpec(String path) throws IllegalArgumentException {</span>
-<span class="source-line-no">051</span><span id="line-51"> this(path, null);</span>
-<span class="source-line-no">052</span><span id="line-52"> }</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54"> public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
-<span class="source-line-no">055</span><span id="line-55"> int i = 0;</span>
-<span class="source-line-no">056</span><span id="line-56"> while (path.charAt(i) == '/') {</span>
-<span class="source-line-no">057</span><span id="line-57"> i++;</span>
-<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"> i = parseRowKeys(path, i);</span>
-<span class="source-line-no">060</span><span id="line-60"> i = parseColumns(path, i);</span>
-<span class="source-line-no">061</span><span id="line-61"> i = parseTimestamp(path, i);</span>
-<span class="source-line-no">062</span><span id="line-62"> i = parseQueryParams(path, i);</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> if (keyEncoding != null) {</span>
-<span class="source-line-no">065</span><span id="line-65"> // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
-<span class="source-line-no">066</span><span id="line-66"> Base64.Decoder decoder;</span>
-<span class="source-line-no">067</span><span id="line-67"> switch (keyEncoding) {</span>
-<span class="source-line-no">068</span><span id="line-68"> case "b64":</span>
-<span class="source-line-no">069</span><span id="line-69"> case "base64":</span>
-<span class="source-line-no">070</span><span id="line-70"> case "b64url":</span>
-<span class="source-line-no">071</span><span id="line-71"> case "base64url":</span>
-<span class="source-line-no">072</span><span id="line-72"> decoder = Base64.getUrlDecoder();</span>
-<span class="source-line-no">073</span><span id="line-73"> break;</span>
-<span class="source-line-no">074</span><span id="line-74"> case "b64basic":</span>
-<span class="source-line-no">075</span><span id="line-75"> case "base64basic":</span>
-<span class="source-line-no">076</span><span id="line-76"> decoder = Base64.getDecoder();</span>
-<span class="source-line-no">077</span><span id="line-77"> break;</span>
-<span class="source-line-no">078</span><span id="line-78"> default:</span>
-<span class="source-line-no">079</span><span id="line-79"> throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> this.row = decoder.decode(this.row);</span>
-<span class="source-line-no">082</span><span id="line-82"> if (this.endRow != null) {</span>
-<span class="source-line-no">083</span><span id="line-83"> this.endRow = decoder.decode(this.endRow);</span>
-<span class="source-line-no">084</span><span id="line-84"> }</span>
-<span class="source-line-no">085</span><span id="line-85"> TreeSet<byte[]> decodedColumns = new TreeSet<>(Bytes.BYTES_COMPARATOR);</span>
-<span class="source-line-no">086</span><span id="line-86"> for (byte[] encodedColumn : this.columns) {</span>
-<span class="source-line-no">087</span><span id="line-87"> decodedColumns.add(decoder.decode(encodedColumn));</span>
-<span class="source-line-no">088</span><span id="line-88"> }</span>
-<span class="source-line-no">089</span><span id="line-89"> this.columns = decodedColumns;</span>
-<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"> }</span>
-<span class="source-line-no">092</span><span id="line-92"></span>
-<span class="source-line-no">093</span><span id="line-93"> private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">094</span><span id="line-94"> String startRow = null, endRow = null;</span>
-<span class="source-line-no">095</span><span id="line-95"> try {</span>
-<span class="source-line-no">096</span><span id="line-96"> StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">097</span><span id="line-97"> char c;</span>
-<span class="source-line-no">098</span><span id="line-98"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">099</span><span id="line-99"> sb.append(c);</span>
-<span class="source-line-no">100</span><span id="line-100"> i++;</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"> i++;</span>
-<span class="source-line-no">103</span><span id="line-103"> String row = startRow = sb.toString();</span>
-<span class="source-line-no">104</span><span id="line-104"> int idx = startRow.indexOf(',');</span>
-<span class="source-line-no">105</span><span id="line-105"> if (idx != -1) {</span>
-<span class="source-line-no">106</span><span id="line-106"> startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">107</span><span id="line-107"> endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">108</span><span id="line-108"> } else {</span>
-<span class="source-line-no">109</span><span id="line-109"> startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"> } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">112</span><span id="line-112"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">113</span><span id="line-113"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">114</span><span id="line-114"> throw new RuntimeException(e);</span>
-<span class="source-line-no">115</span><span id="line-115"> }</span>
-<span class="source-line-no">116</span><span id="line-116"> // HBase does not support wildcards on row keys so we will emulate a</span>
-<span class="source-line-no">117</span><span id="line-117"> // suffix glob by synthesizing appropriate start and end row keys for</span>
-<span class="source-line-no">118</span><span id="line-118"> // table scanning</span>
-<span class="source-line-no">119</span><span id="line-119"> if (startRow.charAt(startRow.length() - 1) == '*') {</span>
-<span class="source-line-no">120</span><span id="line-120"> if (endRow != null)</span>
-<span class="source-line-no">121</span><span id="line-121"> throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
-<span class="source-line-no">122</span><span id="line-122"> this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
-<span class="source-line-no">123</span><span id="line-123"> this.endRow = new byte[this.row.length + 1];</span>
-<span class="source-line-no">124</span><span id="line-124"> System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
-<span class="source-line-no">125</span><span id="line-125"> this.endRow[this.row.length] = (byte) 255;</span>
-<span class="source-line-no">126</span><span id="line-126"> } else {</span>
-<span class="source-line-no">127</span><span id="line-127"> this.row = Bytes.toBytes(startRow.toString());</span>
-<span class="source-line-no">128</span><span id="line-128"> if (endRow != null) {</span>
-<span class="source-line-no">129</span><span id="line-129"> this.endRow = Bytes.toBytes(endRow.toString());</span>
-<span class="source-line-no">130</span><span id="line-130"> }</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"> return i;</span>
-<span class="source-line-no">133</span><span id="line-133"> }</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">136</span><span id="line-136"> if (i >= path.length()) {</span>
-<span class="source-line-no">137</span><span id="line-137"> return i;</span>
-<span class="source-line-no">138</span><span id="line-138"> }</span>
-<span class="source-line-no">139</span><span id="line-139"> try {</span>
-<span class="source-line-no">140</span><span id="line-140"> char c;</span>
-<span class="source-line-no">141</span><span id="line-141"> StringBuilder column = new StringBuilder();</span>
-<span class="source-line-no">142</span><span id="line-142"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">143</span><span id="line-143"> if (c == ',') {</span>
-<span class="source-line-no">144</span><span id="line-144"> if (column.length() < 1) {</span>
-<span class="source-line-no">145</span><span id="line-145"> throw new IllegalArgumentException("invalid path");</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">148</span><span id="line-148"> this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">149</span><span id="line-149"> column.setLength(0);</span>
-<span class="source-line-no">150</span><span id="line-150"> i++;</span>
-<span class="source-line-no">151</span><span id="line-151"> continue;</span>
-<span class="source-line-no">152</span><span id="line-152"> }</span>
-<span class="source-line-no">153</span><span id="line-153"> column.append(c);</span>
-<span class="source-line-no">154</span><span id="line-154"> i++;</span>
-<span class="source-line-no">155</span><span id="line-155"> }</span>
-<span class="source-line-no">156</span><span id="line-156"> i++;</span>
-<span class="source-line-no">157</span><span id="line-157"> // trailing list entry</span>
-<span class="source-line-no">158</span><span id="line-158"> if (column.length() > 0) {</span>
-<span class="source-line-no">159</span><span id="line-159"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">160</span><span id="line-160"> this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">161</span><span id="line-161"> }</span>
-<span class="source-line-no">162</span><span id="line-162"> } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">163</span><span id="line-163"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">164</span><span id="line-164"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">165</span><span id="line-165"> // shouldn't happen</span>
-<span class="source-line-no">166</span><span id="line-166"> throw new RuntimeException(e);</span>
-<span class="source-line-no">167</span><span id="line-167"> }</span>
-<span class="source-line-no">168</span><span id="line-168"> return i;</span>
-<span class="source-line-no">169</span><span id="line-169"> }</span>
-<span class="source-line-no">170</span><span id="line-170"></span>
-<span class="source-line-no">171</span><span id="line-171"> private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">172</span><span id="line-172"> if (i >= path.length()) {</span>
-<span class="source-line-no">173</span><span id="line-173"> return i;</span>
-<span class="source-line-no">174</span><span id="line-174"> }</span>
-<span class="source-line-no">175</span><span id="line-175"> long time0 = 0, time1 = 0;</span>
-<span class="source-line-no">176</span><span id="line-176"> try {</span>
-<span class="source-line-no">177</span><span id="line-177"> char c = 0;</span>
-<span class="source-line-no">178</span><span id="line-178"> StringBuilder stamp = new StringBuilder();</span>
-<span class="source-line-no">179</span><span id="line-179"> while (i < path.length()) {</span>
-<span class="source-line-no">180</span><span id="line-180"> c = path.charAt(i);</span>
-<span class="source-line-no">181</span><span id="line-181"> if (c == '/' || c == ',') {</span>
-<span class="source-line-no">182</span><span id="line-182"> break;</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"> stamp.append(c);</span>
-<span class="source-line-no">185</span><span id="line-185"> i++;</span>
-<span class="source-line-no">186</span><span id="line-186"> }</span>
-<span class="source-line-no">187</span><span id="line-187"> try {</span>
-<span class="source-line-no">188</span><span id="line-188"> time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">189</span><span id="line-189"> } catch (NumberFormatException e) {</span>
-<span class="source-line-no">190</span><span id="line-190"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">191</span><span id="line-191"> }</span>
-<span class="source-line-no">192</span><span id="line-192"> if (c == ',') {</span>
-<span class="source-line-no">193</span><span id="line-193"> stamp = new StringBuilder();</span>
-<span class="source-line-no">194</span><span id="line-194"> i++;</span>
-<span class="source-line-no">195</span><span id="line-195"> while (i < path.length() && ((c = path.charAt(i)) != '/')) {</span>
-<span class="source-line-no">196</span><span id="line-196"> stamp.append(c);</span>
-<span class="source-line-no">197</span><span id="line-197"> i++;</span>
-<span class="source-line-no">198</span><span id="line-198"> }</span>
-<span class="source-line-no">199</span><span id="line-199"> try {</span>
-<span class="source-line-no">200</span><span id="line-200"> time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">201</span><span id="line-201"> } catch (NumberFormatException e) {</span>
-<span class="source-line-no">202</span><span id="line-202"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
-<span class="source-line-no">204</span><span id="line-204"> }</span>
-<span class="source-line-no">205</span><span id="line-205"> if (c == '/') {</span>
-<span class="source-line-no">206</span><span id="line-206"> i++;</span>
-<span class="source-line-no">207</span><span id="line-207"> }</span>
-<span class="source-line-no">208</span><span id="line-208"> } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">209</span><span id="line-209"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">210</span><span id="line-210"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">211</span><span id="line-211"> // shouldn't happen</span>
-<span class="source-line-no">212</span><span id="line-212"> throw new RuntimeException(e);</span>
-<span class="source-line-no">213</span><span id="line-213"> }</span>
-<span class="source-line-no">214</span><span id="line-214"> if (time1 != 0) {</span>
-<span class="source-line-no">215</span><span id="line-215"> startTime = time0;</span>
-<span class="source-line-no">216</span><span id="line-216"> endTime = time1;</span>
-<span class="source-line-no">217</span><span id="line-217"> } else {</span>
-<span class="source-line-no">218</span><span id="line-218"> endTime = time0;</span>
-<span class="source-line-no">219</span><span id="line-219"> }</span>
-<span class="source-line-no">220</span><span id="line-220"> return i;</span>
-<span class="source-line-no">221</span><span id="line-221"> }</span>
-<span class="source-line-no">222</span><span id="line-222"></span>
-<span class="source-line-no">223</span><span id="line-223"> private int parseQueryParams(final String path, int i) {</span>
-<span class="source-line-no">224</span><span id="line-224"> if (i >= path.length()) {</span>
-<span class="source-line-no">225</span><span id="line-225"> return i;</span>
-<span class="source-line-no">226</span><span id="line-226"> }</span>
-<span class="source-line-no">227</span><span id="line-227"> StringBuilder query = new StringBuilder();</span>
-<span class="source-line-no">228</span><span id="line-228"> try {</span>
-<span class="source-line-no">229</span><span id="line-229"> query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">230</span><span id="line-230"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">231</span><span id="line-231"> // should not happen</span>
-<span class="source-line-no">232</span><span id="line-232"> throw new RuntimeException(e);</span>
-<span class="source-line-no">233</span><span id="line-233"> }</span>
-<span class="source-line-no">234</span><span id="line-234"> i += query.length();</span>
-<span class="source-line-no">235</span><span id="line-235"> int j = 0;</span>
-<span class="source-line-no">236</span><span id="line-236"> while (j < query.length()) {</span>
-<span class="source-line-no">237</span><span id="line-237"> char c = query.charAt(j);</span>
-<span class="source-line-no">238</span><span id="line-238"> if (c != '?' && c != '&') {</span>
-<span class="source-line-no">239</span><span id="line-239"> break;</span>
-<span class="source-line-no">240</span><span id="line-240"> }</span>
-<span class="source-line-no">241</span><span id="line-241"> if (++j > query.length()) {</span>
-<span class="source-line-no">242</span><span id="line-242"> throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">243</span><span id="line-243"> }</span>
-<span class="source-line-no">244</span><span id="line-244"> char what = query.charAt(j);</span>
-<span class="source-line-no">245</span><span id="line-245"> if (++j > query.length()) {</span>
-<span class="source-line-no">246</span><span id="line-246"> break;</span>
-<span class="source-line-no">247</span><span id="line-247"> }</span>
-<span class="source-line-no">248</span><span id="line-248"> c = query.charAt(j);</span>
-<span class="source-line-no">249</span><span id="line-249"> if (c != '=') {</span>
-<span class="source-line-no">250</span><span id="line-250"> throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">251</span><span id="line-251"> }</span>
-<span class="source-line-no">252</span><span id="line-252"> if (++j > query.length()) {</span>
-<span class="source-line-no">253</span><span id="line-253"> break;</span>
-<span class="source-line-no">254</span><span id="line-254"> }</span>
-<span class="source-line-no">255</span><span id="line-255"> switch (what) {</span>
-<span class="source-line-no">256</span><span id="line-256"> case 'm': {</span>
-<span class="source-line-no">257</span><span id="line-257"> StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">258</span><span id="line-258"> while (j <= query.length()) {</span>
-<span class="source-line-no">259</span><span id="line-259"> c = query.charAt(j);</span>
-<span class="source-line-no">260</span><span id="line-260"> if (c < '0' || c > '9') {</span>
-<span class="source-line-no">261</span><span id="line-261"> j--;</span>
-<span class="source-line-no">262</span><span id="line-262"> break;</span>
-<span class="source-line-no">263</span><span id="line-263"> }</span>
-<span class="source-line-no">264</span><span id="line-264"> sb.append(c);</span>
-<span class="source-line-no">265</span><span id="line-265"> }</span>
-<span class="source-line-no">266</span><span id="line-266"> maxVersions = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">267</span><span id="line-267"> }</span>
-<span class="source-line-no">268</span><span id="line-268"> break;</span>
-<span class="source-line-no">269</span><span id="line-269"> case 'n': {</span>
-<span class="source-line-no">270</span><span id="line-270"> StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">271</span><span id="line-271"> while (j <= query.length()) {</span>
-<span class="source-line-no">272</span><span id="line-272"> c = query.charAt(j);</span>
-<span class="source-line-no">273</span><span id="line-273"> if (c < '0' || c > '9') {</span>
-<span class="source-line-no">274</span><span id="line-274"> j--;</span>
-<span class="source-line-no">275</span><span id="line-275"> break;</span>
-<span class="source-line-no">276</span><span id="line-276"> }</span>
-<span class="source-line-no">277</span><span id="line-277"> sb.append(c);</span>
-<span class="source-line-no">278</span><span id="line-278"> }</span>
-<span class="source-line-no">279</span><span id="line-279"> maxValues = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">280</span><span id="line-280"> }</span>
-<span class="source-line-no">281</span><span id="line-281"> break;</span>
-<span class="source-line-no">282</span><span id="line-282"> default:</span>
-<span class="source-line-no">283</span><span id="line-283"> throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"> }</span>
-<span class="source-line-no">286</span><span id="line-286"> return i;</span>
-<span class="source-line-no">287</span><span id="line-287"> }</span>
-<span class="source-line-no">288</span><span id="line-288"></span>
-<span class="source-line-no">289</span><span id="line-289"> public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
-<span class="source-line-no">290</span><span id="line-290"> int maxVersions) {</span>
-<span class="source-line-no">291</span><span id="line-291"> this.row = startRow;</span>
-<span class="source-line-no">292</span><span id="line-292"> this.endRow = endRow;</span>
-<span class="source-line-no">293</span><span id="line-293"> if (columns != null) {</span>
-<span class="source-line-no">294</span><span id="line-294"> Collections.addAll(this.columns, columns);</span>
-<span class="source-line-no">295</span><span id="line-295"> }</span>
-<span class="source-line-no">296</span><span id="line-296"> this.startTime = startTime;</span>
-<span class="source-line-no">297</span><span id="line-297"> this.endTime = endTime;</span>
-<span class="source-line-no">298</span><span id="line-298"> this.maxVersions = maxVersions;</span>
-<span class="source-line-no">299</span><span id="line-299"> }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
-<span class="source-line-no">302</span><span id="line-302"> long endTime, int maxVersions, Collection<String> labels) {</span>
-<span class="source-line-no">303</span><span id="line-303"> this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
-<span class="source-line-no">304</span><span id="line-304"> if (labels != null) {</span>
-<span class="source-line-no">305</span><span id="line-305"> this.labels.addAll(labels);</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"> }</span>
-<span class="source-line-no">308</span><span id="line-308"></span>
-<span class="source-line-no">309</span><span id="line-309"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
-<span class="source-line-no">310</span><span id="line-310"> long endTime, int maxVersions) {</span>
-<span class="source-line-no">311</span><span id="line-311"> this.row = startRow;</span>
-<span class="source-line-no">312</span><span id="line-312"> this.endRow = endRow;</span>
-<span class="source-line-no">313</span><span id="line-313"> if (columns != null) {</span>
-<span class="source-line-no">314</span><span id="line-314"> this.columns.addAll(columns);</span>
-<span class="source-line-no">315</span><span id="line-315"> }</span>
-<span class="source-line-no">316</span><span id="line-316"> this.startTime = startTime;</span>
-<span class="source-line-no">317</span><span id="line-317"> this.endTime = endTime;</span>
-<span class="source-line-no">318</span><span id="line-318"> this.maxVersions = maxVersions;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> public boolean isSingleRow() {</span>
-<span class="source-line-no">322</span><span id="line-322"> return endRow == null;</span>
-<span class="source-line-no">323</span><span id="line-323"> }</span>
-<span class="source-line-no">324</span><span id="line-324"></span>
-<span class="source-line-no">325</span><span id="line-325"> public int getMaxVersions() {</span>
-<span class="source-line-no">326</span><span id="line-326"> return maxVersions;</span>
-<span class="source-line-no">327</span><span id="line-327"> }</span>
-<span class="source-line-no">328</span><span id="line-328"></span>
-<span class="source-line-no">329</span><span id="line-329"> public void setMaxVersions(final int maxVersions) {</span>
-<span class="source-line-no">330</span><span id="line-330"> this.maxVersions = maxVersions;</span>
-<span class="source-line-no">331</span><span id="line-331"> }</span>
-<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333"> public int getMaxValues() {</span>
-<span class="source-line-no">334</span><span id="line-334"> return maxValues;</span>
-<span class="source-line-no">335</span><span id="line-335"> }</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337"> public void setMaxValues(final int maxValues) {</span>
-<span class="source-line-no">338</span><span id="line-338"> this.maxValues = maxValues;</span>
-<span class="source-line-no">339</span><span id="line-339"> }</span>
-<span class="source-line-no">340</span><span id="line-340"></span>
-<span class="source-line-no">341</span><span id="line-341"> public boolean hasColumns() {</span>
-<span class="source-line-no">342</span><span id="line-342"> return !columns.isEmpty();</span>
-<span class="source-line-no">343</span><span id="line-343"> }</span>
-<span class="source-line-no">344</span><span id="line-344"></span>
-<span class="source-line-no">345</span><span id="line-345"> public boolean hasLabels() {</span>
-<span class="source-line-no">346</span><span id="line-346"> return !labels.isEmpty();</span>
-<span class="source-line-no">347</span><span id="line-347"> }</span>
-<span class="source-line-no">348</span><span id="line-348"></span>
-<span class="source-line-no">349</span><span id="line-349"> public byte[] getRow() {</span>
-<span class="source-line-no">350</span><span id="line-350"> return row;</span>
-<span class="source-line-no">351</span><span id="line-351"> }</span>
-<span class="source-line-no">352</span><span id="line-352"></span>
-<span class="source-line-no">353</span><span id="line-353"> public byte[] getStartRow() {</span>
-<span class="source-line-no">354</span><span id="line-354"> return row;</span>
-<span class="source-line-no">355</span><span id="line-355"> }</span>
-<span class="source-line-no">356</span><span id="line-356"></span>
-<span class="source-line-no">357</span><span id="line-357"> public boolean hasEndRow() {</span>
-<span class="source-line-no">358</span><span id="line-358"> return endRow != null;</span>
-<span class="source-line-no">359</span><span id="line-359"> }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361"> public byte[] getEndRow() {</span>
-<span class="source-line-no">362</span><span id="line-362"> return endRow;</span>
-<span class="source-line-no">363</span><span id="line-363"> }</span>
-<span class="source-line-no">364</span><span id="line-364"></span>
-<span class="source-line-no">365</span><span id="line-365"> public void addColumn(final byte[] column) {</span>
-<span class="source-line-no">366</span><span id="line-366"> columns.add(column);</span>
-<span class="source-line-no">367</span><span id="line-367"> }</span>
-<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> public byte[][] getColumns() {</span>
-<span class="source-line-no">370</span><span id="line-370"> return columns.toArray(new byte[columns.size()][]);</span>
-<span class="source-line-no">371</span><span id="line-371"> }</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373"> public List<String> getLabels() {</span>
-<span class="source-line-no">374</span><span id="line-374"> return labels;</span>
-<span class="source-line-no">375</span><span id="line-375"> }</span>
-<span class="source-line-no">376</span><span id="line-376"></span>
-<span class="source-line-no">377</span><span id="line-377"> public boolean hasTimestamp() {</span>
-<span class="source-line-no">378</span><span id="line-378"> return (startTime == 0) && (endTime != Long.MAX_VALUE);</span>
-<span class="source-line-no">379</span><span id="line-379"> }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381"> public long getTimestamp() {</span>
-<span class="source-line-no">382</span><span id="line-382"> return endTime;</span>
-<span class="source-line-no">383</span><span id="line-383"> }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385"> public long getStartTime() {</span>
-<span class="source-line-no">386</span><span id="line-386"> return startTime;</span>
-<span class="source-line-no">387</span><span id="line-387"> }</span>
-<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389"> public void setStartTime(final long startTime) {</span>
-<span class="source-line-no">390</span><span id="line-390"> this.startTime = startTime;</span>
-<span class="source-line-no">391</span><span id="line-391"> }</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393"> public long getEndTime() {</span>
-<span class="source-line-no">394</span><span id="line-394"> return endTime;</span>
-<span class="source-line-no">395</span><span id="line-395"> }</span>
-<span class="source-line-no">396</span><span id="line-396"></span>
-<span class="source-line-no">397</span><span id="line-397"> public void setEndTime(long endTime) {</span>
-<span class="source-line-no">398</span><span id="line-398"> this.endTime = endTime;</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401"> @Override</span>
-<span class="source-line-no">402</span><span id="line-402"> public String toString() {</span>
-<span class="source-line-no">403</span><span id="line-403"> StringBuilder result = new StringBuilder();</span>
-<span class="source-line-no">404</span><span id="line-404"> result.append("{startRow => '");</span>
-<span class="source-line-no">405</span><span id="line-405"> if (row != null) {</span>
-<span class="source-line-no">406</span><span id="line-406"> result.append(Bytes.toString(row));</span>
-<span class="source-line-no">407</span><span id="line-407"> }</span>
-<span class="source-line-no">408</span><span id="line-408"> result.append("', endRow => '");</span>
-<span class="source-line-no">409</span><span id="line-409"> if (endRow != null) {</span>
-<span class="source-line-no">410</span><span id="line-410"> result.append(Bytes.toString(endRow));</span>
-<span class="source-line-no">411</span><span id="line-411"> }</span>
-<span class="source-line-no">412</span><span id="line-412"> result.append("', columns => [");</span>
-<span class="source-line-no">413</span><span id="line-413"> for (byte[] col : columns) {</span>
-<span class="source-line-no">414</span><span id="line-414"> result.append(" '");</span>
-<span class="source-line-no">415</span><span id="line-415"> result.append(Bytes.toString(col));</span>
-<span class="source-line-no">416</span><span id="line-416"> result.append("'");</span>
-<span class="source-line-no">417</span><span id="line-417"> }</span>
-<span class="source-line-no">418</span><span id="line-418"> result.append(" ], startTime => ");</span>
-<span class="source-line-no">419</span><span id="line-419"> result.append(Long.toString(startTime));</span>
-<span class="source-line-no">420</span><span id="line-420"> result.append(", endTime => ");</span>
-<span class="source-line-no">421</span><span id="line-421"> result.append(Long.toString(endTime));</span>
-<span class="source-line-no">422</span><span id="line-422"> result.append(", maxVersions => ");</span>
-<span class="source-line-no">423</span><span id="line-423"> result.append(Integer.toString(maxVersions));</span>
-<span class="source-line-no">424</span><span id="line-424"> result.append(", maxValues => ");</span>
-<span class="source-line-no">425</span><span id="line-425"> result.append(Integer.toString(maxValues));</span>
-<span class="source-line-no">426</span><span id="line-426"> result.append("}");</span>
-<span class="source-line-no">427</span><span id="line-427"> return result.toString();</span>
-<span class="source-line-no">428</span><span id="line-428"> }</span>
-<span class="source-line-no">429</span><span id="line-429">}</span>
+<span class="source-line-no">049</span><span id="line-49"> private boolean partialTimeRange;</span>
+<span class="source-line-no">050</span><span id="line-50"></span>
+<span class="source-line-no">051</span><span id="line-51"> public RowSpec(String path) throws IllegalArgumentException {</span>
+<span class="source-line-no">052</span><span id="line-52"> this(path, null);</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
+<span class="source-line-no">056</span><span id="line-56"> int i = 0;</span>
+<span class="source-line-no">057</span><span id="line-57"> while (path.charAt(i) == '/') {</span>
+<span class="source-line-no">058</span><span id="line-58"> i++;</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"> i = parseRowKeys(path, i);</span>
+<span class="source-line-no">061</span><span id="line-61"> i = parseColumns(path, i);</span>
+<span class="source-line-no">062</span><span id="line-62"> i = parseTimestamp(path, i);</span>
+<span class="source-line-no">063</span><span id="line-63"> i = parseQueryParams(path, i);</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65"> if (keyEncoding != null) {</span>
+<span class="source-line-no">066</span><span id="line-66"> // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
+<span class="source-line-no">067</span><span id="line-67"> Base64.Decoder decoder;</span>
+<span class="source-line-no">068</span><span id="line-68"> switch (keyEncoding) {</span>
+<span class="source-line-no">069</span><span id="line-69"> case "b64":</span>
+<span class="source-line-no">070</span><span id="line-70"> case "base64":</span>
+<span class="source-line-no">071</span><span id="line-71"> case "b64url":</span>
+<span class="source-line-no">072</span><span id="line-72"> case "base64url":</span>
+<span class="source-line-no">073</span><span id="line-73"> decoder = Base64.getUrlDecoder();</span>
+<span class="source-line-no">074</span><span id="line-74"> break;</span>
+<span class="source-line-no">075</span><span id="line-75"> case "b64basic":</span>
+<span class="source-line-no">076</span><span id="line-76"> case "base64basic":</span>
+<span class="source-line-no">077</span><span id="line-77"> decoder = Base64.getDecoder();</span>
+<span class="source-line-no">078</span><span id="line-78"> break;</span>
+<span class="source-line-no">079</span><span id="line-79"> default:</span>
+<span class="source-line-no">080</span><span id="line-80"> throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
+<span class="source-line-no">081</span><span id="line-81"> }</span>
+<span class="source-line-no">082</span><span id="line-82"> this.row = decoder.decode(this.row);</span>
+<span class="source-line-no">083</span><span id="line-83"> if (this.endRow != null) {</span>
+<span class="source-line-no">084</span><span id="line-84"> this.endRow = decoder.decode(this.endRow);</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> TreeSet<byte[]> decodedColumns = new TreeSet<>(Bytes.BYTES_COMPARATOR);</span>
+<span class="source-line-no">087</span><span id="line-87"> for (byte[] encodedColumn : this.columns) {</span>
+<span class="source-line-no">088</span><span id="line-88"> decodedColumns.add(decoder.decode(encodedColumn));</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"> this.columns = decodedColumns;</span>
+<span class="source-line-no">091</span><span id="line-91"> }</span>
+<span class="source-line-no">092</span><span id="line-92"> }</span>
+<span class="source-line-no">093</span><span id="line-93"></span>
+<span class="source-line-no">094</span><span id="line-94"> private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">095</span><span id="line-95"> String startRow = null, endRow = null;</span>
+<span class="source-line-no">096</span><span id="line-96"> try {</span>
+<span class="source-line-no">097</span><span id="line-97"> StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">098</span><span id="line-98"> char c;</span>
+<span class="source-line-no">099</span><span id="line-99"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">100</span><span id="line-100"> sb.append(c);</span>
+<span class="source-line-no">101</span><span id="line-101"> i++;</span>
+<span class="source-line-no">102</span><span id="line-102"> }</span>
+<span class="source-line-no">103</span><span id="line-103"> i++;</span>
+<span class="source-line-no">104</span><span id="line-104"> String row = startRow = sb.toString();</span>
+<span class="source-line-no">105</span><span id="line-105"> int idx = startRow.indexOf(',');</span>
+<span class="source-line-no">106</span><span id="line-106"> if (idx != -1) {</span>
+<span class="source-line-no">107</span><span id="line-107"> startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">108</span><span id="line-108"> endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">109</span><span id="line-109"> } else {</span>
+<span class="source-line-no">110</span><span id="line-110"> startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">111</span><span id="line-111"> }</span>
+<span class="source-line-no">112</span><span id="line-112"> } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">113</span><span id="line-113"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">114</span><span id="line-114"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">115</span><span id="line-115"> throw new RuntimeException(e);</span>
+<span class="source-line-no">116</span><span id="line-116"> }</span>
+<span class="source-line-no">117</span><span id="line-117"> // HBase does not support wildcards on row keys so we will emulate a</span>
+<span class="source-line-no">118</span><span id="line-118"> // suffix glob by synthesizing appropriate start and end row keys for</span>
+<span class="source-line-no">119</span><span id="line-119"> // table scanning</span>
+<span class="source-line-no">120</span><span id="line-120"> if (startRow.charAt(startRow.length() - 1) == '*') {</span>
+<span class="source-line-no">121</span><span id="line-121"> if (endRow != null)</span>
+<span class="source-line-no">122</span><span id="line-122"> throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
+<span class="source-line-no">123</span><span id="line-123"> this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
+<span class="source-line-no">124</span><span id="line-124"> this.endRow = new byte[this.row.length + 1];</span>
+<span class="source-line-no">125</span><span id="line-125"> System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
+<span class="source-line-no">126</span><span id="line-126"> this.endRow[this.row.length] = (byte) 255;</span>
+<span class="source-line-no">127</span><span id="line-127"> } else {</span>
+<span class="source-line-no">128</span><span id="line-128"> this.row = Bytes.toBytes(startRow.toString());</span>
+<span class="source-line-no">129</span><span id="line-129"> if (endRow != null) {</span>
+<span class="source-line-no">130</span><span id="line-130"> this.endRow = Bytes.toBytes(endRow.toString());</span>
+<span class="source-line-no">131</span><span id="line-131"> }</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"> return i;</span>
+<span class="source-line-no">134</span><span id="line-134"> }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">137</span><span id="line-137"> if (i >= path.length()) {</span>
+<span class="source-line-no">138</span><span id="line-138"> return i;</span>
+<span class="source-line-no">139</span><span id="line-139"> }</span>
+<span class="source-line-no">140</span><span id="line-140"> try {</span>
+<span class="source-line-no">141</span><span id="line-141"> char c;</span>
+<span class="source-line-no">142</span><span id="line-142"> StringBuilder column = new StringBuilder();</span>
+<span class="source-line-no">143</span><span id="line-143"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">144</span><span id="line-144"> if (c == ',') {</span>
+<span class="source-line-no">145</span><span id="line-145"> if (column.length() < 1) {</span>
+<span class="source-line-no">146</span><span id="line-146"> throw new IllegalArgumentException("invalid path");</span>
+<span class="source-line-no">147</span><span id="line-147"> }</span>
+<span class="source-line-no">148</span><span id="line-148"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">149</span><span id="line-149"> this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">150</span><span id="line-150"> column.setLength(0);</span>
+<span class="source-line-no">151</span><span id="line-151"> i++;</span>
+<span class="source-line-no">152</span><span id="line-152"> continue;</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"> column.append(c);</span>
+<span class="source-line-no">155</span><span id="line-155"> i++;</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"> i++;</span>
+<span class="source-line-no">158</span><span id="line-158"> // trailing list entry</span>
+<span class="source-line-no">159</span><span id="line-159"> if (column.length() > 0) {</span>
+<span class="source-line-no">160</span><span id="line-160"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">161</span><span id="line-161"> this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">162</span><span id="line-162"> }</span>
+<span class="source-line-no">163</span><span id="line-163"> } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">164</span><span id="line-164"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">165</span><span id="line-165"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">166</span><span id="line-166"> // shouldn't happen</span>
+<span class="source-line-no">167</span><span id="line-167"> throw new RuntimeException(e);</span>
+<span class="source-line-no">168</span><span id="line-168"> }</span>
+<span class="source-line-no">169</span><span id="line-169"> return i;</span>
+<span class="source-line-no">170</span><span id="line-170"> }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">173</span><span id="line-173"> if (i >= path.length()) {</span>
+<span class="source-line-no">174</span><span id="line-174"> return i;</span>
+<span class="source-line-no">175</span><span id="line-175"> }</span>
+<span class="source-line-no">176</span><span id="line-176"> long time0 = 0, time1 = 0;</span>
+<span class="source-line-no">177</span><span id="line-177"> try {</span>
+<span class="source-line-no">178</span><span id="line-178"> char c = 0;</span>
+<span class="source-line-no">179</span><span id="line-179"> StringBuilder stamp = new StringBuilder();</span>
+<span class="source-line-no">180</span><span id="line-180"> while (i < path.length()) {</span>
+<span class="source-line-no">181</span><span id="line-181"> c = path.charAt(i);</span>
+<span class="source-line-no">182</span><span id="line-182"> if (c == '/' || c == ',') {</span>
+<span class="source-line-no">183</span><span id="line-183"> break;</span>
+<span class="source-line-no">184</span><span id="line-184"> }</span>
+<span class="source-line-no">185</span><span id="line-185"> stamp.append(c);</span>
+<span class="source-line-no">186</span><span id="line-186"> i++;</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"> try {</span>
+<span class="source-line-no">189</span><span id="line-189"> time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">190</span><span id="line-190"> } catch (NumberFormatException e) {</span>
+<span class="source-line-no">191</span><span id="line-191"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">192</span><span id="line-192"> }</span>
+<span class="source-line-no">193</span><span id="line-193"> if (c == ',') {</span>
+<span class="source-line-no">194</span><span id="line-194"> stamp = new StringBuilder();</span>
+<span class="source-line-no">195</span><span id="line-195"> i++;</span>
+<span class="source-line-no">196</span><span id="line-196"> while (i < path.length() && ((c = path.charAt(i)) != '/')) {</span>
+<span class="source-line-no">197</span><span id="line-197"> stamp.append(c);</span>
+<span class="source-line-no">198</span><span id="line-198"> i++;</span>
+<span class="source-line-no">199</span><span id="line-199"> }</span>
+<span class="source-line-no">200</span><span id="line-200"> try {</span>
+<span class="source-line-no">201</span><span id="line-201"> time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">202</span><span id="line-202"> } catch (NumberFormatException e) {</span>
+<span class="source-line-no">203</span><span id="line-203"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">204</span><span id="line-204"> }</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"> if (c == '/') {</span>
+<span class="source-line-no">207</span><span id="line-207"> i++;</span>
+<span class="source-line-no">208</span><span id="line-208"> }</span>
+<span class="source-line-no">209</span><span id="line-209"> } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">210</span><span id="line-210"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">211</span><span id="line-211"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">212</span><span id="line-212"> // shouldn't happen</span>
+<span class="source-line-no">213</span><span id="line-213"> throw new RuntimeException(e);</span>
+<span class="source-line-no">214</span><span id="line-214"> }</span>
+<span class="source-line-no">215</span><span id="line-215"> if (time1 != 0) {</span>
+<span class="source-line-no">216</span><span id="line-216"> startTime = time0;</span>
+<span class="source-line-no">217</span><span id="line-217"> endTime = time1;</span>
+<span class="source-line-no">218</span><span id="line-218"> } else {</span>
+<span class="source-line-no">219</span><span id="line-219"> endTime = time0;</span>
+<span class="source-line-no">220</span><span id="line-220"> partialTimeRange = true;</span>
+<span class="source-line-no">221</span><span id="line-221"> }</span>
+<span class="source-line-no">222</span><span id="line-222"> return i;</span>
+<span class="source-line-no">223</span><span id="line-223"> }</span>
+<span class="source-line-no">224</span><span id="line-224"></span>
+<span class="source-line-no">225</span><span id="line-225"> private int parseQueryParams(final String path, int i) {</span>
+<span class="source-line-no">226</span><span id="line-226"> if (i >= path.length()) {</span>
+<span class="source-line-no">227</span><span id="line-227"> return i;</span>
+<span class="source-line-no">228</span><span id="line-228"> }</span>
+<span class="source-line-no">229</span><span id="line-229"> StringBuilder query = new StringBuilder();</span>
+<span class="source-line-no">230</span><span id="line-230"> try {</span>
+<span class="source-line-no">231</span><span id="line-231"> query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">232</span><span id="line-232"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">233</span><span id="line-233"> // should not happen</span>
+<span class="source-line-no">234</span><span id="line-234"> throw new RuntimeException(e);</span>
+<span class="source-line-no">235</span><span id="line-235"> }</span>
+<span class="source-line-no">236</span><span id="line-236"> i += query.length();</span>
+<span class="source-line-no">237</span><span id="line-237"> int j = 0;</span>
+<span class="source-line-no">238</span><span id="line-238"> while (j < query.length()) {</span>
+<span class="source-line-no">239</span><span id="line-239"> char c = query.charAt(j);</span>
+<span class="source-line-no">240</span><span id="line-240"> if (c != '?' && c != '&') {</span>
+<span class="source-line-no">241</span><span id="line-241"> break;</span>
+<span class="source-line-no">242</span><span id="line-242"> }</span>
+<span class="source-line-no">243</span><span id="line-243"> if (++j > query.length()) {</span>
+<span class="source-line-no">244</span><span id="line-244"> throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">245</span><span id="line-245"> }</span>
+<span class="source-line-no">246</span><span id="line-246"> char what = query.charAt(j);</span>
+<span class="source-line-no">247</span><span id="line-247"> if (++j > query.length()) {</span>
+<span class="source-line-no">248</span><span id="line-248"> break;</span>
+<span class="source-line-no">249</span><span id="line-249"> }</span>
+<span class="source-line-no">250</span><span id="line-250"> c = query.charAt(j);</span>
+<span class="source-line-no">251</span><span id="line-251"> if (c != '=') {</span>
+<span class="source-line-no">252</span><span id="line-252"> throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">253</span><span id="line-253"> }</span>
+<span class="source-line-no">254</span><span id="line-254"> if (++j > query.length()) {</span>
+<span class="source-line-no">255</span><span id="line-255"> break;</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"> switch (what) {</span>
+<span class="source-line-no">258</span><span id="line-258"> case 'm': {</span>
+<span class="source-line-no">259</span><span id="line-259"> StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">260</span><span id="line-260"> while (j <= query.length()) {</span>
+<span class="source-line-no">261</span><span id="line-261"> c = query.charAt(j);</span>
+<span class="source-line-no">262</span><span id="line-262"> if (c < '0' || c > '9') {</span>
+<span class="source-line-no">263</span><span id="line-263"> j--;</span>
+<span class="source-line-no">264</span><span id="line-264"> break;</span>
+<span class="source-line-no">265</span><span id="line-265"> }</span>
+<span class="source-line-no">266</span><span id="line-266"> sb.append(c);</span>
+<span class="source-line-no">267</span><span id="line-267"> }</span>
+<span class="source-line-no">268</span><span id="line-268"> maxVersions = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">269</span><span id="line-269"> }</span>
+<span class="source-line-no">270</span><span id="line-270"> break;</span>
+<span class="source-line-no">271</span><span id="line-271"> case 'n': {</span>
+<span class="source-line-no">272</span><span id="line-272"> StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">273</span><span id="line-273"> while (j <= query.length()) {</span>
+<span class="source-line-no">274</span><span id="line-274"> c = query.charAt(j);</span>
+<span class="source-line-no">275</span><span id="line-275"> if (c < '0' || c > '9') {</span>
+<span class="source-line-no">276</span><span id="line-276"> j--;</span>
+<span class="source-line-no">277</span><span id="line-277"> break;</span>
+<span class="source-line-no">278</span><span id="line-278"> }</span>
+<span class="source-line-no">279</span><span id="line-279"> sb.append(c);</span>
+<span class="source-line-no">280</span><span id="line-280"> }</span>
+<span class="source-line-no">281</span><span id="line-281"> maxValues = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">282</span><span id="line-282"> }</span>
+<span class="source-line-no">283</span><span id="line-283"> break;</span>
+<span class="source-line-no">284</span><span id="line-284"> default:</span>
+<span class="source-line-no">285</span><span id="line-285"> throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
+<span class="source-line-no">286</span><span id="line-286"> }</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> return i;</span>
+<span class="source-line-no">289</span><span id="line-289"> }</span>
+<span class="source-line-no">290</span><span id="line-290"></span>
+<span class="source-line-no">291</span><span id="line-291"> public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
+<span class="source-line-no">292</span><span id="line-292"> int maxVersions) {</span>
+<span class="source-line-no">293</span><span id="line-293"> this.row = startRow;</span>
+<span class="source-line-no">294</span><span id="line-294"> this.endRow = endRow;</span>
+<span class="source-line-no">295</span><span id="line-295"> if (columns != null) {</span>
+<span class="source-line-no">296</span><span id="line-296"> Collections.addAll(this.columns, columns);</span>
+<span class="source-line-no">297</span><span id="line-297"> }</span>
+<span class="source-line-no">298</span><span id="line-298"> this.startTime = startTime;</span>
+<span class="source-line-no">299</span><span id="line-299"> this.endTime = endTime;</span>
+<span class="source-line-no">300</span><span id="line-300"> this.maxVersions = maxVersions;</span>
+<span class="source-line-no">301</span><span id="line-301"> }</span>
+<span class="source-line-no">302</span><span id="line-302"></span>
+<span class="source-line-no">303</span><span id="line-303"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
+<span class="source-line-no">304</span><span id="line-304"> long endTime, int maxVersions, Collection<String> labels) {</span>
+<span class="source-line-no">305</span><span id="line-305"> this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
+<span class="source-line-no">306</span><span id="line-306"> if (labels != null) {</span>
+<span class="source-line-no">307</span><span id="line-307"> this.labels.addAll(labels);</span>
+<span class="source-line-no">308</span><span id="line-308"> }</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
+<span class="source-line-no">312</span><span id="line-312"> long endTime, int maxVersions) {</span>
+<span class="source-line-no">313</span><span id="line-313"> this.row = startRow;</span>
+<span class="source-line-no">314</span><span id="line-314"> this.endRow = endRow;</span>
+<span class="source-line-no">315</span><span id="line-315"> if (columns != null) {</span>
+<span class="source-line-no">316</span><span id="line-316"> this.columns.addAll(columns);</span>
+<span class="source-line-no">317</span><span id="line-317"> }</span>
+<span class="source-line-no">318</span><span id="line-318"> this.startTime = startTime;</span>
+<span class="source-line-no">319</span><span id="line-319"> this.endTime = endTime;</span>
+<span class="source-line-no">320</span><span id="line-320"> this.maxVersions = maxVersions;</span>
+<span class="source-line-no">321</span><span id="line-321"> }</span>
+<span class="source-line-no">322</span><span id="line-322"></span>
+<span class="source-line-no">323</span><span id="line-323"> public boolean isSingleRow() {</span>
+<span class="source-line-no">324</span><span id="line-324"> return endRow == null;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> public int getMaxVersions() {</span>
+<span class="source-line-no">328</span><span id="line-328"> return maxVersions;</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"></span>
+<span class="source-line-no">331</span><span id="line-331"> public void setMaxVersions(final int maxVersions) {</span>
+<span class="source-line-no">332</span><span id="line-332"> this.maxVersions = maxVersions;</span>
+<span class="source-line-no">333</span><span id="line-333"> }</span>
+<span class="source-line-no">334</span><span id="line-334"></span>
+<span class="source-line-no">335</span><span id="line-335"> public int getMaxValues() {</span>
+<span class="source-line-no">336</span><span id="line-336"> return maxValues;</span>
+<span class="source-line-no">337</span><span id="line-337"> }</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339"> public void setMaxValues(final int maxValues) {</span>
+<span class="source-line-no">340</span><span id="line-340"> this.maxValues = maxValues;</span>
+<span class="source-line-no">341</span><span id="line-341"> }</span>
+<span class="source-line-no">342</span><span id="line-342"></span>
+<span class="source-line-no">343</span><span id="line-343"> public boolean hasColumns() {</span>
+<span class="source-line-no">344</span><span id="line-344"> return !columns.isEmpty();</span>
+<span class="source-line-no">345</span><span id="line-345"> }</span>
+<span class="source-line-no">346</span><span id="line-346"></span>
+<span class="source-line-no">347</span><span id="line-347"> public boolean hasLabels() {</span>
+<span class="source-line-no">348</span><span id="line-348"> return !labels.isEmpty();</span>
+<span class="source-line-no">349</span><span id="line-349"> }</span>
+<span class="source-line-no">350</span><span id="line-350"></span>
+<span class="source-line-no">351</span><span id="line-351"> public byte[] getRow() {</span>
+<span class="source-line-no">352</span><span id="line-352"> return row;</span>
+<span class="source-line-no">353</span><span id="line-353"> }</span>
+<span class="source-line-no">354</span><span id="line-354"></span>
+<span class="source-line-no">355</span><span id="line-355"> public byte[] getStartRow() {</span>
+<span class="source-line-no">356</span><span id="line-356"> return row;</span>
+<span class="source-line-no">357</span><span id="line-357"> }</span>
+<span class="source-line-no">358</span><span id="line-358"></span>
+<span class="source-line-no">359</span><span id="line-359"> public boolean hasEndRow() {</span>
+<span class="source-line-no">360</span><span id="line-360"> return endRow != null;</span>
+<span class="source-line-no">361</span><span id="line-361"> }</span>
+<span class="source-line-no">362</span><span id="line-362"></span>
+<span class="source-line-no">363</span><span id="line-363"> public byte[] getEndRow() {</span>
+<span class="source-line-no">364</span><span id="line-364"> return endRow;</span>
+<span class="source-line-no">365</span><span id="line-365"> }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367"> public void addColumn(final byte[] column) {</span>
+<span class="source-line-no">368</span><span id="line-368"> columns.add(column);</span>
+<span class="source-line-no">369</span><span id="line-369"> }</span>
+<span class="source-line-no">370</span><span id="line-370"></span>
+<span class="source-line-no">371</span><span id="line-371"> public byte[][] getColumns() {</span>
+<span class="source-line-no">372</span><span id="line-372"> return columns.toArray(new byte[columns.size()][]);</span>
+<span class="source-line-no">373</span><span id="line-373"> }</span>
+<span class="source-line-no">374</span><span id="line-374"></span>
+<span class="source-line-no">375</span><span id="line-375"> public List<String> getLabels() {</span>
+<span class="source-line-no">376</span><span id="line-376"> return labels;</span>
+<span class="source-line-no">377</span><span id="line-377"> }</span>
+<span class="source-line-no">378</span><span id="line-378"></span>
+<span class="source-line-no">379</span><span id="line-379"> public boolean hasTimestamp() {</span>
+<span class="source-line-no">380</span><span id="line-380"> return (startTime == 0) && (endTime != Long.MAX_VALUE);</span>
+<span class="source-line-no">381</span><span id="line-381"> }</span>
+<span class="source-line-no">382</span><span id="line-382"></span>
+<span class="source-line-no">383</span><span id="line-383"> public long getTimestamp() {</span>
+<span class="source-line-no">384</span><span id="line-384"> return endTime;</span>
+<span class="source-line-no">385</span><span id="line-385"> }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387"> public long getStartTime() {</span>
+<span class="source-line-no">388</span><span id="line-388"> return startTime;</span>
+<span class="source-line-no">389</span><span id="line-389"> }</span>
+<span class="source-line-no">390</span><span id="line-390"></span>
+<span class="source-line-no">391</span><span id="line-391"> public void setStartTime(final long startTime) {</span>
+<span class="source-line-no">392</span><span id="line-392"> this.startTime = startTime;</span>
+<span class="source-line-no">393</span><span id="line-393"> }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395"> public long getEndTime() {</span>
+<span class="source-line-no">396</span><span id="line-396"> return endTime;</span>
+<span class="source-line-no">397</span><span id="line-397"> }</span>
+<span class="source-line-no">398</span><span id="line-398"></span>
+<span class="source-line-no">399</span><span id="line-399"> public void setEndTime(long endTime) {</span>
+<span class="source-line-no">400</span><span id="line-400"> this.endTime = endTime;</span>
+<span class="source-line-no">401</span><span id="line-401"> }</span>
+<span class="source-line-no">402</span><span id="line-402"></span>
+<span class="source-line-no">403</span><span id="line-403"> @Override</span>
+<span class="source-line-no">404</span><span id="line-404"> public String toString() {</span>
+<span class="source-line-no">405</span><span id="line-405"> StringBuilder result = new StringBuilder();</span>
+<span class="source-line-no">406</span><span id="line-406"> result.append("{startRow => '");</span>
+<span class="source-line-no">407</span><span id="line-407"> if (row != null) {</span>
+<span class="source-line-no">408</span><span id="line-408"> result.append(Bytes.toString(row));</span>
+<span class="source-line-no">409</span><span id="line-409"> }</span>
+<span class="source-line-no">410</span><span id="line-410"> result.append("', endRow => '");</span>
+<span class="source-line-no">411</span><span id="line-411"> if (endRow != null) {</span>
+<span class="source-line-no">412</span><span id="line-412"> result.append(Bytes.toString(endRow));</span>
+<span class="source-line-no">413</span><span id="line-413"> }</span>
+<span class="source-line-no">414</span><span id="line-414"> result.append("', columns => [");</span>
+<span class="source-line-no">415</span><span id="line-415"> for (byte[] col : columns) {</span>
+<span class="source-line-no">416</span><span id="line-416"> result.append(" '");</span>
+<span class="source-line-no">417</span><span id="line-417"> result.append(Bytes.toString(col));</span>
+<span class="source-line-no">418</span><span id="line-418"> result.append("'");</span>
+<span class="source-line-no">419</span><span id="line-419"> }</span>
+<span class="source-line-no">420</span><span id="line-420"> result.append(" ], startTime => ");</span>
+<span class="source-line-no">421</span><span id="line-421"> result.append(Long.toString(startTime));</span>
+<span class="source-line-no">422</span><span id="line-422"> result.append(", endTime => ");</span>
+<span class="source-line-no">423</span><span id="line-423"> result.append(Long.toString(endTime));</span>
+<span class="source-line-no">424</span><span id="line-424"> result.append(", maxVersions => ");</span>
+<span class="source-line-no">425</span><span id="line-425"> result.append(Integer.toString(maxVersions));</span>
+<span class="source-line-no">426</span><span id="line-426"> result.append(", maxValues => ");</span>
+<span class="source-line-no">427</span><span id="line-427"> result.append(Integer.toString(maxValues));</span>
+<span class="source-line-no">428</span><span id="line-428"> result.append("}");</span>
+<span class="source-line-no">429</span><span id="line-429"> return result.toString();</span>
+<span class="source-line-no">430</span><span id="line-430"> }</span>
+<span class="source-line-no">431</span><span id="line-431"></span>
+<span class="source-line-no">432</span><span id="line-432"> public boolean isPartialTimeRange() {</span>
+<span class="source-line-no">433</span><span id="line-433"> return partialTimeRange;</span>
+<span class="source-line-no">434</span><span id="line-434"> }</span>
+<span class="source-line-no">435</span><span id="line-435"></span>
+<span class="source-line-no">436</span><span id="line-436">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html b/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
index 701990ee068..1ad47a841e8 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
@@ -104,119 +104,125 @@
<span class="source-line-no">091</span><span id="line-91"> }</span>
<span class="source-line-no">092</span><span id="line-92"> }</span>
<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"> scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">095</span><span id="line-95"> scan.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">096</span><span id="line-96"> if (filter != null) {</span>
-<span class="source-line-no">097</span><span id="line-97"> scan.setFilter(filter);</span>
-<span class="source-line-no">098</span><span id="line-98"> }</span>
-<span class="source-line-no">099</span><span id="line-99"> if (caching > 0) {</span>
-<span class="source-line-no">100</span><span id="line-100"> scan.setCaching(caching);</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"> if (limit > 0) {</span>
-<span class="source-line-no">103</span><span id="line-103"> scan.setLimit(limit);</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">096</span><span id="line-96"> scan.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">097</span><span id="line-97"> } else {</span>
+<span class="source-line-no">098</span><span id="line-98"> scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"></span>
+<span class="source-line-no">101</span><span id="line-101"> scan.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">102</span><span id="line-102"> if (filter != null) {</span>
+<span class="source-line-no">103</span><span id="line-103"> scan.setFilter(filter);</span>
<span class="source-line-no">104</span><span id="line-104"> }</span>
-<span class="source-line-no">105</span><span id="line-105"> scan.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">106</span><span id="line-106"> if (rowspec.hasLabels()) {</span>
-<span class="source-line-no">107</span><span id="line-107"> scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> scanner = table.getScanner(scan);</span>
-<span class="source-line-no">110</span><span id="line-110"> cached = null;</span>
-<span class="source-line-no">111</span><span id="line-111"> id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
-<span class="source-line-no">112</span><span id="line-112"> + Integer.toHexString(scanner.hashCode());</span>
-<span class="source-line-no">113</span><span id="line-113"> } finally {</span>
-<span class="source-line-no">114</span><span id="line-114"> table.close();</span>
-<span class="source-line-no">115</span><span id="line-115"> }</span>
-<span class="source-line-no">116</span><span id="line-116"> }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118"> public String getID() {</span>
-<span class="source-line-no">119</span><span id="line-119"> return id;</span>
-<span class="source-line-no">120</span><span id="line-120"> }</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> @Override</span>
-<span class="source-line-no">123</span><span id="line-123"> public void close() {</span>
-<span class="source-line-no">124</span><span id="line-124"> if (scanner != null) {</span>
-<span class="source-line-no">125</span><span id="line-125"> scanner.close();</span>
-<span class="source-line-no">126</span><span id="line-126"> scanner = null;</span>
-<span class="source-line-no">127</span><span id="line-127"> }</span>
-<span class="source-line-no">128</span><span id="line-128"> }</span>
-<span class="source-line-no">129</span><span id="line-129"></span>
-<span class="source-line-no">130</span><span id="line-130"> @Override</span>
-<span class="source-line-no">131</span><span id="line-131"> public boolean hasNext() {</span>
-<span class="source-line-no">132</span><span id="line-132"> if (cache != null) {</span>
-<span class="source-line-no">133</span><span id="line-133"> return true;</span>
-<span class="source-line-no">134</span><span id="line-134"> }</span>
-<span class="source-line-no">135</span><span id="line-135"> if (rowI != null && rowI.hasNext()) {</span>
-<span class="source-line-no">136</span><span id="line-136"> return true;</span>
-<span class="source-line-no">137</span><span id="line-137"> }</span>
-<span class="source-line-no">138</span><span id="line-138"> if (cached != null) {</span>
+<span class="source-line-no">105</span><span id="line-105"> if (caching > 0) {</span>
+<span class="source-line-no">106</span><span id="line-106"> scan.setCaching(caching);</span>
+<span class="source-line-no">107</span><span id="line-107"> }</span>
+<span class="source-line-no">108</span><span id="line-108"> if (limit > 0) {</span>
+<span class="source-line-no">109</span><span id="line-109"> scan.setLimit(limit);</span>
+<span class="source-line-no">110</span><span id="line-110"> }</span>
+<span class="source-line-no">111</span><span id="line-111"> scan.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">112</span><span id="line-112"> if (rowspec.hasLabels()) {</span>
+<span class="source-line-no">113</span><span id="line-113"> scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
+<span class="source-line-no">114</span><span id="line-114"> }</span>
+<span class="source-line-no">115</span><span id="line-115"> scanner = table.getScanner(scan);</span>
+<span class="source-line-no">116</span><span id="line-116"> cached = null;</span>
+<span class="source-line-no">117</span><span id="line-117"> id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
+<span class="source-line-no">118</span><span id="line-118"> + Integer.toHexString(scanner.hashCode());</span>
+<span class="source-line-no">119</span><span id="line-119"> } finally {</span>
+<span class="source-line-no">120</span><span id="line-120"> table.close();</span>
+<span class="source-line-no">121</span><span id="line-121"> }</span>
+<span class="source-line-no">122</span><span id="line-122"> }</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124"> public String getID() {</span>
+<span class="source-line-no">125</span><span id="line-125"> return id;</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> @Override</span>
+<span class="source-line-no">129</span><span id="line-129"> public void close() {</span>
+<span class="source-line-no">130</span><span id="line-130"> if (scanner != null) {</span>
+<span class="source-line-no">131</span><span id="line-131"> scanner.close();</span>
+<span class="source-line-no">132</span><span id="line-132"> scanner = null;</span>
+<span class="source-line-no">133</span><span id="line-133"> }</span>
+<span class="source-line-no">134</span><span id="line-134"> }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> @Override</span>
+<span class="source-line-no">137</span><span id="line-137"> public boolean hasNext() {</span>
+<span class="source-line-no">138</span><span id="line-138"> if (cache != null) {</span>
<span class="source-line-no">139</span><span id="line-139"> return true;</span>
<span class="source-line-no">140</span><span id="line-140"> }</span>
-<span class="source-line-no">141</span><span id="line-141"> try {</span>
-<span class="source-line-no">142</span><span id="line-142"> Result result = scanner.next();</span>
-<span class="source-line-no">143</span><span id="line-143"> if (result != null && !result.isEmpty()) {</span>
-<span class="source-line-no">144</span><span id="line-144"> cached = result;</span>
-<span class="source-line-no">145</span><span id="line-145"> }</span>
-<span class="source-line-no">146</span><span id="line-146"> } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">147</span><span id="line-147"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">148</span><span id="line-148"> } catch (IOException e) {</span>
-<span class="source-line-no">149</span><span id="line-149"> LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">150</span><span id="line-150"> }</span>
-<span class="source-line-no">151</span><span id="line-151"> return cached != null;</span>
-<span class="source-line-no">152</span><span id="line-152"> }</span>
-<span class="source-line-no">153</span><span id="line-153"></span>
-<span class="source-line-no">154</span><span id="line-154"> @Override</span>
-<span class="source-line-no">155</span><span id="line-155"> public Cell next() {</span>
-<span class="source-line-no">156</span><span id="line-156"> if (cache != null) {</span>
-<span class="source-line-no">157</span><span id="line-157"> Cell kv = cache;</span>
-<span class="source-line-no">158</span><span id="line-158"> cache = null;</span>
-<span class="source-line-no">159</span><span id="line-159"> return kv;</span>
-<span class="source-line-no">160</span><span id="line-160"> }</span>
-<span class="source-line-no">161</span><span id="line-161"> boolean loop;</span>
-<span class="source-line-no">162</span><span id="line-162"> do {</span>
-<span class="source-line-no">163</span><span id="line-163"> loop = false;</span>
-<span class="source-line-no">164</span><span id="line-164"> if (rowI != null) {</span>
-<span class="source-line-no">165</span><span id="line-165"> if (rowI.hasNext()) {</span>
-<span class="source-line-no">166</span><span id="line-166"> return rowI.next();</span>
-<span class="source-line-no">167</span><span id="line-167"> } else {</span>
-<span class="source-line-no">168</span><span id="line-168"> rowI = null;</span>
-<span class="source-line-no">169</span><span id="line-169"> }</span>
-<span class="source-line-no">170</span><span id="line-170"> }</span>
-<span class="source-line-no">171</span><span id="line-171"> if (cached != null) {</span>
-<span class="source-line-no">172</span><span id="line-172"> rowI = cached.listCells().iterator();</span>
-<span class="source-line-no">173</span><span id="line-173"> loop = true;</span>
-<span class="source-line-no">174</span><span id="line-174"> cached = null;</span>
-<span class="source-line-no">175</span><span id="line-175"> } else {</span>
-<span class="source-line-no">176</span><span id="line-176"> Result result = null;</span>
-<span class="source-line-no">177</span><span id="line-177"> try {</span>
-<span class="source-line-no">178</span><span id="line-178"> result = scanner.next();</span>
-<span class="source-line-no">179</span><span id="line-179"> } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">180</span><span id="line-180"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">181</span><span id="line-181"> } catch (TableNotEnabledException tnee) {</span>
-<span class="source-line-no">182</span><span id="line-182"> throw new IllegalStateException(tnee);</span>
-<span class="source-line-no">183</span><span id="line-183"> } catch (TableNotFoundException tnfe) {</span>
-<span class="source-line-no">184</span><span id="line-184"> throw new IllegalArgumentException(tnfe);</span>
-<span class="source-line-no">185</span><span id="line-185"> } catch (IOException e) {</span>
-<span class="source-line-no">186</span><span id="line-186"> LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">187</span><span id="line-187"> }</span>
-<span class="source-line-no">188</span><span id="line-188"> if (result != null && !result.isEmpty()) {</span>
-<span class="source-line-no">189</span><span id="line-189"> rowI = result.listCells().iterator();</span>
-<span class="source-line-no">190</span><span id="line-190"> loop = true;</span>
-<span class="source-line-no">191</span><span id="line-191"> }</span>
-<span class="source-line-no">192</span><span id="line-192"> }</span>
-<span class="source-line-no">193</span><span id="line-193"> } while (loop);</span>
-<span class="source-line-no">194</span><span id="line-194"> return null;</span>
-<span class="source-line-no">195</span><span id="line-195"> }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> @Override</span>
-<span class="source-line-no">198</span><span id="line-198"> public void putBack(Cell kv) {</span>
-<span class="source-line-no">199</span><span id="line-199"> this.cache = kv;</span>
-<span class="source-line-no">200</span><span id="line-200"> }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202"> @Override</span>
-<span class="source-line-no">203</span><span id="line-203"> public void remove() {</span>
-<span class="source-line-no">204</span><span id="line-204"> throw new UnsupportedOperationException("remove not supported");</span>
-<span class="source-line-no">205</span><span id="line-205"> }</span>
-<span class="source-line-no">206</span><span id="line-206">}</span>
+<span class="source-line-no">141</span><span id="line-141"> if (rowI != null && rowI.hasNext()) {</span>
+<span class="source-line-no">142</span><span id="line-142"> return true;</span>
+<span class="source-line-no">143</span><span id="line-143"> }</span>
+<span class="source-line-no">144</span><span id="line-144"> if (cached != null) {</span>
+<span class="source-line-no">145</span><span id="line-145"> return true;</span>
+<span class="source-line-no">146</span><span id="line-146"> }</span>
+<span class="source-line-no">147</span><span id="line-147"> try {</span>
+<span class="source-line-no">148</span><span id="line-148"> Result result = scanner.next();</span>
+<span class="source-line-no">149</span><span id="line-149"> if (result != null && !result.isEmpty()) {</span>
+<span class="source-line-no">150</span><span id="line-150"> cached = result;</span>
+<span class="source-line-no">151</span><span id="line-151"> }</span>
+<span class="source-line-no">152</span><span id="line-152"> } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">153</span><span id="line-153"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">154</span><span id="line-154"> } catch (IOException e) {</span>
+<span class="source-line-no">155</span><span id="line-155"> LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"> return cached != null;</span>
+<span class="source-line-no">158</span><span id="line-158"> }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160"> @Override</span>
+<span class="source-line-no">161</span><span id="line-161"> public Cell next() {</span>
+<span class="source-line-no">162</span><span id="line-162"> if (cache != null) {</span>
+<span class="source-line-no">163</span><span id="line-163"> Cell kv = cache;</span>
+<span class="source-line-no">164</span><span id="line-164"> cache = null;</span>
+<span class="source-line-no">165</span><span id="line-165"> return kv;</span>
+<span class="source-line-no">166</span><span id="line-166"> }</span>
+<span class="source-line-no">167</span><span id="line-167"> boolean loop;</span>
+<span class="source-line-no">168</span><span id="line-168"> do {</span>
+<span class="source-line-no">169</span><span id="line-169"> loop = false;</span>
+<span class="source-line-no">170</span><span id="line-170"> if (rowI != null) {</span>
+<span class="source-line-no">171</span><span id="line-171"> if (rowI.hasNext()) {</span>
+<span class="source-line-no">172</span><span id="line-172"> return rowI.next();</span>
+<span class="source-line-no">173</span><span id="line-173"> } else {</span>
+<span class="source-line-no">174</span><span id="line-174"> rowI = null;</span>
+<span class="source-line-no">175</span><span id="line-175"> }</span>
+<span class="source-line-no">176</span><span id="line-176"> }</span>
+<span class="source-line-no">177</span><span id="line-177"> if (cached != null) {</span>
+<span class="source-line-no">178</span><span id="line-178"> rowI = cached.listCells().iterator();</span>
+<span class="source-line-no">179</span><span id="line-179"> loop = true;</span>
+<span class="source-line-no">180</span><span id="line-180"> cached = null;</span>
+<span class="source-line-no">181</span><span id="line-181"> } else {</span>
+<span class="source-line-no">182</span><span id="line-182"> Result result = null;</span>
+<span class="source-line-no">183</span><span id="line-183"> try {</span>
+<span class="source-line-no">184</span><span id="line-184"> result = scanner.next();</span>
+<span class="source-line-no">185</span><span id="line-185"> } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">186</span><span id="line-186"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">187</span><span id="line-187"> } catch (TableNotEnabledException tnee) {</span>
+<span class="source-line-no">188</span><span id="line-188"> throw new IllegalStateException(tnee);</span>
+<span class="source-line-no">189</span><span id="line-189"> } catch (TableNotFoundException tnfe) {</span>
+<span class="source-line-no">190</span><span id="line-190"> throw new IllegalArgumentException(tnfe);</span>
+<span class="source-line-no">191</span><span id="line-191"> } catch (IOException e) {</span>
+<span class="source-line-no">192</span><span id="line-192"> LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">193</span><span id="line-193"> }</span>
+<span class="source-line-no">194</span><span id="line-194"> if (result != null && !result.isEmpty()) {</span>
+<span class="source-line-no">195</span><span id="line-195"> rowI = result.listCells().iterator();</span>
+<span class="source-line-no">196</span><span id="line-196"> loop = true;</span>
+<span class="source-line-no">197</span><span id="line-197"> }</span>
+<span class="source-line-no">198</span><span id="line-198"> }</span>
+<span class="source-line-no">199</span><span id="line-199"> } while (loop);</span>
+<span class="source-line-no">200</span><span id="line-200"> return null;</span>
+<span class="source-line-no">201</span><span id="line-201"> }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203"> @Override</span>
+<span class="source-line-no">204</span><span id="line-204"> public void putBack(Cell kv) {</span>
+<span class="source-line-no">205</span><span id="line-205"> this.cache = kv;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208"> @Override</span>
+<span class="source-line-no">209</span><span id="line-209"> public void remove() {</span>
+<span class="source-line-no">210</span><span id="line-210"> throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212">}</span>
diff --git a/book.html b/book.html
index 57c70dd342a..cbbcead7c60 100644
--- a/book.html
+++ b/book.html
@@ -41641,7 +41641,7 @@ Starting the mini-cluster takes about 20-30 seconds, but that should be appropri
it persists metadata — in the tail of hfiles or Cells written by
HBase into the system hbase:meta table or when HBase writes znodes
to zookeeper, etc. — and when it passes objects over the wire making
-<a href="hbase.rpc">RPCs</a>. HBase uses protobufs to describe the RPC
+<a href="#hbase.rpc">RPCs</a>. HBase uses protobufs to describe the RPC
Interfaces (Services) we expose to clients, for example the <code>Admin</code> and <code>Client</code>
Interfaces that the RegionServer fields,
or specifying the arbitrary extensions added by developers via our
@@ -41686,7 +41686,7 @@ use these core protos when they want to serialize a Cell or a Put or
refer to a particular node via ServerName, etc., as part of providing the
CPEP Service. Going forward, after the release of hbase-2.0.0, this
practice needs to whither. We’ll explain why in the later
-<a href="shaded.protobuf">hbase-2.0.0</a> section.</p>
+<a href="#shaded.protobuf">hbase-2.0.0</a> section.</p>
</div>
<div class="sect2">
<h3 id="shaded.protobuf"><a class="anchor" href="#shaded.protobuf"></a>191.1. hbase-2.0.0 and the shading of protobufs (HBASE-15638)</h3>
@@ -49812,7 +49812,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
<div id="footer">
<div id="footer-text">
Version 4.0.0-alpha-1-SNAPSHOT<br>
-Last updated 2025-04-10 14:30:01 UTC
+Last updated 2025-04-11 14:30:01 UTC
</div>
</div>
<script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index 139aa12adf9..d1f9c624c2e 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -185,7 +185,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 d73945f57da..397967af8cf 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -14665,13 +14665,13 @@
<td>coding</td>
<td>InnerAssignment</td>
<td>Inner assignments should be avoided.</td>
-<td>103</td></tr>
+<td>104</td></tr>
<tr class="b">
<td><figure><img src="images/icon_error_sml.gif" alt="" /></figure> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>120</td></tr></table></section><section>
+<td>121</td></tr></table></section><section>
<h3 id="org.apache.hadoop.hbase.rest.client.Client.java">org/apache/hadoop/hbase/rest/client/Client.java</h3>
<table border="0" class="table table-striped">
<tr class="a">
@@ -18528,7 +18528,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 11dab6218c1..7d7d2acdc63 100644
--- a/coc.html
+++ b/coc.html
@@ -253,7 +253,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 4e1db0d394f..5246670e96d 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -318,7 +318,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 5bb6a95e359..5772f6b0206 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -1111,7 +1111,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 bd96f2e14a7..9a87b9faf8e 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -200,7 +200,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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 9527740c5ce..fdb5e6ffa07 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -926,11 +926,11 @@
<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 align="left">org.apache.commons</td>
-<td><a class="externalLink" href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a></td>
-<td>3.9</td>
+<td><a class="externalLink" href="https://commons.apache.org/proper/commons-lang/">commons-lang3</a></td>
+<td>3.17.0</td>
<td>-</td>
<td>jar</td>
-<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
+<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache-2.0</a></td></tr>
<tr class="b">
<td align="left">org.apache.commons</td>
<td><a class="externalLink" href="http://commons.apache.org/proper/commons-math/">commons-math3</a></td>
@@ -1748,7 +1748,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/index-all.html b/devapidocs/index-all.html
index ca48b5088da..c70b3dd2284 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -80720,6 +80720,8 @@ loadScripts(document, 'script');</script>
<dd>
<div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>
</dd>
+<dt><a href="org/apache/hadoop/hbase/rest/RowSpec.html#isPartialTimeRange()" class="member-name-link">isPartialTimeRange()</a> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RowSpec.html" title="class in org.apache.hadoop.hbase.rest">RowSpec</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#isPeerEnabled()" class="member-name-link">isPeerEnabled()</a> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#isPeerEnabled()" class="member-name-link">isPeerEnabled()</a> - Method in interface org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></dt>
@@ -103091,6 +103093,8 @@ service.</div>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/CompleteScanResultCache.html#partialResults" class="member-name-link">partialResults</a> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/CompleteScanResultCache.html" title="class in org.apache.hadoop.hbase.client">CompleteScanResultCache</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/rest/RowSpec.html#partialTimeRange" class="member-name-link">partialTimeRange</a> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RowSpec.html" title="class in org.apache.hadoop.hbase.rest">RowSpec</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#partitionOps(java.util.List,int)" class="member-name-link">partitionOps(List<ZKUtil.ZKUtilOp>, int)</a> - Static method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil</a></dt>
<dd>
<div class="block">Partition the list of <code>ops</code> by size (using <a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#estimateSize(org.apache.hadoop.hbase.zookeeper.ZKUtil.ZKUtilOp)"><code>ZKUtil.estimateSize(ZKUtilOp)</code></a>).</div>
@@ -107310,6 +107314,8 @@ service.</div>
</dd>
<dt><a href="org/apache/hadoop/hbase/security/visibility/VisibilityController.html#prePrepareTimeStampForDeleteVersion(org.apache.hadoop.hbase.coprocessor.ObserverContext,org.apache.hadoop.hbase.client.Mutation,org.apache.hadoop.hbase.Cell,byte%5B%5D,org.apache.hadoop.hbase.client.Get)" class="member-name-link">prePrepareTimeStampForDeleteVersion(ObserverContext<? extends RegionCoprocessorEnvironment>, Mutation, Cell, byte[], Get)</a> - Method in class org.apache.hadoop.hbase.secur [...]
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError(Throwable)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/AsyncRegionReplicationRetryingCaller.html#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError(Throwable)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRegionReplicationRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionReplicationRetryingCaller</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.html#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError(Throwable)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a></dt>
diff --git a/devapidocs/member-search-index.js b/devapidocs/member-search-index.js
index e1878a989bf..9c548b6ed0f 100644
--- a/devapidocs/member-search-index.js
+++ b/devapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlockcache()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlocksize()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBloomfilter()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getCompression()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getInMemory()"},{"p":"org.apache. [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlockcache()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlocksize()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBloomfilter()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getCompression()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getInMemory()"},{"p":"org.apache. [...]
\ No newline at end of file
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
index 0e5b8972596..f5dd3cee843 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
@@ -83,7 +83,7 @@ loadScripts(document, 'script');</script>
</dl>
<hr>
<div class="type-signature"><span class="annotations"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/FunctionalInterface.html" title="class or interface in java.lang" class="external-link">@FunctionalInterface</a>
-</span><span class="modifiers">public static interface </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-36">AsyncAdminRequestRetryingCaller.Callable</a><T></span></div>
+</span><span class="modifiers">public static interface </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-38">AsyncAdminRequestRetryingCaller.Callable</a><T></span></div>
</section>
<section class="summary">
<ul class="summary-list">
@@ -119,7 +119,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="call(org.apache.hadoop.hbase.ipc.HBaseRpcController,org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface)">
<h3>call</h3>
-<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html" title="class or interface in java.util.concurrent" class="external-link">CompletableFuture</a><<a href="AsyncAdminRequestRetryingCaller.Callable.html" title="type parameter in AsyncAdminRequestRetryingCaller.Callable">T</a>></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/ [...]
+<div class="member-signature"><span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/CompletableFuture.html" title="class or interface in java.util.concurrent" class="external-link">CompletableFuture</a><<a href="AsyncAdminRequestRetryingCaller.Callable.html" title="type parameter in AsyncAdminRequestRetryingCaller.Callable">T</a>></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/ [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.Interface stub)</span></div>
</section>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
index 5c48fbb9863..b6068f4913b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
@@ -80,7 +80,7 @@ loadScripts(document, 'script');</script>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="annotations">@Private
-</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-33">AsyncAdminRequestRetryingCaller</a><T></span>
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-35">AsyncAdminRequestRetryingCaller</a><T></span>
<span class="extends-implements">extends <a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a><T></span></div>
</section>
<section class="summary">
@@ -158,12 +158,15 @@ loadScripts(document, 'script');</script>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#doCall()" class="member-name-link">doCall</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#preProcessError(java.lang.Throwable)" class="member-name-link">preProcessError</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a> error)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.client.AsyncRpcRetryingCaller">Methods inherited from class org.apache.hadoop.hbase.client.<a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a></h3>
-<code><a href="AsyncRpcRetryingCaller.html#call()">call</a>, <a href="AsyncRpcRetryingCaller.html#completeExceptionally()">completeExceptionally</a>, <a href="AsyncRpcRetryingCaller.html#getTableName()">getTableName</a>, <a href="AsyncRpcRetryingCaller.html#onError(java.lang.Throwable,java.util.function.Supplier,java.util.function.Consumer)">onError</a>, <a href="AsyncRpcRetryingCaller.html#preProcessError(java.lang.Throwable)">preProcessError</a>, <a href="AsyncRpcRetryingCaller.html#re [...]
+<code><a href="AsyncRpcRetryingCaller.html#call()">call</a>, <a href="AsyncRpcRetryingCaller.html#completeExceptionally()">completeExceptionally</a>, <a href="AsyncRpcRetryingCaller.html#getTableName()">getTableName</a>, <a href="AsyncRpcRetryingCaller.html#onError(java.lang.Throwable,java.util.function.Supplier,java.util.function.Consumer)">onError</a>, <a href="AsyncRpcRetryingCaller.html#remainingTimeNs()">remainingTimeNs</a>, <a href="AsyncRpcRetryingCaller.html#resetCallTimeout()">r [...]
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or [...]
@@ -181,13 +184,13 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="callable">
<h3>callable</h3>
-<div class="member-signature"><span class="modifiers">private final</span> <span class="return-type"><a href="AsyncAdminRequestRetryingCaller.Callable.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller.Callable</a><<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRe [...]
+<div class="member-signature"><span class="modifiers">private final</span> <span class="return-type"><a href="AsyncAdminRequestRetryingCaller.Callable.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdminRequestRetryingCaller.Callable</a><<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRe [...]
</section>
</li>
<li>
<section class="detail" id="serverName">
<h3>serverName</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="../ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-42">serverName</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="../ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-44">serverName</a></span></div>
</section>
</li>
</ul>
@@ -201,7 +204,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(org.apache.hbase.thirdparty.io.netty.util.Timer,org.apache.hadoop.hbase.client.AsyncConnectionImpl,int,long,long,int,long,long,int,org.apache.hadoop.hbase.ServerName,org.apache.hadoop.hbase.client.AsyncAdminRequestRetryingCaller.Callable)">
<h3>AsyncAdminRequestRetryingCaller</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-44">AsyncAdminRequestRetryingCaller</a></span><wbr><span class="parameters">(org.apache.hbase.thirdparty.io.netty.util.Timer retryTimer,
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-46">AsyncAdminRequestRetryingCaller</a></span><wbr><span class="parameters">(org.apache.hbase.thirdparty.io.netty.util.Timer retryTimer,
<a href="AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a> conn,
int priority,
long pauseNs,
@@ -223,9 +226,19 @@ loadScripts(document, 'script');</script>
<h2>Method Details</h2>
<ul class="member-list">
<li>
+<section class="detail" id="preProcessError(java.lang.Throwable)">
+<h3>preProcessError</h3>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Throwable.html" title="class or interface in java.lang" class="external-link">Throwable</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-55">preProcessError</a></span><wbr><span class="parameters">(<a href="htt [...]
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="AsyncRpcRetryingCaller.html#preProcessError(java.lang.Throwable)">preProcessError</a></code> in class <code><a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a><<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>></code></dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="doCall()">
<h3>doCall</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-53">doCall</a></span>()</div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html#line-69">doCall</a></span>()</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AsyncRpcRetryingCaller.html#doCall()">doCall</a></code> in class <code><a href="AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a><<a href="AsyncAdminRequestRetryingCaller.html" title="type parameter in AsyncAdminRequestRetryingCaller">T</a>></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html b/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html
index ec3f2ecd85a..c9d65a0c544 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/RowResultGenerator.html
@@ -228,7 +228,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="close()">
<h3>close</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-84">close</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-89">close</a></span>()</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="ResultGenerator.html#close()">close</a></code> in class <code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -238,19 +238,19 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hasNext()">
<h3>hasNext</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-88">hasNext</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-93">hasNext</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="next()">
<h3>next</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-99">next</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-104">next</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="putBack(org.apache.hadoop.hbase.Cell)">
<h3>putBack</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-116">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> kv)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-121">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> kv)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="ResultGenerator.html#putBack(org.apache.hadoop.hbase.Cell)">putBack</a></code> in class <code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -260,7 +260,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="remove()">
<h3>remove</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-121">remove</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html#line-126">remove</a></span>()</div>
</section>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html b/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html
index 8abca30a8c7..688ed62bf53 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/RowSpec.html
@@ -118,12 +118,15 @@ loadScripts(document, 'script');</script>
<div class="col-first odd-row-color"><code>private int</code></div>
<div class="col-second odd-row-color"><code><a href="#maxVersions" class="member-name-link">maxVersions</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>private byte[]</code></div>
-<div class="col-second even-row-color"><code><a href="#row" class="member-name-link">row</a></code></div>
+<div class="col-first even-row-color"><code>private boolean</code></div>
+<div class="col-second even-row-color"><code><a href="#partialTimeRange" class="member-name-link">partialTimeRange</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private long</code></div>
-<div class="col-second odd-row-color"><code><a href="#startTime" class="member-name-link">startTime</a></code></div>
+<div class="col-first odd-row-color"><code>private byte[]</code></div>
+<div class="col-second odd-row-color"><code><a href="#row" class="member-name-link">row</a></code></div>
<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>private long</code></div>
+<div class="col-second even-row-color"><code><a href="#startTime" class="member-name-link">startTime</a></code></div>
+<div class="col-last even-row-color"> </div>
</div>
</section>
</li>
@@ -222,39 +225,42 @@ loadScripts(document, 'script');</script>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hasTimestamp()" class="member-name-link">hasTimestamp</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isSingleRow()" class="member-name-link">isSingleRow</a>()</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isPartialTimeRange()" class="member-name-link">isPartialTimeRange</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseColumns(java.lang.String,int)" class="member-name-link">parseColumns</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
- int i)</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isSingleRow()" class="member-name-link">isSingleRow</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseQueryParams(java.lang.String,int)" class="member-name-link">parseQueryParams</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseColumns(java.lang.String,int)" class="member-name-link">parseColumns</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseRowKeys(java.lang.String,int)" class="member-name-link">parseRowKeys</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseQueryParams(java.lang.String,int)" class="member-name-link">parseQueryParams</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseTimestamp(java.lang.String,int)" class="member-name-link">parseTimestamp</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseRowKeys(java.lang.String,int)" class="member-name-link">parseRowKeys</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setEndTime(long)" class="member-name-link">setEndTime</a><wbr>(long endTime)</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#parseTimestamp(java.lang.String,int)" class="member-name-link">parseTimestamp</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+ int i)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxValues(int)" class="member-name-link">setMaxValues</a><wbr>(int maxValues)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setEndTime(long)" class="member-name-link">setEndTime</a><wbr>(long endTime)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxVersions(int)" class="member-name-link">setMaxVersions</a><wbr>(int maxVersions)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxValues(int)" class="member-name-link">setMaxValues</a><wbr>(int maxValues)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setStartTime(long)" class="member-name-link">setStartTime</a><wbr>(long startTime)</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setMaxVersions(int)" class="member-name-link">setMaxVersions</a><wbr>(int maxVersions)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setStartTime(long)" class="member-name-link">setStartTime</a><wbr>(long startTime)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
</div>
</div>
</div>
@@ -348,6 +354,12 @@ loadScripts(document, 'script');</script>
<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-48">maxValues</a></span></div>
</section>
</li>
+<li>
+<section class="detail" id="partialTimeRange">
+<h3>partialTimeRange</h3>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-49">partialTimeRange</a></span></div>
+</section>
+</li>
</ul>
</section>
</li>
@@ -359,7 +371,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(java.lang.String)">
<h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-50">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-51">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<dl class="notes">
<dt>Throws:</dt>
@@ -370,7 +382,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(java.lang.String,java.lang.String)">
<h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-54">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-55">RowSpec</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> keyEncoding)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<dl class="notes">
@@ -382,7 +394,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(byte[],byte[],byte[][],long,long,int)">
<h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-289">RowSpec</a></span><wbr><span class="parameters">(byte[] startRow,
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-291">RowSpec</a></span><wbr><span class="parameters">(byte[] startRow,
byte[] endRow,
byte[][] columns,
long startTime,
@@ -393,7 +405,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(byte[],byte[],java.util.Collection,long,long,int,java.util.Collection)">
<h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-301">RowSpec</a></span><wbr><span class="parameters">(byte[] startRow,
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-303">RowSpec</a></span><wbr><span class="parameters">(byte[] startRow,
byte[] endRow,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html" title="class or interface in java.util" class="external-link">Collection</a><byte[]> columns,
long startTime,
@@ -405,7 +417,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(byte[],byte[],java.util.Collection,long,long,int)">
<h3>RowSpec</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-309">RowSpec</a></span><wbr><span class="parameters">(byte[] startRow,
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-311">RowSpec</a></span><wbr><span class="parameters">(byte[] startRow,
byte[] endRow,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html" title="class or interface in java.util" class="external-link">Collection</a><byte[]> columns,
long startTime,
@@ -424,7 +436,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="parseRowKeys(java.lang.String,int)">
<h3>parseRowKeys</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-93">parseRowKeys</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-94">parseRowKeys</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<dl class="notes">
@@ -436,7 +448,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="parseColumns(java.lang.String,int)">
<h3>parseColumns</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-135">parseColumns</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-136">parseColumns</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<dl class="notes">
@@ -448,7 +460,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="parseTimestamp(java.lang.String,int)">
<h3>parseTimestamp</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-171">parseTimestamp</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-172">parseTimestamp</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="external-link">IllegalArgumentException</a></span></div>
<dl class="notes">
@@ -460,140 +472,146 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="parseQueryParams(java.lang.String,int)">
<h3>parseQueryParams</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-223">parseQueryParams</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-225">parseQueryParams</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> path,
int i)</span></div>
</section>
</li>
<li>
<section class="detail" id="isSingleRow()">
<h3>isSingleRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-321">isSingleRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-323">isSingleRow</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getMaxVersions()">
<h3>getMaxVersions</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-325">getMaxVersions</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-327">getMaxVersions</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setMaxVersions(int)">
<h3>setMaxVersions</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-329">setMaxVersions</a></span><wbr><span class="parameters">(int maxVersions)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-331">setMaxVersions</a></span><wbr><span class="parameters">(int maxVersions)</span></div>
</section>
</li>
<li>
<section class="detail" id="getMaxValues()">
<h3>getMaxValues</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-333">getMaxValues</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-335">getMaxValues</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setMaxValues(int)">
<h3>setMaxValues</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-337">setMaxValues</a></span><wbr><span class="parameters">(int maxValues)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-339">setMaxValues</a></span><wbr><span class="parameters">(int maxValues)</span></div>
</section>
</li>
<li>
<section class="detail" id="hasColumns()">
<h3>hasColumns</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-341">hasColumns</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-343">hasColumns</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="hasLabels()">
<h3>hasLabels</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-345">hasLabels</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-347">hasLabels</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getRow()">
<h3>getRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-349">getRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-351">getRow</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getStartRow()">
<h3>getStartRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-353">getStartRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-355">getStartRow</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="hasEndRow()">
<h3>hasEndRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-357">hasEndRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-359">hasEndRow</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getEndRow()">
<h3>getEndRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-361">getEndRow</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-363">getEndRow</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="addColumn(byte[])">
<h3>addColumn</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-365">addColumn</a></span><wbr><span class="parameters">(byte[] column)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-367">addColumn</a></span><wbr><span class="parameters">(byte[] column)</span></div>
</section>
</li>
<li>
<section class="detail" id="getColumns()">
<h3>getColumns</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[][]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-369">getColumns</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">byte[][]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-371">getColumns</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getLabels()">
<h3>getLabels</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>></span> <span class="element-name"><a href="../../../. [...]
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>></span> <span class="element-name"><a href="../../../. [...]
</section>
</li>
<li>
<section class="detail" id="hasTimestamp()">
<h3>hasTimestamp</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-377">hasTimestamp</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-379">hasTimestamp</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getTimestamp()">
<h3>getTimestamp</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">long</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-381">getTimestamp</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">long</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-383">getTimestamp</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="getStartTime()">
<h3>getStartTime</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">long</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-385">getStartTime</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">long</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-387">getStartTime</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setStartTime(long)">
<h3>setStartTime</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-389">setStartTime</a></span><wbr><span class="parameters">(long startTime)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-391">setStartTime</a></span><wbr><span class="parameters">(long startTime)</span></div>
</section>
</li>
<li>
<section class="detail" id="getEndTime()">
<h3>getEndTime</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">long</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-393">getEndTime</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">long</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-395">getEndTime</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setEndTime(long)">
<h3>setEndTime</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-397">setEndTime</a></span><wbr><span class="parameters">(long endTime)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-399">setEndTime</a></span><wbr><span class="parameters">(long endTime)</span></div>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-401">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-403">toString</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
+<li>
+<section class="detail" id="isPartialTimeRange()">
+<h3>isPartialTimeRange</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RowSpec.html#line-432">isPartialTimeRange</a></span>()</div>
+</section>
+</li>
</ul>
</section>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html b/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
index 20beb2851fe..9f4da5eff14 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
@@ -322,13 +322,13 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="getID()">
<h3>getID</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-118">getID</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-124">getID</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="close()">
<h3>close</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-122">close</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-128">close</a></span>()</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="ResultGenerator.html#close()">close</a></code> in class <code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -338,19 +338,19 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hasNext()">
<h3>hasNext</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-130">hasNext</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-136">hasNext</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="next()">
<h3>next</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-154">next</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-160">next</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="putBack(org.apache.hadoop.hbase.Cell)">
<h3>putBack</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-197">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> kv)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-203">putBack</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> kv)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="ResultGenerator.html#putBack(org.apache.hadoop.hbase.Cell)">putBack</a></code> in class <code><a href="ResultGenerator.html" title="class in org.apache.hadoop.hbase.rest">ResultGenerator</a></code></dd>
@@ -360,7 +360,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="remove()">
<h3>remove</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-202">remove</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html#line-208">remove</a></span>()</div>
</section>
</li>
</ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
index bf8365da5d4..32789d66210 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.Callable.html
@@ -35,55 +35,71 @@
<span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
<span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36"> @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37"> public interface Callable<T> {</span>
-<span class="source-line-no">038</span><span id="line-38"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39"> }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41"> private final Callable<T> callable;</span>
-<span class="source-line-no">042</span><span id="line-42"> private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
-<span class="source-line-no">047</span><span id="line-47"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49"> this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50"> this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51"> }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53"> @Override</span>
-<span class="source-line-no">054</span><span id="line-54"> protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55"> AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56"> try {</span>
-<span class="source-line-no">057</span><span id="line-57"> adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58"> } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
-<span class="source-line-no">060</span><span id="line-60"> });</span>
-<span class="source-line-no">061</span><span id="line-61"> return;</span>
-<span class="source-line-no">062</span><span id="line-62"> }</span>
-<span class="source-line-no">063</span><span id="line-63"> resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
-<span class="source-line-no">065</span><span id="line-65"> if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66"> onError(error, () -> "Call to admin stub failed", err -> {</span>
-<span class="source-line-no">067</span><span id="line-67"> });</span>
-<span class="source-line-no">068</span><span id="line-68"> return;</span>
-<span class="source-line-no">069</span><span id="line-69"> }</span>
-<span class="source-line-no">070</span><span id="line-70"> future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71"> });</span>
-<span class="source-line-no">072</span><span id="line-72"> }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38"> @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39"> public interface Callable<T> {</span>
+<span class="source-line-no">040</span><span id="line-40"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41"> }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> private final Callable<T> callable;</span>
+<span class="source-line-no">044</span><span id="line-44"> private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
+<span class="source-line-no">049</span><span id="line-49"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51"> this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52"> this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57"> // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58"> // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59"> // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60"> // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61"> // immediately</span>
+<span class="source-line-no">062</span><span id="line-62"> if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63"> return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64"> error);</span>
+<span class="source-line-no">065</span><span id="line-65"> }</span>
+<span class="source-line-no">066</span><span id="line-66"> return error;</span>
+<span class="source-line-no">067</span><span id="line-67"> }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69"> @Override</span>
+<span class="source-line-no">070</span><span id="line-70"> protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71"> AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72"> try {</span>
+<span class="source-line-no">073</span><span id="line-73"> adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74"> } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
+<span class="source-line-no">076</span><span id="line-76"> });</span>
+<span class="source-line-no">077</span><span id="line-77"> return;</span>
+<span class="source-line-no">078</span><span id="line-78"> }</span>
+<span class="source-line-no">079</span><span id="line-79"> resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
+<span class="source-line-no">081</span><span id="line-81"> if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82"> onError(error, () -> "Call to admin stub failed", err -> {</span>
+<span class="source-line-no">083</span><span id="line-83"> });</span>
+<span class="source-line-no">084</span><span id="line-84"> return;</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87"> });</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
index 0dd75340481..51321263b96 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.html
@@ -35,55 +35,71 @@
<span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.CompletableFuture;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">028</span><span id="line-28"></span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.NotServingRegionException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.ipc.HBaseRpcController;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">030</span><span id="line-30"></span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.io.netty.util.Timer;</span>
<span class="source-line-no">032</span><span id="line-32"></span>
-<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
-<span class="source-line-no">034</span><span id="line-34">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36"> @FunctionalInterface</span>
-<span class="source-line-no">037</span><span id="line-37"> public interface Callable<T> {</span>
-<span class="source-line-no">038</span><span id="line-38"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
-<span class="source-line-no">039</span><span id="line-39"> }</span>
-<span class="source-line-no">040</span><span id="line-40"></span>
-<span class="source-line-no">041</span><span id="line-41"> private final Callable<T> callable;</span>
-<span class="source-line-no">042</span><span id="line-42"> private ServerName serverName;</span>
-<span class="source-line-no">043</span><span id="line-43"></span>
-<span class="source-line-no">044</span><span id="line-44"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
-<span class="source-line-no">045</span><span id="line-45"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
-<span class="source-line-no">046</span><span id="line-46"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
-<span class="source-line-no">047</span><span id="line-47"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
-<span class="source-line-no">048</span><span id="line-48"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
-<span class="source-line-no">049</span><span id="line-49"> this.serverName = serverName;</span>
-<span class="source-line-no">050</span><span id="line-50"> this.callable = callable;</span>
-<span class="source-line-no">051</span><span id="line-51"> }</span>
-<span class="source-line-no">052</span><span id="line-52"></span>
-<span class="source-line-no">053</span><span id="line-53"> @Override</span>
-<span class="source-line-no">054</span><span id="line-54"> protected void doCall() {</span>
-<span class="source-line-no">055</span><span id="line-55"> AdminService.Interface adminStub;</span>
-<span class="source-line-no">056</span><span id="line-56"> try {</span>
-<span class="source-line-no">057</span><span id="line-57"> adminStub = this.conn.getAdminStub(serverName);</span>
-<span class="source-line-no">058</span><span id="line-58"> } catch (IOException e) {</span>
-<span class="source-line-no">059</span><span id="line-59"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
-<span class="source-line-no">060</span><span id="line-60"> });</span>
-<span class="source-line-no">061</span><span id="line-61"> return;</span>
-<span class="source-line-no">062</span><span id="line-62"> }</span>
-<span class="source-line-no">063</span><span id="line-63"> resetCallTimeout();</span>
-<span class="source-line-no">064</span><span id="line-64"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
-<span class="source-line-no">065</span><span id="line-65"> if (error != null) {</span>
-<span class="source-line-no">066</span><span id="line-66"> onError(error, () -> "Call to admin stub failed", err -> {</span>
-<span class="source-line-no">067</span><span id="line-67"> });</span>
-<span class="source-line-no">068</span><span id="line-68"> return;</span>
-<span class="source-line-no">069</span><span id="line-69"> }</span>
-<span class="source-line-no">070</span><span id="line-70"> future.complete(result);</span>
-<span class="source-line-no">071</span><span id="line-71"> });</span>
-<span class="source-line-no">072</span><span id="line-72"> }</span>
-<span class="source-line-no">073</span><span id="line-73">}</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
+<span class="source-line-no">036</span><span id="line-36">public class AsyncAdminRequestRetryingCaller<T> extends AsyncRpcRetryingCaller<T> {</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38"> @FunctionalInterface</span>
+<span class="source-line-no">039</span><span id="line-39"> public interface Callable<T> {</span>
+<span class="source-line-no">040</span><span id="line-40"> CompletableFuture<T> call(HBaseRpcController controller, AdminService.Interface stub);</span>
+<span class="source-line-no">041</span><span id="line-41"> }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> private final Callable<T> callable;</span>
+<span class="source-line-no">044</span><span id="line-44"> private ServerName serverName;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46"> public AsyncAdminRequestRetryingCaller(Timer retryTimer, AsyncConnectionImpl conn, int priority,</span>
+<span class="source-line-no">047</span><span id="line-47"> long pauseNs, long pauseNsForServerOverloaded, int maxAttempts, long operationTimeoutNs,</span>
+<span class="source-line-no">048</span><span id="line-48"> long rpcTimeoutNs, int startLogErrorsCnt, ServerName serverName, Callable<T> callable) {</span>
+<span class="source-line-no">049</span><span id="line-49"> super(retryTimer, conn, priority, pauseNs, pauseNsForServerOverloaded, maxAttempts,</span>
+<span class="source-line-no">050</span><span id="line-50"> operationTimeoutNs, rpcTimeoutNs, startLogErrorsCnt, Collections.emptyMap());</span>
+<span class="source-line-no">051</span><span id="line-51"> this.serverName = serverName;</span>
+<span class="source-line-no">052</span><span id="line-52"> this.callable = callable;</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> protected Throwable preProcessError(Throwable error) {</span>
+<span class="source-line-no">057</span><span id="line-57"> // This retrying caller is mainly used for admin operations, thus we do not implement</span>
+<span class="source-line-no">058</span><span id="line-58"> // complicated relocating logic. If here we get a NotServingRegionException, there is no way to</span>
+<span class="source-line-no">059</span><span id="line-59"> // recover since we just pass in the server name, which means we can not send request to another</span>
+<span class="source-line-no">060</span><span id="line-60"> // region server. So here we just wrap it with a DoNotRetryIOException to fail the request</span>
+<span class="source-line-no">061</span><span id="line-61"> // immediately</span>
+<span class="source-line-no">062</span><span id="line-62"> if (error instanceof NotServingRegionException) {</span>
+<span class="source-line-no">063</span><span id="line-63"> return new DoNotRetryIOException("region is not on " + serverName + ", give up retrying",</span>
+<span class="source-line-no">064</span><span id="line-64"> error);</span>
+<span class="source-line-no">065</span><span id="line-65"> }</span>
+<span class="source-line-no">066</span><span id="line-66"> return error;</span>
+<span class="source-line-no">067</span><span id="line-67"> }</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69"> @Override</span>
+<span class="source-line-no">070</span><span id="line-70"> protected void doCall() {</span>
+<span class="source-line-no">071</span><span id="line-71"> AdminService.Interface adminStub;</span>
+<span class="source-line-no">072</span><span id="line-72"> try {</span>
+<span class="source-line-no">073</span><span id="line-73"> adminStub = this.conn.getAdminStub(serverName);</span>
+<span class="source-line-no">074</span><span id="line-74"> } catch (IOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75"> onError(e, () -> "Get async admin stub to " + serverName + " failed", err -> {</span>
+<span class="source-line-no">076</span><span id="line-76"> });</span>
+<span class="source-line-no">077</span><span id="line-77"> return;</span>
+<span class="source-line-no">078</span><span id="line-78"> }</span>
+<span class="source-line-no">079</span><span id="line-79"> resetCallTimeout();</span>
+<span class="source-line-no">080</span><span id="line-80"> addListener(callable.call(controller, adminStub), (result, error) -> {</span>
+<span class="source-line-no">081</span><span id="line-81"> if (error != null) {</span>
+<span class="source-line-no">082</span><span id="line-82"> onError(error, () -> "Call to admin stub failed", err -> {</span>
+<span class="source-line-no">083</span><span id="line-83"> });</span>
+<span class="source-line-no">084</span><span id="line-84"> return;</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> future.complete(result);</span>
+<span class="source-line-no">087</span><span id="line-87"> });</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
index 786a03e4649..41a46d23fef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.LocateRequest.html
@@ -247,7 +247,7 @@
<span class="source-line-no">234</span><span id="line-234"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">235</span><span id="line-235"> try {</span>
<span class="source-line-no">236</span><span id="line-236"> RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">238</span><span id="line-238"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">239</span><span id="line-239"> } catch (Exception e) {</span>
<span class="source-line-no">240</span><span id="line-240"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html
index a709f2785c1..39c5cbbc594 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.RegionLocationsFutureResult.html
@@ -247,7 +247,7 @@
<span class="source-line-no">234</span><span id="line-234"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">235</span><span id="line-235"> try {</span>
<span class="source-line-no">236</span><span id="line-236"> RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">238</span><span id="line-238"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">239</span><span id="line-239"> } catch (Exception e) {</span>
<span class="source-line-no">240</span><span id="line-240"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
index e3ac855467d..0df2eef31ee 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.TableCache.html
@@ -247,7 +247,7 @@
<span class="source-line-no">234</span><span id="line-234"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">235</span><span id="line-235"> try {</span>
<span class="source-line-no">236</span><span id="line-236"> RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">238</span><span id="line-238"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">239</span><span id="line-239"> } catch (Exception e) {</span>
<span class="source-line-no">240</span><span id="line-240"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
index 317dba6318e..9643b3cbd7a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.html
@@ -247,7 +247,7 @@
<span class="source-line-no">234</span><span id="line-234"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">235</span><span id="line-235"> try {</span>
<span class="source-line-no">236</span><span id="line-236"> RegionLocations metaLocations = conn.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">237</span><span id="line-237"> .get(conn.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">238</span><span id="line-238"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">239</span><span id="line-239"> } catch (Exception e) {</span>
<span class="source-line-no">240</span><span id="line-240"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
index e50655d1a8f..55c4e4967ac 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowResultGenerator.html
@@ -69,73 +69,78 @@
<span class="source-line-no">056</span><span id="line-56"> }</span>
<span class="source-line-no">057</span><span id="line-57"> }</span>
<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"> get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">060</span><span id="line-60"> get.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">061</span><span id="line-61"> if (filter != null) {</span>
-<span class="source-line-no">062</span><span id="line-62"> get.setFilter(filter);</span>
+<span class="source-line-no">059</span><span id="line-59"> if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">060</span><span id="line-60"> get.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">061</span><span id="line-61"> } else {</span>
+<span class="source-line-no">062</span><span id="line-62"> get.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
<span class="source-line-no">063</span><span id="line-63"> }</span>
-<span class="source-line-no">064</span><span id="line-64"> get.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">065</span><span id="line-65"> Result result = table.get(get);</span>
-<span class="source-line-no">066</span><span id="line-66"> if (result != null && !result.isEmpty()) {</span>
-<span class="source-line-no">067</span><span id="line-67"> valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65"> get.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">066</span><span id="line-66"> if (filter != null) {</span>
+<span class="source-line-no">067</span><span id="line-67"> get.setFilter(filter);</span>
<span class="source-line-no">068</span><span id="line-68"> }</span>
-<span class="source-line-no">069</span><span id="line-69"> } catch (DoNotRetryIOException e) {</span>
-<span class="source-line-no">070</span><span id="line-70"> // Warn here because Stargate will return 404 in the case if multiple</span>
-<span class="source-line-no">071</span><span id="line-71"> // column families were specified but one did not exist -- currently</span>
-<span class="source-line-no">072</span><span id="line-72"> // HBase will fail the whole Get.</span>
-<span class="source-line-no">073</span><span id="line-73"> // Specifying multiple columns in a URI should be uncommon usage but</span>
-<span class="source-line-no">074</span><span id="line-74"> // help to avoid confusion by leaving a record of what happened here in</span>
-<span class="source-line-no">075</span><span id="line-75"> // the log.</span>
-<span class="source-line-no">076</span><span id="line-76"> LOG.warn(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">077</span><span id="line-77"> // Lets get the exception rethrown to get a more meaningful error message than 404</span>
-<span class="source-line-no">078</span><span id="line-78"> if (e instanceof AccessDeniedException) {</span>
-<span class="source-line-no">079</span><span id="line-79"> throw e;</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> }</span>
-<span class="source-line-no">082</span><span id="line-82"> }</span>
-<span class="source-line-no">083</span><span id="line-83"></span>
-<span class="source-line-no">084</span><span id="line-84"> @Override</span>
-<span class="source-line-no">085</span><span id="line-85"> public void close() {</span>
-<span class="source-line-no">086</span><span id="line-86"> }</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> @Override</span>
-<span class="source-line-no">089</span><span id="line-89"> public boolean hasNext() {</span>
-<span class="source-line-no">090</span><span id="line-90"> if (cache != null) {</span>
-<span class="source-line-no">091</span><span id="line-91"> return true;</span>
-<span class="source-line-no">092</span><span id="line-92"> }</span>
-<span class="source-line-no">093</span><span id="line-93"> if (valuesI == null) {</span>
-<span class="source-line-no">094</span><span id="line-94"> return false;</span>
-<span class="source-line-no">095</span><span id="line-95"> }</span>
-<span class="source-line-no">096</span><span id="line-96"> return valuesI.hasNext();</span>
-<span class="source-line-no">097</span><span id="line-97"> }</span>
-<span class="source-line-no">098</span><span id="line-98"></span>
-<span class="source-line-no">099</span><span id="line-99"> @Override</span>
-<span class="source-line-no">100</span><span id="line-100"> public Cell next() {</span>
-<span class="source-line-no">101</span><span id="line-101"> if (cache != null) {</span>
-<span class="source-line-no">102</span><span id="line-102"> Cell kv = cache;</span>
-<span class="source-line-no">103</span><span id="line-103"> cache = null;</span>
-<span class="source-line-no">104</span><span id="line-104"> return kv;</span>
-<span class="source-line-no">105</span><span id="line-105"> }</span>
-<span class="source-line-no">106</span><span id="line-106"> if (valuesI == null) {</span>
-<span class="source-line-no">107</span><span id="line-107"> return null;</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> try {</span>
-<span class="source-line-no">110</span><span id="line-110"> return valuesI.next();</span>
-<span class="source-line-no">111</span><span id="line-111"> } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">069</span><span id="line-69"> get.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">070</span><span id="line-70"> Result result = table.get(get);</span>
+<span class="source-line-no">071</span><span id="line-71"> if (result != null && !result.isEmpty()) {</span>
+<span class="source-line-no">072</span><span id="line-72"> valuesI = result.listCells().iterator();</span>
+<span class="source-line-no">073</span><span id="line-73"> }</span>
+<span class="source-line-no">074</span><span id="line-74"> } catch (DoNotRetryIOException e) {</span>
+<span class="source-line-no">075</span><span id="line-75"> // Warn here because Stargate will return 404 in the case if multiple</span>
+<span class="source-line-no">076</span><span id="line-76"> // column families were specified but one did not exist -- currently</span>
+<span class="source-line-no">077</span><span id="line-77"> // HBase will fail the whole Get.</span>
+<span class="source-line-no">078</span><span id="line-78"> // Specifying multiple columns in a URI should be uncommon usage but</span>
+<span class="source-line-no">079</span><span id="line-79"> // help to avoid confusion by leaving a record of what happened here in</span>
+<span class="source-line-no">080</span><span id="line-80"> // the log.</span>
+<span class="source-line-no">081</span><span id="line-81"> LOG.warn(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">082</span><span id="line-82"> // Lets get the exception rethrown to get a more meaningful error message than 404</span>
+<span class="source-line-no">083</span><span id="line-83"> if (e instanceof AccessDeniedException) {</span>
+<span class="source-line-no">084</span><span id="line-84"> throw e;</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> }</span>
+<span class="source-line-no">087</span><span id="line-87"> }</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89"> @Override</span>
+<span class="source-line-no">090</span><span id="line-90"> public void close() {</span>
+<span class="source-line-no">091</span><span id="line-91"> }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93"> @Override</span>
+<span class="source-line-no">094</span><span id="line-94"> public boolean hasNext() {</span>
+<span class="source-line-no">095</span><span id="line-95"> if (cache != null) {</span>
+<span class="source-line-no">096</span><span id="line-96"> return true;</span>
+<span class="source-line-no">097</span><span id="line-97"> }</span>
+<span class="source-line-no">098</span><span id="line-98"> if (valuesI == null) {</span>
+<span class="source-line-no">099</span><span id="line-99"> return false;</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"> return valuesI.hasNext();</span>
+<span class="source-line-no">102</span><span id="line-102"> }</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104"> @Override</span>
+<span class="source-line-no">105</span><span id="line-105"> public Cell next() {</span>
+<span class="source-line-no">106</span><span id="line-106"> if (cache != null) {</span>
+<span class="source-line-no">107</span><span id="line-107"> Cell kv = cache;</span>
+<span class="source-line-no">108</span><span id="line-108"> cache = null;</span>
+<span class="source-line-no">109</span><span id="line-109"> return kv;</span>
+<span class="source-line-no">110</span><span id="line-110"> }</span>
+<span class="source-line-no">111</span><span id="line-111"> if (valuesI == null) {</span>
<span class="source-line-no">112</span><span id="line-112"> return null;</span>
<span class="source-line-no">113</span><span id="line-113"> }</span>
-<span class="source-line-no">114</span><span id="line-114"> }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116"> @Override</span>
-<span class="source-line-no">117</span><span id="line-117"> public void putBack(Cell kv) {</span>
-<span class="source-line-no">118</span><span id="line-118"> this.cache = kv;</span>
+<span class="source-line-no">114</span><span id="line-114"> try {</span>
+<span class="source-line-no">115</span><span id="line-115"> return valuesI.next();</span>
+<span class="source-line-no">116</span><span id="line-116"> } catch (NoSuchElementException e) {</span>
+<span class="source-line-no">117</span><span id="line-117"> return null;</span>
+<span class="source-line-no">118</span><span id="line-118"> }</span>
<span class="source-line-no">119</span><span id="line-119"> }</span>
<span class="source-line-no">120</span><span id="line-120"></span>
<span class="source-line-no">121</span><span id="line-121"> @Override</span>
-<span class="source-line-no">122</span><span id="line-122"> public void remove() {</span>
-<span class="source-line-no">123</span><span id="line-123"> throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">122</span><span id="line-122"> public void putBack(Cell kv) {</span>
+<span class="source-line-no">123</span><span id="line-123"> this.cache = kv;</span>
<span class="source-line-no">124</span><span id="line-124"> }</span>
-<span class="source-line-no">125</span><span id="line-125">}</span>
+<span class="source-line-no">125</span><span id="line-125"></span>
+<span class="source-line-no">126</span><span id="line-126"> @Override</span>
+<span class="source-line-no">127</span><span id="line-127"> public void remove() {</span>
+<span class="source-line-no">128</span><span id="line-128"> throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">129</span><span id="line-129"> }</span>
+<span class="source-line-no">130</span><span id="line-130">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
index dfc7f292a8a..76546670279 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RowSpec.html
@@ -59,387 +59,394 @@
<span class="source-line-no">046</span><span id="line-46"> private long endTime = DEFAULT_END_TIMESTAMP;</span>
<span class="source-line-no">047</span><span id="line-47"> private int maxVersions = 1;</span>
<span class="source-line-no">048</span><span id="line-48"> private int maxValues = Integer.MAX_VALUE;</span>
-<span class="source-line-no">049</span><span id="line-49"></span>
-<span class="source-line-no">050</span><span id="line-50"> public RowSpec(String path) throws IllegalArgumentException {</span>
-<span class="source-line-no">051</span><span id="line-51"> this(path, null);</span>
-<span class="source-line-no">052</span><span id="line-52"> }</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54"> public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
-<span class="source-line-no">055</span><span id="line-55"> int i = 0;</span>
-<span class="source-line-no">056</span><span id="line-56"> while (path.charAt(i) == '/') {</span>
-<span class="source-line-no">057</span><span id="line-57"> i++;</span>
-<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"> i = parseRowKeys(path, i);</span>
-<span class="source-line-no">060</span><span id="line-60"> i = parseColumns(path, i);</span>
-<span class="source-line-no">061</span><span id="line-61"> i = parseTimestamp(path, i);</span>
-<span class="source-line-no">062</span><span id="line-62"> i = parseQueryParams(path, i);</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> if (keyEncoding != null) {</span>
-<span class="source-line-no">065</span><span id="line-65"> // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
-<span class="source-line-no">066</span><span id="line-66"> Base64.Decoder decoder;</span>
-<span class="source-line-no">067</span><span id="line-67"> switch (keyEncoding) {</span>
-<span class="source-line-no">068</span><span id="line-68"> case "b64":</span>
-<span class="source-line-no">069</span><span id="line-69"> case "base64":</span>
-<span class="source-line-no">070</span><span id="line-70"> case "b64url":</span>
-<span class="source-line-no">071</span><span id="line-71"> case "base64url":</span>
-<span class="source-line-no">072</span><span id="line-72"> decoder = Base64.getUrlDecoder();</span>
-<span class="source-line-no">073</span><span id="line-73"> break;</span>
-<span class="source-line-no">074</span><span id="line-74"> case "b64basic":</span>
-<span class="source-line-no">075</span><span id="line-75"> case "base64basic":</span>
-<span class="source-line-no">076</span><span id="line-76"> decoder = Base64.getDecoder();</span>
-<span class="source-line-no">077</span><span id="line-77"> break;</span>
-<span class="source-line-no">078</span><span id="line-78"> default:</span>
-<span class="source-line-no">079</span><span id="line-79"> throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> this.row = decoder.decode(this.row);</span>
-<span class="source-line-no">082</span><span id="line-82"> if (this.endRow != null) {</span>
-<span class="source-line-no">083</span><span id="line-83"> this.endRow = decoder.decode(this.endRow);</span>
-<span class="source-line-no">084</span><span id="line-84"> }</span>
-<span class="source-line-no">085</span><span id="line-85"> TreeSet<byte[]> decodedColumns = new TreeSet<>(Bytes.BYTES_COMPARATOR);</span>
-<span class="source-line-no">086</span><span id="line-86"> for (byte[] encodedColumn : this.columns) {</span>
-<span class="source-line-no">087</span><span id="line-87"> decodedColumns.add(decoder.decode(encodedColumn));</span>
-<span class="source-line-no">088</span><span id="line-88"> }</span>
-<span class="source-line-no">089</span><span id="line-89"> this.columns = decodedColumns;</span>
-<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"> }</span>
-<span class="source-line-no">092</span><span id="line-92"></span>
-<span class="source-line-no">093</span><span id="line-93"> private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">094</span><span id="line-94"> String startRow = null, endRow = null;</span>
-<span class="source-line-no">095</span><span id="line-95"> try {</span>
-<span class="source-line-no">096</span><span id="line-96"> StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">097</span><span id="line-97"> char c;</span>
-<span class="source-line-no">098</span><span id="line-98"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">099</span><span id="line-99"> sb.append(c);</span>
-<span class="source-line-no">100</span><span id="line-100"> i++;</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"> i++;</span>
-<span class="source-line-no">103</span><span id="line-103"> String row = startRow = sb.toString();</span>
-<span class="source-line-no">104</span><span id="line-104"> int idx = startRow.indexOf(',');</span>
-<span class="source-line-no">105</span><span id="line-105"> if (idx != -1) {</span>
-<span class="source-line-no">106</span><span id="line-106"> startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">107</span><span id="line-107"> endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">108</span><span id="line-108"> } else {</span>
-<span class="source-line-no">109</span><span id="line-109"> startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"> } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">112</span><span id="line-112"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">113</span><span id="line-113"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">114</span><span id="line-114"> throw new RuntimeException(e);</span>
-<span class="source-line-no">115</span><span id="line-115"> }</span>
-<span class="source-line-no">116</span><span id="line-116"> // HBase does not support wildcards on row keys so we will emulate a</span>
-<span class="source-line-no">117</span><span id="line-117"> // suffix glob by synthesizing appropriate start and end row keys for</span>
-<span class="source-line-no">118</span><span id="line-118"> // table scanning</span>
-<span class="source-line-no">119</span><span id="line-119"> if (startRow.charAt(startRow.length() - 1) == '*') {</span>
-<span class="source-line-no">120</span><span id="line-120"> if (endRow != null)</span>
-<span class="source-line-no">121</span><span id="line-121"> throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
-<span class="source-line-no">122</span><span id="line-122"> this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
-<span class="source-line-no">123</span><span id="line-123"> this.endRow = new byte[this.row.length + 1];</span>
-<span class="source-line-no">124</span><span id="line-124"> System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
-<span class="source-line-no">125</span><span id="line-125"> this.endRow[this.row.length] = (byte) 255;</span>
-<span class="source-line-no">126</span><span id="line-126"> } else {</span>
-<span class="source-line-no">127</span><span id="line-127"> this.row = Bytes.toBytes(startRow.toString());</span>
-<span class="source-line-no">128</span><span id="line-128"> if (endRow != null) {</span>
-<span class="source-line-no">129</span><span id="line-129"> this.endRow = Bytes.toBytes(endRow.toString());</span>
-<span class="source-line-no">130</span><span id="line-130"> }</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"> return i;</span>
-<span class="source-line-no">133</span><span id="line-133"> }</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">136</span><span id="line-136"> if (i >= path.length()) {</span>
-<span class="source-line-no">137</span><span id="line-137"> return i;</span>
-<span class="source-line-no">138</span><span id="line-138"> }</span>
-<span class="source-line-no">139</span><span id="line-139"> try {</span>
-<span class="source-line-no">140</span><span id="line-140"> char c;</span>
-<span class="source-line-no">141</span><span id="line-141"> StringBuilder column = new StringBuilder();</span>
-<span class="source-line-no">142</span><span id="line-142"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
-<span class="source-line-no">143</span><span id="line-143"> if (c == ',') {</span>
-<span class="source-line-no">144</span><span id="line-144"> if (column.length() < 1) {</span>
-<span class="source-line-no">145</span><span id="line-145"> throw new IllegalArgumentException("invalid path");</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">148</span><span id="line-148"> this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">149</span><span id="line-149"> column.setLength(0);</span>
-<span class="source-line-no">150</span><span id="line-150"> i++;</span>
-<span class="source-line-no">151</span><span id="line-151"> continue;</span>
-<span class="source-line-no">152</span><span id="line-152"> }</span>
-<span class="source-line-no">153</span><span id="line-153"> column.append(c);</span>
-<span class="source-line-no">154</span><span id="line-154"> i++;</span>
-<span class="source-line-no">155</span><span id="line-155"> }</span>
-<span class="source-line-no">156</span><span id="line-156"> i++;</span>
-<span class="source-line-no">157</span><span id="line-157"> // trailing list entry</span>
-<span class="source-line-no">158</span><span id="line-158"> if (column.length() > 0) {</span>
-<span class="source-line-no">159</span><span id="line-159"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
-<span class="source-line-no">160</span><span id="line-160"> this.columns.add(Bytes.toBytes(s));</span>
-<span class="source-line-no">161</span><span id="line-161"> }</span>
-<span class="source-line-no">162</span><span id="line-162"> } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">163</span><span id="line-163"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">164</span><span id="line-164"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">165</span><span id="line-165"> // shouldn't happen</span>
-<span class="source-line-no">166</span><span id="line-166"> throw new RuntimeException(e);</span>
-<span class="source-line-no">167</span><span id="line-167"> }</span>
-<span class="source-line-no">168</span><span id="line-168"> return i;</span>
-<span class="source-line-no">169</span><span id="line-169"> }</span>
-<span class="source-line-no">170</span><span id="line-170"></span>
-<span class="source-line-no">171</span><span id="line-171"> private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
-<span class="source-line-no">172</span><span id="line-172"> if (i >= path.length()) {</span>
-<span class="source-line-no">173</span><span id="line-173"> return i;</span>
-<span class="source-line-no">174</span><span id="line-174"> }</span>
-<span class="source-line-no">175</span><span id="line-175"> long time0 = 0, time1 = 0;</span>
-<span class="source-line-no">176</span><span id="line-176"> try {</span>
-<span class="source-line-no">177</span><span id="line-177"> char c = 0;</span>
-<span class="source-line-no">178</span><span id="line-178"> StringBuilder stamp = new StringBuilder();</span>
-<span class="source-line-no">179</span><span id="line-179"> while (i < path.length()) {</span>
-<span class="source-line-no">180</span><span id="line-180"> c = path.charAt(i);</span>
-<span class="source-line-no">181</span><span id="line-181"> if (c == '/' || c == ',') {</span>
-<span class="source-line-no">182</span><span id="line-182"> break;</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"> stamp.append(c);</span>
-<span class="source-line-no">185</span><span id="line-185"> i++;</span>
-<span class="source-line-no">186</span><span id="line-186"> }</span>
-<span class="source-line-no">187</span><span id="line-187"> try {</span>
-<span class="source-line-no">188</span><span id="line-188"> time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">189</span><span id="line-189"> } catch (NumberFormatException e) {</span>
-<span class="source-line-no">190</span><span id="line-190"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">191</span><span id="line-191"> }</span>
-<span class="source-line-no">192</span><span id="line-192"> if (c == ',') {</span>
-<span class="source-line-no">193</span><span id="line-193"> stamp = new StringBuilder();</span>
-<span class="source-line-no">194</span><span id="line-194"> i++;</span>
-<span class="source-line-no">195</span><span id="line-195"> while (i < path.length() && ((c = path.charAt(i)) != '/')) {</span>
-<span class="source-line-no">196</span><span id="line-196"> stamp.append(c);</span>
-<span class="source-line-no">197</span><span id="line-197"> i++;</span>
-<span class="source-line-no">198</span><span id="line-198"> }</span>
-<span class="source-line-no">199</span><span id="line-199"> try {</span>
-<span class="source-line-no">200</span><span id="line-200"> time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">201</span><span id="line-201"> } catch (NumberFormatException e) {</span>
-<span class="source-line-no">202</span><span id="line-202"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
-<span class="source-line-no">204</span><span id="line-204"> }</span>
-<span class="source-line-no">205</span><span id="line-205"> if (c == '/') {</span>
-<span class="source-line-no">206</span><span id="line-206"> i++;</span>
-<span class="source-line-no">207</span><span id="line-207"> }</span>
-<span class="source-line-no">208</span><span id="line-208"> } catch (IndexOutOfBoundsException e) {</span>
-<span class="source-line-no">209</span><span id="line-209"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">210</span><span id="line-210"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">211</span><span id="line-211"> // shouldn't happen</span>
-<span class="source-line-no">212</span><span id="line-212"> throw new RuntimeException(e);</span>
-<span class="source-line-no">213</span><span id="line-213"> }</span>
-<span class="source-line-no">214</span><span id="line-214"> if (time1 != 0) {</span>
-<span class="source-line-no">215</span><span id="line-215"> startTime = time0;</span>
-<span class="source-line-no">216</span><span id="line-216"> endTime = time1;</span>
-<span class="source-line-no">217</span><span id="line-217"> } else {</span>
-<span class="source-line-no">218</span><span id="line-218"> endTime = time0;</span>
-<span class="source-line-no">219</span><span id="line-219"> }</span>
-<span class="source-line-no">220</span><span id="line-220"> return i;</span>
-<span class="source-line-no">221</span><span id="line-221"> }</span>
-<span class="source-line-no">222</span><span id="line-222"></span>
-<span class="source-line-no">223</span><span id="line-223"> private int parseQueryParams(final String path, int i) {</span>
-<span class="source-line-no">224</span><span id="line-224"> if (i >= path.length()) {</span>
-<span class="source-line-no">225</span><span id="line-225"> return i;</span>
-<span class="source-line-no">226</span><span id="line-226"> }</span>
-<span class="source-line-no">227</span><span id="line-227"> StringBuilder query = new StringBuilder();</span>
-<span class="source-line-no">228</span><span id="line-228"> try {</span>
-<span class="source-line-no">229</span><span id="line-229"> query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
-<span class="source-line-no">230</span><span id="line-230"> } catch (UnsupportedEncodingException e) {</span>
-<span class="source-line-no">231</span><span id="line-231"> // should not happen</span>
-<span class="source-line-no">232</span><span id="line-232"> throw new RuntimeException(e);</span>
-<span class="source-line-no">233</span><span id="line-233"> }</span>
-<span class="source-line-no">234</span><span id="line-234"> i += query.length();</span>
-<span class="source-line-no">235</span><span id="line-235"> int j = 0;</span>
-<span class="source-line-no">236</span><span id="line-236"> while (j < query.length()) {</span>
-<span class="source-line-no">237</span><span id="line-237"> char c = query.charAt(j);</span>
-<span class="source-line-no">238</span><span id="line-238"> if (c != '?' && c != '&') {</span>
-<span class="source-line-no">239</span><span id="line-239"> break;</span>
-<span class="source-line-no">240</span><span id="line-240"> }</span>
-<span class="source-line-no">241</span><span id="line-241"> if (++j > query.length()) {</span>
-<span class="source-line-no">242</span><span id="line-242"> throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">243</span><span id="line-243"> }</span>
-<span class="source-line-no">244</span><span id="line-244"> char what = query.charAt(j);</span>
-<span class="source-line-no">245</span><span id="line-245"> if (++j > query.length()) {</span>
-<span class="source-line-no">246</span><span id="line-246"> break;</span>
-<span class="source-line-no">247</span><span id="line-247"> }</span>
-<span class="source-line-no">248</span><span id="line-248"> c = query.charAt(j);</span>
-<span class="source-line-no">249</span><span id="line-249"> if (c != '=') {</span>
-<span class="source-line-no">250</span><span id="line-250"> throw new IllegalArgumentException("malformed query parameter");</span>
-<span class="source-line-no">251</span><span id="line-251"> }</span>
-<span class="source-line-no">252</span><span id="line-252"> if (++j > query.length()) {</span>
-<span class="source-line-no">253</span><span id="line-253"> break;</span>
-<span class="source-line-no">254</span><span id="line-254"> }</span>
-<span class="source-line-no">255</span><span id="line-255"> switch (what) {</span>
-<span class="source-line-no">256</span><span id="line-256"> case 'm': {</span>
-<span class="source-line-no">257</span><span id="line-257"> StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">258</span><span id="line-258"> while (j <= query.length()) {</span>
-<span class="source-line-no">259</span><span id="line-259"> c = query.charAt(j);</span>
-<span class="source-line-no">260</span><span id="line-260"> if (c < '0' || c > '9') {</span>
-<span class="source-line-no">261</span><span id="line-261"> j--;</span>
-<span class="source-line-no">262</span><span id="line-262"> break;</span>
-<span class="source-line-no">263</span><span id="line-263"> }</span>
-<span class="source-line-no">264</span><span id="line-264"> sb.append(c);</span>
-<span class="source-line-no">265</span><span id="line-265"> }</span>
-<span class="source-line-no">266</span><span id="line-266"> maxVersions = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">267</span><span id="line-267"> }</span>
-<span class="source-line-no">268</span><span id="line-268"> break;</span>
-<span class="source-line-no">269</span><span id="line-269"> case 'n': {</span>
-<span class="source-line-no">270</span><span id="line-270"> StringBuilder sb = new StringBuilder();</span>
-<span class="source-line-no">271</span><span id="line-271"> while (j <= query.length()) {</span>
-<span class="source-line-no">272</span><span id="line-272"> c = query.charAt(j);</span>
-<span class="source-line-no">273</span><span id="line-273"> if (c < '0' || c > '9') {</span>
-<span class="source-line-no">274</span><span id="line-274"> j--;</span>
-<span class="source-line-no">275</span><span id="line-275"> break;</span>
-<span class="source-line-no">276</span><span id="line-276"> }</span>
-<span class="source-line-no">277</span><span id="line-277"> sb.append(c);</span>
-<span class="source-line-no">278</span><span id="line-278"> }</span>
-<span class="source-line-no">279</span><span id="line-279"> maxValues = Integer.parseInt(sb.toString());</span>
-<span class="source-line-no">280</span><span id="line-280"> }</span>
-<span class="source-line-no">281</span><span id="line-281"> break;</span>
-<span class="source-line-no">282</span><span id="line-282"> default:</span>
-<span class="source-line-no">283</span><span id="line-283"> throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"> }</span>
-<span class="source-line-no">286</span><span id="line-286"> return i;</span>
-<span class="source-line-no">287</span><span id="line-287"> }</span>
-<span class="source-line-no">288</span><span id="line-288"></span>
-<span class="source-line-no">289</span><span id="line-289"> public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
-<span class="source-line-no">290</span><span id="line-290"> int maxVersions) {</span>
-<span class="source-line-no">291</span><span id="line-291"> this.row = startRow;</span>
-<span class="source-line-no">292</span><span id="line-292"> this.endRow = endRow;</span>
-<span class="source-line-no">293</span><span id="line-293"> if (columns != null) {</span>
-<span class="source-line-no">294</span><span id="line-294"> Collections.addAll(this.columns, columns);</span>
-<span class="source-line-no">295</span><span id="line-295"> }</span>
-<span class="source-line-no">296</span><span id="line-296"> this.startTime = startTime;</span>
-<span class="source-line-no">297</span><span id="line-297"> this.endTime = endTime;</span>
-<span class="source-line-no">298</span><span id="line-298"> this.maxVersions = maxVersions;</span>
-<span class="source-line-no">299</span><span id="line-299"> }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
-<span class="source-line-no">302</span><span id="line-302"> long endTime, int maxVersions, Collection<String> labels) {</span>
-<span class="source-line-no">303</span><span id="line-303"> this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
-<span class="source-line-no">304</span><span id="line-304"> if (labels != null) {</span>
-<span class="source-line-no">305</span><span id="line-305"> this.labels.addAll(labels);</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"> }</span>
-<span class="source-line-no">308</span><span id="line-308"></span>
-<span class="source-line-no">309</span><span id="line-309"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
-<span class="source-line-no">310</span><span id="line-310"> long endTime, int maxVersions) {</span>
-<span class="source-line-no">311</span><span id="line-311"> this.row = startRow;</span>
-<span class="source-line-no">312</span><span id="line-312"> this.endRow = endRow;</span>
-<span class="source-line-no">313</span><span id="line-313"> if (columns != null) {</span>
-<span class="source-line-no">314</span><span id="line-314"> this.columns.addAll(columns);</span>
-<span class="source-line-no">315</span><span id="line-315"> }</span>
-<span class="source-line-no">316</span><span id="line-316"> this.startTime = startTime;</span>
-<span class="source-line-no">317</span><span id="line-317"> this.endTime = endTime;</span>
-<span class="source-line-no">318</span><span id="line-318"> this.maxVersions = maxVersions;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> public boolean isSingleRow() {</span>
-<span class="source-line-no">322</span><span id="line-322"> return endRow == null;</span>
-<span class="source-line-no">323</span><span id="line-323"> }</span>
-<span class="source-line-no">324</span><span id="line-324"></span>
-<span class="source-line-no">325</span><span id="line-325"> public int getMaxVersions() {</span>
-<span class="source-line-no">326</span><span id="line-326"> return maxVersions;</span>
-<span class="source-line-no">327</span><span id="line-327"> }</span>
-<span class="source-line-no">328</span><span id="line-328"></span>
-<span class="source-line-no">329</span><span id="line-329"> public void setMaxVersions(final int maxVersions) {</span>
-<span class="source-line-no">330</span><span id="line-330"> this.maxVersions = maxVersions;</span>
-<span class="source-line-no">331</span><span id="line-331"> }</span>
-<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333"> public int getMaxValues() {</span>
-<span class="source-line-no">334</span><span id="line-334"> return maxValues;</span>
-<span class="source-line-no">335</span><span id="line-335"> }</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337"> public void setMaxValues(final int maxValues) {</span>
-<span class="source-line-no">338</span><span id="line-338"> this.maxValues = maxValues;</span>
-<span class="source-line-no">339</span><span id="line-339"> }</span>
-<span class="source-line-no">340</span><span id="line-340"></span>
-<span class="source-line-no">341</span><span id="line-341"> public boolean hasColumns() {</span>
-<span class="source-line-no">342</span><span id="line-342"> return !columns.isEmpty();</span>
-<span class="source-line-no">343</span><span id="line-343"> }</span>
-<span class="source-line-no">344</span><span id="line-344"></span>
-<span class="source-line-no">345</span><span id="line-345"> public boolean hasLabels() {</span>
-<span class="source-line-no">346</span><span id="line-346"> return !labels.isEmpty();</span>
-<span class="source-line-no">347</span><span id="line-347"> }</span>
-<span class="source-line-no">348</span><span id="line-348"></span>
-<span class="source-line-no">349</span><span id="line-349"> public byte[] getRow() {</span>
-<span class="source-line-no">350</span><span id="line-350"> return row;</span>
-<span class="source-line-no">351</span><span id="line-351"> }</span>
-<span class="source-line-no">352</span><span id="line-352"></span>
-<span class="source-line-no">353</span><span id="line-353"> public byte[] getStartRow() {</span>
-<span class="source-line-no">354</span><span id="line-354"> return row;</span>
-<span class="source-line-no">355</span><span id="line-355"> }</span>
-<span class="source-line-no">356</span><span id="line-356"></span>
-<span class="source-line-no">357</span><span id="line-357"> public boolean hasEndRow() {</span>
-<span class="source-line-no">358</span><span id="line-358"> return endRow != null;</span>
-<span class="source-line-no">359</span><span id="line-359"> }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361"> public byte[] getEndRow() {</span>
-<span class="source-line-no">362</span><span id="line-362"> return endRow;</span>
-<span class="source-line-no">363</span><span id="line-363"> }</span>
-<span class="source-line-no">364</span><span id="line-364"></span>
-<span class="source-line-no">365</span><span id="line-365"> public void addColumn(final byte[] column) {</span>
-<span class="source-line-no">366</span><span id="line-366"> columns.add(column);</span>
-<span class="source-line-no">367</span><span id="line-367"> }</span>
-<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> public byte[][] getColumns() {</span>
-<span class="source-line-no">370</span><span id="line-370"> return columns.toArray(new byte[columns.size()][]);</span>
-<span class="source-line-no">371</span><span id="line-371"> }</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373"> public List<String> getLabels() {</span>
-<span class="source-line-no">374</span><span id="line-374"> return labels;</span>
-<span class="source-line-no">375</span><span id="line-375"> }</span>
-<span class="source-line-no">376</span><span id="line-376"></span>
-<span class="source-line-no">377</span><span id="line-377"> public boolean hasTimestamp() {</span>
-<span class="source-line-no">378</span><span id="line-378"> return (startTime == 0) && (endTime != Long.MAX_VALUE);</span>
-<span class="source-line-no">379</span><span id="line-379"> }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381"> public long getTimestamp() {</span>
-<span class="source-line-no">382</span><span id="line-382"> return endTime;</span>
-<span class="source-line-no">383</span><span id="line-383"> }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385"> public long getStartTime() {</span>
-<span class="source-line-no">386</span><span id="line-386"> return startTime;</span>
-<span class="source-line-no">387</span><span id="line-387"> }</span>
-<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389"> public void setStartTime(final long startTime) {</span>
-<span class="source-line-no">390</span><span id="line-390"> this.startTime = startTime;</span>
-<span class="source-line-no">391</span><span id="line-391"> }</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393"> public long getEndTime() {</span>
-<span class="source-line-no">394</span><span id="line-394"> return endTime;</span>
-<span class="source-line-no">395</span><span id="line-395"> }</span>
-<span class="source-line-no">396</span><span id="line-396"></span>
-<span class="source-line-no">397</span><span id="line-397"> public void setEndTime(long endTime) {</span>
-<span class="source-line-no">398</span><span id="line-398"> this.endTime = endTime;</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401"> @Override</span>
-<span class="source-line-no">402</span><span id="line-402"> public String toString() {</span>
-<span class="source-line-no">403</span><span id="line-403"> StringBuilder result = new StringBuilder();</span>
-<span class="source-line-no">404</span><span id="line-404"> result.append("{startRow => '");</span>
-<span class="source-line-no">405</span><span id="line-405"> if (row != null) {</span>
-<span class="source-line-no">406</span><span id="line-406"> result.append(Bytes.toString(row));</span>
-<span class="source-line-no">407</span><span id="line-407"> }</span>
-<span class="source-line-no">408</span><span id="line-408"> result.append("', endRow => '");</span>
-<span class="source-line-no">409</span><span id="line-409"> if (endRow != null) {</span>
-<span class="source-line-no">410</span><span id="line-410"> result.append(Bytes.toString(endRow));</span>
-<span class="source-line-no">411</span><span id="line-411"> }</span>
-<span class="source-line-no">412</span><span id="line-412"> result.append("', columns => [");</span>
-<span class="source-line-no">413</span><span id="line-413"> for (byte[] col : columns) {</span>
-<span class="source-line-no">414</span><span id="line-414"> result.append(" '");</span>
-<span class="source-line-no">415</span><span id="line-415"> result.append(Bytes.toString(col));</span>
-<span class="source-line-no">416</span><span id="line-416"> result.append("'");</span>
-<span class="source-line-no">417</span><span id="line-417"> }</span>
-<span class="source-line-no">418</span><span id="line-418"> result.append(" ], startTime => ");</span>
-<span class="source-line-no">419</span><span id="line-419"> result.append(Long.toString(startTime));</span>
-<span class="source-line-no">420</span><span id="line-420"> result.append(", endTime => ");</span>
-<span class="source-line-no">421</span><span id="line-421"> result.append(Long.toString(endTime));</span>
-<span class="source-line-no">422</span><span id="line-422"> result.append(", maxVersions => ");</span>
-<span class="source-line-no">423</span><span id="line-423"> result.append(Integer.toString(maxVersions));</span>
-<span class="source-line-no">424</span><span id="line-424"> result.append(", maxValues => ");</span>
-<span class="source-line-no">425</span><span id="line-425"> result.append(Integer.toString(maxValues));</span>
-<span class="source-line-no">426</span><span id="line-426"> result.append("}");</span>
-<span class="source-line-no">427</span><span id="line-427"> return result.toString();</span>
-<span class="source-line-no">428</span><span id="line-428"> }</span>
-<span class="source-line-no">429</span><span id="line-429">}</span>
+<span class="source-line-no">049</span><span id="line-49"> private boolean partialTimeRange;</span>
+<span class="source-line-no">050</span><span id="line-50"></span>
+<span class="source-line-no">051</span><span id="line-51"> public RowSpec(String path) throws IllegalArgumentException {</span>
+<span class="source-line-no">052</span><span id="line-52"> this(path, null);</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> public RowSpec(String path, String keyEncoding) throws IllegalArgumentException {</span>
+<span class="source-line-no">056</span><span id="line-56"> int i = 0;</span>
+<span class="source-line-no">057</span><span id="line-57"> while (path.charAt(i) == '/') {</span>
+<span class="source-line-no">058</span><span id="line-58"> i++;</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"> i = parseRowKeys(path, i);</span>
+<span class="source-line-no">061</span><span id="line-61"> i = parseColumns(path, i);</span>
+<span class="source-line-no">062</span><span id="line-62"> i = parseTimestamp(path, i);</span>
+<span class="source-line-no">063</span><span id="line-63"> i = parseQueryParams(path, i);</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65"> if (keyEncoding != null) {</span>
+<span class="source-line-no">066</span><span id="line-66"> // See https://en.wikipedia.org/wiki/Base64#Variants_summary_table</span>
+<span class="source-line-no">067</span><span id="line-67"> Base64.Decoder decoder;</span>
+<span class="source-line-no">068</span><span id="line-68"> switch (keyEncoding) {</span>
+<span class="source-line-no">069</span><span id="line-69"> case "b64":</span>
+<span class="source-line-no">070</span><span id="line-70"> case "base64":</span>
+<span class="source-line-no">071</span><span id="line-71"> case "b64url":</span>
+<span class="source-line-no">072</span><span id="line-72"> case "base64url":</span>
+<span class="source-line-no">073</span><span id="line-73"> decoder = Base64.getUrlDecoder();</span>
+<span class="source-line-no">074</span><span id="line-74"> break;</span>
+<span class="source-line-no">075</span><span id="line-75"> case "b64basic":</span>
+<span class="source-line-no">076</span><span id="line-76"> case "base64basic":</span>
+<span class="source-line-no">077</span><span id="line-77"> decoder = Base64.getDecoder();</span>
+<span class="source-line-no">078</span><span id="line-78"> break;</span>
+<span class="source-line-no">079</span><span id="line-79"> default:</span>
+<span class="source-line-no">080</span><span id="line-80"> throw new IllegalArgumentException("unknown key encoding '" + keyEncoding + "'");</span>
+<span class="source-line-no">081</span><span id="line-81"> }</span>
+<span class="source-line-no">082</span><span id="line-82"> this.row = decoder.decode(this.row);</span>
+<span class="source-line-no">083</span><span id="line-83"> if (this.endRow != null) {</span>
+<span class="source-line-no">084</span><span id="line-84"> this.endRow = decoder.decode(this.endRow);</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> TreeSet<byte[]> decodedColumns = new TreeSet<>(Bytes.BYTES_COMPARATOR);</span>
+<span class="source-line-no">087</span><span id="line-87"> for (byte[] encodedColumn : this.columns) {</span>
+<span class="source-line-no">088</span><span id="line-88"> decodedColumns.add(decoder.decode(encodedColumn));</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"> this.columns = decodedColumns;</span>
+<span class="source-line-no">091</span><span id="line-91"> }</span>
+<span class="source-line-no">092</span><span id="line-92"> }</span>
+<span class="source-line-no">093</span><span id="line-93"></span>
+<span class="source-line-no">094</span><span id="line-94"> private int parseRowKeys(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">095</span><span id="line-95"> String startRow = null, endRow = null;</span>
+<span class="source-line-no">096</span><span id="line-96"> try {</span>
+<span class="source-line-no">097</span><span id="line-97"> StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">098</span><span id="line-98"> char c;</span>
+<span class="source-line-no">099</span><span id="line-99"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">100</span><span id="line-100"> sb.append(c);</span>
+<span class="source-line-no">101</span><span id="line-101"> i++;</span>
+<span class="source-line-no">102</span><span id="line-102"> }</span>
+<span class="source-line-no">103</span><span id="line-103"> i++;</span>
+<span class="source-line-no">104</span><span id="line-104"> String row = startRow = sb.toString();</span>
+<span class="source-line-no">105</span><span id="line-105"> int idx = startRow.indexOf(',');</span>
+<span class="source-line-no">106</span><span id="line-106"> if (idx != -1) {</span>
+<span class="source-line-no">107</span><span id="line-107"> startRow = URLDecoder.decode(row.substring(0, idx), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">108</span><span id="line-108"> endRow = URLDecoder.decode(row.substring(idx + 1), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">109</span><span id="line-109"> } else {</span>
+<span class="source-line-no">110</span><span id="line-110"> startRow = URLDecoder.decode(row, HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">111</span><span id="line-111"> }</span>
+<span class="source-line-no">112</span><span id="line-112"> } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">113</span><span id="line-113"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">114</span><span id="line-114"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">115</span><span id="line-115"> throw new RuntimeException(e);</span>
+<span class="source-line-no">116</span><span id="line-116"> }</span>
+<span class="source-line-no">117</span><span id="line-117"> // HBase does not support wildcards on row keys so we will emulate a</span>
+<span class="source-line-no">118</span><span id="line-118"> // suffix glob by synthesizing appropriate start and end row keys for</span>
+<span class="source-line-no">119</span><span id="line-119"> // table scanning</span>
+<span class="source-line-no">120</span><span id="line-120"> if (startRow.charAt(startRow.length() - 1) == '*') {</span>
+<span class="source-line-no">121</span><span id="line-121"> if (endRow != null)</span>
+<span class="source-line-no">122</span><span id="line-122"> throw new IllegalArgumentException("invalid path: start row " + "specified with wildcard");</span>
+<span class="source-line-no">123</span><span id="line-123"> this.row = Bytes.toBytes(startRow.substring(0, startRow.lastIndexOf("*")));</span>
+<span class="source-line-no">124</span><span id="line-124"> this.endRow = new byte[this.row.length + 1];</span>
+<span class="source-line-no">125</span><span id="line-125"> System.arraycopy(this.row, 0, this.endRow, 0, this.row.length);</span>
+<span class="source-line-no">126</span><span id="line-126"> this.endRow[this.row.length] = (byte) 255;</span>
+<span class="source-line-no">127</span><span id="line-127"> } else {</span>
+<span class="source-line-no">128</span><span id="line-128"> this.row = Bytes.toBytes(startRow.toString());</span>
+<span class="source-line-no">129</span><span id="line-129"> if (endRow != null) {</span>
+<span class="source-line-no">130</span><span id="line-130"> this.endRow = Bytes.toBytes(endRow.toString());</span>
+<span class="source-line-no">131</span><span id="line-131"> }</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"> return i;</span>
+<span class="source-line-no">134</span><span id="line-134"> }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> private int parseColumns(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">137</span><span id="line-137"> if (i >= path.length()) {</span>
+<span class="source-line-no">138</span><span id="line-138"> return i;</span>
+<span class="source-line-no">139</span><span id="line-139"> }</span>
+<span class="source-line-no">140</span><span id="line-140"> try {</span>
+<span class="source-line-no">141</span><span id="line-141"> char c;</span>
+<span class="source-line-no">142</span><span id="line-142"> StringBuilder column = new StringBuilder();</span>
+<span class="source-line-no">143</span><span id="line-143"> while (i < path.length() && (c = path.charAt(i)) != '/') {</span>
+<span class="source-line-no">144</span><span id="line-144"> if (c == ',') {</span>
+<span class="source-line-no">145</span><span id="line-145"> if (column.length() < 1) {</span>
+<span class="source-line-no">146</span><span id="line-146"> throw new IllegalArgumentException("invalid path");</span>
+<span class="source-line-no">147</span><span id="line-147"> }</span>
+<span class="source-line-no">148</span><span id="line-148"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">149</span><span id="line-149"> this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">150</span><span id="line-150"> column.setLength(0);</span>
+<span class="source-line-no">151</span><span id="line-151"> i++;</span>
+<span class="source-line-no">152</span><span id="line-152"> continue;</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"> column.append(c);</span>
+<span class="source-line-no">155</span><span id="line-155"> i++;</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"> i++;</span>
+<span class="source-line-no">158</span><span id="line-158"> // trailing list entry</span>
+<span class="source-line-no">159</span><span id="line-159"> if (column.length() > 0) {</span>
+<span class="source-line-no">160</span><span id="line-160"> String s = URLDecoder.decode(column.toString(), HConstants.UTF8_ENCODING);</span>
+<span class="source-line-no">161</span><span id="line-161"> this.columns.add(Bytes.toBytes(s));</span>
+<span class="source-line-no">162</span><span id="line-162"> }</span>
+<span class="source-line-no">163</span><span id="line-163"> } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">164</span><span id="line-164"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">165</span><span id="line-165"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">166</span><span id="line-166"> // shouldn't happen</span>
+<span class="source-line-no">167</span><span id="line-167"> throw new RuntimeException(e);</span>
+<span class="source-line-no">168</span><span id="line-168"> }</span>
+<span class="source-line-no">169</span><span id="line-169"> return i;</span>
+<span class="source-line-no">170</span><span id="line-170"> }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> private int parseTimestamp(final String path, int i) throws IllegalArgumentException {</span>
+<span class="source-line-no">173</span><span id="line-173"> if (i >= path.length()) {</span>
+<span class="source-line-no">174</span><span id="line-174"> return i;</span>
+<span class="source-line-no">175</span><span id="line-175"> }</span>
+<span class="source-line-no">176</span><span id="line-176"> long time0 = 0, time1 = 0;</span>
+<span class="source-line-no">177</span><span id="line-177"> try {</span>
+<span class="source-line-no">178</span><span id="line-178"> char c = 0;</span>
+<span class="source-line-no">179</span><span id="line-179"> StringBuilder stamp = new StringBuilder();</span>
+<span class="source-line-no">180</span><span id="line-180"> while (i < path.length()) {</span>
+<span class="source-line-no">181</span><span id="line-181"> c = path.charAt(i);</span>
+<span class="source-line-no">182</span><span id="line-182"> if (c == '/' || c == ',') {</span>
+<span class="source-line-no">183</span><span id="line-183"> break;</span>
+<span class="source-line-no">184</span><span id="line-184"> }</span>
+<span class="source-line-no">185</span><span id="line-185"> stamp.append(c);</span>
+<span class="source-line-no">186</span><span id="line-186"> i++;</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"> try {</span>
+<span class="source-line-no">189</span><span id="line-189"> time0 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">190</span><span id="line-190"> } catch (NumberFormatException e) {</span>
+<span class="source-line-no">191</span><span id="line-191"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">192</span><span id="line-192"> }</span>
+<span class="source-line-no">193</span><span id="line-193"> if (c == ',') {</span>
+<span class="source-line-no">194</span><span id="line-194"> stamp = new StringBuilder();</span>
+<span class="source-line-no">195</span><span id="line-195"> i++;</span>
+<span class="source-line-no">196</span><span id="line-196"> while (i < path.length() && ((c = path.charAt(i)) != '/')) {</span>
+<span class="source-line-no">197</span><span id="line-197"> stamp.append(c);</span>
+<span class="source-line-no">198</span><span id="line-198"> i++;</span>
+<span class="source-line-no">199</span><span id="line-199"> }</span>
+<span class="source-line-no">200</span><span id="line-200"> try {</span>
+<span class="source-line-no">201</span><span id="line-201"> time1 = Long.parseLong(URLDecoder.decode(stamp.toString(), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">202</span><span id="line-202"> } catch (NumberFormatException e) {</span>
+<span class="source-line-no">203</span><span id="line-203"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">204</span><span id="line-204"> }</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"> if (c == '/') {</span>
+<span class="source-line-no">207</span><span id="line-207"> i++;</span>
+<span class="source-line-no">208</span><span id="line-208"> }</span>
+<span class="source-line-no">209</span><span id="line-209"> } catch (IndexOutOfBoundsException e) {</span>
+<span class="source-line-no">210</span><span id="line-210"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">211</span><span id="line-211"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">212</span><span id="line-212"> // shouldn't happen</span>
+<span class="source-line-no">213</span><span id="line-213"> throw new RuntimeException(e);</span>
+<span class="source-line-no">214</span><span id="line-214"> }</span>
+<span class="source-line-no">215</span><span id="line-215"> if (time1 != 0) {</span>
+<span class="source-line-no">216</span><span id="line-216"> startTime = time0;</span>
+<span class="source-line-no">217</span><span id="line-217"> endTime = time1;</span>
+<span class="source-line-no">218</span><span id="line-218"> } else {</span>
+<span class="source-line-no">219</span><span id="line-219"> endTime = time0;</span>
+<span class="source-line-no">220</span><span id="line-220"> partialTimeRange = true;</span>
+<span class="source-line-no">221</span><span id="line-221"> }</span>
+<span class="source-line-no">222</span><span id="line-222"> return i;</span>
+<span class="source-line-no">223</span><span id="line-223"> }</span>
+<span class="source-line-no">224</span><span id="line-224"></span>
+<span class="source-line-no">225</span><span id="line-225"> private int parseQueryParams(final String path, int i) {</span>
+<span class="source-line-no">226</span><span id="line-226"> if (i >= path.length()) {</span>
+<span class="source-line-no">227</span><span id="line-227"> return i;</span>
+<span class="source-line-no">228</span><span id="line-228"> }</span>
+<span class="source-line-no">229</span><span id="line-229"> StringBuilder query = new StringBuilder();</span>
+<span class="source-line-no">230</span><span id="line-230"> try {</span>
+<span class="source-line-no">231</span><span id="line-231"> query.append(URLDecoder.decode(path.substring(i), HConstants.UTF8_ENCODING));</span>
+<span class="source-line-no">232</span><span id="line-232"> } catch (UnsupportedEncodingException e) {</span>
+<span class="source-line-no">233</span><span id="line-233"> // should not happen</span>
+<span class="source-line-no">234</span><span id="line-234"> throw new RuntimeException(e);</span>
+<span class="source-line-no">235</span><span id="line-235"> }</span>
+<span class="source-line-no">236</span><span id="line-236"> i += query.length();</span>
+<span class="source-line-no">237</span><span id="line-237"> int j = 0;</span>
+<span class="source-line-no">238</span><span id="line-238"> while (j < query.length()) {</span>
+<span class="source-line-no">239</span><span id="line-239"> char c = query.charAt(j);</span>
+<span class="source-line-no">240</span><span id="line-240"> if (c != '?' && c != '&') {</span>
+<span class="source-line-no">241</span><span id="line-241"> break;</span>
+<span class="source-line-no">242</span><span id="line-242"> }</span>
+<span class="source-line-no">243</span><span id="line-243"> if (++j > query.length()) {</span>
+<span class="source-line-no">244</span><span id="line-244"> throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">245</span><span id="line-245"> }</span>
+<span class="source-line-no">246</span><span id="line-246"> char what = query.charAt(j);</span>
+<span class="source-line-no">247</span><span id="line-247"> if (++j > query.length()) {</span>
+<span class="source-line-no">248</span><span id="line-248"> break;</span>
+<span class="source-line-no">249</span><span id="line-249"> }</span>
+<span class="source-line-no">250</span><span id="line-250"> c = query.charAt(j);</span>
+<span class="source-line-no">251</span><span id="line-251"> if (c != '=') {</span>
+<span class="source-line-no">252</span><span id="line-252"> throw new IllegalArgumentException("malformed query parameter");</span>
+<span class="source-line-no">253</span><span id="line-253"> }</span>
+<span class="source-line-no">254</span><span id="line-254"> if (++j > query.length()) {</span>
+<span class="source-line-no">255</span><span id="line-255"> break;</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"> switch (what) {</span>
+<span class="source-line-no">258</span><span id="line-258"> case 'm': {</span>
+<span class="source-line-no">259</span><span id="line-259"> StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">260</span><span id="line-260"> while (j <= query.length()) {</span>
+<span class="source-line-no">261</span><span id="line-261"> c = query.charAt(j);</span>
+<span class="source-line-no">262</span><span id="line-262"> if (c < '0' || c > '9') {</span>
+<span class="source-line-no">263</span><span id="line-263"> j--;</span>
+<span class="source-line-no">264</span><span id="line-264"> break;</span>
+<span class="source-line-no">265</span><span id="line-265"> }</span>
+<span class="source-line-no">266</span><span id="line-266"> sb.append(c);</span>
+<span class="source-line-no">267</span><span id="line-267"> }</span>
+<span class="source-line-no">268</span><span id="line-268"> maxVersions = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">269</span><span id="line-269"> }</span>
+<span class="source-line-no">270</span><span id="line-270"> break;</span>
+<span class="source-line-no">271</span><span id="line-271"> case 'n': {</span>
+<span class="source-line-no">272</span><span id="line-272"> StringBuilder sb = new StringBuilder();</span>
+<span class="source-line-no">273</span><span id="line-273"> while (j <= query.length()) {</span>
+<span class="source-line-no">274</span><span id="line-274"> c = query.charAt(j);</span>
+<span class="source-line-no">275</span><span id="line-275"> if (c < '0' || c > '9') {</span>
+<span class="source-line-no">276</span><span id="line-276"> j--;</span>
+<span class="source-line-no">277</span><span id="line-277"> break;</span>
+<span class="source-line-no">278</span><span id="line-278"> }</span>
+<span class="source-line-no">279</span><span id="line-279"> sb.append(c);</span>
+<span class="source-line-no">280</span><span id="line-280"> }</span>
+<span class="source-line-no">281</span><span id="line-281"> maxValues = Integer.parseInt(sb.toString());</span>
+<span class="source-line-no">282</span><span id="line-282"> }</span>
+<span class="source-line-no">283</span><span id="line-283"> break;</span>
+<span class="source-line-no">284</span><span id="line-284"> default:</span>
+<span class="source-line-no">285</span><span id="line-285"> throw new IllegalArgumentException("unknown parameter '" + c + "'");</span>
+<span class="source-line-no">286</span><span id="line-286"> }</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> return i;</span>
+<span class="source-line-no">289</span><span id="line-289"> }</span>
+<span class="source-line-no">290</span><span id="line-290"></span>
+<span class="source-line-no">291</span><span id="line-291"> public RowSpec(byte[] startRow, byte[] endRow, byte[][] columns, long startTime, long endTime,</span>
+<span class="source-line-no">292</span><span id="line-292"> int maxVersions) {</span>
+<span class="source-line-no">293</span><span id="line-293"> this.row = startRow;</span>
+<span class="source-line-no">294</span><span id="line-294"> this.endRow = endRow;</span>
+<span class="source-line-no">295</span><span id="line-295"> if (columns != null) {</span>
+<span class="source-line-no">296</span><span id="line-296"> Collections.addAll(this.columns, columns);</span>
+<span class="source-line-no">297</span><span id="line-297"> }</span>
+<span class="source-line-no">298</span><span id="line-298"> this.startTime = startTime;</span>
+<span class="source-line-no">299</span><span id="line-299"> this.endTime = endTime;</span>
+<span class="source-line-no">300</span><span id="line-300"> this.maxVersions = maxVersions;</span>
+<span class="source-line-no">301</span><span id="line-301"> }</span>
+<span class="source-line-no">302</span><span id="line-302"></span>
+<span class="source-line-no">303</span><span id="line-303"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
+<span class="source-line-no">304</span><span id="line-304"> long endTime, int maxVersions, Collection<String> labels) {</span>
+<span class="source-line-no">305</span><span id="line-305"> this(startRow, endRow, columns, startTime, endTime, maxVersions);</span>
+<span class="source-line-no">306</span><span id="line-306"> if (labels != null) {</span>
+<span class="source-line-no">307</span><span id="line-307"> this.labels.addAll(labels);</span>
+<span class="source-line-no">308</span><span id="line-308"> }</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> public RowSpec(byte[] startRow, byte[] endRow, Collection<byte[]> columns, long startTime,</span>
+<span class="source-line-no">312</span><span id="line-312"> long endTime, int maxVersions) {</span>
+<span class="source-line-no">313</span><span id="line-313"> this.row = startRow;</span>
+<span class="source-line-no">314</span><span id="line-314"> this.endRow = endRow;</span>
+<span class="source-line-no">315</span><span id="line-315"> if (columns != null) {</span>
+<span class="source-line-no">316</span><span id="line-316"> this.columns.addAll(columns);</span>
+<span class="source-line-no">317</span><span id="line-317"> }</span>
+<span class="source-line-no">318</span><span id="line-318"> this.startTime = startTime;</span>
+<span class="source-line-no">319</span><span id="line-319"> this.endTime = endTime;</span>
+<span class="source-line-no">320</span><span id="line-320"> this.maxVersions = maxVersions;</span>
+<span class="source-line-no">321</span><span id="line-321"> }</span>
+<span class="source-line-no">322</span><span id="line-322"></span>
+<span class="source-line-no">323</span><span id="line-323"> public boolean isSingleRow() {</span>
+<span class="source-line-no">324</span><span id="line-324"> return endRow == null;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> public int getMaxVersions() {</span>
+<span class="source-line-no">328</span><span id="line-328"> return maxVersions;</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"></span>
+<span class="source-line-no">331</span><span id="line-331"> public void setMaxVersions(final int maxVersions) {</span>
+<span class="source-line-no">332</span><span id="line-332"> this.maxVersions = maxVersions;</span>
+<span class="source-line-no">333</span><span id="line-333"> }</span>
+<span class="source-line-no">334</span><span id="line-334"></span>
+<span class="source-line-no">335</span><span id="line-335"> public int getMaxValues() {</span>
+<span class="source-line-no">336</span><span id="line-336"> return maxValues;</span>
+<span class="source-line-no">337</span><span id="line-337"> }</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339"> public void setMaxValues(final int maxValues) {</span>
+<span class="source-line-no">340</span><span id="line-340"> this.maxValues = maxValues;</span>
+<span class="source-line-no">341</span><span id="line-341"> }</span>
+<span class="source-line-no">342</span><span id="line-342"></span>
+<span class="source-line-no">343</span><span id="line-343"> public boolean hasColumns() {</span>
+<span class="source-line-no">344</span><span id="line-344"> return !columns.isEmpty();</span>
+<span class="source-line-no">345</span><span id="line-345"> }</span>
+<span class="source-line-no">346</span><span id="line-346"></span>
+<span class="source-line-no">347</span><span id="line-347"> public boolean hasLabels() {</span>
+<span class="source-line-no">348</span><span id="line-348"> return !labels.isEmpty();</span>
+<span class="source-line-no">349</span><span id="line-349"> }</span>
+<span class="source-line-no">350</span><span id="line-350"></span>
+<span class="source-line-no">351</span><span id="line-351"> public byte[] getRow() {</span>
+<span class="source-line-no">352</span><span id="line-352"> return row;</span>
+<span class="source-line-no">353</span><span id="line-353"> }</span>
+<span class="source-line-no">354</span><span id="line-354"></span>
+<span class="source-line-no">355</span><span id="line-355"> public byte[] getStartRow() {</span>
+<span class="source-line-no">356</span><span id="line-356"> return row;</span>
+<span class="source-line-no">357</span><span id="line-357"> }</span>
+<span class="source-line-no">358</span><span id="line-358"></span>
+<span class="source-line-no">359</span><span id="line-359"> public boolean hasEndRow() {</span>
+<span class="source-line-no">360</span><span id="line-360"> return endRow != null;</span>
+<span class="source-line-no">361</span><span id="line-361"> }</span>
+<span class="source-line-no">362</span><span id="line-362"></span>
+<span class="source-line-no">363</span><span id="line-363"> public byte[] getEndRow() {</span>
+<span class="source-line-no">364</span><span id="line-364"> return endRow;</span>
+<span class="source-line-no">365</span><span id="line-365"> }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367"> public void addColumn(final byte[] column) {</span>
+<span class="source-line-no">368</span><span id="line-368"> columns.add(column);</span>
+<span class="source-line-no">369</span><span id="line-369"> }</span>
+<span class="source-line-no">370</span><span id="line-370"></span>
+<span class="source-line-no">371</span><span id="line-371"> public byte[][] getColumns() {</span>
+<span class="source-line-no">372</span><span id="line-372"> return columns.toArray(new byte[columns.size()][]);</span>
+<span class="source-line-no">373</span><span id="line-373"> }</span>
+<span class="source-line-no">374</span><span id="line-374"></span>
+<span class="source-line-no">375</span><span id="line-375"> public List<String> getLabels() {</span>
+<span class="source-line-no">376</span><span id="line-376"> return labels;</span>
+<span class="source-line-no">377</span><span id="line-377"> }</span>
+<span class="source-line-no">378</span><span id="line-378"></span>
+<span class="source-line-no">379</span><span id="line-379"> public boolean hasTimestamp() {</span>
+<span class="source-line-no">380</span><span id="line-380"> return (startTime == 0) && (endTime != Long.MAX_VALUE);</span>
+<span class="source-line-no">381</span><span id="line-381"> }</span>
+<span class="source-line-no">382</span><span id="line-382"></span>
+<span class="source-line-no">383</span><span id="line-383"> public long getTimestamp() {</span>
+<span class="source-line-no">384</span><span id="line-384"> return endTime;</span>
+<span class="source-line-no">385</span><span id="line-385"> }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387"> public long getStartTime() {</span>
+<span class="source-line-no">388</span><span id="line-388"> return startTime;</span>
+<span class="source-line-no">389</span><span id="line-389"> }</span>
+<span class="source-line-no">390</span><span id="line-390"></span>
+<span class="source-line-no">391</span><span id="line-391"> public void setStartTime(final long startTime) {</span>
+<span class="source-line-no">392</span><span id="line-392"> this.startTime = startTime;</span>
+<span class="source-line-no">393</span><span id="line-393"> }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395"> public long getEndTime() {</span>
+<span class="source-line-no">396</span><span id="line-396"> return endTime;</span>
+<span class="source-line-no">397</span><span id="line-397"> }</span>
+<span class="source-line-no">398</span><span id="line-398"></span>
+<span class="source-line-no">399</span><span id="line-399"> public void setEndTime(long endTime) {</span>
+<span class="source-line-no">400</span><span id="line-400"> this.endTime = endTime;</span>
+<span class="source-line-no">401</span><span id="line-401"> }</span>
+<span class="source-line-no">402</span><span id="line-402"></span>
+<span class="source-line-no">403</span><span id="line-403"> @Override</span>
+<span class="source-line-no">404</span><span id="line-404"> public String toString() {</span>
+<span class="source-line-no">405</span><span id="line-405"> StringBuilder result = new StringBuilder();</span>
+<span class="source-line-no">406</span><span id="line-406"> result.append("{startRow => '");</span>
+<span class="source-line-no">407</span><span id="line-407"> if (row != null) {</span>
+<span class="source-line-no">408</span><span id="line-408"> result.append(Bytes.toString(row));</span>
+<span class="source-line-no">409</span><span id="line-409"> }</span>
+<span class="source-line-no">410</span><span id="line-410"> result.append("', endRow => '");</span>
+<span class="source-line-no">411</span><span id="line-411"> if (endRow != null) {</span>
+<span class="source-line-no">412</span><span id="line-412"> result.append(Bytes.toString(endRow));</span>
+<span class="source-line-no">413</span><span id="line-413"> }</span>
+<span class="source-line-no">414</span><span id="line-414"> result.append("', columns => [");</span>
+<span class="source-line-no">415</span><span id="line-415"> for (byte[] col : columns) {</span>
+<span class="source-line-no">416</span><span id="line-416"> result.append(" '");</span>
+<span class="source-line-no">417</span><span id="line-417"> result.append(Bytes.toString(col));</span>
+<span class="source-line-no">418</span><span id="line-418"> result.append("'");</span>
+<span class="source-line-no">419</span><span id="line-419"> }</span>
+<span class="source-line-no">420</span><span id="line-420"> result.append(" ], startTime => ");</span>
+<span class="source-line-no">421</span><span id="line-421"> result.append(Long.toString(startTime));</span>
+<span class="source-line-no">422</span><span id="line-422"> result.append(", endTime => ");</span>
+<span class="source-line-no">423</span><span id="line-423"> result.append(Long.toString(endTime));</span>
+<span class="source-line-no">424</span><span id="line-424"> result.append(", maxVersions => ");</span>
+<span class="source-line-no">425</span><span id="line-425"> result.append(Integer.toString(maxVersions));</span>
+<span class="source-line-no">426</span><span id="line-426"> result.append(", maxValues => ");</span>
+<span class="source-line-no">427</span><span id="line-427"> result.append(Integer.toString(maxValues));</span>
+<span class="source-line-no">428</span><span id="line-428"> result.append("}");</span>
+<span class="source-line-no">429</span><span id="line-429"> return result.toString();</span>
+<span class="source-line-no">430</span><span id="line-430"> }</span>
+<span class="source-line-no">431</span><span id="line-431"></span>
+<span class="source-line-no">432</span><span id="line-432"> public boolean isPartialTimeRange() {</span>
+<span class="source-line-no">433</span><span id="line-433"> return partialTimeRange;</span>
+<span class="source-line-no">434</span><span id="line-434"> }</span>
+<span class="source-line-no">435</span><span id="line-435"></span>
+<span class="source-line-no">436</span><span id="line-436">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
index 701990ee068..1ad47a841e8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/ScannerResultGenerator.html
@@ -104,119 +104,125 @@
<span class="source-line-no">091</span><span id="line-91"> }</span>
<span class="source-line-no">092</span><span id="line-92"> }</span>
<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"> scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
-<span class="source-line-no">095</span><span id="line-95"> scan.readVersions(rowspec.getMaxVersions());</span>
-<span class="source-line-no">096</span><span id="line-96"> if (filter != null) {</span>
-<span class="source-line-no">097</span><span id="line-97"> scan.setFilter(filter);</span>
-<span class="source-line-no">098</span><span id="line-98"> }</span>
-<span class="source-line-no">099</span><span id="line-99"> if (caching > 0) {</span>
-<span class="source-line-no">100</span><span id="line-100"> scan.setCaching(caching);</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"> if (limit > 0) {</span>
-<span class="source-line-no">103</span><span id="line-103"> scan.setLimit(limit);</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> if (rowspec.isPartialTimeRange()) {</span>
+<span class="source-line-no">096</span><span id="line-96"> scan.setTimestamp(rowspec.getTimestamp());</span>
+<span class="source-line-no">097</span><span id="line-97"> } else {</span>
+<span class="source-line-no">098</span><span id="line-98"> scan.setTimeRange(rowspec.getStartTime(), rowspec.getEndTime());</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"></span>
+<span class="source-line-no">101</span><span id="line-101"> scan.readVersions(rowspec.getMaxVersions());</span>
+<span class="source-line-no">102</span><span id="line-102"> if (filter != null) {</span>
+<span class="source-line-no">103</span><span id="line-103"> scan.setFilter(filter);</span>
<span class="source-line-no">104</span><span id="line-104"> }</span>
-<span class="source-line-no">105</span><span id="line-105"> scan.setCacheBlocks(cacheBlocks);</span>
-<span class="source-line-no">106</span><span id="line-106"> if (rowspec.hasLabels()) {</span>
-<span class="source-line-no">107</span><span id="line-107"> scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> scanner = table.getScanner(scan);</span>
-<span class="source-line-no">110</span><span id="line-110"> cached = null;</span>
-<span class="source-line-no">111</span><span id="line-111"> id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
-<span class="source-line-no">112</span><span id="line-112"> + Integer.toHexString(scanner.hashCode());</span>
-<span class="source-line-no">113</span><span id="line-113"> } finally {</span>
-<span class="source-line-no">114</span><span id="line-114"> table.close();</span>
-<span class="source-line-no">115</span><span id="line-115"> }</span>
-<span class="source-line-no">116</span><span id="line-116"> }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118"> public String getID() {</span>
-<span class="source-line-no">119</span><span id="line-119"> return id;</span>
-<span class="source-line-no">120</span><span id="line-120"> }</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> @Override</span>
-<span class="source-line-no">123</span><span id="line-123"> public void close() {</span>
-<span class="source-line-no">124</span><span id="line-124"> if (scanner != null) {</span>
-<span class="source-line-no">125</span><span id="line-125"> scanner.close();</span>
-<span class="source-line-no">126</span><span id="line-126"> scanner = null;</span>
-<span class="source-line-no">127</span><span id="line-127"> }</span>
-<span class="source-line-no">128</span><span id="line-128"> }</span>
-<span class="source-line-no">129</span><span id="line-129"></span>
-<span class="source-line-no">130</span><span id="line-130"> @Override</span>
-<span class="source-line-no">131</span><span id="line-131"> public boolean hasNext() {</span>
-<span class="source-line-no">132</span><span id="line-132"> if (cache != null) {</span>
-<span class="source-line-no">133</span><span id="line-133"> return true;</span>
-<span class="source-line-no">134</span><span id="line-134"> }</span>
-<span class="source-line-no">135</span><span id="line-135"> if (rowI != null && rowI.hasNext()) {</span>
-<span class="source-line-no">136</span><span id="line-136"> return true;</span>
-<span class="source-line-no">137</span><span id="line-137"> }</span>
-<span class="source-line-no">138</span><span id="line-138"> if (cached != null) {</span>
+<span class="source-line-no">105</span><span id="line-105"> if (caching > 0) {</span>
+<span class="source-line-no">106</span><span id="line-106"> scan.setCaching(caching);</span>
+<span class="source-line-no">107</span><span id="line-107"> }</span>
+<span class="source-line-no">108</span><span id="line-108"> if (limit > 0) {</span>
+<span class="source-line-no">109</span><span id="line-109"> scan.setLimit(limit);</span>
+<span class="source-line-no">110</span><span id="line-110"> }</span>
+<span class="source-line-no">111</span><span id="line-111"> scan.setCacheBlocks(cacheBlocks);</span>
+<span class="source-line-no">112</span><span id="line-112"> if (rowspec.hasLabels()) {</span>
+<span class="source-line-no">113</span><span id="line-113"> scan.setAuthorizations(new Authorizations(rowspec.getLabels()));</span>
+<span class="source-line-no">114</span><span id="line-114"> }</span>
+<span class="source-line-no">115</span><span id="line-115"> scanner = table.getScanner(scan);</span>
+<span class="source-line-no">116</span><span id="line-116"> cached = null;</span>
+<span class="source-line-no">117</span><span id="line-117"> id = Long.toString(EnvironmentEdgeManager.currentTime())</span>
+<span class="source-line-no">118</span><span id="line-118"> + Integer.toHexString(scanner.hashCode());</span>
+<span class="source-line-no">119</span><span id="line-119"> } finally {</span>
+<span class="source-line-no">120</span><span id="line-120"> table.close();</span>
+<span class="source-line-no">121</span><span id="line-121"> }</span>
+<span class="source-line-no">122</span><span id="line-122"> }</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124"> public String getID() {</span>
+<span class="source-line-no">125</span><span id="line-125"> return id;</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> @Override</span>
+<span class="source-line-no">129</span><span id="line-129"> public void close() {</span>
+<span class="source-line-no">130</span><span id="line-130"> if (scanner != null) {</span>
+<span class="source-line-no">131</span><span id="line-131"> scanner.close();</span>
+<span class="source-line-no">132</span><span id="line-132"> scanner = null;</span>
+<span class="source-line-no">133</span><span id="line-133"> }</span>
+<span class="source-line-no">134</span><span id="line-134"> }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> @Override</span>
+<span class="source-line-no">137</span><span id="line-137"> public boolean hasNext() {</span>
+<span class="source-line-no">138</span><span id="line-138"> if (cache != null) {</span>
<span class="source-line-no">139</span><span id="line-139"> return true;</span>
<span class="source-line-no">140</span><span id="line-140"> }</span>
-<span class="source-line-no">141</span><span id="line-141"> try {</span>
-<span class="source-line-no">142</span><span id="line-142"> Result result = scanner.next();</span>
-<span class="source-line-no">143</span><span id="line-143"> if (result != null && !result.isEmpty()) {</span>
-<span class="source-line-no">144</span><span id="line-144"> cached = result;</span>
-<span class="source-line-no">145</span><span id="line-145"> }</span>
-<span class="source-line-no">146</span><span id="line-146"> } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">147</span><span id="line-147"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">148</span><span id="line-148"> } catch (IOException e) {</span>
-<span class="source-line-no">149</span><span id="line-149"> LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">150</span><span id="line-150"> }</span>
-<span class="source-line-no">151</span><span id="line-151"> return cached != null;</span>
-<span class="source-line-no">152</span><span id="line-152"> }</span>
-<span class="source-line-no">153</span><span id="line-153"></span>
-<span class="source-line-no">154</span><span id="line-154"> @Override</span>
-<span class="source-line-no">155</span><span id="line-155"> public Cell next() {</span>
-<span class="source-line-no">156</span><span id="line-156"> if (cache != null) {</span>
-<span class="source-line-no">157</span><span id="line-157"> Cell kv = cache;</span>
-<span class="source-line-no">158</span><span id="line-158"> cache = null;</span>
-<span class="source-line-no">159</span><span id="line-159"> return kv;</span>
-<span class="source-line-no">160</span><span id="line-160"> }</span>
-<span class="source-line-no">161</span><span id="line-161"> boolean loop;</span>
-<span class="source-line-no">162</span><span id="line-162"> do {</span>
-<span class="source-line-no">163</span><span id="line-163"> loop = false;</span>
-<span class="source-line-no">164</span><span id="line-164"> if (rowI != null) {</span>
-<span class="source-line-no">165</span><span id="line-165"> if (rowI.hasNext()) {</span>
-<span class="source-line-no">166</span><span id="line-166"> return rowI.next();</span>
-<span class="source-line-no">167</span><span id="line-167"> } else {</span>
-<span class="source-line-no">168</span><span id="line-168"> rowI = null;</span>
-<span class="source-line-no">169</span><span id="line-169"> }</span>
-<span class="source-line-no">170</span><span id="line-170"> }</span>
-<span class="source-line-no">171</span><span id="line-171"> if (cached != null) {</span>
-<span class="source-line-no">172</span><span id="line-172"> rowI = cached.listCells().iterator();</span>
-<span class="source-line-no">173</span><span id="line-173"> loop = true;</span>
-<span class="source-line-no">174</span><span id="line-174"> cached = null;</span>
-<span class="source-line-no">175</span><span id="line-175"> } else {</span>
-<span class="source-line-no">176</span><span id="line-176"> Result result = null;</span>
-<span class="source-line-no">177</span><span id="line-177"> try {</span>
-<span class="source-line-no">178</span><span id="line-178"> result = scanner.next();</span>
-<span class="source-line-no">179</span><span id="line-179"> } catch (UnknownScannerException e) {</span>
-<span class="source-line-no">180</span><span id="line-180"> throw new IllegalArgumentException(e);</span>
-<span class="source-line-no">181</span><span id="line-181"> } catch (TableNotEnabledException tnee) {</span>
-<span class="source-line-no">182</span><span id="line-182"> throw new IllegalStateException(tnee);</span>
-<span class="source-line-no">183</span><span id="line-183"> } catch (TableNotFoundException tnfe) {</span>
-<span class="source-line-no">184</span><span id="line-184"> throw new IllegalArgumentException(tnfe);</span>
-<span class="source-line-no">185</span><span id="line-185"> } catch (IOException e) {</span>
-<span class="source-line-no">186</span><span id="line-186"> LOG.error(StringUtils.stringifyException(e));</span>
-<span class="source-line-no">187</span><span id="line-187"> }</span>
-<span class="source-line-no">188</span><span id="line-188"> if (result != null && !result.isEmpty()) {</span>
-<span class="source-line-no">189</span><span id="line-189"> rowI = result.listCells().iterator();</span>
-<span class="source-line-no">190</span><span id="line-190"> loop = true;</span>
-<span class="source-line-no">191</span><span id="line-191"> }</span>
-<span class="source-line-no">192</span><span id="line-192"> }</span>
-<span class="source-line-no">193</span><span id="line-193"> } while (loop);</span>
-<span class="source-line-no">194</span><span id="line-194"> return null;</span>
-<span class="source-line-no">195</span><span id="line-195"> }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> @Override</span>
-<span class="source-line-no">198</span><span id="line-198"> public void putBack(Cell kv) {</span>
-<span class="source-line-no">199</span><span id="line-199"> this.cache = kv;</span>
-<span class="source-line-no">200</span><span id="line-200"> }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202"> @Override</span>
-<span class="source-line-no">203</span><span id="line-203"> public void remove() {</span>
-<span class="source-line-no">204</span><span id="line-204"> throw new UnsupportedOperationException("remove not supported");</span>
-<span class="source-line-no">205</span><span id="line-205"> }</span>
-<span class="source-line-no">206</span><span id="line-206">}</span>
+<span class="source-line-no">141</span><span id="line-141"> if (rowI != null && rowI.hasNext()) {</span>
+<span class="source-line-no">142</span><span id="line-142"> return true;</span>
+<span class="source-line-no">143</span><span id="line-143"> }</span>
+<span class="source-line-no">144</span><span id="line-144"> if (cached != null) {</span>
+<span class="source-line-no">145</span><span id="line-145"> return true;</span>
+<span class="source-line-no">146</span><span id="line-146"> }</span>
+<span class="source-line-no">147</span><span id="line-147"> try {</span>
+<span class="source-line-no">148</span><span id="line-148"> Result result = scanner.next();</span>
+<span class="source-line-no">149</span><span id="line-149"> if (result != null && !result.isEmpty()) {</span>
+<span class="source-line-no">150</span><span id="line-150"> cached = result;</span>
+<span class="source-line-no">151</span><span id="line-151"> }</span>
+<span class="source-line-no">152</span><span id="line-152"> } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">153</span><span id="line-153"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">154</span><span id="line-154"> } catch (IOException e) {</span>
+<span class="source-line-no">155</span><span id="line-155"> LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"> return cached != null;</span>
+<span class="source-line-no">158</span><span id="line-158"> }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160"> @Override</span>
+<span class="source-line-no">161</span><span id="line-161"> public Cell next() {</span>
+<span class="source-line-no">162</span><span id="line-162"> if (cache != null) {</span>
+<span class="source-line-no">163</span><span id="line-163"> Cell kv = cache;</span>
+<span class="source-line-no">164</span><span id="line-164"> cache = null;</span>
+<span class="source-line-no">165</span><span id="line-165"> return kv;</span>
+<span class="source-line-no">166</span><span id="line-166"> }</span>
+<span class="source-line-no">167</span><span id="line-167"> boolean loop;</span>
+<span class="source-line-no">168</span><span id="line-168"> do {</span>
+<span class="source-line-no">169</span><span id="line-169"> loop = false;</span>
+<span class="source-line-no">170</span><span id="line-170"> if (rowI != null) {</span>
+<span class="source-line-no">171</span><span id="line-171"> if (rowI.hasNext()) {</span>
+<span class="source-line-no">172</span><span id="line-172"> return rowI.next();</span>
+<span class="source-line-no">173</span><span id="line-173"> } else {</span>
+<span class="source-line-no">174</span><span id="line-174"> rowI = null;</span>
+<span class="source-line-no">175</span><span id="line-175"> }</span>
+<span class="source-line-no">176</span><span id="line-176"> }</span>
+<span class="source-line-no">177</span><span id="line-177"> if (cached != null) {</span>
+<span class="source-line-no">178</span><span id="line-178"> rowI = cached.listCells().iterator();</span>
+<span class="source-line-no">179</span><span id="line-179"> loop = true;</span>
+<span class="source-line-no">180</span><span id="line-180"> cached = null;</span>
+<span class="source-line-no">181</span><span id="line-181"> } else {</span>
+<span class="source-line-no">182</span><span id="line-182"> Result result = null;</span>
+<span class="source-line-no">183</span><span id="line-183"> try {</span>
+<span class="source-line-no">184</span><span id="line-184"> result = scanner.next();</span>
+<span class="source-line-no">185</span><span id="line-185"> } catch (UnknownScannerException e) {</span>
+<span class="source-line-no">186</span><span id="line-186"> throw new IllegalArgumentException(e);</span>
+<span class="source-line-no">187</span><span id="line-187"> } catch (TableNotEnabledException tnee) {</span>
+<span class="source-line-no">188</span><span id="line-188"> throw new IllegalStateException(tnee);</span>
+<span class="source-line-no">189</span><span id="line-189"> } catch (TableNotFoundException tnfe) {</span>
+<span class="source-line-no">190</span><span id="line-190"> throw new IllegalArgumentException(tnfe);</span>
+<span class="source-line-no">191</span><span id="line-191"> } catch (IOException e) {</span>
+<span class="source-line-no">192</span><span id="line-192"> LOG.error(StringUtils.stringifyException(e));</span>
+<span class="source-line-no">193</span><span id="line-193"> }</span>
+<span class="source-line-no">194</span><span id="line-194"> if (result != null && !result.isEmpty()) {</span>
+<span class="source-line-no">195</span><span id="line-195"> rowI = result.listCells().iterator();</span>
+<span class="source-line-no">196</span><span id="line-196"> loop = true;</span>
+<span class="source-line-no">197</span><span id="line-197"> }</span>
+<span class="source-line-no">198</span><span id="line-198"> }</span>
+<span class="source-line-no">199</span><span id="line-199"> } while (loop);</span>
+<span class="source-line-no">200</span><span id="line-200"> return null;</span>
+<span class="source-line-no">201</span><span id="line-201"> }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203"> @Override</span>
+<span class="source-line-no">204</span><span id="line-204"> public void putBack(Cell kv) {</span>
+<span class="source-line-no">205</span><span id="line-205"> this.cache = kv;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208"> @Override</span>
+<span class="source-line-no">209</span><span id="line-209"> public void remove() {</span>
+<span class="source-line-no">210</span><span id="line-210"> throw new UnsupportedOperationException("remove not supported");</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212">}</span>
diff --git a/downloads.html b/downloads.html
index 28f0566a755..7c6b0cd8e7d 100644
--- a/downloads.html
+++ b/downloads.html
@@ -422,7 +422,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/export_control.html b/export_control.html
index c4a006c8148..e2fe5c952ef 100644
--- a/export_control.html
+++ b/export_control.html
@@ -210,7 +210,7 @@ for more details.</p>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/index.html b/index.html
index 733eaea70b6..f6744f36a28 100644
--- a/index.html
+++ b/index.html
@@ -283,7 +283,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/issue-management.html b/issue-management.html
index f5677caef7a..2bc64070575 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -181,7 +181,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/licenses.html b/licenses.html
index aba2cce971c..30c1d4e21b8 100644
--- a/licenses.html
+++ b/licenses.html
@@ -383,7 +383,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/mailing-lists.html b/mailing-lists.html
index bd9fc2f166c..a829c453ab7 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -228,7 +228,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/metrics.html b/metrics.html
index b42f84c75b6..e40d81492b4 100644
--- a/metrics.html
+++ b/metrics.html
@@ -332,7 +332,7 @@ export HBASE_REGIONSERVER_OPTS="$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/old_news.html b/old_news.html
index 9b72d53d92d..f3238ee1a01 100644
--- a/old_news.html
+++ b/old_news.html
@@ -329,7 +329,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/plugin-management.html b/plugin-management.html
index d07fb72766c..e3a19429252 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -338,7 +338,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/plugins.html b/plugins.html
index 09b9df7efcd..195bc88b78f 100644
--- a/plugins.html
+++ b/plugins.html
@@ -276,7 +276,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/poweredbyhbase.html b/poweredbyhbase.html
index 276e71b7935..14b682de501 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -671,7 +671,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/project-info.html b/project-info.html
index a75978a2984..62ed25d6a4e 100644
--- a/project-info.html
+++ b/project-info.html
@@ -225,7 +225,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/project-reports.html b/project-reports.html
index c0b6feed8d1..c3e513f55b4 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -198,7 +198,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/pseudo-distributed.html b/pseudo-distributed.html
index 736614abe33..dbfc0f84b5b 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -187,7 +187,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/replication.html b/replication.html
index 734360ecc7c..10d6cb840b9 100644
--- a/replication.html
+++ b/replication.html
@@ -182,7 +182,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/resources.html b/resources.html
index 614fd37a6f8..a8983d51305 100644
--- a/resources.html
+++ b/resources.html
@@ -205,7 +205,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/scm.html b/scm.html
index bd95e13a193..01193d3a372 100644
--- a/scm.html
+++ b/scm.html
@@ -189,7 +189,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/sponsors.html b/sponsors.html
index 0fcf0338173..b888e17badd 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -211,7 +211,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/summary.html b/summary.html
index 1359beb6b09..0ee69d9576e 100644
--- a/summary.html
+++ b/summary.html
@@ -222,7 +222,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/supportingprojects.html b/supportingprojects.html
index 97be27afcd9..e3049413dd1 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -401,7 +401,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/team.html b/team.html
index 8c9de2f2e65..6390a1c741b 100644
--- a/team.html
+++ b/team.html
@@ -826,7 +826,7 @@
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<div style="float: right">
- Last Published: 2025-04-10
+ Last Published: 2025-04-11
</div>
</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/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html b/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
index eacb2039c60..a15292eedb1 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
@@ -112,7 +112,7 @@
<span class="source-line-no">099</span><span id="line-99"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">100</span><span id="line-100"> try {</span>
<span class="source-line-no">101</span><span id="line-101"> RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">102</span><span id="line-102"> .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">102</span><span id="line-102"> .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">103</span><span id="line-103"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">104</span><span id="line-104"> } catch (Exception e) {</span>
<span class="source-line-no">105</span><span id="line-105"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
@@ -139,7 +139,7 @@
<span class="source-line-no">126</span><span id="line-126"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">127</span><span id="line-127"> try {</span>
<span class="source-line-no">128</span><span id="line-128"> RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">129</span><span id="line-129"> .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">129</span><span id="line-129"> .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">130</span><span id="line-130"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">131</span><span id="line-131"> } catch (Exception e) {</span>
<span class="source-line-no">132</span><span id="line-132"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
index eacb2039c60..a15292eedb1 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestCatalogReplicaLoadBalanceSimpleSelector.html
@@ -112,7 +112,7 @@
<span class="source-line-no">099</span><span id="line-99"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">100</span><span id="line-100"> try {</span>
<span class="source-line-no">101</span><span id="line-101"> RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">102</span><span id="line-102"> .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">102</span><span id="line-102"> .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">103</span><span id="line-103"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">104</span><span id="line-104"> } catch (Exception e) {</span>
<span class="source-line-no">105</span><span id="line-105"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>
@@ -139,7 +139,7 @@
<span class="source-line-no">126</span><span id="line-126"> int numOfReplicas = CatalogReplicaLoadBalanceSelector.UNINITIALIZED_NUM_OF_REPLICAS;</span>
<span class="source-line-no">127</span><span id="line-127"> try {</span>
<span class="source-line-no">128</span><span id="line-128"> RegionLocations metaLocations = CONN.registry.getMetaRegionLocations()</span>
-<span class="source-line-no">129</span><span id="line-129"> .get(CONN.connConf.getReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
+<span class="source-line-no">129</span><span id="line-129"> .get(CONN.connConf.getMetaReadRpcTimeoutNs(), TimeUnit.NANOSECONDS);</span>
<span class="source-line-no">130</span><span id="line-130"> numOfReplicas = metaLocations.size();</span>
<span class="source-line-no">131</span><span id="line-131"> } catch (Exception e) {</span>
<span class="source-line-no">132</span><span id="line-132"> LOG.error("Failed to get table {}'s region replication, ", META_TABLE_NAME, e);</span>