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 2020/04/25 19:40:40 UTC

[hbase-site] branch asf-site updated: Published site at e6cc5eb2f0623f02eaa3542308fc3d82fd3abd9f.

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 9465aad  Published site at e6cc5eb2f0623f02eaa3542308fc3d82fd3abd9f.
9465aad is described below

commit 9465aad3c4d352ea2693baaabdae03a14aea2945
Author: jenkins <bu...@apache.org>
AuthorDate: Sat Apr 25 19:40:26 2020 +0000

    Published site at e6cc5eb2f0623f02eaa3542308fc3d82fd3abd9f.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   | 2754 +++++++++----------
 book.html                                          |    6 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |   10 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/constant-values.html                    |    4 +-
 .../hbase/security/access/ZKPermissionWatcher.html |   12 +-
 .../ZKUtil.ZKUtilOp.CreateAndFailSilent.html       |   12 +-
 .../ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html      |    8 +-
 .../hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html   |   18 +-
 .../hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html    |   18 +-
 .../org/apache/hadoop/hbase/zookeeper/ZKUtil.html  |  100 +-
 .../src-html/org/apache/hadoop/hbase/Version.html  |    4 +-
 .../hbase/security/access/ZKPermissionWatcher.html |  249 +-
 .../hbase/zookeeper/ZKUtil.JaasConfiguration.html  | 2866 ++++++++++----------
 .../hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html | 2866 ++++++++++----------
 .../ZKUtil.ZKUtilOp.CreateAndFailSilent.html       | 2866 ++++++++++----------
 .../ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html      | 2866 ++++++++++----------
 .../hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html   | 2866 ++++++++++----------
 .../hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html    | 2866 ++++++++++----------
 .../org/apache/hadoop/hbase/zookeeper/ZKUtil.html  | 2866 ++++++++++----------
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-tracking.html                                |    2 +-
 mail-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 +-
 project-summary.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 source-repository.html                             |    2 +-
 sponsors.html                                      |    2 +-
 supportingprojects.html                            |    2 +-
 team-list.html                                     |    2 +-
 46 files changed, 11630 insertions(+), 11681 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index f71e226..83e143a 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -467,7 +467,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index e0d2308..ceca3eb 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.rc.2, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20200424143126+00'00')
-/CreationDate (D:20200424144504+00'00')
+/ModDate (D:20200425192308+00'00')
+/CreationDate (D:20200425193428+00'00')
 >>
 endobj
 2 0 obj
@@ -829248,7 +829248,7 @@ endobj
 [4389 0 R /XYZ 0 421.277 null]
 endobj
 4397 0 obj
-<< /Length 7568
+<< /Length 6634
 >>
 stream
 q
@@ -829449,14 +829449,6 @@ f
 297.64 492.299 249.4 21.78 re
 f
 0.0 0.0 0.0 scn
-1.0 1.0 1.0 scn
-48.24 470.519 249.4 21.78 re
-f
-0.0 0.0 0.0 scn
-1.0 1.0 1.0 scn
-297.64 470.519 249.4 21.78 re
-f
-0.0 0.0 0.0 scn
 0.5 w
 0.8667 0.8667 0.8667 SCN
 48.24 579.419 m
@@ -829698,7 +829690,7 @@ S
 BT
 51.24 499.115 Td
 /F1.0 10.5 Tf
-<322e31> Tj
+<322e32> Tj
 ET
 
 0.0 0.0 0.0 scn
@@ -829733,76 +829725,6 @@ S
 BT
 300.64 499.115 Td
 /F1.0 10.5 Tf
-<44756f205a68616e67> Tj
-ET
-
-0.0 0.0 0.0 scn
-0.5 w
-0.8667 0.8667 0.8667 SCN
-48.24 492.299 m
-297.64 492.299 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-48.24 470.519 m
-297.64 470.519 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-48.24 492.549 m
-48.24 470.269 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 492.549 m
-297.64 470.269 l
-S
-[] 0 d
-1 w
-0.0 0.0 0.0 SCN
-0.2 0.2 0.2 scn
-
-BT
-51.24 477.335 Td
-/F1.0 10.5 Tf
-<322e32> Tj
-ET
-
-0.0 0.0 0.0 scn
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 492.299 m
-547.04 492.299 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 470.519 m
-547.04 470.519 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 492.549 m
-297.64 470.269 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-547.04 492.549 m
-547.04 470.269 l
-S
-[] 0 d
-1 w
-0.0 0.0 0.0 SCN
-0.2 0.2 0.2 scn
-
-BT
-300.64 477.335 Td
-/F1.0 10.5 Tf
 <4775616e6768616f205a68616e67> Tj
 ET
 
@@ -927018,1350 +926940,1350 @@ xref
 0013007969 00000 n 
 0013008154 00000 n 
 0013008203 00000 n 
-0013015826 00000 n 
-0013016219 00000 n 
-0013016267 00000 n 
-0013016315 00000 n 
-0013016501 00000 n 
-0013019869 00000 n 
-0013020249 00000 n 
-0013020297 00000 n 
-0013020482 00000 n 
-0013020864 00000 n 
-0013021212 00000 n 
-0013021260 00000 n 
-0013021706 00000 n 
-0013023576 00000 n 
-0013023937 00000 n 
-0013023985 00000 n 
-0013037368 00000 n 
-0013037742 00000 n 
-0013037790 00000 n 
-0013037838 00000 n 
-0013037886 00000 n 
-0013038401 00000 n 
-0013038449 00000 n 
-0013077582 00000 n 
-0013077943 00000 n 
-0013077991 00000 n 
-0013113269 00000 n 
-0013113630 00000 n 
-0013113678 00000 n 
-0013113726 00000 n 
-0013139313 00000 n 
-0013139687 00000 n 
-0013139735 00000 n 
-0013139783 00000 n 
-0013139831 00000 n 
-0013139879 00000 n 
-0013155331 00000 n 
-0013155718 00000 n 
-0013155766 00000 n 
-0013155814 00000 n 
-0013155862 00000 n 
-0013156325 00000 n 
-0013159387 00000 n 
-0013159761 00000 n 
-0013159809 00000 n 
-0013159857 00000 n 
-0013161258 00000 n 
-0013161606 00000 n 
-0013161654 00000 n 
-0013161702 00000 n 
-0013162088 00000 n 
-0013162436 00000 n 
-0013162484 00000 n 
-0013174408 00000 n 
-0013174819 00000 n 
-0013174867 00000 n 
-0013175044 00000 n 
-0013175211 00000 n 
-0013175336 00000 n 
-0013175384 00000 n 
-0013175432 00000 n 
-0013189098 00000 n 
-0013189506 00000 n 
-0013189554 00000 n 
-0013189775 00000 n 
-0013209894 00000 n 
-0013210305 00000 n 
-0013210448 00000 n 
-0013210495 00000 n 
-0013210543 00000 n 
-0013210591 00000 n 
-0013210760 00000 n 
-0013210945 00000 n 
-0013236386 00000 n 
-0013236784 00000 n 
-0013236991 00000 n 
-0013237199 00000 n 
-0013237406 00000 n 
-0013255459 00000 n 
-0013255820 00000 n 
-0013270456 00000 n 
-0013270863 00000 n 
-0013271068 00000 n 
-0013271273 00000 n 
-0013271476 00000 n 
-0013271680 00000 n 
-0013280027 00000 n 
-0013280388 00000 n 
-0013288739 00000 n 
-0013289137 00000 n 
-0013289345 00000 n 
-0013289555 00000 n 
-0013289764 00000 n 
-0013303954 00000 n 
-0013304356 00000 n 
-0013304552 00000 n 
-0013304748 00000 n 
-0013320773 00000 n 
-0013321166 00000 n 
-0013321216 00000 n 
-0013321349 00000 n 
-0013321399 00000 n 
-0013333065 00000 n 
-0013333439 00000 n 
-0013333487 00000 n 
-0013333535 00000 n 
-0013344626 00000 n 
-0013345064 00000 n 
+0013014892 00000 n 
+0013015285 00000 n 
+0013015333 00000 n 
+0013015381 00000 n 
+0013015567 00000 n 
+0013018935 00000 n 
+0013019315 00000 n 
+0013019363 00000 n 
+0013019548 00000 n 
+0013019930 00000 n 
+0013020278 00000 n 
+0013020326 00000 n 
+0013020772 00000 n 
+0013022642 00000 n 
+0013023003 00000 n 
+0013023051 00000 n 
+0013036434 00000 n 
+0013036808 00000 n 
+0013036856 00000 n 
+0013036904 00000 n 
+0013036952 00000 n 
+0013037467 00000 n 
+0013037515 00000 n 
+0013076648 00000 n 
+0013077009 00000 n 
+0013077057 00000 n 
+0013112335 00000 n 
+0013112696 00000 n 
+0013112744 00000 n 
+0013112792 00000 n 
+0013138379 00000 n 
+0013138753 00000 n 
+0013138801 00000 n 
+0013138849 00000 n 
+0013138897 00000 n 
+0013138945 00000 n 
+0013154397 00000 n 
+0013154784 00000 n 
+0013154832 00000 n 
+0013154880 00000 n 
+0013154928 00000 n 
+0013155391 00000 n 
+0013158453 00000 n 
+0013158827 00000 n 
+0013158875 00000 n 
+0013158923 00000 n 
+0013160324 00000 n 
+0013160672 00000 n 
+0013160720 00000 n 
+0013160768 00000 n 
+0013161154 00000 n 
+0013161502 00000 n 
+0013161550 00000 n 
+0013173474 00000 n 
+0013173885 00000 n 
+0013173933 00000 n 
+0013174110 00000 n 
+0013174277 00000 n 
+0013174402 00000 n 
+0013174450 00000 n 
+0013174498 00000 n 
+0013188164 00000 n 
+0013188572 00000 n 
+0013188620 00000 n 
+0013188841 00000 n 
+0013208960 00000 n 
+0013209371 00000 n 
+0013209514 00000 n 
+0013209561 00000 n 
+0013209609 00000 n 
+0013209657 00000 n 
+0013209826 00000 n 
+0013210011 00000 n 
+0013235452 00000 n 
+0013235850 00000 n 
+0013236057 00000 n 
+0013236265 00000 n 
+0013236472 00000 n 
+0013254525 00000 n 
+0013254886 00000 n 
+0013269522 00000 n 
+0013269929 00000 n 
+0013270134 00000 n 
+0013270339 00000 n 
+0013270542 00000 n 
+0013270746 00000 n 
+0013279093 00000 n 
+0013279454 00000 n 
+0013287805 00000 n 
+0013288203 00000 n 
+0013288411 00000 n 
+0013288621 00000 n 
+0013288830 00000 n 
+0013303020 00000 n 
+0013303422 00000 n 
+0013303618 00000 n 
+0013303814 00000 n 
+0013319839 00000 n 
+0013320232 00000 n 
+0013320282 00000 n 
+0013320415 00000 n 
+0013320465 00000 n 
+0013332131 00000 n 
+0013332505 00000 n 
+0013332553 00000 n 
+0013332601 00000 n 
+0013343692 00000 n 
+0013344130 00000 n 
+0013344178 00000 n 
+0013344226 00000 n 
+0013344354 00000 n 
+0013344561 00000 n 
+0013344732 00000 n 
+0013344857 00000 n 
+0013344984 00000 n 
 0013345112 00000 n 
 0013345160 00000 n 
-0013345288 00000 n 
-0013345495 00000 n 
-0013345666 00000 n 
-0013345791 00000 n 
-0013345918 00000 n 
-0013346046 00000 n 
-0013346094 00000 n 
-0013358022 00000 n 
-0013358505 00000 n 
-0013358554 00000 n 
-0013358682 00000 n 
-0013358731 00000 n 
-0013358857 00000 n 
-0013358987 00000 n 
-0013359036 00000 n 
-0013359161 00000 n 
-0013359285 00000 n 
-0013359419 00000 n 
-0013359553 00000 n 
-0013359688 00000 n 
-0013359811 00000 n 
-0013359947 00000 n 
-0013360077 00000 n 
-0013365650 00000 n 
-0013366080 00000 n 
-0013366128 00000 n 
-0013366251 00000 n 
-0013366299 00000 n 
-0013366425 00000 n 
-0013366545 00000 n 
-0013366593 00000 n 
-0013366719 00000 n 
-0013366841 00000 n 
-0013366889 00000 n 
-0013367010 00000 n 
-0013367134 00000 n 
-0013367182 00000 n 
-0013367306 00000 n 
-0013375084 00000 n 
-0013375445 00000 n 
-0013375493 00000 n 
-0013375542 00000 n 
-0013375591 00000 n 
-0013395399 00000 n 
-0013395774 00000 n 
-0013429916 00000 n 
-0013430264 00000 n 
-0013467255 00000 n 
-0013467603 00000 n 
-0013492874 00000 n 
-0013493222 00000 n 
-0013533987 00000 n 
-0013534335 00000 n 
-0013537458 00000 n 
-0013537806 00000 n 
-0013549008 00000 n 
-0013549446 00000 n 
-0013549494 00000 n 
-0013549643 00000 n 
-0013549840 00000 n 
-0013549975 00000 n 
-0013550112 00000 n 
-0013550251 00000 n 
-0013550393 00000 n 
-0013555782 00000 n 
-0013556184 00000 n 
-0013596841 00000 n 
-0013624604 00000 n 
-0013632466 00000 n 
-0013632841 00000 n 
-0013678882 00000 n 
-0013678931 00000 n 
-0013697042 00000 n 
-0013697448 00000 n 
-0013697631 00000 n 
-0013697678 00000 n 
-0013731243 00000 n 
-0013731617 00000 n 
-0013763228 00000 n 
-0013763639 00000 n 
-0013763832 00000 n 
-0013764023 00000 n 
-0013764234 00000 n 
-0013764282 00000 n 
-0013764330 00000 n 
-0013779105 00000 n 
-0013779521 00000 n 
-0013779716 00000 n 
-0013779852 00000 n 
-0013779901 00000 n 
-0013780109 00000 n 
-0013780251 00000 n 
-0013780300 00000 n 
-0013780436 00000 n 
-0013780485 00000 n 
-0013792049 00000 n 
-0013792464 00000 n 
-0013792596 00000 n 
-0013792738 00000 n 
-0013792786 00000 n 
-0013792835 00000 n 
-0013792884 00000 n 
-0013793517 00000 n 
-0013805943 00000 n 
-0013806317 00000 n 
-0013806366 00000 n 
-0013816942 00000 n 
-0013817316 00000 n 
-0013817365 00000 n 
-0013820227 00000 n 
-0013820588 00000 n 
-0013821917 00000 n 
-0013822293 00000 n 
-0013822341 00000 n 
-0013822389 00000 n 
-0013822558 00000 n 
-0013822606 00000 n 
-0013822788 00000 n 
-0013825744 00000 n 
-0013826138 00000 n 
-0013826186 00000 n 
-0013826371 00000 n 
-0013826564 00000 n 
-0013826741 00000 n 
-0013826917 00000 n 
-0013834120 00000 n 
-0013834495 00000 n 
-0013834543 00000 n 
-0013834591 00000 n 
-0013834639 00000 n 
-0013860526 00000 n 
-0013865089 00000 n 
-0013865138 00000 n 
-0013865187 00000 n 
-0013866069 00000 n 
-0013866118 00000 n 
-0013873824 00000 n 
-0013874172 00000 n 
-0013874220 00000 n 
-0013920988 00000 n 
-0013927628 00000 n 
-0013928003 00000 n 
-0013928052 00000 n 
-0013937980 00000 n 
-0013938341 00000 n 
-0013938389 00000 n 
-0013938437 00000 n 
-0013950981 00000 n 
-0013951342 00000 n 
-0013951390 00000 n 
-0013965106 00000 n 
-0013965467 00000 n 
-0013965515 00000 n 
-0013965563 00000 n 
-0013965611 00000 n 
-0013983098 00000 n 
-0013983446 00000 n 
-0013983494 00000 n 
-0013996024 00000 n 
-0013996467 00000 n 
-0013996515 00000 n 
-0013996563 00000 n 
-0013996702 00000 n 
-0013996828 00000 n 
-0013996977 00000 n 
-0013997114 00000 n 
-0013997162 00000 n 
-0013997293 00000 n 
-0013997341 00000 n 
-0013997466 00000 n 
-0013997514 00000 n 
-0013997641 00000 n 
-0013997854 00000 n 
-0014008079 00000 n 
-0014008459 00000 n 
-0014008507 00000 n 
-0014008643 00000 n 
-0014016318 00000 n 
-0014016815 00000 n 
-0014016863 00000 n 
-0014016911 00000 n 
-0014017082 00000 n 
-0014017254 00000 n 
-0014017510 00000 n 
-0014017559 00000 n 
-0014017808 00000 n 
-0014018036 00000 n 
-0014018280 00000 n 
-0014018329 00000 n 
-0014018522 00000 n 
-0014018732 00000 n 
-0014018945 00000 n 
-0014018994 00000 n 
-0014019526 00000 n 
-0014019718 00000 n 
-0014019951 00000 n 
-0014020136 00000 n 
-0014020185 00000 n 
-0014020378 00000 n 
-0014020427 00000 n 
-0014020621 00000 n 
-0014022607 00000 n 
-0014022974 00000 n 
-0014023022 00000 n 
-0014023216 00000 n 
-0014026590 00000 n 
-0014026966 00000 n 
-0014027014 00000 n 
-0014027062 00000 n 
-0014027246 00000 n 
-0014027294 00000 n 
-0014027488 00000 n 
-0014031104 00000 n 
-0014031543 00000 n 
-0014031591 00000 n 
-0014035851 00000 n 
-0014036381 00000 n 
-0014036575 00000 n 
-0014036759 00000 n 
-0014036952 00000 n 
-0014037149 00000 n 
-0014037344 00000 n 
-0014037530 00000 n 
-0014047578 00000 n 
-0014047999 00000 n 
-0014048047 00000 n 
-0014048241 00000 n 
-0014048462 00000 n 
-0014048679 00000 n 
-0014048895 00000 n 
-0014049126 00000 n 
-0014049174 00000 n 
-0014049222 00000 n 
-0014049270 00000 n 
-0014049710 00000 n 
-0014049941 00000 n 
-0014050174 00000 n 
-0014050222 00000 n 
-0014050270 00000 n 
-0014064179 00000 n 
-0014064566 00000 n 
-0014064615 00000 n 
-0014064664 00000 n 
-0014064713 00000 n 
-0014072683 00000 n 
-0014073044 00000 n 
-0014073093 00000 n 
-0014073142 00000 n 
-0014073191 00000 n 
-0014073240 00000 n 
-0014073289 00000 n 
-0014085042 00000 n 
-0014085429 00000 n 
-0014085478 00000 n 
-0014086078 00000 n 
-0014086426 00000 n 
-0014086474 00000 n 
-0014098116 00000 n 
-0014098479 00000 n 
-0014098527 00000 n 
-0014098575 00000 n 
-0014098623 00000 n 
-0014098671 00000 n 
-0014098718 00000 n 
-0014113500 00000 n 
-0014113863 00000 n 
-0014113911 00000 n 
-0014113959 00000 n 
-0014114007 00000 n 
-0014128867 00000 n 
-0014129202 00000 n 
-0014144045 00000 n 
-0014144408 00000 n 
-0014144456 00000 n 
-0014144504 00000 n 
-0014158233 00000 n 
-0014158596 00000 n 
-0014158644 00000 n 
-0014158692 00000 n 
-0014158740 00000 n 
-0014171880 00000 n 
-0014172243 00000 n 
-0014172291 00000 n 
-0014172339 00000 n 
-0014172387 00000 n 
-0014172434 00000 n 
-0014186015 00000 n 
-0014186378 00000 n 
-0014186426 00000 n 
-0014186474 00000 n 
-0014186522 00000 n 
-0014186570 00000 n 
-0014186618 00000 n 
-0014206684 00000 n 
-0014207047 00000 n 
-0014207095 00000 n 
-0014207143 00000 n 
-0014225249 00000 n 
-0014225612 00000 n 
-0014225660 00000 n 
-0014226035 00000 n 
-0014226083 00000 n 
-0014226131 00000 n 
-0014239649 00000 n 
-0014239997 00000 n 
-0014240045 00000 n 
-0014240093 00000 n 
-0014240141 00000 n 
-0014240189 00000 n 
-0014240237 00000 n 
-0014258082 00000 n 
-0014258445 00000 n 
-0014258493 00000 n 
-0014271846 00000 n 
-0014272209 00000 n 
-0014272257 00000 n 
-0014272305 00000 n 
-0014272353 00000 n 
-0014272401 00000 n 
-0014287183 00000 n 
-0014287546 00000 n 
-0014287594 00000 n 
-0014288364 00000 n 
-0014288412 00000 n 
-0014288460 00000 n 
-0014288508 00000 n 
-0014302186 00000 n 
-0014302549 00000 n 
-0014302597 00000 n 
-0014302645 00000 n 
-0014302693 00000 n 
-0014302741 00000 n 
-0014302789 00000 n 
-0014318389 00000 n 
-0014318752 00000 n 
-0014318800 00000 n 
-0014319365 00000 n 
-0014319413 00000 n 
-0014319461 00000 n 
-0014320140 00000 n 
-0014320188 00000 n 
-0014320236 00000 n 
-0014320284 00000 n 
-0014335176 00000 n 
-0014335539 00000 n 
-0014335587 00000 n 
-0014335635 00000 n 
-0014335683 00000 n 
-0014335731 00000 n 
-0014349646 00000 n 
-0014350009 00000 n 
-0014350057 00000 n 
-0014350105 00000 n 
-0014350153 00000 n 
-0014350201 00000 n 
-0014368697 00000 n 
-0014369060 00000 n 
-0014369108 00000 n 
-0014369156 00000 n 
-0014369861 00000 n 
-0014369909 00000 n 
-0014379888 00000 n 
-0014380251 00000 n 
-0014380299 00000 n 
-0014380716 00000 n 
-0014380764 00000 n 
-0014380812 00000 n 
-0014380860 00000 n 
-0014380908 00000 n 
-0014380956 00000 n 
-0014381004 00000 n 
-0014392964 00000 n 
-0014393327 00000 n 
-0014393375 00000 n 
-0014393423 00000 n 
-0014393471 00000 n 
-0014393519 00000 n 
-0014393917 00000 n 
-0014407931 00000 n 
-0014408294 00000 n 
-0014408342 00000 n 
-0014408390 00000 n 
-0014408438 00000 n 
-0014415153 00000 n 
-0014415501 00000 n 
-0014415620 00000 n 
-0014415742 00000 n 
-0014415871 00000 n 
-0014416001 00000 n 
-0014416126 00000 n 
-0014416253 00000 n 
-0014416376 00000 n 
-0014416501 00000 n 
-0014416628 00000 n 
-0014416755 00000 n 
-0014416888 00000 n 
-0014417021 00000 n 
-0014417153 00000 n 
-0014417286 00000 n 
-0014417414 00000 n 
-0014417543 00000 n 
-0014417664 00000 n 
-0014417785 00000 n 
-0014417911 00000 n 
-0014418037 00000 n 
-0014418165 00000 n 
-0014418293 00000 n 
-0014418431 00000 n 
-0014418569 00000 n 
-0014418693 00000 n 
-0014418817 00000 n 
-0014418940 00000 n 
-0014419063 00000 n 
-0014419193 00000 n 
-0014419323 00000 n 
-0014419444 00000 n 
-0014419566 00000 n 
-0014419693 00000 n 
-0014419821 00000 n 
-0014419939 00000 n 
-0014420059 00000 n 
-0014420182 00000 n 
-0014420306 00000 n 
-0014420461 00000 n 
-0014420617 00000 n 
-0014420756 00000 n 
-0014420897 00000 n 
-0014421056 00000 n 
-0014421216 00000 n 
-0014421360 00000 n 
-0014421506 00000 n 
-0014421669 00000 n 
-0014421833 00000 n 
-0014421959 00000 n 
-0014422086 00000 n 
-0014422208 00000 n 
-0014422332 00000 n 
-0014422460 00000 n 
-0014422590 00000 n 
-0014422717 00000 n 
-0014422845 00000 n 
-0014422967 00000 n 
-0014423091 00000 n 
-0014423210 00000 n 
-0014423330 00000 n 
-0014423443 00000 n 
-0014423561 00000 n 
-0014423687 00000 n 
-0014423814 00000 n 
-0014423932 00000 n 
-0014424052 00000 n 
-0014424187 00000 n 
-0014424323 00000 n 
-0014424445 00000 n 
-0014424568 00000 n 
-0014424689 00000 n 
-0014424811 00000 n 
-0014424940 00000 n 
-0014425071 00000 n 
-0014425188 00000 n 
-0014425306 00000 n 
-0014425424 00000 n 
-0014425543 00000 n 
-0014425663 00000 n 
-0014425784 00000 n 
-0014425912 00000 n 
-0014426042 00000 n 
-0014426183 00000 n 
-0014426325 00000 n 
-0014426472 00000 n 
-0014426621 00000 n 
-0014426748 00000 n 
-0014426876 00000 n 
-0014427003 00000 n 
-0014427131 00000 n 
-0014427260 00000 n 
-0014427390 00000 n 
-0014427523 00000 n 
-0014427657 00000 n 
-0014427783 00000 n 
-0014427910 00000 n 
-0014428027 00000 n 
-0014428145 00000 n 
-0014428274 00000 n 
-0014428404 00000 n 
-0014428534 00000 n 
-0014428666 00000 n 
-0014428791 00000 n 
-0014428917 00000 n 
-0014429049 00000 n 
-0014429182 00000 n 
-0014429306 00000 n 
-0014429431 00000 n 
-0014429557 00000 n 
-0014429685 00000 n 
-0014429808 00000 n 
-0014429932 00000 n 
-0014430071 00000 n 
-0014430211 00000 n 
-0014430346 00000 n 
-0014430483 00000 n 
-0014430625 00000 n 
-0014430768 00000 n 
-0014430932 00000 n 
-0014431097 00000 n 
-0014431253 00000 n 
-0014431410 00000 n 
-0014431542 00000 n 
-0014431675 00000 n 
-0014431797 00000 n 
-0014431920 00000 n 
-0014432050 00000 n 
-0014432182 00000 n 
-0014432319 00000 n 
-0014432457 00000 n 
-0014432587 00000 n 
-0014432718 00000 n 
-0014432840 00000 n 
-0014432964 00000 n 
-0014433086 00000 n 
-0014433209 00000 n 
-0014433338 00000 n 
-0014433468 00000 n 
-0014433608 00000 n 
-0014433749 00000 n 
-0014433895 00000 n 
-0014434042 00000 n 
-0014434193 00000 n 
-0014434345 00000 n 
-0014434487 00000 n 
-0014434630 00000 n 
-0014434767 00000 n 
-0014434905 00000 n 
-0014435030 00000 n 
-0014435157 00000 n 
-0014435283 00000 n 
-0014435411 00000 n 
-0014435536 00000 n 
-0014435662 00000 n 
-0014435793 00000 n 
-0014435925 00000 n 
-0014436050 00000 n 
-0014436176 00000 n 
-0014436309 00000 n 
-0014436443 00000 n 
-0014436573 00000 n 
-0014436705 00000 n 
-0014436831 00000 n 
-0014436958 00000 n 
-0014437085 00000 n 
-0014437214 00000 n 
-0014437336 00000 n 
-0014437460 00000 n 
-0014437603 00000 n 
-0014437747 00000 n 
-0014437869 00000 n 
-0014437993 00000 n 
-0014438122 00000 n 
-0014438253 00000 n 
-0014438385 00000 n 
-0014438519 00000 n 
-0014438644 00000 n 
-0014438771 00000 n 
-0014438892 00000 n 
-0014439015 00000 n 
-0014439146 00000 n 
-0014439279 00000 n 
-0014439421 00000 n 
-0014439565 00000 n 
-0014439707 00000 n 
-0014439851 00000 n 
-0014440000 00000 n 
-0014440151 00000 n 
-0014440295 00000 n 
-0014440440 00000 n 
-0014440566 00000 n 
-0014440694 00000 n 
-0014440818 00000 n 
-0014440944 00000 n 
-0014441072 00000 n 
-0014441201 00000 n 
-0014441326 00000 n 
-0014441452 00000 n 
-0014441582 00000 n 
-0014441713 00000 n 
-0014441853 00000 n 
-0014441995 00000 n 
-0014442126 00000 n 
-0014442258 00000 n 
-0014442395 00000 n 
-0014442533 00000 n 
-0014442664 00000 n 
-0014442796 00000 n 
-0014442931 00000 n 
-0014443067 00000 n 
-0014443197 00000 n 
-0014443328 00000 n 
-0014443462 00000 n 
-0014443597 00000 n 
-0014443739 00000 n 
-0014443882 00000 n 
-0014444023 00000 n 
-0014444165 00000 n 
-0014444293 00000 n 
-0014444422 00000 n 
-0014444551 00000 n 
-0014444681 00000 n 
-0014444807 00000 n 
-0014444934 00000 n 
-0014445053 00000 n 
-0014445174 00000 n 
-0014445313 00000 n 
-0014445453 00000 n 
-0014445577 00000 n 
-0014445702 00000 n 
-0014445823 00000 n 
-0014445946 00000 n 
-0014446072 00000 n 
+0013357088 00000 n 
+0013357571 00000 n 
+0013357620 00000 n 
+0013357748 00000 n 
+0013357797 00000 n 
+0013357923 00000 n 
+0013358053 00000 n 
+0013358102 00000 n 
+0013358227 00000 n 
+0013358351 00000 n 
+0013358485 00000 n 
+0013358619 00000 n 
+0013358754 00000 n 
+0013358877 00000 n 
+0013359013 00000 n 
+0013359143 00000 n 
+0013364716 00000 n 
+0013365146 00000 n 
+0013365194 00000 n 
+0013365317 00000 n 
+0013365365 00000 n 
+0013365491 00000 n 
+0013365611 00000 n 
+0013365659 00000 n 
+0013365785 00000 n 
+0013365907 00000 n 
+0013365955 00000 n 
+0013366076 00000 n 
+0013366200 00000 n 
+0013366248 00000 n 
+0013366372 00000 n 
+0013374150 00000 n 
+0013374511 00000 n 
+0013374559 00000 n 
+0013374608 00000 n 
+0013374657 00000 n 
+0013394465 00000 n 
+0013394840 00000 n 
+0013428982 00000 n 
+0013429330 00000 n 
+0013466321 00000 n 
+0013466669 00000 n 
+0013491940 00000 n 
+0013492288 00000 n 
+0013533053 00000 n 
+0013533401 00000 n 
+0013536524 00000 n 
+0013536872 00000 n 
+0013548074 00000 n 
+0013548512 00000 n 
+0013548560 00000 n 
+0013548709 00000 n 
+0013548906 00000 n 
+0013549041 00000 n 
+0013549178 00000 n 
+0013549317 00000 n 
+0013549459 00000 n 
+0013554848 00000 n 
+0013555250 00000 n 
+0013595907 00000 n 
+0013623670 00000 n 
+0013631532 00000 n 
+0013631907 00000 n 
+0013677948 00000 n 
+0013677997 00000 n 
+0013696108 00000 n 
+0013696514 00000 n 
+0013696697 00000 n 
+0013696744 00000 n 
+0013730309 00000 n 
+0013730683 00000 n 
+0013762294 00000 n 
+0013762705 00000 n 
+0013762898 00000 n 
+0013763089 00000 n 
+0013763300 00000 n 
+0013763348 00000 n 
+0013763396 00000 n 
+0013778171 00000 n 
+0013778587 00000 n 
+0013778782 00000 n 
+0013778918 00000 n 
+0013778967 00000 n 
+0013779175 00000 n 
+0013779317 00000 n 
+0013779366 00000 n 
+0013779502 00000 n 
+0013779551 00000 n 
+0013791115 00000 n 
+0013791530 00000 n 
+0013791662 00000 n 
+0013791804 00000 n 
+0013791852 00000 n 
+0013791901 00000 n 
+0013791950 00000 n 
+0013792583 00000 n 
+0013805009 00000 n 
+0013805383 00000 n 
+0013805432 00000 n 
+0013816008 00000 n 
+0013816382 00000 n 
+0013816431 00000 n 
+0013819293 00000 n 
+0013819654 00000 n 
+0013820983 00000 n 
+0013821359 00000 n 
+0013821407 00000 n 
+0013821455 00000 n 
+0013821624 00000 n 
+0013821672 00000 n 
+0013821854 00000 n 
+0013824810 00000 n 
+0013825204 00000 n 
+0013825252 00000 n 
+0013825437 00000 n 
+0013825630 00000 n 
+0013825807 00000 n 
+0013825983 00000 n 
+0013833186 00000 n 
+0013833561 00000 n 
+0013833609 00000 n 
+0013833657 00000 n 
+0013833705 00000 n 
+0013859592 00000 n 
+0013864155 00000 n 
+0013864204 00000 n 
+0013864253 00000 n 
+0013865135 00000 n 
+0013865184 00000 n 
+0013872890 00000 n 
+0013873238 00000 n 
+0013873286 00000 n 
+0013920054 00000 n 
+0013926694 00000 n 
+0013927069 00000 n 
+0013927118 00000 n 
+0013937046 00000 n 
+0013937407 00000 n 
+0013937455 00000 n 
+0013937503 00000 n 
+0013950047 00000 n 
+0013950408 00000 n 
+0013950456 00000 n 
+0013964172 00000 n 
+0013964533 00000 n 
+0013964581 00000 n 
+0013964629 00000 n 
+0013964677 00000 n 
+0013982164 00000 n 
+0013982512 00000 n 
+0013982560 00000 n 
+0013995090 00000 n 
+0013995533 00000 n 
+0013995581 00000 n 
+0013995629 00000 n 
+0013995768 00000 n 
+0013995894 00000 n 
+0013996043 00000 n 
+0013996180 00000 n 
+0013996228 00000 n 
+0013996359 00000 n 
+0013996407 00000 n 
+0013996532 00000 n 
+0013996580 00000 n 
+0013996707 00000 n 
+0013996920 00000 n 
+0014007145 00000 n 
+0014007525 00000 n 
+0014007573 00000 n 
+0014007709 00000 n 
+0014015384 00000 n 
+0014015881 00000 n 
+0014015929 00000 n 
+0014015977 00000 n 
+0014016148 00000 n 
+0014016320 00000 n 
+0014016576 00000 n 
+0014016625 00000 n 
+0014016874 00000 n 
+0014017102 00000 n 
+0014017346 00000 n 
+0014017395 00000 n 
+0014017588 00000 n 
+0014017798 00000 n 
+0014018011 00000 n 
+0014018060 00000 n 
+0014018592 00000 n 
+0014018784 00000 n 
+0014019017 00000 n 
+0014019202 00000 n 
+0014019251 00000 n 
+0014019444 00000 n 
+0014019493 00000 n 
+0014019687 00000 n 
+0014021673 00000 n 
+0014022040 00000 n 
+0014022088 00000 n 
+0014022282 00000 n 
+0014025656 00000 n 
+0014026032 00000 n 
+0014026080 00000 n 
+0014026128 00000 n 
+0014026312 00000 n 
+0014026360 00000 n 
+0014026554 00000 n 
+0014030170 00000 n 
+0014030609 00000 n 
+0014030657 00000 n 
+0014034917 00000 n 
+0014035447 00000 n 
+0014035641 00000 n 
+0014035825 00000 n 
+0014036018 00000 n 
+0014036215 00000 n 
+0014036410 00000 n 
+0014036596 00000 n 
+0014046644 00000 n 
+0014047065 00000 n 
+0014047113 00000 n 
+0014047307 00000 n 
+0014047528 00000 n 
+0014047745 00000 n 
+0014047961 00000 n 
+0014048192 00000 n 
+0014048240 00000 n 
+0014048288 00000 n 
+0014048336 00000 n 
+0014048776 00000 n 
+0014049007 00000 n 
+0014049240 00000 n 
+0014049288 00000 n 
+0014049336 00000 n 
+0014063245 00000 n 
+0014063632 00000 n 
+0014063681 00000 n 
+0014063730 00000 n 
+0014063779 00000 n 
+0014071749 00000 n 
+0014072110 00000 n 
+0014072159 00000 n 
+0014072208 00000 n 
+0014072257 00000 n 
+0014072306 00000 n 
+0014072355 00000 n 
+0014084108 00000 n 
+0014084495 00000 n 
+0014084544 00000 n 
+0014085144 00000 n 
+0014085492 00000 n 
+0014085540 00000 n 
+0014097182 00000 n 
+0014097545 00000 n 
+0014097593 00000 n 
+0014097641 00000 n 
+0014097689 00000 n 
+0014097737 00000 n 
+0014097784 00000 n 
+0014112566 00000 n 
+0014112929 00000 n 
+0014112977 00000 n 
+0014113025 00000 n 
+0014113073 00000 n 
+0014127933 00000 n 
+0014128268 00000 n 
+0014143111 00000 n 
+0014143474 00000 n 
+0014143522 00000 n 
+0014143570 00000 n 
+0014157299 00000 n 
+0014157662 00000 n 
+0014157710 00000 n 
+0014157758 00000 n 
+0014157806 00000 n 
+0014170946 00000 n 
+0014171309 00000 n 
+0014171357 00000 n 
+0014171405 00000 n 
+0014171453 00000 n 
+0014171500 00000 n 
+0014185081 00000 n 
+0014185444 00000 n 
+0014185492 00000 n 
+0014185540 00000 n 
+0014185588 00000 n 
+0014185636 00000 n 
+0014185684 00000 n 
+0014205750 00000 n 
+0014206113 00000 n 
+0014206161 00000 n 
+0014206209 00000 n 
+0014224315 00000 n 
+0014224678 00000 n 
+0014224726 00000 n 
+0014225101 00000 n 
+0014225149 00000 n 
+0014225197 00000 n 
+0014238715 00000 n 
+0014239063 00000 n 
+0014239111 00000 n 
+0014239159 00000 n 
+0014239207 00000 n 
+0014239255 00000 n 
+0014239303 00000 n 
+0014257148 00000 n 
+0014257511 00000 n 
+0014257559 00000 n 
+0014270912 00000 n 
+0014271275 00000 n 
+0014271323 00000 n 
+0014271371 00000 n 
+0014271419 00000 n 
+0014271467 00000 n 
+0014286249 00000 n 
+0014286612 00000 n 
+0014286660 00000 n 
+0014287430 00000 n 
+0014287478 00000 n 
+0014287526 00000 n 
+0014287574 00000 n 
+0014301252 00000 n 
+0014301615 00000 n 
+0014301663 00000 n 
+0014301711 00000 n 
+0014301759 00000 n 
+0014301807 00000 n 
+0014301855 00000 n 
+0014317455 00000 n 
+0014317818 00000 n 
+0014317866 00000 n 
+0014318431 00000 n 
+0014318479 00000 n 
+0014318527 00000 n 
+0014319206 00000 n 
+0014319254 00000 n 
+0014319302 00000 n 
+0014319350 00000 n 
+0014334242 00000 n 
+0014334605 00000 n 
+0014334653 00000 n 
+0014334701 00000 n 
+0014334749 00000 n 
+0014334797 00000 n 
+0014348712 00000 n 
+0014349075 00000 n 
+0014349123 00000 n 
+0014349171 00000 n 
+0014349219 00000 n 
+0014349267 00000 n 
+0014367763 00000 n 
+0014368126 00000 n 
+0014368174 00000 n 
+0014368222 00000 n 
+0014368927 00000 n 
+0014368975 00000 n 
+0014378954 00000 n 
+0014379317 00000 n 
+0014379365 00000 n 
+0014379782 00000 n 
+0014379830 00000 n 
+0014379878 00000 n 
+0014379926 00000 n 
+0014379974 00000 n 
+0014380022 00000 n 
+0014380070 00000 n 
+0014392030 00000 n 
+0014392393 00000 n 
+0014392441 00000 n 
+0014392489 00000 n 
+0014392537 00000 n 
+0014392585 00000 n 
+0014392983 00000 n 
+0014406997 00000 n 
+0014407360 00000 n 
+0014407408 00000 n 
+0014407456 00000 n 
+0014407504 00000 n 
+0014414219 00000 n 
+0014414567 00000 n 
+0014414686 00000 n 
+0014414808 00000 n 
+0014414937 00000 n 
+0014415067 00000 n 
+0014415192 00000 n 
+0014415319 00000 n 
+0014415442 00000 n 
+0014415567 00000 n 
+0014415694 00000 n 
+0014415821 00000 n 
+0014415954 00000 n 
+0014416087 00000 n 
+0014416219 00000 n 
+0014416352 00000 n 
+0014416480 00000 n 
+0014416609 00000 n 
+0014416730 00000 n 
+0014416851 00000 n 
+0014416977 00000 n 
+0014417103 00000 n 
+0014417231 00000 n 
+0014417359 00000 n 
+0014417497 00000 n 
+0014417635 00000 n 
+0014417759 00000 n 
+0014417883 00000 n 
+0014418006 00000 n 
+0014418129 00000 n 
+0014418259 00000 n 
+0014418389 00000 n 
+0014418510 00000 n 
+0014418632 00000 n 
+0014418759 00000 n 
+0014418887 00000 n 
+0014419005 00000 n 
+0014419125 00000 n 
+0014419248 00000 n 
+0014419372 00000 n 
+0014419527 00000 n 
+0014419683 00000 n 
+0014419822 00000 n 
+0014419963 00000 n 
+0014420122 00000 n 
+0014420282 00000 n 
+0014420426 00000 n 
+0014420572 00000 n 
+0014420735 00000 n 
+0014420899 00000 n 
+0014421025 00000 n 
+0014421152 00000 n 
+0014421274 00000 n 
+0014421398 00000 n 
+0014421526 00000 n 
+0014421656 00000 n 
+0014421783 00000 n 
+0014421911 00000 n 
+0014422033 00000 n 
+0014422157 00000 n 
+0014422276 00000 n 
+0014422396 00000 n 
+0014422509 00000 n 
+0014422627 00000 n 
+0014422753 00000 n 
+0014422880 00000 n 
+0014422998 00000 n 
+0014423118 00000 n 
+0014423253 00000 n 
+0014423389 00000 n 
+0014423511 00000 n 
+0014423634 00000 n 
+0014423755 00000 n 
+0014423877 00000 n 
+0014424006 00000 n 
+0014424137 00000 n 
+0014424254 00000 n 
+0014424372 00000 n 
+0014424490 00000 n 
+0014424609 00000 n 
+0014424729 00000 n 
+0014424850 00000 n 
+0014424978 00000 n 
+0014425108 00000 n 
+0014425249 00000 n 
+0014425391 00000 n 
+0014425538 00000 n 
+0014425687 00000 n 
+0014425814 00000 n 
+0014425942 00000 n 
+0014426069 00000 n 
+0014426197 00000 n 
+0014426326 00000 n 
+0014426456 00000 n 
+0014426589 00000 n 
+0014426723 00000 n 
+0014426849 00000 n 
+0014426976 00000 n 
+0014427093 00000 n 
+0014427211 00000 n 
+0014427340 00000 n 
+0014427470 00000 n 
+0014427600 00000 n 
+0014427732 00000 n 
+0014427857 00000 n 
+0014427983 00000 n 
+0014428115 00000 n 
+0014428248 00000 n 
+0014428372 00000 n 
+0014428497 00000 n 
+0014428623 00000 n 
+0014428751 00000 n 
+0014428874 00000 n 
+0014428998 00000 n 
+0014429137 00000 n 
+0014429277 00000 n 
+0014429412 00000 n 
+0014429549 00000 n 
+0014429691 00000 n 
+0014429834 00000 n 
+0014429998 00000 n 
+0014430163 00000 n 
+0014430319 00000 n 
+0014430476 00000 n 
+0014430608 00000 n 
+0014430741 00000 n 
+0014430863 00000 n 
+0014430986 00000 n 
+0014431116 00000 n 
+0014431248 00000 n 
+0014431385 00000 n 
+0014431523 00000 n 
+0014431653 00000 n 
+0014431784 00000 n 
+0014431906 00000 n 
+0014432030 00000 n 
+0014432152 00000 n 
+0014432275 00000 n 
+0014432404 00000 n 
+0014432534 00000 n 
+0014432674 00000 n 
+0014432815 00000 n 
+0014432961 00000 n 
+0014433108 00000 n 
+0014433259 00000 n 
+0014433411 00000 n 
+0014433553 00000 n 
+0014433696 00000 n 
+0014433833 00000 n 
+0014433971 00000 n 
+0014434096 00000 n 
+0014434223 00000 n 
+0014434349 00000 n 
+0014434477 00000 n 
+0014434602 00000 n 
+0014434728 00000 n 
+0014434859 00000 n 
+0014434991 00000 n 
+0014435116 00000 n 
+0014435242 00000 n 
+0014435375 00000 n 
+0014435509 00000 n 
+0014435639 00000 n 
+0014435771 00000 n 
+0014435897 00000 n 
+0014436024 00000 n 
+0014436151 00000 n 
+0014436280 00000 n 
+0014436402 00000 n 
+0014436526 00000 n 
+0014436669 00000 n 
+0014436813 00000 n 
+0014436935 00000 n 
+0014437059 00000 n 
+0014437188 00000 n 
+0014437319 00000 n 
+0014437451 00000 n 
+0014437585 00000 n 
+0014437710 00000 n 
+0014437837 00000 n 
+0014437958 00000 n 
+0014438081 00000 n 
+0014438212 00000 n 
+0014438345 00000 n 
+0014438487 00000 n 
+0014438631 00000 n 
+0014438773 00000 n 
+0014438917 00000 n 
+0014439066 00000 n 
+0014439217 00000 n 
+0014439361 00000 n 
+0014439506 00000 n 
+0014439632 00000 n 
+0014439760 00000 n 
+0014439884 00000 n 
+0014440010 00000 n 
+0014440138 00000 n 
+0014440267 00000 n 
+0014440392 00000 n 
+0014440518 00000 n 
+0014440648 00000 n 
+0014440779 00000 n 
+0014440919 00000 n 
+0014441061 00000 n 
+0014441192 00000 n 
+0014441324 00000 n 
+0014441461 00000 n 
+0014441599 00000 n 
+0014441730 00000 n 
+0014441862 00000 n 
+0014441997 00000 n 
+0014442133 00000 n 
+0014442263 00000 n 
+0014442394 00000 n 
+0014442528 00000 n 
+0014442663 00000 n 
+0014442805 00000 n 
+0014442948 00000 n 
+0014443089 00000 n 
+0014443231 00000 n 
+0014443359 00000 n 
+0014443488 00000 n 
+0014443617 00000 n 
+0014443747 00000 n 
+0014443873 00000 n 
+0014444000 00000 n 
+0014444119 00000 n 
+0014444240 00000 n 
+0014444379 00000 n 
+0014444519 00000 n 
+0014444643 00000 n 
+0014444768 00000 n 
+0014444889 00000 n 
+0014445012 00000 n 
+0014445138 00000 n 
+0014445266 00000 n 
+0014445383 00000 n 
+0014445501 00000 n 
+0014445619 00000 n 
+0014445738 00000 n 
+0014445851 00000 n 
+0014445965 00000 n 
+0014446082 00000 n 
 0014446200 00000 n 
-0014446317 00000 n 
-0014446435 00000 n 
-0014446553 00000 n 
-0014446672 00000 n 
-0014446785 00000 n 
-0014446899 00000 n 
-0014447016 00000 n 
-0014447134 00000 n 
-0014447253 00000 n 
-0014447373 00000 n 
-0014447492 00000 n 
-0014447613 00000 n 
-0014447732 00000 n 
-0014447853 00000 n 
-0014447988 00000 n 
-0014448125 00000 n 
-0014448243 00000 n 
-0014448363 00000 n 
-0014448488 00000 n 
-0014448614 00000 n 
-0014448743 00000 n 
-0014448873 00000 n 
-0014448996 00000 n 
-0014449120 00000 n 
-0014449252 00000 n 
-0014449385 00000 n 
-0014449501 00000 n 
-0014449618 00000 n 
-0014449751 00000 n 
-0014449886 00000 n 
-0014450020 00000 n 
-0014450156 00000 n 
-0014450280 00000 n 
-0014450405 00000 n 
-0014450528 00000 n 
-0014450653 00000 n 
+0014446319 00000 n 
+0014446439 00000 n 
+0014446558 00000 n 
+0014446679 00000 n 
+0014446798 00000 n 
+0014446919 00000 n 
+0014447054 00000 n 
+0014447191 00000 n 
+0014447309 00000 n 
+0014447429 00000 n 
+0014447554 00000 n 
+0014447680 00000 n 
+0014447809 00000 n 
+0014447939 00000 n 
+0014448062 00000 n 
+0014448186 00000 n 
+0014448318 00000 n 
+0014448451 00000 n 
+0014448567 00000 n 
+0014448684 00000 n 
+0014448817 00000 n 
+0014448952 00000 n 
+0014449086 00000 n 
+0014449222 00000 n 
+0014449346 00000 n 
+0014449471 00000 n 
+0014449594 00000 n 
+0014449719 00000 n 
+0014449871 00000 n 
+0014450024 00000 n 
+0014450167 00000 n 
+0014450311 00000 n 
+0014450436 00000 n 
+0014450562 00000 n 
+0014450683 00000 n 
 0014450805 00000 n 
-0014450958 00000 n 
-0014451101 00000 n 
-0014451245 00000 n 
-0014451370 00000 n 
-0014451496 00000 n 
-0014451617 00000 n 
-0014451739 00000 n 
-0014451865 00000 n 
-0014451992 00000 n 
-0014452109 00000 n 
-0014452227 00000 n 
-0014452360 00000 n 
-0014452494 00000 n 
-0014452622 00000 n 
-0014452751 00000 n 
-0014452875 00000 n 
-0014453001 00000 n 
-0014453127 00000 n 
-0014453254 00000 n 
-0014453379 00000 n 
-0014453506 00000 n 
-0014453632 00000 n 
-0014453759 00000 n 
-0014453886 00000 n 
-0014454014 00000 n 
-0014454137 00000 n 
-0014454261 00000 n 
-0014454382 00000 n 
-0014454505 00000 n 
-0014454640 00000 n 
-0014454776 00000 n 
-0014454904 00000 n 
-0014455033 00000 n 
-0014455153 00000 n 
-0014455276 00000 n 
-0014455402 00000 n 
-0014455529 00000 n 
-0014455657 00000 n 
-0014455787 00000 n 
-0014455905 00000 n 
-0014456025 00000 n 
-0014456140 00000 n 
-0014456257 00000 n 
-0014456375 00000 n 
-0014456495 00000 n 
-0014456614 00000 n 
-0014456735 00000 n 
-0014456862 00000 n 
-0014456990 00000 n 
-0014457113 00000 n 
-0014457237 00000 n 
-0014457368 00000 n 
-0014457500 00000 n 
-0014457627 00000 n 
-0014457755 00000 n 
-0014457881 00000 n 
-0014458010 00000 n 
-0014458140 00000 n 
-0014458272 00000 n 
-0014458401 00000 n 
-0014458532 00000 n 
-0014458661 00000 n 
-0014458791 00000 n 
-0014458915 00000 n 
-0014459040 00000 n 
-0014459167 00000 n 
-0014459296 00000 n 
-0014459427 00000 n 
-0014459559 00000 n 
-0014459683 00000 n 
-0014459809 00000 n 
-0014459939 00000 n 
-0014460070 00000 n 
-0014460197 00000 n 
-0014460326 00000 n 
-0014460453 00000 n 
-0014460581 00000 n 
-0014460712 00000 n 
-0014460844 00000 n 
-0014460972 00000 n 
-0014461101 00000 n 
-0014461247 00000 n 
-0014461394 00000 n 
-0014461518 00000 n 
-0014461643 00000 n 
-0014461768 00000 n 
-0014461894 00000 n 
-0014462028 00000 n 
-0014462163 00000 n 
-0014462294 00000 n 
-0014462427 00000 n 
-0014462561 00000 n 
-0014462697 00000 n 
-0014462818 00000 n 
-0014462940 00000 n 
-0014463059 00000 n 
-0014463179 00000 n 
-0014463306 00000 n 
-0014463434 00000 n 
-0014463562 00000 n 
-0014463692 00000 n 
-0014463819 00000 n 
-0014463947 00000 n 
-0014464074 00000 n 
-0014464203 00000 n 
-0014464335 00000 n 
-0014464469 00000 n 
-0014464629 00000 n 
-0014464790 00000 n 
-0014464913 00000 n 
-0014465038 00000 n 
-0014465164 00000 n 
-0014465292 00000 n 
-0014465421 00000 n 
-0014465551 00000 n 
-0014465677 00000 n 
-0014465804 00000 n 
-0014465930 00000 n 
-0014466057 00000 n 
-0014466177 00000 n 
-0014466299 00000 n 
-0014466423 00000 n 
-0014466548 00000 n 
-0014466681 00000 n 
-0014466815 00000 n 
-0014466938 00000 n 
-0014467062 00000 n 
-0014467190 00000 n 
-0014467320 00000 n 
-0014467437 00000 n 
-0014467555 00000 n 
-0014467670 00000 n 
-0014467787 00000 n 
-0014467906 00000 n 
-0014468026 00000 n 
-0014468148 00000 n 
-0014468272 00000 n 
-0014468401 00000 n 
-0014468531 00000 n 
-0014468670 00000 n 
-0014468811 00000 n 
-0014468938 00000 n 
-0014469066 00000 n 
-0014469189 00000 n 
-0014469359 00000 n 
-0014469484 00000 n 
-0014469608 00000 n 
-0014469733 00000 n 
-0014469859 00000 n 
-0014469983 00000 n 
-0014470108 00000 n 
-0014470232 00000 n 
-0014470357 00000 n 
-0014470475 00000 n 
-0014470595 00000 n 
-0014470715 00000 n 
-0014470837 00000 n 
-0014470957 00000 n 
-0014471078 00000 n 
-0014471238 00000 n 
-0014471399 00000 n 
-0014471520 00000 n 
-0014471643 00000 n 
-0014471767 00000 n 
-0014471892 00000 n 
-0014472009 00000 n 
-0014472205 00000 n 
-0014472325 00000 n 
-0014472443 00000 n 
-0014472567 00000 n 
-0014472692 00000 n 
-0014472818 00000 n 
-0014472946 00000 n 
-0014473075 00000 n 
-0014473207 00000 n 
-0014473327 00000 n 
-0014473448 00000 n 
-0014473582 00000 n 
-0014473717 00000 n 
-0014473837 00000 n 
-0014473959 00000 n 
-0014474087 00000 n 
-0014474217 00000 n 
-0014474341 00000 n 
-0014474466 00000 n 
-0014474584 00000 n 
-0014474703 00000 n 
-0014474829 00000 n 
-0014474956 00000 n 
-0014475080 00000 n 
-0014475205 00000 n 
-0014475336 00000 n 
-0014475468 00000 n 
-0014475585 00000 n 
-0014475704 00000 n 
-0014475824 00000 n 
-0014475946 00000 n 
-0014476080 00000 n 
-0014476215 00000 n 
-0014476339 00000 n 
-0014476465 00000 n 
-0014476586 00000 n 
-0014476708 00000 n 
-0014476831 00000 n 
-0014476955 00000 n 
-0014477102 00000 n 
-0014477250 00000 n 
-0014477376 00000 n 
-0014477503 00000 n 
-0014477625 00000 n 
-0014477749 00000 n 
-0014477871 00000 n 
-0014477995 00000 n 
-0014478123 00000 n 
-0014478252 00000 n 
-0014478387 00000 n 
-0014478523 00000 n 
-0014478639 00000 n 
-0014478757 00000 n 
-0014478881 00000 n 
-0014479006 00000 n 
-0014479126 00000 n 
-0014479248 00000 n 
-0014479370 00000 n 
-0014479493 00000 n 
-0014479614 00000 n 
-0014479737 00000 n 
-0014479888 00000 n 
-0014480041 00000 n 
-0014480158 00000 n 
-0014480276 00000 n 
-0014480409 00000 n 
-0014480543 00000 n 
-0014480667 00000 n 
-0014480793 00000 n 
-0014480910 00000 n 
-0014481028 00000 n 
-0014481146 00000 n 
-0014481265 00000 n 
-0014481393 00000 n 
-0014481522 00000 n 
-0014481645 00000 n 
-0014481770 00000 n 
-0014481896 00000 n 
-0014482024 00000 n 
-0014482141 00000 n 
-0014482259 00000 n 
-0014482376 00000 n 
+0014450931 00000 n 
+0014451058 00000 n 
+0014451175 00000 n 
+0014451293 00000 n 
+0014451426 00000 n 
+0014451560 00000 n 
+0014451688 00000 n 
+0014451817 00000 n 
+0014451941 00000 n 
+0014452067 00000 n 
+0014452193 00000 n 
+0014452320 00000 n 
+0014452445 00000 n 
+0014452572 00000 n 
+0014452698 00000 n 
+0014452825 00000 n 
+0014452952 00000 n 
+0014453080 00000 n 
+0014453203 00000 n 
+0014453327 00000 n 
+0014453448 00000 n 
+0014453571 00000 n 
+0014453706 00000 n 
+0014453842 00000 n 
+0014453970 00000 n 
+0014454099 00000 n 
+0014454219 00000 n 
+0014454342 00000 n 
+0014454468 00000 n 
+0014454595 00000 n 
+0014454723 00000 n 
+0014454853 00000 n 
+0014454971 00000 n 
+0014455091 00000 n 
+0014455206 00000 n 
+0014455323 00000 n 
+0014455441 00000 n 
+0014455561 00000 n 
+0014455680 00000 n 
+0014455801 00000 n 
+0014455928 00000 n 
+0014456056 00000 n 
+0014456179 00000 n 
+0014456303 00000 n 
+0014456434 00000 n 
+0014456566 00000 n 
+0014456693 00000 n 
+0014456821 00000 n 
+0014456947 00000 n 
+0014457076 00000 n 
+0014457206 00000 n 
+0014457338 00000 n 
+0014457467 00000 n 
+0014457598 00000 n 
+0014457727 00000 n 
+0014457857 00000 n 
+0014457981 00000 n 
+0014458106 00000 n 
+0014458233 00000 n 
+0014458362 00000 n 
+0014458493 00000 n 
+0014458625 00000 n 
+0014458749 00000 n 
+0014458875 00000 n 
+0014459005 00000 n 
+0014459136 00000 n 
+0014459263 00000 n 
+0014459392 00000 n 
+0014459519 00000 n 
+0014459647 00000 n 
+0014459778 00000 n 
+0014459910 00000 n 
+0014460038 00000 n 
+0014460167 00000 n 
+0014460313 00000 n 
+0014460460 00000 n 
+0014460584 00000 n 
+0014460709 00000 n 
+0014460834 00000 n 
+0014460960 00000 n 
+0014461094 00000 n 
+0014461229 00000 n 
+0014461360 00000 n 
+0014461493 00000 n 
+0014461627 00000 n 
+0014461763 00000 n 
+0014461884 00000 n 
+0014462006 00000 n 
+0014462125 00000 n 
+0014462245 00000 n 
+0014462372 00000 n 
+0014462500 00000 n 
+0014462628 00000 n 
+0014462758 00000 n 
+0014462885 00000 n 
+0014463013 00000 n 
+0014463140 00000 n 
+0014463269 00000 n 
+0014463401 00000 n 
+0014463535 00000 n 
+0014463695 00000 n 
+0014463856 00000 n 
+0014463979 00000 n 
+0014464104 00000 n 
+0014464230 00000 n 
+0014464358 00000 n 
+0014464487 00000 n 
+0014464617 00000 n 
+0014464743 00000 n 
+0014464870 00000 n 
+0014464996 00000 n 
+0014465123 00000 n 
+0014465243 00000 n 
+0014465365 00000 n 
+0014465489 00000 n 
+0014465614 00000 n 
+0014465747 00000 n 
+0014465881 00000 n 
+0014466004 00000 n 
+0014466128 00000 n 
+0014466256 00000 n 
+0014466386 00000 n 
+0014466503 00000 n 
+0014466621 00000 n 
+0014466736 00000 n 
+0014466853 00000 n 
+0014466972 00000 n 
+0014467092 00000 n 
+0014467214 00000 n 
+0014467338 00000 n 
+0014467467 00000 n 
+0014467597 00000 n 
+0014467736 00000 n 
+0014467877 00000 n 
+0014468004 00000 n 
+0014468132 00000 n 
+0014468255 00000 n 
+0014468425 00000 n 
+0014468550 00000 n 
+0014468674 00000 n 
+0014468799 00000 n 
+0014468925 00000 n 
+0014469049 00000 n 
+0014469174 00000 n 
+0014469298 00000 n 
+0014469423 00000 n 
+0014469541 00000 n 
+0014469661 00000 n 
+0014469781 00000 n 
+0014469903 00000 n 
+0014470023 00000 n 
+0014470144 00000 n 
+0014470304 00000 n 
+0014470465 00000 n 
+0014470586 00000 n 
+0014470709 00000 n 
+0014470833 00000 n 
+0014470958 00000 n 
+0014471075 00000 n 
+0014471271 00000 n 
+0014471391 00000 n 
+0014471509 00000 n 
+0014471633 00000 n 
+0014471758 00000 n 
+0014471884 00000 n 
+0014472012 00000 n 
+0014472141 00000 n 
+0014472273 00000 n 
+0014472393 00000 n 
+0014472514 00000 n 
+0014472648 00000 n 
+0014472783 00000 n 
+0014472903 00000 n 
+0014473025 00000 n 
+0014473153 00000 n 
+0014473283 00000 n 
+0014473407 00000 n 
+0014473532 00000 n 
+0014473650 00000 n 
+0014473769 00000 n 
+0014473895 00000 n 
+0014474022 00000 n 
+0014474146 00000 n 
+0014474271 00000 n 
+0014474402 00000 n 
+0014474534 00000 n 
+0014474651 00000 n 
+0014474770 00000 n 
+0014474890 00000 n 
+0014475012 00000 n 
+0014475146 00000 n 
+0014475281 00000 n 
+0014475405 00000 n 
+0014475531 00000 n 
+0014475652 00000 n 
+0014475774 00000 n 
+0014475897 00000 n 
+0014476021 00000 n 
+0014476168 00000 n 
+0014476316 00000 n 
+0014476442 00000 n 
+0014476569 00000 n 
+0014476691 00000 n 
+0014476815 00000 n 
+0014476937 00000 n 
+0014477061 00000 n 
+0014477189 00000 n 
+0014477318 00000 n 
+0014477453 00000 n 
+0014477589 00000 n 
+0014477705 00000 n 
+0014477823 00000 n 
+0014477947 00000 n 
+0014478072 00000 n 
+0014478192 00000 n 
+0014478314 00000 n 
+0014478436 00000 n 
+0014478559 00000 n 
+0014478680 00000 n 
+0014478803 00000 n 
+0014478954 00000 n 
+0014479107 00000 n 
+0014479224 00000 n 
+0014479342 00000 n 
+0014479475 00000 n 
+0014479609 00000 n 
+0014479733 00000 n 
+0014479859 00000 n 
+0014479976 00000 n 
+0014480094 00000 n 
+0014480212 00000 n 
+0014480331 00000 n 
+0014480459 00000 n 
+0014480588 00000 n 
+0014480711 00000 n 
+0014480836 00000 n 
+0014480962 00000 n 
+0014481090 00000 n 
+0014481207 00000 n 
+0014481325 00000 n 
+0014481442 00000 n 
+0014481561 00000 n 
+0014481683 00000 n 
+0014481807 00000 n 
+0014481965 00000 n 
+0014482124 00000 n 
+0014482268 00000 n 
+0014482413 00000 n 
 0014482495 00000 n 
-0014482617 00000 n 
-0014482741 00000 n 
-0014482899 00000 n 
-0014483058 00000 n 
-0014483202 00000 n 
-0014483347 00000 n 
-0014483429 00000 n 
-0014483661 00000 n 
-0014483821 00000 n 
-0014483977 00000 n 
-0014484196 00000 n 
-0014484401 00000 n 
-0014484678 00000 n 
-0014484942 00000 n 
-0014485176 00000 n 
-0014485425 00000 n 
-0014485770 00000 n 
-0014486103 00000 n 
-0014486360 00000 n 
-0014486621 00000 n 
-0014486906 00000 n 
-0014487152 00000 n 
-0014487348 00000 n 
-0014487662 00000 n 
-0014487871 00000 n 
-0014488085 00000 n 
-0014488333 00000 n 
-0014488571 00000 n 
-0014488912 00000 n 
-0014489189 00000 n 
-0014489546 00000 n 
-0014489847 00000 n 
-0014490220 00000 n 
-0014490430 00000 n 
-0014490631 00000 n 
-0014490853 00000 n 
-0014491082 00000 n 
-0014491295 00000 n 
-0014491492 00000 n 
-0014491681 00000 n 
-0014491910 00000 n 
-0014492107 00000 n 
-0014492368 00000 n 
-0014492577 00000 n 
-0014492795 00000 n 
-0014493033 00000 n 
-0014493231 00000 n 
-0014493410 00000 n 
-0014493663 00000 n 
-0014493886 00000 n 
-0014494157 00000 n 
-0014494455 00000 n 
-0014494746 00000 n 
-0014494976 00000 n 
-0014495226 00000 n 
-0014495480 00000 n 
-0014495678 00000 n 
-0014495928 00000 n 
-0014496190 00000 n 
-0014496540 00000 n 
-0014496762 00000 n 
-0014497044 00000 n 
-0014497418 00000 n 
-0014497633 00000 n 
-0014497871 00000 n 
+0014482727 00000 n 
+0014482887 00000 n 
+0014483043 00000 n 
+0014483262 00000 n 
+0014483467 00000 n 
+0014483744 00000 n 
+0014484008 00000 n 
+0014484242 00000 n 
+0014484491 00000 n 
+0014484836 00000 n 
+0014485169 00000 n 
+0014485426 00000 n 
+0014485687 00000 n 
+0014485972 00000 n 
+0014486218 00000 n 
+0014486414 00000 n 
+0014486728 00000 n 
+0014486937 00000 n 
+0014487151 00000 n 
+0014487399 00000 n 
+0014487637 00000 n 
+0014487978 00000 n 
+0014488255 00000 n 
+0014488612 00000 n 
+0014488913 00000 n 
+0014489286 00000 n 
+0014489496 00000 n 
+0014489697 00000 n 
+0014489919 00000 n 
+0014490148 00000 n 
+0014490361 00000 n 
+0014490558 00000 n 
+0014490747 00000 n 
+0014490976 00000 n 
+0014491173 00000 n 
+0014491434 00000 n 
+0014491643 00000 n 
+0014491861 00000 n 
+0014492099 00000 n 
+0014492297 00000 n 
+0014492476 00000 n 
+0014492729 00000 n 
+0014492952 00000 n 
+0014493223 00000 n 
+0014493521 00000 n 
+0014493812 00000 n 
+0014494042 00000 n 
+0014494292 00000 n 
+0014494546 00000 n 
+0014494744 00000 n 
+0014494994 00000 n 
+0014495256 00000 n 
+0014495606 00000 n 
+0014495828 00000 n 
+0014496110 00000 n 
+0014496484 00000 n 
+0014496699 00000 n 
+0014496937 00000 n 
+0014497240 00000 n 
+0014497506 00000 n 
+0014497796 00000 n 
 0014498174 00000 n 
-0014498440 00000 n 
-0014498730 00000 n 
-0014499108 00000 n 
-0014499454 00000 n 
-0014499704 00000 n 
-0014499954 00000 n 
-0014500228 00000 n 
-0014500594 00000 n 
-0014500856 00000 n 
-0014501055 00000 n 
-0014501300 00000 n 
-0014501523 00000 n 
-0014501845 00000 n 
-0014502159 00000 n 
-0014502485 00000 n 
-0014502775 00000 n 
-0014503058 00000 n 
-0014503268 00000 n 
-0014503463 00000 n 
-0014503697 00000 n 
-0014503899 00000 n 
-0014504165 00000 n 
-0014504367 00000 n 
-0014504593 00000 n 
-0014504799 00000 n 
-0014505025 00000 n 
-0014505219 00000 n 
-0014505557 00000 n 
-0014505871 00000 n 
-0014506106 00000 n 
-0014506347 00000 n 
-0014506542 00000 n 
-0014506737 00000 n 
-0014507042 00000 n 
-0014507237 00000 n 
-0014507483 00000 n 
-0014507821 00000 n 
-0014508056 00000 n 
-0014508290 00000 n 
-0014508485 00000 n 
-0014508707 00000 n 
-0014508917 00000 n 
-0014509215 00000 n 
-0014509501 00000 n 
-0014509803 00000 n 
-0014510053 00000 n 
-0014510287 00000 n 
-0014510689 00000 n 
-0014510959 00000 n 
-0014511341 00000 n 
-0014511643 00000 n 
-0014511889 00000 n 
-0014512232 00000 n 
-0014512485 00000 n 
-0014512688 00000 n 
-0014512890 00000 n 
-0014513153 00000 n 
-0014513382 00000 n 
-0014513566 00000 n 
-0014513831 00000 n 
-0014514014 00000 n 
-0014514220 00000 n 
-0014514502 00000 n 
-0014514844 00000 n 
-0014515046 00000 n 
-0014515237 00000 n 
-0014515518 00000 n 
-0014515730 00000 n 
-0014515951 00000 n 
-0014516162 00000 n 
-0014516404 00000 n 
-0014516622 00000 n 
-0014516865 00000 n 
-0014517126 00000 n 
-0014517373 00000 n 
-0014517639 00000 n 
-0014517901 00000 n 
-0014518115 00000 n 
-0014518449 00000 n 
-0014518732 00000 n 
-0014519018 00000 n 
-0014519249 00000 n 
-0014519459 00000 n 
-0014519657 00000 n 
-0014519919 00000 n 
-0014520137 00000 n 
-0014520371 00000 n 
-0014520641 00000 n 
-0014520887 00000 n 
-0014521141 00000 n 
-0014521399 00000 n 
-0014521597 00000 n 
-0014521819 00000 n 
-0014522125 00000 n 
-0014522340 00000 n 
-0014522565 00000 n 
-0014522772 00000 n 
-0014523006 00000 n 
-0014523208 00000 n 
-0014523398 00000 n 
-0014523585 00000 n 
-0014523915 00000 n 
-0014524154 00000 n 
-0014524352 00000 n 
-0014524570 00000 n 
-0014524772 00000 n 
-0014524978 00000 n 
-0014525196 00000 n 
-0014525410 00000 n 
-0014525620 00000 n 
-0014525850 00000 n 
-0014526056 00000 n 
-0014526274 00000 n 
-0014526496 00000 n 
-0014526802 00000 n 
-0014527040 00000 n 
-0014527354 00000 n 
-0014527584 00000 n 
-0014527854 00000 n 
-0014528164 00000 n 
-0014528371 00000 n 
-0014528632 00000 n 
-0014528831 00000 n 
-0014529065 00000 n 
-0014529340 00000 n 
-0014529642 00000 n 
-0014529909 00000 n 
-0014530159 00000 n 
-0014530401 00000 n 
-0014530635 00000 n 
-0014530881 00000 n 
-0014531139 00000 n 
-0014531505 00000 n 
-0014531735 00000 n 
-0014531977 00000 n 
-0014532355 00000 n 
-0014532677 00000 n 
-0014532907 00000 n 
-0014533173 00000 n 
-0014533423 00000 n 
-0014533662 00000 n 
-0014533968 00000 n 
-0014534199 00000 n 
-0014534481 00000 n 
-0014534679 00000 n 
-0014534945 00000 n 
-0014535215 00000 n 
-0014535509 00000 n 
-0014535767 00000 n 
-0014536093 00000 n 
-0014536375 00000 n 
-0014536577 00000 n 
-0014536824 00000 n 
-0014537109 00000 n 
-0014537296 00000 n 
-0014537506 00000 n 
-0014537712 00000 n 
-0014538063 00000 n 
-0014538292 00000 n 
-0014538476 00000 n 
-0014538789 00000 n 
-0014538996 00000 n 
-0014539230 00000 n 
-0014539480 00000 n 
-0014539686 00000 n 
-0014539960 00000 n 
-0014540170 00000 n 
-0014540412 00000 n 
-0014540619 00000 n 
-0014540880 00000 n 
-0014541087 00000 n 
-0014541309 00000 n 
-0014541559 00000 n 
-0014541749 00000 n 
-0014541959 00000 n 
-0014542221 00000 n 
-0014542447 00000 n 
-0014542634 00000 n 
-0014542831 00000 n 
-0014543130 00000 n 
-0014543433 00000 n 
-0014543630 00000 n 
-0014543833 00000 n 
-0014544075 00000 n 
-0014544326 00000 n 
-0014544507 00000 n 
-0014544706 00000 n 
-0014544908 00000 n 
-0014545099 00000 n 
-0014545278 00000 n 
-0014545557 00000 n 
-0014545747 00000 n 
-0014546009 00000 n 
-0014546363 00000 n 
-0014546597 00000 n 
-0014546791 00000 n 
-0014547017 00000 n 
-0014547311 00000 n 
-0014547541 00000 n 
-0014547879 00000 n 
-0014548125 00000 n 
-0014548391 00000 n 
-0014548745 00000 n 
-0014549032 00000 n 
-0014565180 00000 n 
-0014565452 00000 n 
-0014565724 00000 n 
-0014578826 00000 n 
-0014579044 00000 n 
-0014580408 00000 n 
-0014581326 00000 n 
-0014593062 00000 n 
-0014593285 00000 n 
-0014594649 00000 n 
-0014595566 00000 n 
-0014606490 00000 n 
-0014606718 00000 n 
-0014608082 00000 n 
-0014609000 00000 n 
-0014615900 00000 n 
-0014616117 00000 n 
-0014617481 00000 n 
-0014618398 00000 n 
-0014622707 00000 n 
-0014622925 00000 n 
-0014623268 00000 n 
-0014624187 00000 n 
-0014625472 00000 n 
-0014625698 00000 n 
-0014626018 00000 n 
-0014627157 00000 n 
-0014636529 00000 n 
-0014636761 00000 n 
-0014638125 00000 n 
-0014639042 00000 n 
-0014640321 00000 n 
-0014640549 00000 n 
-0014640865 00000 n 
-0014642004 00000 n 
-0014646782 00000 n 
-0014646996 00000 n 
-0014648360 00000 n 
-0014649276 00000 n 
-0014651364 00000 n 
-0014651581 00000 n 
-0014651907 00000 n 
-0014652825 00000 n 
-0014655984 00000 n 
-0014656200 00000 n 
-0014657564 00000 n 
-0014658480 00000 n 
-0014662208 00000 n 
-0014662431 00000 n 
-0014662747 00000 n 
-0014663664 00000 n 
-0014667256 00000 n 
-0014667484 00000 n 
-0014667788 00000 n 
+0014498520 00000 n 
+0014498770 00000 n 
+0014499020 00000 n 
+0014499294 00000 n 
+0014499660 00000 n 
+0014499922 00000 n 
+0014500121 00000 n 
+0014500366 00000 n 
+0014500589 00000 n 
+0014500911 00000 n 
+0014501225 00000 n 
+0014501551 00000 n 
+0014501841 00000 n 
+0014502124 00000 n 
+0014502334 00000 n 
+0014502529 00000 n 
+0014502763 00000 n 
+0014502965 00000 n 
+0014503231 00000 n 
+0014503433 00000 n 
+0014503659 00000 n 
+0014503865 00000 n 
+0014504091 00000 n 
+0014504285 00000 n 
+0014504623 00000 n 
+0014504937 00000 n 
+0014505172 00000 n 
+0014505413 00000 n 
+0014505608 00000 n 
+0014505803 00000 n 
+0014506108 00000 n 
+0014506303 00000 n 
+0014506549 00000 n 
+0014506887 00000 n 
+0014507122 00000 n 
+0014507356 00000 n 
+0014507551 00000 n 
+0014507773 00000 n 
+0014507983 00000 n 
+0014508281 00000 n 
+0014508567 00000 n 
+0014508869 00000 n 
+0014509119 00000 n 
+0014509353 00000 n 
+0014509755 00000 n 
+0014510025 00000 n 
+0014510407 00000 n 
+0014510709 00000 n 
+0014510955 00000 n 
+0014511298 00000 n 
+0014511551 00000 n 
+0014511754 00000 n 
+0014511956 00000 n 
+0014512219 00000 n 
+0014512448 00000 n 
+0014512632 00000 n 
+0014512897 00000 n 
+0014513080 00000 n 
+0014513286 00000 n 
+0014513568 00000 n 
+0014513910 00000 n 
+0014514112 00000 n 
+0014514303 00000 n 
+0014514584 00000 n 
+0014514796 00000 n 
+0014515017 00000 n 
+0014515228 00000 n 
+0014515470 00000 n 
+0014515688 00000 n 
+0014515931 00000 n 
+0014516192 00000 n 
+0014516439 00000 n 
+0014516705 00000 n 
+0014516967 00000 n 
+0014517181 00000 n 
+0014517515 00000 n 
+0014517798 00000 n 
+0014518084 00000 n 
+0014518315 00000 n 
+0014518525 00000 n 
+0014518723 00000 n 
+0014518985 00000 n 
+0014519203 00000 n 
+0014519437 00000 n 
+0014519707 00000 n 
+0014519953 00000 n 
+0014520207 00000 n 
+0014520465 00000 n 
+0014520663 00000 n 
+0014520885 00000 n 
+0014521191 00000 n 
+0014521406 00000 n 
+0014521631 00000 n 
+0014521838 00000 n 
+0014522072 00000 n 
+0014522274 00000 n 
+0014522464 00000 n 
+0014522651 00000 n 
+0014522981 00000 n 
+0014523220 00000 n 
+0014523418 00000 n 
+0014523636 00000 n 
+0014523838 00000 n 
+0014524044 00000 n 
+0014524262 00000 n 
+0014524476 00000 n 
+0014524686 00000 n 
+0014524916 00000 n 
+0014525122 00000 n 
+0014525340 00000 n 
+0014525562 00000 n 
+0014525868 00000 n 
+0014526106 00000 n 
+0014526420 00000 n 
+0014526650 00000 n 
+0014526920 00000 n 
+0014527230 00000 n 
+0014527437 00000 n 
+0014527698 00000 n 
+0014527897 00000 n 
+0014528131 00000 n 
+0014528406 00000 n 
+0014528708 00000 n 
+0014528975 00000 n 
+0014529225 00000 n 
+0014529467 00000 n 
+0014529701 00000 n 
+0014529947 00000 n 
+0014530205 00000 n 
+0014530571 00000 n 
+0014530801 00000 n 
+0014531043 00000 n 
+0014531421 00000 n 
+0014531743 00000 n 
+0014531973 00000 n 
+0014532239 00000 n 
+0014532489 00000 n 
+0014532728 00000 n 
+0014533034 00000 n 
+0014533265 00000 n 
+0014533547 00000 n 
+0014533745 00000 n 
+0014534011 00000 n 
+0014534281 00000 n 
+0014534575 00000 n 
+0014534833 00000 n 
+0014535159 00000 n 
+0014535441 00000 n 
+0014535643 00000 n 
+0014535890 00000 n 
+0014536175 00000 n 
+0014536362 00000 n 
+0014536572 00000 n 
+0014536778 00000 n 
+0014537129 00000 n 
+0014537358 00000 n 
+0014537542 00000 n 
+0014537855 00000 n 
+0014538062 00000 n 
+0014538296 00000 n 
+0014538546 00000 n 
+0014538752 00000 n 
+0014539026 00000 n 
+0014539236 00000 n 
+0014539478 00000 n 
+0014539685 00000 n 
+0014539946 00000 n 
+0014540153 00000 n 
+0014540375 00000 n 
+0014540625 00000 n 
+0014540815 00000 n 
+0014541025 00000 n 
+0014541287 00000 n 
+0014541513 00000 n 
+0014541700 00000 n 
+0014541897 00000 n 
+0014542196 00000 n 
+0014542499 00000 n 
+0014542696 00000 n 
+0014542899 00000 n 
+0014543141 00000 n 
+0014543392 00000 n 
+0014543573 00000 n 
+0014543772 00000 n 
+0014543974 00000 n 
+0014544165 00000 n 
+0014544344 00000 n 
+0014544623 00000 n 
+0014544813 00000 n 
+0014545075 00000 n 
+0014545429 00000 n 
+0014545663 00000 n 
+0014545857 00000 n 
+0014546083 00000 n 
+0014546377 00000 n 
+0014546607 00000 n 
+0014546945 00000 n 
+0014547191 00000 n 
+0014547457 00000 n 
+0014547811 00000 n 
+0014548098 00000 n 
+0014564246 00000 n 
+0014564518 00000 n 
+0014564790 00000 n 
+0014577892 00000 n 
+0014578110 00000 n 
+0014579474 00000 n 
+0014580392 00000 n 
+0014592128 00000 n 
+0014592351 00000 n 
+0014593715 00000 n 
+0014594632 00000 n 
+0014605556 00000 n 
+0014605784 00000 n 
+0014607148 00000 n 
+0014608066 00000 n 
+0014614966 00000 n 
+0014615183 00000 n 
+0014616547 00000 n 
+0014617464 00000 n 
+0014621773 00000 n 
+0014621991 00000 n 
+0014622334 00000 n 
+0014623253 00000 n 
+0014624538 00000 n 
+0014624764 00000 n 
+0014625084 00000 n 
+0014626223 00000 n 
+0014635595 00000 n 
+0014635827 00000 n 
+0014637191 00000 n 
+0014638108 00000 n 
+0014639387 00000 n 
+0014639615 00000 n 
+0014639931 00000 n 
+0014641070 00000 n 
+0014645848 00000 n 
+0014646062 00000 n 
+0014647426 00000 n 
+0014648342 00000 n 
+0014650430 00000 n 
+0014650647 00000 n 
+0014650973 00000 n 
+0014651891 00000 n 
+0014655050 00000 n 
+0014655266 00000 n 
+0014656630 00000 n 
+0014657546 00000 n 
+0014661274 00000 n 
+0014661497 00000 n 
+0014661813 00000 n 
+0014662730 00000 n 
+0014666322 00000 n 
+0014666550 00000 n 
+0014666854 00000 n 
 trailer
 << /Size 5737
 /Root 2 0 R
 /Info 1 0 R
 >>
 startxref
-14668704
+14667770
 %%EOF
diff --git a/book.html b/book.html
index ddef5a1..5ed8146 100644
--- a/book.html
+++ b/book.html
@@ -39609,10 +39609,6 @@ End-of-life releases are not included in this list.
 <td class="tableblock halign-left valign-top"><p class="tableblock">Andrew Purtell</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">2.1</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Duo Zhang</p></td>
-</tr>
-<tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">2.2</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Guanghao Zhang</p></td>
 </tr>
@@ -45215,7 +45211,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2020-04-24 14:31:26 UTC
+Last updated 2020-04-25 19:23:08 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index eab1f15..9c1e6d8 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -172,7 +172,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 437f803..edc2d72 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -67232,25 +67232,25 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>231</td></tr>
+<td>234</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>258</td></tr>
+<td>261</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>259</td></tr>
+<td>262</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>278</td></tr></table></div>
+<td>281</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.provider.example.TestShadeSaslAuthenticationProvider.java">org/apache/hadoop/hbase/security/provider/example/TestShadeSaslAuthenticationProvider.java</h3>
 <table border="0" class="table table-striped">
@@ -79904,7 +79904,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index 8740c06..d3fdb7d 100644
--- a/coc.html
+++ b/coc.html
@@ -241,7 +241,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index f5308ce..7a73261 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 9bb3c98..6bded75 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -757,7 +757,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index d507bc2..23a9523 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -194,7 +194,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index f0eaf16..9682bb9 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1068,7 +1068,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-24</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-04-25</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index abd1edf..cc81d52 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -4165,14 +4165,14 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Fri Apr 24 14:40:10 UTC 2020"</code></td>
+<td class="colLast"><code>"Sat Apr 25 19:30:56 UTC 2020"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"24961c5c34478e6e552d5a56ecd5d1a331b14316"</code></td>
+<td class="colLast"><code>"e6cc5eb2f0623f02eaa3542308fc3d82fd3abd9f"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html b/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
index 85f4a3b..2432a4f 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
@@ -519,7 +519,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>asyncProcessNodeUpdate</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;?&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.210">asyncProcessNodeUpdate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>&nbsp;runnabl [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;?&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.213">asyncProcessNodeUpdate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>&nbsp;runnabl [...]
 </li>
 </ul>
 <a name="refreshNodes-java.util.List-">
@@ -528,7 +528,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshNodes</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.225">refreshNodes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.NodeAndData</a>&gt;&nbsp;nodes)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.228">refreshNodes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.NodeAndData</a>&gt;&nbsp;nodes)</pre>
 </li>
 </ul>
 <a name="refreshAuthManager-java.lang.String-byte:A-">
@@ -537,7 +537,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshAuthManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.243">refreshAuthManager</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;entry,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.246">refreshAuthManager</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;entry,
                                 byte[]&nbsp;nodeData)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -552,7 +552,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>writeToZookeeper</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.261">writeToZookeeper</a>(byte[]&nbsp;entry,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.264">writeToZookeeper</a>(byte[]&nbsp;entry,
                              byte[]&nbsp;permsData)</pre>
 <div class="block">Write a table's access controls to the permissions mirror in zookeeper</div>
 <dl>
@@ -568,7 +568,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableACLNode</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.280">deleteTableACLNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.283">deleteTableACLNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Delete the acl notify node of table</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -582,7 +582,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deleteNamespaceACLNode</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.297">deleteNamespaceACLNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#line.300">deleteNamespaceACLNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
 <div class="block">Delete the acl notify node of namespace</div>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
index 8acd172..0c5c7d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1586">ZKUtil.ZKUtilOp.CreateAndFailSilent</a>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1590">ZKUtil.ZKUtilOp.CreateAndFailSilent</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a></pre>
 <div class="block">ZKUtilOp representing createAndFailSilent in ZooKeeper
  (attempt to create node, ignore error if already exists)</div>
@@ -241,7 +241,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>data</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1587">data</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1591">data</a></pre>
 </li>
 </ul>
 </li>
@@ -258,7 +258,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateAndFailSilent</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1589">CreateAndFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1593">CreateAndFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                             byte[]&nbsp;data)</pre>
 </li>
 </ul>
@@ -276,7 +276,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>getData</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1594">getData</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1598">getData</a>()</pre>
 </li>
 </ul>
 <a name="equals-java.lang.Object-">
@@ -285,7 +285,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1599">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1603">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -298,7 +298,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1612">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html#line.1616">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
index a3f85cb..1e23967 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1622">ZKUtil.ZKUtilOp.DeleteNodeFailSilent</a>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1626">ZKUtil.ZKUtilOp.DeleteNodeFailSilent</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a></pre>
 <div class="block">ZKUtilOp representing deleteNodeFailSilent in ZooKeeper
  (attempt to delete node, ignore error if node doesn't exist)</div>
@@ -217,7 +217,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DeleteNodeFailSilent</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html#line.1623">DeleteNodeFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html#line.1627">DeleteNodeFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 </li>
 </ul>
 </li>
@@ -234,7 +234,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html#line.1628">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html#line.1632">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -247,7 +247,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html#line.1640">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html#line.1644">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
index e56c6ea..968620f 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1648">ZKUtil.ZKUtilOp.SetData</a>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1652">ZKUtil.ZKUtilOp.SetData</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a></pre>
 <div class="block">ZKUtilOp representing setData in ZooKeeper</div>
 </li>
@@ -254,7 +254,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>data</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1649">data</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1653">data</a></pre>
 </li>
 </ul>
 <a name="version">
@@ -263,7 +263,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>version</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1650">version</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1654">version</a></pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>SetData</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1652">SetData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1656">SetData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                 byte[]&nbsp;data)</pre>
 </li>
 </ul>
@@ -290,7 +290,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SetData</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1657">SetData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1661">SetData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                 byte[]&nbsp;data,
                 int&nbsp;version)</pre>
 </li>
@@ -309,7 +309,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>getData</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1663">getData</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1667">getData</a>()</pre>
 </li>
 </ul>
 <a name="getVersion--">
@@ -318,7 +318,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>getVersion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1667">getVersion</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1671">getVersion</a>()</pre>
 </li>
 </ul>
 <a name="equals-java.lang.Object-">
@@ -327,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1672">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1676">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -340,7 +340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilO
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1686">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html#line.1690">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
index a86c6e1..6a70b65 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1536">ZKUtil.ZKUtilOp</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1540">ZKUtil.ZKUtilOp</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Represents an action taken by ZKUtil, e.g. createAndFailSilent.
  These actions are higher-level than ZKOp actions, which represent
@@ -269,7 +269,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>path</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1537">path</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1541">path</a></pre>
 </li>
 </ul>
 </li>
@@ -286,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ZKUtilOp</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1543">ZKUtilOp</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1547">ZKUtilOp</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 </li>
 </ul>
 </li>
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1539">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1543">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -316,7 +316,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndFailSilent</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1550">createAndFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1554">createAndFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                                   byte[]&nbsp;data)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -330,7 +330,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeFailSilent</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1557">deleteNodeFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1561">deleteNodeFailSilent</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>a deleteNodeFailSilent ZKUtilOP</dd>
@@ -343,7 +343,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setData</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1564">setData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1568">setData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                       byte[]&nbsp;data)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -357,7 +357,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setData</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1571">setData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1575">setData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
                                       byte[]&nbsp;data,
                                       int&nbsp;version)</pre>
 <dl>
@@ -372,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1578">getPath</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html#line.1582">getPath</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>path to znode where the ZKOp will occur</dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
index e3c33ab..2c4c8ea 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKUtil.html
@@ -1327,7 +1327,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <li class="blockList">
 <h4>updateExistingNodeData</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.771">updateExistingNodeData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.775">updateExistingNodeData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                                       byte[]&nbsp;data,
                                                       int&nbsp;expectedVersion)
@@ -1357,7 +1357,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>setData</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.804">setData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.808">setData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                               byte[]&nbsp;data,
                               int&nbsp;expectedVersion)
@@ -1394,7 +1394,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createSetData</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.824">createSetData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.828">createSetData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                  byte[]&nbsp;data)
                           throws org.apache.zookeeper.KeeperException</pre>
@@ -1416,7 +1416,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>setData</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.849">setData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.853">setData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                            byte[]&nbsp;data)
                     throws org.apache.zookeeper.KeeperException,
@@ -1447,7 +1447,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>setData</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.854">setData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.858">setData</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                             <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.SetData.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp.SetData</a>&nbsp;setData)
                      throws org.apache.zookeeper.KeeperException,
                             org.apache.zookeeper.KeeperException.NoNodeException</pre>
@@ -1464,7 +1464,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>isSecureZooKeeper</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.865">isSecureZooKeeper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.869">isSecureZooKeeper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Returns whether or not secure authentication is enabled
  (whether <code>hbase.security.authentication</code> is set to
  <code>kerberos</code>.</div>
@@ -1476,7 +1476,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createACL</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.zookeeper.data.ACL&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.890">createACL</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.zookeeper.data.ACL&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.894">createACL</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node)</pre>
 </li>
 </ul>
@@ -1486,7 +1486,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createACL</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.zookeeper.data.ACL&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.894">createACL</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.zookeeper.data.ACL&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.898">createACL</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node,
                                                                  boolean&nbsp;isSecureZooKeeper)</pre>
 </li>
@@ -1497,7 +1497,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createEphemeralNodeAndWatch</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.962">createEphemeralNodeAndWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.966">createEphemeralNodeAndWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                                   byte[]&nbsp;data)
                                            throws org.apache.zookeeper.KeeperException</pre>
@@ -1528,7 +1528,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createNodeIfNotExistsAndWatch</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1002">createNodeIfNotExistsAndWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1006">createNodeIfNotExistsAndWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                                     byte[]&nbsp;data)
                                              throws org.apache.zookeeper.KeeperException</pre>
@@ -1562,7 +1562,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createNodeIfNotExistsNoWatch</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1038">createNodeIfNotExistsNoWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1042">createNodeIfNotExistsNoWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                                   byte[]&nbsp;data,
                                                   org.apache.zookeeper.CreateMode&nbsp;createMode)
@@ -1591,7 +1591,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndWatch</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1069">createAndWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1073">createAndWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                  byte[]&nbsp;data)
                           throws org.apache.zookeeper.KeeperException,
@@ -1622,7 +1622,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>asyncCreate</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1102">asyncCreate</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1106">asyncCreate</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                byte[]&nbsp;data,
                                org.apache.zookeeper.AsyncCallback.StringCallback&nbsp;cb,
@@ -1648,7 +1648,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndFailSilent</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1119">createAndFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1123">createAndFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode)
                                 throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Creates the specified node, iff the node does not exist.  Does not set a
@@ -1670,7 +1670,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndFailSilent</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1135">createAndFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1139">createAndFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                        byte[]&nbsp;data)
                                 throws org.apache.zookeeper.KeeperException</pre>
@@ -1694,7 +1694,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndFailSilent</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1142">createAndFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1146">createAndFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                         <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp.CreateAndFailSilent</a>&nbsp;cafs)
                                  throws org.apache.zookeeper.KeeperException</pre>
 <dl>
@@ -1709,7 +1709,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createWithParents</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1177">createWithParents</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1181">createWithParents</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode)
                               throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Creates the specified node and all parent nodes required for it to exist.
@@ -1732,7 +1732,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>createWithParents</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1195">createWithParents</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1199">createWithParents</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                      byte[]&nbsp;data)
                               throws org.apache.zookeeper.KeeperException</pre>
@@ -1758,7 +1758,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNode</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1220">deleteNode</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1224">deleteNode</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node)
                        throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Delete the specified node.  Sets no watches.  Throws all exceptions.</div>
@@ -1774,7 +1774,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNode</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1229">deleteNode</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1233">deleteNode</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node,
                                  int&nbsp;version)
                           throws org.apache.zookeeper.KeeperException</pre>
@@ -1792,7 +1792,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeFailSilent</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1250">deleteNodeFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1254">deleteNodeFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node)
                                  throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Deletes the specified node.  Fails silent if the node does not exist.</div>
@@ -1811,7 +1811,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeFailSilent</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1256">deleteNodeFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1260">deleteNodeFailSilent</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                          <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.DeleteNodeFailSilent.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp.DeleteNodeFailSilent</a>&nbsp;dnfs)
                                   throws org.apache.zookeeper.KeeperException</pre>
 <dl>
@@ -1826,7 +1826,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeRecursively</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1276">deleteNodeRecursively</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1280">deleteNodeRecursively</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node)
                                   throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Delete the specified node and all of it's children.
@@ -1847,7 +1847,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteChildrenRecursively</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1289">deleteChildrenRecursively</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1293">deleteChildrenRecursively</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;node)
                                       throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Delete all the children of the specified node but not the node itself.
@@ -1866,7 +1866,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteChildrenRecursivelyMultiOrSequential</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1324">deleteChildrenRecursivelyMultiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1328">deleteChildrenRecursivelyMultiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                               boolean&nbsp;runSequentialOnMultiFailure,
                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;pathRoots)
                                                        throws org.apache.zookeeper.KeeperException</pre>
@@ -1903,7 +1903,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNodeRecursivelyMultiOrSequential</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1372">deleteNodeRecursivelyMultiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1376">deleteNodeRecursivelyMultiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                           boolean&nbsp;runSequentialOnMultiFailure,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;pathRoots)
                                                    throws org.apache.zookeeper.KeeperException</pre>
@@ -1940,7 +1940,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>submitBatchedMultiOrSequential</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1410">submitBatchedMultiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1414">submitBatchedMultiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                    boolean&nbsp;runSequentialOnMultiFailure,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&gt;&nbsp;ops)
                                             throws org.apache.zookeeper.KeeperException</pre>
@@ -1965,7 +1965,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>partitionOps</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&gt;&gt;&nbsp;<a href="../../../../../src-h [...]
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&gt;&gt;&nbsp;<a href="../../../../../src-h [...]
                                                 int&nbsp;maxPartitionSize)</pre>
 <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>estimateSize(ZKUtilOp)</code></a>).</div>
 </li>
@@ -1976,7 +1976,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>estimateSize</h4>
-<pre>static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1455">estimateSize</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;op)</pre>
+<pre>static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1459">estimateSize</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;op)</pre>
 </li>
 </ul>
 <a name="listChildrenBFSNoWatch-org.apache.hadoop.hbase.zookeeper.ZKWatcher-java.lang.String-">
@@ -1985,7 +1985,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>listChildrenBFSNoWatch</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1472">listChildrenBFSNoWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ [...]
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1476">listChildrenBFSNoWatch</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ [...]
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode)
                                             throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">BFS Traversal of all the children under path, with the entries in the list,
@@ -2008,7 +2008,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>listChildrenBFSAndWatchThem</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1508">listChildrenBFSAndWatchThem</a>(<a href="../../../../../org/apache/hadoop/hbase/zooke [...]
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1512">listChildrenBFSAndWatchThem</a>(<a href="../../../../../org/apache/hadoop/hbase/zooke [...]
                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode)
                                                  throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">BFS Traversal of all the children under path, with the entries in the list,
@@ -2031,7 +2031,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>toZooKeeperOp</h4>
-<pre>private static&nbsp;org.apache.zookeeper.Op&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1697">toZooKeeperOp</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;org.apache.zookeeper.Op&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1701">toZooKeeperOp</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                                      <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&nbsp;op)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
 <div class="block">Convert from ZKUtilOp to ZKOp</div>
@@ -2047,7 +2047,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>multiOrSequential</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1737">multiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1741">multiOrSequential</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&gt;&nbsp;ops,
                                      boolean&nbsp;runSequentialOnMultiFailure)
                               throws org.apache.zookeeper.KeeperException</pre>
@@ -2078,7 +2078,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>processSequentially</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1776">processSequentially</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1780">processSequentially</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil.ZKUtilOp</a>&gt;&nbsp;ops)
                                  throws org.apache.zookeeper.KeeperException,
                                         org.apache.zookeeper.KeeperException.NoNodeException</pre>
@@ -2095,7 +2095,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>dump</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1797">dump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1801">dump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>String dump of everything in ZooKeeper.</dd>
@@ -2108,7 +2108,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationZnodesDump</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1870">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1874">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                                       throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Appends replication znodes to the passed StringBuilder.</div>
@@ -2127,7 +2127,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendHFileRefsZNodes</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1896">appendHFileRefsZNodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1900">appendHFileRefsZNodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hFileRefsZNode,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                                    throws org.apache.zookeeper.KeeperException</pre>
@@ -2143,7 +2143,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationZnodesDump</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1918">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1922">getReplicationZnodesDump</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw)
                                        throws org.apache.zookeeper.KeeperException</pre>
 <div class="block">Returns a string with replication znodes and position of the replication log</div>
 <dl>
@@ -2162,7 +2162,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendRSZnodes</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1924">appendRSZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1928">appendRSZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                             throws org.apache.zookeeper.KeeperException</pre>
@@ -2178,7 +2178,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendPeersZnodes</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1955">appendPeersZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1959">appendPeersZnodes</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peersZnode,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                                throws org.apache.zookeeper.KeeperException</pre>
@@ -2194,7 +2194,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>appendPeerState</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1983">appendPeerState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.1987">appendPeerState</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znodeToProcess,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)
                              throws org.apache.zookeeper.KeeperException,
@@ -2212,7 +2212,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerStats</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2019">getServerStats</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;server,
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2023">getServerStats</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;server,
                                        int&nbsp;timeout)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Gets the statistics from the given server.</div>
@@ -2233,7 +2233,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>logRetrievedMsg</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2055">logRetrievedMsg</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2059">logRetrievedMsg</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;znode,
                                     byte[]&nbsp;data,
                                     boolean&nbsp;watcherSet)</pre>
@@ -2245,7 +2245,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNameOrEmptyString</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2072">getServerNameOrEmptyString</a>(byte[]&nbsp;data)</pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2076">getServerNameOrEmptyString</a>(byte[]&nbsp;data)</pre>
 </li>
 </ul>
 <a name="waitForBaseZNode-org.apache.hadoop.conf.Configuration-">
@@ -2254,7 +2254,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForBaseZNode</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2084">waitForBaseZNode</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2088">waitForBaseZNode</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Waits for HBase installation's base (parent) znode to become available.</div>
 <dl>
@@ -2269,7 +2269,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>convert</h4>
-<pre>public static&nbsp;org.apache.zookeeper.KeeperException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2128">convert</a>(<a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a>&nbsp;e)</pre>
+<pre>public static&nbsp;org.apache.zookeeper.KeeperException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2132">convert</a>(<a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a>&nbsp;e)</pre>
 <div class="block">Convert a <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions"><code>DeserializationException</code></a> to a more palatable <code>KeeperException</code>.
  Used when can't let a <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions"><code>DeserializationException</code></a> out w/o changing public API.</div>
 <dl>
@@ -2286,7 +2286,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>logZKTree</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2138">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2142">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;root)</pre>
 <div class="block">Recursively print the current state of ZK (non-transactional)</div>
 <dl>
@@ -2301,7 +2301,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>logZKTree</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2158">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2162">logZKTree</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkw,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;root,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)
                        throws org.apache.zookeeper.KeeperException</pre>
@@ -2320,7 +2320,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>positionToByteArray</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2178">positionToByteArray</a>(long&nbsp;position)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2182">positionToByteArray</a>(long&nbsp;position)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>position</code> - the position to serialize</dd>
@@ -2336,7 +2336,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>parseWALPositionFrom</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2189">parseWALPositionFrom</a>(byte[]&nbsp;bytes)
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.html#line.2193">parseWALPositionFrom</a>(byte[]&nbsp;bytes)
                                  throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 75b9ad6..3716a84 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  justification="Intentional; to be modified in test")<a name="line.10"></a>
 <span class="sourceLineNo">011</span>public class Version {<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String version = new String("3.0.0-SNAPSHOT");<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String revision = "24961c5c34478e6e552d5a56ecd5d1a331b14316";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String revision = "e6cc5eb2f0623f02eaa3542308fc3d82fd3abd9f";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String user = "jenkins";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String date = "Fri Apr 24 14:40:10 UTC 2020";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String date = "Sat Apr 25 19:30:56 UTC 2020";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>  public static final String url = "git://jenkins-websites-he-de.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.16"></a>
 <span class="sourceLineNo">017</span>  public static final String srcChecksum = "(stdin)=";<a name="line.17"></a>
 <span class="sourceLineNo">018</span>}<a name="line.18"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
index d74e4fe0..2fb11a2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html
@@ -193,129 +193,132 @@
 <span class="sourceLineNo">185</span>  public void nodeChildrenChanged(final String path) {<a name="line.185"></a>
 <span class="sourceLineNo">186</span>    waitUntilStarted();<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    if (path.equals(aclZNode)) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        final List&lt;ZKUtil.NodeAndData&gt; nodeList =<a name="line.189"></a>
-<span class="sourceLineNo">190</span>            ZKUtil.getChildDataAndWatchForNewChildren(watcher, aclZNode);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        // preempt any existing nodeChildrenChanged event processing<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        if (childrenChangedFuture != null &amp;&amp; !childrenChangedFuture.isDone()) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          boolean cancelled = childrenChangedFuture.cancel(true);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          if (!cancelled) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            // task may have finished between our check and attempted cancel, this is fine.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>            if (! childrenChangedFuture.isDone()) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>              LOG.warn("Could not cancel processing node children changed event, " +<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                  "please file a JIRA and attach logs if possible.");<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        childrenChangedFuture = asyncProcessNodeUpdate(() -&gt; refreshNodes(nodeList));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      } catch (KeeperException ke) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        LOG.error("Error reading data from zookeeper for path "+path, ke);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        watcher.abort("ZooKeeper error get node children for path "+path, ke);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private Future&lt;?&gt; asyncProcessNodeUpdate(Runnable runnable) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (!executor.isShutdown()) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        return executor.submit(runnable);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      } catch (RejectedExecutionException e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (executor.isShutdown()) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.warn("aclZNode changed after ZKPermissionWatcher was shutdown");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        } else {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          throw e;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return null; // No task launched so there will be nothing to cancel later<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  private void refreshNodes(List&lt;ZKUtil.NodeAndData&gt; nodes) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (ZKUtil.NodeAndData n : nodes) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      if (Thread.interrupted()) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        // Use Thread.interrupted so that we clear interrupt status<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        break;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      if (n.isEmpty()) continue;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      String path = n.getNode();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      String entry = (ZKUtil.getNodeName(path));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        refreshAuthManager(entry, n.getData());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      } catch (IOException ioe) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        LOG.error("Failed parsing permissions for table '" + entry +<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            "' from zk", ioe);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  private void refreshAuthManager(String entry, byte[] nodeData) throws IOException {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    if (LOG.isDebugEnabled()) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      LOG.debug("Updating permissions cache from {} with data {}", entry,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          Bytes.toStringBinary(nodeData));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (PermissionStorage.isNamespaceEntry(entry)) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      authManager.refreshNamespaceCacheFromWritable(PermissionStorage.fromNamespaceEntry(entry),<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        nodeData);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      authManager.refreshTableCacheFromWritable(TableName.valueOf(entry), nodeData);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /***<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Write a table's access controls to the permissions mirror in zookeeper<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @param entry<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * @param permsData<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public void writeToZookeeper(byte[] entry, byte[] permsData) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    String entryName = Bytes.toString(entry);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    zkNode = ZNodePaths.joinZNode(zkNode, entryName);<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>    try {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      ZKUtil.createWithParents(watcher, zkNode);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      ZKUtil.updateExistingNodeData(watcher, zkNode, permsData, -1);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    } catch (KeeperException e) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      LOG.error("Failed updating permissions for entry '" +<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          entryName + "'", e);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      watcher.abort("Failed writing node "+zkNode+" to zookeeper", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  /***<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * Delete the acl notify node of table<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @param tableName<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public void deleteTableACLNode(final TableName tableName) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    zkNode = ZNodePaths.joinZNode(zkNode, tableName.getNameAsString());<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      ZKUtil.deleteNode(watcher, zkNode);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    } catch (KeeperException.NoNodeException e) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      LOG.warn("No acl notify node of table '" + tableName + "'");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    } catch (KeeperException e) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      LOG.error("Failed deleting acl node of table '" + tableName + "'", e);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      watcher.abort("Failed deleting node " + zkNode, e);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /***<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Delete the acl notify node of namespace<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   */<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public void deleteNamespaceACLNode(final String namespace) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    zkNode = ZNodePaths.joinZNode(zkNode, PermissionStorage.NAMESPACE_PREFIX + namespace);<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      ZKUtil.deleteNode(watcher, zkNode);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    } catch (KeeperException.NoNodeException e) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      LOG.warn("No acl notify node of namespace '" + namespace + "'");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    } catch (KeeperException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      LOG.error("Failed deleting acl node of namespace '" + namespace + "'", e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      watcher.abort("Failed deleting node " + zkNode, e);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>}<a name="line.310"></a>
+<span class="sourceLineNo">188</span>      // preempt any existing nodeChildrenChanged event processing<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      if (childrenChangedFuture != null &amp;&amp; !childrenChangedFuture.isDone()) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        boolean cancelled = childrenChangedFuture.cancel(true);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        if (!cancelled) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          // task may have finished between our check and attempted cancel, this is fine.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          if (!childrenChangedFuture.isDone()) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>            LOG.warn("Could not cancel processing node children changed event, "<a name="line.194"></a>
+<span class="sourceLineNo">195</span>              + "please file a JIRA and attach logs if possible.");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      childrenChangedFuture = asyncProcessNodeUpdate(() -&gt; {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        try {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          final List&lt;ZKUtil.NodeAndData&gt; nodeList =<a name="line.201"></a>
+<span class="sourceLineNo">202</span>            ZKUtil.getChildDataAndWatchForNewChildren(watcher, aclZNode);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          refreshNodes(nodeList);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        } catch (KeeperException ke) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          String msg = "ZooKeeper error while reading node children data for path " + path;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          LOG.error(msg, ke);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          watcher.abort(msg, ke);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      });<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private Future&lt;?&gt; asyncProcessNodeUpdate(Runnable runnable) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (!executor.isShutdown()) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      try {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        return executor.submit(runnable);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      } catch (RejectedExecutionException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (executor.isShutdown()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.warn("aclZNode changed after ZKPermissionWatcher was shutdown");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        } else {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          throw e;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return null; // No task launched so there will be nothing to cancel later<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  private void refreshNodes(List&lt;ZKUtil.NodeAndData&gt; nodes) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    for (ZKUtil.NodeAndData n : nodes) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (Thread.interrupted()) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        // Use Thread.interrupted so that we clear interrupt status<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        break;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      if (n.isEmpty()) continue;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      String path = n.getNode();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      String entry = (ZKUtil.getNodeName(path));<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      try {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        refreshAuthManager(entry, n.getData());<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      } catch (IOException ioe) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        LOG.error("Failed parsing permissions for table '" + entry +<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            "' from zk", ioe);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  private void refreshAuthManager(String entry, byte[] nodeData) throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (LOG.isDebugEnabled()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      LOG.debug("Updating permissions cache from {} with data {}", entry,<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          Bytes.toStringBinary(nodeData));<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    if (PermissionStorage.isNamespaceEntry(entry)) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      authManager.refreshNamespaceCacheFromWritable(PermissionStorage.fromNamespaceEntry(entry),<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        nodeData);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    } else {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      authManager.refreshTableCacheFromWritable(TableName.valueOf(entry), nodeData);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /***<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Write a table's access controls to the permissions mirror in zookeeper<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param entry<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @param permsData<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  public void writeToZookeeper(byte[] entry, byte[] permsData) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    String entryName = Bytes.toString(entry);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    zkNode = ZNodePaths.joinZNode(zkNode, entryName);<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>    try {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      ZKUtil.createWithParents(watcher, zkNode);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ZKUtil.updateExistingNodeData(watcher, zkNode, permsData, -1);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    } catch (KeeperException e) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      LOG.error("Failed updating permissions for entry '" +<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          entryName + "'", e);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      watcher.abort("Failed writing node "+zkNode+" to zookeeper", e);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  /***<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * Delete the acl notify node of table<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * @param tableName<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public void deleteTableACLNode(final TableName tableName) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    zkNode = ZNodePaths.joinZNode(zkNode, tableName.getNameAsString());<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      ZKUtil.deleteNode(watcher, zkNode);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    } catch (KeeperException.NoNodeException e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      LOG.warn("No acl notify node of table '" + tableName + "'");<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    } catch (KeeperException e) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      LOG.error("Failed deleting acl node of table '" + tableName + "'", e);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      watcher.abort("Failed deleting node " + zkNode, e);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /***<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Delete the acl notify node of namespace<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  public void deleteNamespaceACLNode(final String namespace) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    String zkNode = ZNodePaths.joinZNode(watcher.getZNodePaths().baseZNode, ACL_NODE);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    zkNode = ZNodePaths.joinZNode(zkNode, PermissionStorage.NAMESPACE_PREFIX + namespace);<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>    try {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      ZKUtil.deleteNode(watcher, zkNode);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    } catch (KeeperException.NoNodeException e) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      LOG.warn("No acl notify node of namespace '" + namespace + "'");<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    } catch (KeeperException e) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      LOG.error("Failed deleting acl node of namespace '" + namespace + "'", e);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      watcher.abort("Failed deleting node " + zkNode, e);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>}<a name="line.313"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
index 0bef1b6..00ebc53 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.JaasConfiguration.html
@@ -750,1474 +750,1478 @@
 <span class="sourceLineNo">742</span>    if (nodes != null) {<a name="line.742"></a>
 <span class="sourceLineNo">743</span>      List&lt;NodeAndData&gt; newNodes = new ArrayList&lt;&gt;();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      for (String node : nodes) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        String nodePath = ZNodePaths.joinZNode(baseNode, node);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        newNodes.add(new NodeAndData(nodePath, data));<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      return newNodes;<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    return null;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /**<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   * Update the data of an existing node with the expected version to have the<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * specified data.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   *<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * Throws an exception if there is a version mismatch or some other problem.<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Sets no watches under any conditions.<a name="line.760"></a>
+<span class="sourceLineNo">745</span>        if (Thread.interrupted()) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>          // Partial data should not be processed. Cancel processing by sending empty list.<a name="line.746"></a>
+<span class="sourceLineNo">747</span>          return Collections.emptyList();<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        }<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        String nodePath = ZNodePaths.joinZNode(baseNode, node);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>        byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath);<a name="line.750"></a>
+<span class="sourceLineNo">751</span>        newNodes.add(new NodeAndData(nodePath, data));<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      return newNodes;<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return null;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Update the data of an existing node with the expected version to have the<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * specified data.<a name="line.760"></a>
 <span class="sourceLineNo">761</span>   *<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param zkw zk reference<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param znode the path to the ZNode<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @param data the data to store in ZooKeeper<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * @param expectedVersion the expected version<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @throws KeeperException.BadVersionException if version mismatch<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * @deprecated Unused<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  @Deprecated<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  public static void updateExistingNodeData(ZKWatcher zkw, String znode, byte[] data,<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      int expectedVersion) throws KeeperException {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    try {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    } catch(InterruptedException ie) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      zkw.interruptedException(ie);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  //<a name="line.780"></a>
-<span class="sourceLineNo">781</span>  // Data setting<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  //<a name="line.782"></a>
+<span class="sourceLineNo">762</span>   * Throws an exception if there is a version mismatch or some other problem.<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Sets no watches under any conditions.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @param zkw zk reference<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param znode the path to the ZNode<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @param data the data to store in ZooKeeper<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * @param expectedVersion the expected version<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   * @throws KeeperException.BadVersionException if version mismatch<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @deprecated Unused<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   */<a name="line.773"></a>
+<span class="sourceLineNo">774</span>  @Deprecated<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  public static void updateExistingNodeData(ZKWatcher zkw, String znode, byte[] data,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      int expectedVersion) throws KeeperException {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    try {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    } catch(InterruptedException ie) {<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      zkw.interruptedException(ie);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
 <span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  /**<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * Sets the data of the existing znode to be the specified data.  Ensures that<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * the current data has the specified expected version.<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   *<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   *<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * &lt;p&gt;If their is a version mismatch, method returns null.<a name="line.790"></a>
+<span class="sourceLineNo">784</span>  //<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  // Data setting<a name="line.785"></a>
+<span class="sourceLineNo">786</span>  //<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span>  /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span>   * Sets the data of the existing znode to be the specified data.  Ensures that<a name="line.789"></a>
+<span class="sourceLineNo">790</span>   * the current data has the specified expected version.<a name="line.790"></a>
 <span class="sourceLineNo">791</span>   *<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * node.<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   *<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   *<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * @param zkw zk reference<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @param znode path of node<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param data data to set for node<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * @param expectedVersion version expected when setting data<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @return true if data set, false if version mismatch<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.804"></a>
-<span class="sourceLineNo">805</span>                                byte [] data, int expectedVersion)<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    try {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    } catch (InterruptedException e) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>      zkw.interruptedException(e);<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      return false;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
-<span class="sourceLineNo">816</span>   * Set data into node creating node if it doesn't yet exist.<a name="line.816"></a>
-<span class="sourceLineNo">817</span>   * Does not set watch.<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   *<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * @param zkw zk reference<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * @param znode path of node<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * @param data data to set for node<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   */<a name="line.823"></a>
-<span class="sourceLineNo">824</span>  public static void createSetData(final ZKWatcher zkw, final String znode, final byte [] data)<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          throws KeeperException {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    if (checkExists(zkw, znode) == -1) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      ZKUtil.createWithParents(zkw, znode, data);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    } else {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      ZKUtil.setData(zkw, znode, data);<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Sets the data of the existing znode to be the specified data.  The node<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * must exist but no checks are done on the existing data or version.<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   *<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   * node.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   *<a name="line.841"></a>
-<span class="sourceLineNo">842</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>   *<a name="line.843"></a>
-<span class="sourceLineNo">844</span>   * @param zkw zk reference<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * @param znode path of node<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * @param data data to set for node<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   */<a name="line.848"></a>
-<span class="sourceLineNo">849</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.856"></a>
-<span class="sourceLineNo">857</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.857"></a>
-<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
-<span class="sourceLineNo">859</span><a name="line.859"></a>
-<span class="sourceLineNo">860</span>  /**<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * Returns whether or not secure authentication is enabled<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * (whether &lt;code&gt;hbase.security.authentication&lt;/code&gt; is set to<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * &lt;code&gt;kerberos&lt;/code&gt;.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public static boolean isSecureZooKeeper(Configuration conf) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    // Detection for embedded HBase client with jaas configuration<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // defined for third party programs.<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    try {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      javax.security.auth.login.Configuration testConfig =<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          javax.security.auth.login.Configuration.getConfiguration();<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      if (testConfig.getAppConfigurationEntry("Client") == null<a name="line.871"></a>
-<span class="sourceLineNo">872</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.872"></a>
-<span class="sourceLineNo">873</span>            JaasConfiguration.CLIENT_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.873"></a>
-<span class="sourceLineNo">874</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.874"></a>
-<span class="sourceLineNo">875</span>              JaasConfiguration.SERVER_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.875"></a>
-<span class="sourceLineNo">876</span>          &amp;&amp; conf.get(HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL) == null<a name="line.876"></a>
-<span class="sourceLineNo">877</span>          &amp;&amp; conf.get(HConstants.ZK_SERVER_KERBEROS_PRINCIPAL) == null) {<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>        return false;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      }<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    } catch(Exception e) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // No Jaas configuration defined.<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      return false;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>    // Master &amp; RSs uses hbase.zookeeper.client.*<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return "kerberos".equalsIgnoreCase(conf.get("hbase.security.authentication"));<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
+<span class="sourceLineNo">792</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   *<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   * &lt;p&gt;If their is a version mismatch, method returns null.<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   *<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * node.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   *<a name="line.798"></a>
+<span class="sourceLineNo">799</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.799"></a>
+<span class="sourceLineNo">800</span>   *<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * @param zkw zk reference<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param znode path of node<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param data data to set for node<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param expectedVersion version expected when setting data<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @return true if data set, false if version mismatch<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   */<a name="line.807"></a>
+<span class="sourceLineNo">808</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.808"></a>
+<span class="sourceLineNo">809</span>                                byte [] data, int expectedVersion)<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    try {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    } catch (InterruptedException e) {<a name="line.813"></a>
+<span class="sourceLineNo">814</span>      zkw.interruptedException(e);<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      return false;<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
+<span class="sourceLineNo">817</span>  }<a name="line.817"></a>
+<span class="sourceLineNo">818</span><a name="line.818"></a>
+<span class="sourceLineNo">819</span>  /**<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   * Set data into node creating node if it doesn't yet exist.<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * Does not set watch.<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   *<a name="line.822"></a>
+<span class="sourceLineNo">823</span>   * @param zkw zk reference<a name="line.823"></a>
+<span class="sourceLineNo">824</span>   * @param znode path of node<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * @param data data to set for node<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
+<span class="sourceLineNo">828</span>  public static void createSetData(final ZKWatcher zkw, final String znode, final byte [] data)<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          throws KeeperException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    if (checkExists(zkw, znode) == -1) {<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      ZKUtil.createWithParents(zkw, znode, data);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    } else {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      ZKUtil.setData(zkw, znode, data);<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
+<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>  /**<a name="line.837"></a>
+<span class="sourceLineNo">838</span>   * Sets the data of the existing znode to be the specified data.  The node<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * must exist but no checks are done on the existing data or version.<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   *<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>   *<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   * node.<a name="line.844"></a>
+<span class="sourceLineNo">845</span>   *<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   *<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @param zkw zk reference<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   * @param znode path of node<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * @param data data to set for node<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   */<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.859"></a>
+<span class="sourceLineNo">860</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * Returns whether or not secure authentication is enabled<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * (whether &lt;code&gt;hbase.security.authentication&lt;/code&gt; is set to<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * &lt;code&gt;kerberos&lt;/code&gt;.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   */<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  public static boolean isSecureZooKeeper(Configuration conf) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>    // Detection for embedded HBase client with jaas configuration<a name="line.870"></a>
+<span class="sourceLineNo">871</span>    // defined for third party programs.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>    try {<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      javax.security.auth.login.Configuration testConfig =<a name="line.873"></a>
+<span class="sourceLineNo">874</span>          javax.security.auth.login.Configuration.getConfiguration();<a name="line.874"></a>
+<span class="sourceLineNo">875</span>      if (testConfig.getAppConfigurationEntry("Client") == null<a name="line.875"></a>
+<span class="sourceLineNo">876</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.876"></a>
+<span class="sourceLineNo">877</span>            JaasConfiguration.CLIENT_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.877"></a>
+<span class="sourceLineNo">878</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.878"></a>
+<span class="sourceLineNo">879</span>              JaasConfiguration.SERVER_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.879"></a>
+<span class="sourceLineNo">880</span>          &amp;&amp; conf.get(HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL) == null<a name="line.880"></a>
+<span class="sourceLineNo">881</span>          &amp;&amp; conf.get(HConstants.ZK_SERVER_KERBEROS_PRINCIPAL) == null) {<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>        return false;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    } catch(Exception e) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      // No Jaas configuration defined.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>      return false;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
 <span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  private static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    return createACL(zkw, node, isSecureZooKeeper(zkw.getConfiguration()));<a name="line.891"></a>
+<span class="sourceLineNo">890</span>    // Master &amp; RSs uses hbase.zookeeper.client.*<a name="line.890"></a>
+<span class="sourceLineNo">891</span>    return "kerberos".equalsIgnoreCase(conf.get("hbase.security.authentication"));<a name="line.891"></a>
 <span class="sourceLineNo">892</span>  }<a name="line.892"></a>
 <span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.894"></a>
-<span class="sourceLineNo">895</span>                                         boolean isSecureZooKeeper) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    if (isSecureZooKeeper) {<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      ArrayList&lt;ACL&gt; acls = new ArrayList&lt;&gt;();<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // add permission to hbase supper user<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      String[] superUsers = zkw.getConfiguration().getStrings(Superusers.SUPERUSER_CONF_KEY);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      String hbaseUser = null;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        hbaseUser = UserGroupInformation.getCurrentUser().getShortUserName();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      } catch (IOException e) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        LOG.debug("Could not acquire current User.", e);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      if (superUsers != null) {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>        List&lt;String&gt; groups = new ArrayList&lt;&gt;();<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        for (String user : superUsers) {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>          if (AuthUtil.isGroupPrincipal(user)) {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>            // TODO: Set node ACL for groups when ZK supports this feature<a name="line.913"></a>
-<span class="sourceLineNo">914</span>            groups.add(user);<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          } else {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            if(!user.equals(hbaseUser)) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>              acls.add(new ACL(Perms.ALL, new Id("sasl", user)));<a name="line.917"></a>
-<span class="sourceLineNo">918</span>            }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>          }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>        }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        if (!groups.isEmpty()) {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>          LOG.warn("Znode ACL setting for group {} is skipped, ZooKeeper doesn't support this " +<a name="line.922"></a>
-<span class="sourceLineNo">923</span>            "feature presently.", groups);<a name="line.923"></a>
+<span class="sourceLineNo">894</span>  private static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    return createACL(zkw, node, isSecureZooKeeper(zkw.getConfiguration()));<a name="line.895"></a>
+<span class="sourceLineNo">896</span>  }<a name="line.896"></a>
+<span class="sourceLineNo">897</span><a name="line.897"></a>
+<span class="sourceLineNo">898</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.898"></a>
+<span class="sourceLineNo">899</span>                                         boolean isSecureZooKeeper) {<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    }<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    if (isSecureZooKeeper) {<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      ArrayList&lt;ACL&gt; acls = new ArrayList&lt;&gt;();<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      // add permission to hbase supper user<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      String[] superUsers = zkw.getConfiguration().getStrings(Superusers.SUPERUSER_CONF_KEY);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>      String hbaseUser = null;<a name="line.907"></a>
+<span class="sourceLineNo">908</span>      try {<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        hbaseUser = UserGroupInformation.getCurrentUser().getShortUserName();<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      } catch (IOException e) {<a name="line.910"></a>
+<span class="sourceLineNo">911</span>        LOG.debug("Could not acquire current User.", e);<a name="line.911"></a>
+<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      if (superUsers != null) {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>        List&lt;String&gt; groups = new ArrayList&lt;&gt;();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>        for (String user : superUsers) {<a name="line.915"></a>
+<span class="sourceLineNo">916</span>          if (AuthUtil.isGroupPrincipal(user)) {<a name="line.916"></a>
+<span class="sourceLineNo">917</span>            // TODO: Set node ACL for groups when ZK supports this feature<a name="line.917"></a>
+<span class="sourceLineNo">918</span>            groups.add(user);<a name="line.918"></a>
+<span class="sourceLineNo">919</span>          } else {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>            if(!user.equals(hbaseUser)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>              acls.add(new ACL(Perms.ALL, new Id("sasl", user)));<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>        }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      }<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      // Certain znodes are accessed directly by the client,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      // so they must be readable by non-authenticated clients<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.929"></a>
-<span class="sourceLineNo">930</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      } else {<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      }<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      return acls;<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    } else {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  //<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  // Node creation<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  //<a name="line.942"></a>
+<span class="sourceLineNo">925</span>        if (!groups.isEmpty()) {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>          LOG.warn("Znode ACL setting for group {} is skipped, ZooKeeper doesn't support this " +<a name="line.926"></a>
+<span class="sourceLineNo">927</span>            "feature presently.", groups);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      }<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      // Certain znodes are accessed directly by the client,<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      // so they must be readable by non-authenticated clients<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.933"></a>
+<span class="sourceLineNo">934</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.934"></a>
+<span class="sourceLineNo">935</span>      } else {<a name="line.935"></a>
+<span class="sourceLineNo">936</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      }<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      return acls;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    } else {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    }<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
 <span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  /**<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   *<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * Set the specified znode to be an ephemeral node carrying the specified<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * data.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   *<a name="line.948"></a>
-<span class="sourceLineNo">949</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>   *<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   * If the node is not created successfully because it already exists, this<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * method will also set a watcher on the node.<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   *<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.954"></a>
-<span class="sourceLineNo">955</span>   *<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * @param zkw zk reference<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   * @param znode path of node<a name="line.957"></a>
-<span class="sourceLineNo">958</span>   * @param data data of node<a name="line.958"></a>
-<span class="sourceLineNo">959</span>   * @return true if node created, false if not, watch set in both cases<a name="line.959"></a>
-<span class="sourceLineNo">960</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.960"></a>
-<span class="sourceLineNo">961</span>   */<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      String znode, byte [] data)<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    throws KeeperException {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    boolean ret = true;<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    try {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.967"></a>
-<span class="sourceLineNo">968</span>          CreateMode.EPHEMERAL);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.969"></a>
-<span class="sourceLineNo">970</span>      ret = false;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    } catch (InterruptedException e) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      LOG.info("Interrupted", e);<a name="line.972"></a>
-<span class="sourceLineNo">973</span>      Thread.currentThread().interrupt();<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    }<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    if(!watchAndCheckExists(zkw, znode)) {<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      // It did exist but now it doesn't, try again<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      return createEphemeralNodeAndWatch(zkw, znode, data);<a name="line.977"></a>
+<span class="sourceLineNo">944</span>  //<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  // Node creation<a name="line.945"></a>
+<span class="sourceLineNo">946</span>  //<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span>  /**<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   *<a name="line.949"></a>
+<span class="sourceLineNo">950</span>   * Set the specified znode to be an ephemeral node carrying the specified<a name="line.950"></a>
+<span class="sourceLineNo">951</span>   * data.<a name="line.951"></a>
+<span class="sourceLineNo">952</span>   *<a name="line.952"></a>
+<span class="sourceLineNo">953</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.953"></a>
+<span class="sourceLineNo">954</span>   *<a name="line.954"></a>
+<span class="sourceLineNo">955</span>   * If the node is not created successfully because it already exists, this<a name="line.955"></a>
+<span class="sourceLineNo">956</span>   * method will also set a watcher on the node.<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   *<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.958"></a>
+<span class="sourceLineNo">959</span>   *<a name="line.959"></a>
+<span class="sourceLineNo">960</span>   * @param zkw zk reference<a name="line.960"></a>
+<span class="sourceLineNo">961</span>   * @param znode path of node<a name="line.961"></a>
+<span class="sourceLineNo">962</span>   * @param data data of node<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * @return true if node created, false if not, watch set in both cases<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   */<a name="line.965"></a>
+<span class="sourceLineNo">966</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      String znode, byte [] data)<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    throws KeeperException {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    boolean ret = true;<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    try {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.971"></a>
+<span class="sourceLineNo">972</span>          CreateMode.EPHEMERAL);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      ret = false;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    } catch (InterruptedException e) {<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      LOG.info("Interrupted", e);<a name="line.976"></a>
+<span class="sourceLineNo">977</span>      Thread.currentThread().interrupt();<a name="line.977"></a>
 <span class="sourceLineNo">978</span>    }<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    return ret;<a name="line.979"></a>
-<span class="sourceLineNo">980</span>  }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span>  /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * Creates the specified znode to be a persistent node carrying the specified<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   * data.<a name="line.984"></a>
-<span class="sourceLineNo">985</span>   *<a name="line.985"></a>
-<span class="sourceLineNo">986</span>   * Returns true if the node was successfully created, false if the node<a name="line.986"></a>
-<span class="sourceLineNo">987</span>   * already existed.<a name="line.987"></a>
-<span class="sourceLineNo">988</span>   *<a name="line.988"></a>
-<span class="sourceLineNo">989</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>   *<a name="line.990"></a>
-<span class="sourceLineNo">991</span>   * If the node is not created successfully because it already exists, this<a name="line.991"></a>
-<span class="sourceLineNo">992</span>   * method will also set a watcher on the node but return false.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   *<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   *<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   * @param zkw zk reference<a name="line.996"></a>
-<span class="sourceLineNo">997</span>   * @param znode path of node<a name="line.997"></a>
-<span class="sourceLineNo">998</span>   * @param data data of node<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   * @return true if node created, false if not, watch set in both cases<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   */<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    throws KeeperException {<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    boolean ret = true;<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    try {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>          CreateMode.PERSISTENT);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      ret = false;<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    } catch (InterruptedException e) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      zkw.interruptedException(e);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      return false;<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>    }<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    try {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    } catch (InterruptedException e) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      zkw.interruptedException(e);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      return false;<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    return ret;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  }<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  /**<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   * Creates the specified znode with the specified data but does not watch it.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>   *<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * Returns the znode of the newly created node<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   *<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.1029"></a>
+<span class="sourceLineNo">979</span>    if(!watchAndCheckExists(zkw, znode)) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      // It did exist but now it doesn't, try again<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      return createEphemeralNodeAndWatch(zkw, znode, data);<a name="line.981"></a>
+<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    return ret;<a name="line.983"></a>
+<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
+<span class="sourceLineNo">985</span><a name="line.985"></a>
+<span class="sourceLineNo">986</span>  /**<a name="line.986"></a>
+<span class="sourceLineNo">987</span>   * Creates the specified znode to be a persistent node carrying the specified<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   * data.<a name="line.988"></a>
+<span class="sourceLineNo">989</span>   *<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   * Returns true if the node was successfully created, false if the node<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   * already existed.<a name="line.991"></a>
+<span class="sourceLineNo">992</span>   *<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   *<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * If the node is not created successfully because it already exists, this<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * method will also set a watcher on the node but return false.<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   *<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   *<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * @param zkw zk reference<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * @param znode path of node<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * @param data data of node<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   * @return true if node created, false if not, watch set in both cases<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   */<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    throws KeeperException {<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    boolean ret = true;<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>    try {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>          CreateMode.PERSISTENT);<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      ret = false;<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>    } catch (InterruptedException e) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      zkw.interruptedException(e);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      return false;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    try {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    } catch (InterruptedException e) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>      zkw.interruptedException(e);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      return false;<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    return ret;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  }<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span><a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>  /**<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * Creates the specified znode with the specified data but does not watch it.<a name="line.1029"></a>
 <span class="sourceLineNo">1030</span>   *<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>   * @param zkw zk reference<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>   * @param znode path of node<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>   * @param data data of node<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   * @param createMode specifying whether the node to be created is ephemeral and/or sequential<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>   * @return true name of the newly created znode or null<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   */<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  public static String createNodeIfNotExistsNoWatch(ZKWatcher zkw, String znode, byte[] data,<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      CreateMode createMode) throws KeeperException {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    String createdZNode = null;<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    try {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      createdZNode = zkw.getRecoverableZooKeeper().create(znode, data,<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>          createACL(zkw, znode), createMode);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      return znode;<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    } catch (InterruptedException e) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      zkw.interruptedException(e);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>      return null;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    return createdZNode;<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>  }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>  /**<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   * Creates the specified node with the specified data and watches it.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>   *<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>   *<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1058"></a>
+<span class="sourceLineNo">1031</span>   * Returns the znode of the newly created node<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   *<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>   *<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>   * @param zkw zk reference<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>   * @param znode path of node<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>   * @param data data of node<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>   * @param createMode specifying whether the node to be created is ephemeral and/or sequential<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   * @return true name of the newly created znode or null<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   */<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>  public static String createNodeIfNotExistsNoWatch(ZKWatcher zkw, String znode, byte[] data,<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      CreateMode createMode) throws KeeperException {<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    String createdZNode = null;<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    try {<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      createdZNode = zkw.getRecoverableZooKeeper().create(znode, data,<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          createACL(zkw, znode), createMode);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>      return znode;<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    } catch (InterruptedException e) {<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>      zkw.interruptedException(e);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>      return null;<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    return createdZNode;<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  }<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>  /**<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>   * Creates the specified node with the specified data and watches it.<a name="line.1058"></a>
 <span class="sourceLineNo">1059</span>   *<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * &lt;p&gt;Returns the version number of the created node if successful.<a name="line.1060"></a>
+<span class="sourceLineNo">1060</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1060"></a>
 <span class="sourceLineNo">1061</span>   *<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   * @param zkw zk reference<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   * @param znode path of node to create<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   * @param data data of node to create<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * @return version of node created<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>   * @throws KeeperException.NodeExistsException if node already exists<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>   */<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      String znode, byte [] data)<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    try {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>          CreateMode.PERSISTENT);<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      if (stat == null){<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>        // Likely a race condition. Someone deleted the znode.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>        throw KeeperException.create(KeeperException.Code.SYSTEMERROR,<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>            "ZK.exists returned null (i.e.: znode does not exist) for znode=" + znode);<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>      }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>      return stat.getVersion();<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    } catch (InterruptedException e) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      zkw.interruptedException(e);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      return -1;<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>  }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  /**<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>   * Async creates the specified node with the specified data.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>   *<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>   *<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1094"></a>
+<span class="sourceLineNo">1062</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   *<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>   * &lt;p&gt;Returns the version number of the created node if successful.<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>   *<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>   * @param zkw zk reference<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   * @param znode path of node to create<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   * @param data data of node to create<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>   * @return version of node created<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>   * @throws KeeperException.NodeExistsException if node already exists<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>   */<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      String znode, byte [] data)<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    try {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>          CreateMode.PERSISTENT);<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      if (stat == null){<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>        // Likely a race condition. Someone deleted the znode.<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>        throw KeeperException.create(KeeperException.Code.SYSTEMERROR,<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>            "ZK.exists returned null (i.e.: znode does not exist) for znode=" + znode);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span><a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      return stat.getVersion();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    } catch (InterruptedException e) {<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      zkw.interruptedException(e);<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      return -1;<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>  }<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span><a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>  /**<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>   * Async creates the specified node with the specified data.<a name="line.1094"></a>
 <span class="sourceLineNo">1095</span>   *<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>   * @param zkw zk reference<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   * @param znode path of node to create<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>   * @param data data of node to create<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   * @param cb the callback to use for the creation<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   * @param ctx the context to use for the creation<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>   */<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static void asyncCreate(ZKWatcher zkw,<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      String znode, byte [] data, final AsyncCallback.StringCallback cb,<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      final Object ctx) {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    zkw.getRecoverableZooKeeper().getZooKeeper().create(znode, data,<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        createACL(zkw, znode), CreateMode.PERSISTENT, cb, ctx);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  }<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span><a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>  /**<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>   * Creates the specified node, iff the node does not exist.  Does not set a<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>   * watch and fails silently if the node already exists.<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>   *<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>   * The node created is persistent and open access.<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>   *<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>   * @param zkw zk reference<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>   * @param znode path of node<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>   */<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      String znode) throws KeeperException {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    createAndFailSilent(zkw, znode, new byte[0]);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>  }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span><a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>  /**<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>   * Creates the specified node containing specified data, iff the node does not exist.  Does<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   * not set a watch and fails silently if the node already exists.<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>   *<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>   * The node created is persistent and open access.<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>   *<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>   * @param zkw zk reference<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   * @param znode path of node<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   * @param data a byte array data to store in the znode<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>   */<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      String znode, byte[] data)<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    throws KeeperException {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    createAndFailSilent(zkw,<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    throws KeeperException {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    String znode = create.getPath();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    try {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      RecoverableZooKeeper zk = zkw.getRecoverableZooKeeper();<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      if (zk.exists(znode, false) == null) {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        zk.create(znode, create.getData(), create.getAcl(), CreateMode.fromFlag(create.getFlags()));<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    } catch(KeeperException.NoAuthException nee){<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      try {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>        if (null == zkw.getRecoverableZooKeeper().exists(znode, false)) {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>          // If we failed to create the file and it does not already exist.<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>          throw(nee);<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>        }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      } catch (InterruptedException ie) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        zkw.interruptedException(ie);<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    } catch(InterruptedException ie) {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      zkw.interruptedException(ie);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>  }<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span><a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  /**<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>   * Creates the specified node and all parent nodes required for it to exist.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>   *<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>   *<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>   * The nodes created are persistent and open access.<a name="line.1171"></a>
+<span class="sourceLineNo">1096</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>   *<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>   *<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>   * @param zkw zk reference<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>   * @param znode path of node to create<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>   * @param data data of node to create<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>   * @param cb the callback to use for the creation<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>   * @param ctx the context to use for the creation<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>   */<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>  public static void asyncCreate(ZKWatcher zkw,<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      String znode, byte [] data, final AsyncCallback.StringCallback cb,<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      final Object ctx) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    zkw.getRecoverableZooKeeper().getZooKeeper().create(znode, data,<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        createACL(zkw, znode), CreateMode.PERSISTENT, cb, ctx);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  }<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span><a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>  /**<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>   * Creates the specified node, iff the node does not exist.  Does not set a<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>   * watch and fails silently if the node already exists.<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>   *<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>   * The node created is persistent and open access.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>   *<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>   * @param zkw zk reference<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>   * @param znode path of node<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      String znode) throws KeeperException {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    createAndFailSilent(zkw, znode, new byte[0]);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>  /**<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>   * Creates the specified node containing specified data, iff the node does not exist.  Does<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>   * not set a watch and fails silently if the node already exists.<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>   *<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>   * The node created is persistent and open access.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>   *<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>   * @param zkw zk reference<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>   * @param znode path of node<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>   * @param data a byte array data to store in the znode<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   */<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      String znode, byte[] data)<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    createAndFailSilent(zkw,<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>  }<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span><a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    throws KeeperException {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    String znode = create.getPath();<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    try {<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      RecoverableZooKeeper zk = zkw.getRecoverableZooKeeper();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      if (zk.exists(znode, false) == null) {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>        zk.create(znode, create.getData(), create.getAcl(), CreateMode.fromFlag(create.getFlags()));<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    } catch(KeeperException.NoAuthException nee){<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      try {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>        if (null == zkw.getRecoverableZooKeeper().exists(znode, false)) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>          // If we failed to create the file and it does not already exist.<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>          throw(nee);<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>        }<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      } catch (InterruptedException ie) {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>        zkw.interruptedException(ie);<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      }<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    } catch(InterruptedException ie) {<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      zkw.interruptedException(ie);<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>  }<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span><a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>  /**<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   * Creates the specified node and all parent nodes required for it to exist.<a name="line.1171"></a>
 <span class="sourceLineNo">1172</span>   *<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>   * @param zkw zk reference<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>   * @param znode path of node<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>   */<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    throws KeeperException {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  }<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>  /**<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>   * Creates the specified node and all parent nodes required for it to exist.  The creation of<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>   * parent znodes is not atomic with the leafe znode creation but the data is written atomically<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>   * when the leaf node is created.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>   *<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>   *<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>   * The nodes created are persistent and open access.<a name="line.1189"></a>
+<span class="sourceLineNo">1173</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   *<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   * The nodes created are persistent and open access.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   *<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   * @param zkw zk reference<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   * @param znode path of node<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   */<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    throws KeeperException {<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>  }<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span><a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  /**<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>   * Creates the specified node and all parent nodes required for it to exist.  The creation of<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>   * parent znodes is not atomic with the leafe znode creation but the data is written atomically<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>   * when the leaf node is created.<a name="line.1189"></a>
 <span class="sourceLineNo">1190</span>   *<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>   * @param zkw zk reference<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>   * @param znode path of node<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   */<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    throws KeeperException {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    try {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>      if(znode == null) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        return;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          CreateMode.PERSISTENT);<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      return;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      createWithParents(zkw, getParent(znode));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      createWithParents(zkw, znode, data);<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    } catch(InterruptedException ie) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      zkw.interruptedException(ie);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  //<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  // Deletes<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>  //<a name="line.1215"></a>
+<span class="sourceLineNo">1191</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>   *<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>   * The nodes created are persistent and open access.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>   *<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>   * @param zkw zk reference<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * @param znode path of node<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   */<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    throws KeeperException {<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    try {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      if(znode == null) {<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>        return;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>          CreateMode.PERSISTENT);<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      return;<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      createWithParents(zkw, getParent(znode));<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      createWithParents(zkw, znode, data);<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    } catch(InterruptedException ie) {<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      zkw.interruptedException(ie);<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    }<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
 <span class="sourceLineNo">1216</span><a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  /**<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>   */<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    throws KeeperException {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>    deleteNode(zkw, node, -1);<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>  }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span><a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>  /**<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>   * Delete the specified node with the specified version.  Sets no watches.<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>   * Throws all exceptions.<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>   */<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>                                   int version)<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>    throws KeeperException {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>    try {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    } catch(KeeperException.BadVersionException bve) {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      return false;<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    } catch(InterruptedException ie) {<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      zkw.interruptedException(ie);<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      return false;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    }<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  }<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span><a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  /**<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * Deletes the specified node.  Fails silent if the node does not exist.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   *<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   * @param node the node to delete<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   */<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    throws KeeperException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    deleteNodeFailSilent(zkw,<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>  private static void deleteNodeFailSilent(ZKWatcher zkw,<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      DeleteNodeFailSilent dnfs) throws KeeperException {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    DeleteRequest delete = (DeleteRequest)toZooKeeperOp(zkw, dnfs).toRequestRecord();<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      zkw.getRecoverableZooKeeper().delete(delete.getPath(), delete.getVersion());<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    } catch(InterruptedException ie) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      zkw.interruptedException(ie);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>  }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span><a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>  /**<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>   * Delete the specified node and all of it's children.<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * &lt;p&gt;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * If the node does not exist, just returns.<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   * &lt;p&gt;<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * children.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   */<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    throws KeeperException {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span><a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>  /**<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   * Delete all the children of the specified node but not the node itself.<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   *<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * Sets no watches.  Throws all exceptions besides dealing with deletion of<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * children.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   *<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  public static void deleteChildrenRecursively(ZKWatcher zkw, String node)<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      throws KeeperException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    deleteChildrenRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  }<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span><a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  /**<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * Delete all the children of the specified node but not the node itself. This<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>   * will first traverse the znode tree for listing the children and then delete<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * these znodes using multi-update api or sequential based on the specified<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>   * configurations.<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * children.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   * &lt;p&gt;<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * If the following is true:<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * &lt;ul&gt;<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * &lt;/ul&gt;<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   *<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * @param zkw<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>   *          - zk reference<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * @param runSequentialOnMultiFailure<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   *          operations one-by-one (sequentially)<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * @param pathRoots<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   *          - path of the parent node(s)<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   * @throws KeeperException.NotEmptyException<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   *           if node has children while deleting<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @throws KeeperException<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   *           if unexpected ZooKeeper exception<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * @throws IllegalArgumentException<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *           if an invalid path is specified<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   */<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  public static void deleteChildrenRecursivelyMultiOrSequential(<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>          ZKWatcher zkw, boolean runSequentialOnMultiFailure,<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          String... pathRoots) throws KeeperException {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      LOG.warn("Given path is not valid!");<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      return;<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    for (String eachRoot : pathRoots) {<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      List&lt;String&gt; children = listChildrenBFSNoWatch(zkw, eachRoot);<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>      }<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  /**<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Delete the specified node and its children. This traverse the<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * znode tree for listing the children and then delete<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * these znodes including the parent using multi-update api or<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * sequential based on the specified configurations.<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   * &lt;p&gt;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>   * children.<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>   * &lt;p&gt;<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>   * If the following is true:<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>   * &lt;ul&gt;<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * &lt;/ul&gt;<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>   *<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>   * @param zkw<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   *          - zk reference<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   * @param runSequentialOnMultiFailure<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>   *          operations one-by-one (sequentially)<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>   * @param pathRoots<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>   *          - path of the parent node(s)<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>   * @throws KeeperException.NotEmptyException<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>   *           if node has children while deleting<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>   * @throws KeeperException<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   *           if unexpected ZooKeeper exception<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * @throws IllegalArgumentException<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   *           if an invalid path is specified<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>   */<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static void deleteNodeRecursivelyMultiOrSequential(ZKWatcher zkw,<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      boolean runSequentialOnMultiFailure, String... pathRoots) throws KeeperException {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      LOG.warn("Given path is not valid!");<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      return;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    for (String eachRoot : pathRoots) {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      // ZooKeeper Watches are one time triggers; When children of parent nodes are deleted<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // recursively, must set another watch, get notified of delete node<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      List&lt;String&gt; children = listChildrenBFSAndWatchThem(zkw, eachRoot);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      try {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>        if (zkw.getRecoverableZooKeeper().exists(eachRoot, zkw) != null) {<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>          ops.add(ZKUtilOp.deleteNodeFailSilent(eachRoot));<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      } catch (InterruptedException e) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        zkw.interruptedException(e);<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    }<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>  }<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span><a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>  /**<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>   * Chunks the provided {@code ops} when their approximate size exceeds the the configured limit.<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>   * Take caution that this can ONLY be used for operations where atomicity is not important,<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>   * e.g. deletions. It must not be used when atomicity of the operations is critical.<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>   *<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>   * @param zkw reference to the {@link ZKWatcher} which contains configuration and constants<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>   * @param runSequentialOnMultiFailure if true when we get a ZooKeeper exception that could<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>   *        retry the operations one-by-one (sequentially)<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>   * @param ops list of ZKUtilOp {@link ZKUtilOp} to partition while submitting batched multi<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>   *        or sequential<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>   * @throws KeeperException unexpected ZooKeeper Exception / Zookeeper unreachable<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>   */<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>  private static void submitBatchedMultiOrSequential(ZKWatcher zkw,<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      boolean runSequentialOnMultiFailure, List&lt;ZKUtilOp&gt; ops) throws KeeperException {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>    // at least one element should exist<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    if (ops.isEmpty()) {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      return;<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>    final int maxMultiSize = zkw.getRecoverableZooKeeper().getMaxMultiSizeLimit();<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>    // Batch up the items to over smashing through jute.maxbuffer with too many Ops.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    final List&lt;List&lt;ZKUtilOp&gt;&gt; batchedOps = partitionOps(ops, maxMultiSize);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    // Would use forEach() but have to handle KeeperException<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    for (List&lt;ZKUtilOp&gt; batch : batchedOps) {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      multiOrSequential(zkw, batch, runSequentialOnMultiFailure);<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    }<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  /**<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   * Partition the list of {@code ops} by size (using {@link #estimateSize(ZKUtilOp)}).<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>   */<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>  static List&lt;List&lt;ZKUtilOp&gt;&gt; partitionOps(List&lt;ZKUtilOp&gt; ops, int maxPartitionSize) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    List&lt;List&lt;ZKUtilOp&gt;&gt; partitionedOps = new ArrayList&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    List&lt;ZKUtilOp&gt; currentPartition = new ArrayList&lt;&gt;();<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    int currentPartitionSize = 0;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    partitionedOps.add(currentPartition);<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    Iterator&lt;ZKUtilOp&gt; iter = ops.iterator();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    while (iter.hasNext()) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      ZKUtilOp currentOp = iter.next();<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      int currentOpSize = estimateSize(currentOp);<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span><a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      // Roll a new partition if necessary<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      // If the current partition is empty, put the element in there anyways.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      // We can roll a new partition if we get another element<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      if (!currentPartition.isEmpty() &amp;&amp; currentOpSize + currentPartitionSize &gt; maxPartitionSize) {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>        currentPartition = new ArrayList&lt;&gt;();<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>        partitionedOps.add(currentPartition);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        currentPartitionSize = 0;<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      // Add the current op to the partition<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      currentPartition.add(currentOp);<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>      // And record its size<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>      currentPartitionSize += currentOpSize;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    return partitionedOps;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>  static int estimateSize(ZKUtilOp op) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    return Bytes.toBytes(op.getPath()).length;<a name="line.1456"></a>
+<span class="sourceLineNo">1217</span>  //<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  // Deletes<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>  //<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span><a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>  /**<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   */<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    throws KeeperException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    deleteNode(zkw, node, -1);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>   * Delete the specified node with the specified version.  Sets no watches.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>   * Throws all exceptions.<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   */<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>                                   int version)<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    throws KeeperException {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>    try {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      return true;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    } catch(KeeperException.BadVersionException bve) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      return false;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    } catch(InterruptedException ie) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      zkw.interruptedException(ie);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      return false;<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>  }<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span><a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>  /**<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   * Deletes the specified node.  Fails silent if the node does not exist.<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   *<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   * @param node the node to delete<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>   */<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>    throws KeeperException {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    deleteNodeFailSilent(zkw,<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>  }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span><a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  private static void deleteNodeFailSilent(ZKWatcher zkw,<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>      DeleteNodeFailSilent dnfs) throws KeeperException {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>    DeleteRequest delete = (DeleteRequest)toZooKeeperOp(zkw, dnfs).toRequestRecord();<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    try {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>      zkw.getRecoverableZooKeeper().delete(delete.getPath(), delete.getVersion());<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    } catch(InterruptedException ie) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      zkw.interruptedException(ie);<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>  }<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span><a name="line.1270"></a>
+<span class="sourceLineNo">1271</span><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Delete the specified node and all of it's children.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * &lt;p&gt;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * If the node does not exist, just returns.<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * &lt;p&gt;<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>   * children.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>   */<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    throws KeeperException {<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  }<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span><a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>  /**<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>   * Delete all the children of the specified node but not the node itself.<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   *<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * Sets no watches.  Throws all exceptions besides dealing with deletion of<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * children.<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   */<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>  public static void deleteChildrenRecursively(ZKWatcher zkw, String node)<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      throws KeeperException {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    deleteChildrenRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span><a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>  /**<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * Delete all the children of the specified node but not the node itself. This<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * will first traverse the znode tree for listing the children and then delete<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * these znodes using multi-update api or sequential based on the specified<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   * configurations.<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>   * &lt;p&gt;<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>   * children.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>   * &lt;p&gt;<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * If the following is true:<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   * &lt;ul&gt;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * &lt;/ul&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>   *<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>   * @param zkw<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>   *          - zk reference<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>   * @param runSequentialOnMultiFailure<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>   *          operations one-by-one (sequentially)<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>   * @param pathRoots<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>   *          - path of the parent node(s)<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * @throws KeeperException.NotEmptyException<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   *           if node has children while deleting<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   * @throws KeeperException<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   *           if unexpected ZooKeeper exception<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @throws IllegalArgumentException<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   *           if an invalid path is specified<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  public static void deleteChildrenRecursivelyMultiOrSequential(<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>          ZKWatcher zkw, boolean runSequentialOnMultiFailure,<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>          String... pathRoots) throws KeeperException {<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>      LOG.warn("Given path is not valid!");<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      return;<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    for (String eachRoot : pathRoots) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      List&lt;String&gt; children = listChildrenBFSNoWatch(zkw, eachRoot);<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    }<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>  }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span><a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>  /**<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>   * Delete the specified node and its children. This traverse the<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * znode tree for listing the children and then delete<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   * these znodes including the parent using multi-update api or<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>   * sequential based on the specified configurations.<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>   * &lt;p&gt;<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>   * children.<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>   * &lt;p&gt;<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>   * If the following is true:<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>   * &lt;ul&gt;<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * &lt;/ul&gt;<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   *<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * @param zkw<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   *          - zk reference<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>   * @param runSequentialOnMultiFailure<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>   *          operations one-by-one (sequentially)<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>   * @param pathRoots<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>   *          - path of the parent node(s)<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>   * @throws KeeperException.NotEmptyException<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>   *           if node has children while deleting<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   * @throws KeeperException<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>   *           if unexpected ZooKeeper exception<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   * @throws IllegalArgumentException<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>   *           if an invalid path is specified<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>   */<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>  public static void deleteNodeRecursivelyMultiOrSequential(ZKWatcher zkw,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      boolean runSequentialOnMultiFailure, String... pathRoots) throws KeeperException {<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      LOG.warn("Given path is not valid!");<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      return;<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    }<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    for (String eachRoot : pathRoots) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // ZooKeeper Watches are one time triggers; When children of parent nodes are deleted<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      // recursively, must set another watch, get notified of delete node<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      List&lt;String&gt; children = listChildrenBFSAndWatchThem(zkw, eachRoot);<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      }<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      try {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        if (zkw.getRecoverableZooKeeper().exists(eachRoot, zkw) != null) {<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>          ops.add(ZKUtilOp.deleteNodeFailSilent(eachRoot));<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        }<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>      } catch (InterruptedException e) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        zkw.interruptedException(e);<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    }<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  }<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  /**<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>   * Chunks the provided {@code ops} when their approximate size exceeds the the configured limit.<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>   * Take caution that this can ONLY be used for operations where atomicity is not important,<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>   * e.g. deletions. It must not be used when atomicity of the operations is critical.<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>   *<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * @param zkw reference to the {@link ZKWatcher} which contains configuration and constants<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * @param runSequentialOnMultiFailure if true when we get a ZooKeeper exception that could<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   *        retry the operations one-by-one (sequentially)<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   * @param ops list of ZKUtilOp {@link ZKUtilOp} to partition while submitting batched multi<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>   *        or sequential<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>   * @throws KeeperException unexpected ZooKeeper Exception / Zookeeper unreachable<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   */<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>  private static void submitBatchedMultiOrSequential(ZKWatcher zkw,<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      boolean runSequentialOnMultiFailure, List&lt;ZKUtilOp&gt; ops) throws KeeperException {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>    // at least one element should exist<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    if (ops.isEmpty()) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      return;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    final int maxMultiSize = zkw.getRecoverableZooKeeper().getMaxMultiSizeLimit();<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    // Batch up the items to over smashing through jute.maxbuffer with too many Ops.<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>    final List&lt;List&lt;ZKUtilOp&gt;&gt; batchedOps = partitionOps(ops, maxMultiSize);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    // Would use forEach() but have to handle KeeperException<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>    for (List&lt;ZKUtilOp&gt; batch : batchedOps) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      multiOrSequential(zkw, batch, runSequentialOnMultiFailure);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>  }<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span><a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>  /**<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>   * Partition the list of {@code ops} by size (using {@link #estimateSize(ZKUtilOp)}).<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>   */<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  static List&lt;List&lt;ZKUtilOp&gt;&gt; partitionOps(List&lt;ZKUtilOp&gt; ops, int maxPartitionSize) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    List&lt;List&lt;ZKUtilOp&gt;&gt; partitionedOps = new ArrayList&lt;&gt;();<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    List&lt;ZKUtilOp&gt; currentPartition = new ArrayList&lt;&gt;();<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>    int currentPartitionSize = 0;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>    partitionedOps.add(currentPartition);<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>    Iterator&lt;ZKUtilOp&gt; iter = ops.iterator();<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>    while (iter.hasNext()) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      ZKUtilOp currentOp = iter.next();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      int currentOpSize = estimateSize(currentOp);<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span><a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>      // Roll a new partition if necessary<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      // If the current partition is empty, put the element in there anyways.<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      // We can roll a new partition if we get another element<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (!currentPartition.isEmpty() &amp;&amp; currentOpSize + currentPartitionSize &gt; maxPartitionSize) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        currentPartition = new ArrayList&lt;&gt;();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        partitionedOps.add(currentPartition);<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        currentPartitionSize = 0;<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span><a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // Add the current op to the partition<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      currentPartition.add(currentOp);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      // And record its size<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>      currentPartitionSize += currentOpSize;<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    }<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    return partitionedOps;<a name="line.1456"></a>
 <span class="sourceLineNo">1457</span>  }<a name="line.1457"></a>
 <span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>  /**<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   * in the same order as that of the traversal. Lists all the children without<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>   * setting any watches.<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>   *<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>   * @param zkw<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>   *          - zk reference<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>   * @param znode<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   *          - path of node<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   * @return list of children znodes under the path<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @throws KeeperException<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   *           if unexpected ZooKeeper exception<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>   */<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private static List&lt;String&gt; listChildrenBFSNoWatch(ZKWatcher zkw,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final String znode) throws KeeperException {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>    queue.add(znode);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    while (true) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      String node = queue.pollFirst();<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      if (node == null) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        break;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      }<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      List&lt;String&gt; children = listChildrenNoWatch(zkw, node);<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (children == null) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        continue;<a name="line.1484"></a>
+<span class="sourceLineNo">1459</span>  static int estimateSize(ZKUtilOp op) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    return Bytes.toBytes(op.getPath()).length;<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span><a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * in the same order as that of the traversal. Lists all the children without<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * setting any watches.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param zkw<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *          - zk reference<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   * @param znode<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *          - path of node<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   * @return list of children znodes under the path<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * @throws KeeperException<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *           if unexpected ZooKeeper exception<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>  private static List&lt;String&gt; listChildrenBFSNoWatch(ZKWatcher zkw,<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      final String znode) throws KeeperException {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>    queue.add(znode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    while (true) {<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>      String node = queue.pollFirst();<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>      if (node == null) {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        break;<a name="line.1484"></a>
 <span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      for (final String child : children) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>        final String childPath = node + "/" + child;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        queue.add(childPath);<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>        tree.add(childPath);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>      }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>    }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>    return tree;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span><a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>  /**<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   * in the same order as that of the traversal.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   * Lists all the children and set watches on to them.<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   *<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>   * @param zkw<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>   *          - zk reference<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>   * @param znode<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>   *          - path of node<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>   * @return list of children znodes under the path<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>   * @throws KeeperException<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>   *           if unexpected ZooKeeper exception<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>   */<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>  private static List&lt;String&gt; listChildrenBFSAndWatchThem(ZKWatcher zkw, final String znode)<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      throws KeeperException {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    queue.add(znode);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    while (true) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>      String node = queue.pollFirst();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      if (node == null) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        break;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      List&lt;String&gt; children = listChildrenAndWatchThem(zkw, node);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      if (children == null) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>        continue;<a name="line.1520"></a>
+<span class="sourceLineNo">1486</span>      List&lt;String&gt; children = listChildrenNoWatch(zkw, node);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (children == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        continue;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      for (final String child : children) {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        final String childPath = node + "/" + child;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>        queue.add(childPath);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        tree.add(childPath);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      }<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    return tree;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>  }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span><a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>  /**<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>   * in the same order as that of the traversal.<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>   * Lists all the children and set watches on to them.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   *<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   * @param zkw<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>   *          - zk reference<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>   * @param znode<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>   *          - path of node<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>   * @return list of children znodes under the path<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>   * @throws KeeperException<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>   *           if unexpected ZooKeeper exception<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   */<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  private static List&lt;String&gt; listChildrenBFSAndWatchThem(ZKWatcher zkw, final String znode)<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      throws KeeperException {<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    queue.add(znode);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    while (true) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      String node = queue.pollFirst();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (node == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        break;<a name="line.1520"></a>
 <span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      for (final String child : children) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        final String childPath = node + "/" + child;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        queue.add(childPath);<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>        tree.add(childPath);<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      }<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    return tree;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  /**<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>   * Represents an action taken by ZKUtil, e.g. createAndFailSilent.<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>   * These actions are higher-level than ZKOp actions, which represent<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>   * individual actions in the ZooKeeper API, like create.<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public abstract static class ZKUtilOp {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    private String path;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    @Override public String toString() {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      return this.getClass().getSimpleName() + ", path=" + this.path;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    }<a name="line.1541"></a>
+<span class="sourceLineNo">1522</span>      List&lt;String&gt; children = listChildrenAndWatchThem(zkw, node);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      if (children == null) {<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        continue;<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      for (final String child : children) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        final String childPath = node + "/" + child;<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        queue.add(childPath);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        tree.add(childPath);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>      }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    return tree;<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span><a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>  /**<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>   * Represents an action taken by ZKUtil, e.g. createAndFailSilent.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>   * These actions are higher-level than ZKOp actions, which represent<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>   * individual actions in the ZooKeeper API, like create.<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>   */<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  public abstract static class ZKUtilOp {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    private String path;<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span><a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>    private ZKUtilOp(String path) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      this.path = path;<a name="line.1544"></a>
+<span class="sourceLineNo">1543</span>    @Override public String toString() {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      return this.getClass().getSimpleName() + ", path=" + this.path;<a name="line.1544"></a>
 <span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
 <span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    /**<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>     * @return a createAndFailSilent ZKUtilOp<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>     */<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>    public static ZKUtilOp createAndFailSilent(String path, byte[] data) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      return new CreateAndFailSilent(path, data);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span><a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>    /**<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>     * @return a deleteNodeFailSilent ZKUtilOP<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>     */<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public static ZKUtilOp deleteNodeFailSilent(String path) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      return new DeleteNodeFailSilent(path);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    /**<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>     * @return a setData ZKUtilOp<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>     */<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>    public static ZKUtilOp setData(String path, byte[] data) {<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      return new SetData(path, data);<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span><a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    /**<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>     * @return a setData ZKUtilOp<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     */<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    public static ZKUtilOp setData(String path, byte[] data, int version) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      return new SetData(path, data, version);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span><a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>     * @return path to znode where the ZKOp will occur<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>    public String getPath() {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      return path;<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>    }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    /**<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>     * ZKUtilOp representing createAndFailSilent in ZooKeeper<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>     * (attempt to create node, ignore error if already exists)<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>     */<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    public static final class CreateAndFailSilent extends ZKUtilOp {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      private byte [] data;<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      private CreateAndFailSilent(String path, byte [] data) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        super(path);<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        this.data = data;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      public byte[] getData() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        return data;<a name="line.1595"></a>
+<span class="sourceLineNo">1547</span>    private ZKUtilOp(String path) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      this.path = path;<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>    }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span><a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    /**<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>     * @return a createAndFailSilent ZKUtilOp<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>     */<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>    public static ZKUtilOp createAndFailSilent(String path, byte[] data) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      return new CreateAndFailSilent(path, data);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>    }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span><a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>    /**<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>     * @return a deleteNodeFailSilent ZKUtilOP<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>     */<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    public static ZKUtilOp deleteNodeFailSilent(String path) {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      return new DeleteNodeFailSilent(path);<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    /**<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>     * @return a setData ZKUtilOp<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>     */<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    public static ZKUtilOp setData(String path, byte[] data) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      return new SetData(path, data);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>    }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    /**<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>     * @return a setData ZKUtilOp<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>     */<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    public static ZKUtilOp setData(String path, byte[] data, int version) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      return new SetData(path, data, version);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>    }<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    /**<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>     * @return path to znode where the ZKOp will occur<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>     */<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>    public String getPath() {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      return path;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    /**<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>     * ZKUtilOp representing createAndFailSilent in ZooKeeper<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>     * (attempt to create node, ignore error if already exists)<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>     */<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public static final class CreateAndFailSilent extends ZKUtilOp {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      private byte [] data;<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      private CreateAndFailSilent(String path, byte [] data) {<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>        super(path);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>        this.data = data;<a name="line.1595"></a>
 <span class="sourceLineNo">1596</span>      }<a name="line.1596"></a>
 <span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      @Override<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      public boolean equals(Object o) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        if (this == o) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>          return true;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>        }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>        if (!(o instanceof CreateAndFailSilent)) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>          return false;<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>        }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        CreateAndFailSilent op = (CreateAndFailSilent) o;<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1598</span>      public byte[] getData() {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        return data;<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      }<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span><a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      @Override<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      public boolean equals(Object o) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>        if (this == o) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>          return true;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>        if (!(o instanceof CreateAndFailSilent)) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>          return false;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>        }<a name="line.1609"></a>
 <span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      @Override<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      public int hashCode() {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        int ret = 17 + getPath().hashCode() * 31;<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>        return ret * 31 + Bytes.hashCode(data);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      }<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span><a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    /**<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>     * ZKUtilOp representing deleteNodeFailSilent in ZooKeeper<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>     * (attempt to delete node, ignore error if node doesn't exist)<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>     */<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    public static final class DeleteNodeFailSilent extends ZKUtilOp {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      private DeleteNodeFailSilent(String path) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        super(path);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      @Override<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      public boolean equals(Object o) {<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        if (this == o) {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>          return true;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        }<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        if (!(o instanceof DeleteNodeFailSilent)) {<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>          return false;<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span><a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        return super.equals(o);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      @Override<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      public int hashCode() {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        return getPath().hashCode();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    /**<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * ZKUtilOp representing setData in ZooKeeper<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    public static final class SetData extends ZKUtilOp {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>      private byte[] data;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      private int version = -1;<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      private SetData(String path, byte[] data) {<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>        super(path);<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>        this.data = data;<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>      }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      private SetData(String path, byte[] data, int version) {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>        super(path);<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>        this.data = data;<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        this.version = version;<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      }<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span><a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      public byte[] getData() {<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>        return data;<a name="line.1664"></a>
+<span class="sourceLineNo">1611</span>        CreateAndFailSilent op = (CreateAndFailSilent) o;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data);<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      @Override<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      public int hashCode() {<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>        int ret = 17 + getPath().hashCode() * 31;<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        return ret * 31 + Bytes.hashCode(data);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      }<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>    }<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span><a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    /**<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>     * ZKUtilOp representing deleteNodeFailSilent in ZooKeeper<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>     * (attempt to delete node, ignore error if node doesn't exist)<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>     */<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    public static final class DeleteNodeFailSilent extends ZKUtilOp {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      private DeleteNodeFailSilent(String path) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        super(path);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      @Override<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      public boolean equals(Object o) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        if (this == o) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>          return true;<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        if (!(o instanceof DeleteNodeFailSilent)) {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>          return false;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>        }<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        return super.equals(o);<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span><a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      @Override<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>      public int hashCode() {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>        return getPath().hashCode();<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span><a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>    /**<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>     * ZKUtilOp representing setData in ZooKeeper<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     */<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>    public static final class SetData extends ZKUtilOp {<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      private byte[] data;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      private int version = -1;<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      private SetData(String path, byte[] data) {<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>        super(path);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>        this.data = data;<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      private SetData(String path, byte[] data, int version) {<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>        super(path);<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>        this.data = data;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>        this.version = version;<a name="line.1664"></a>
 <span class="sourceLineNo">1665</span>      }<a name="line.1665"></a>
 <span class="sourceLineNo">1666</span><a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      public int getVersion() {<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>        return version;<a name="line.1668"></a>
+<span class="sourceLineNo">1667</span>      public byte[] getData() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>        return data;<a name="line.1668"></a>
 <span class="sourceLineNo">1669</span>      }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      @Override<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      public boolean equals(Object o) {<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (this == o) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          return true;<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        }<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        if (!(o instanceof SetData)) {<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>          return false;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        SetData op = (SetData) o;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data)<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>            &amp;&amp; getVersion() == op.getVersion();<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      }<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      @Override<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      public int hashCode() {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>        int ret = getPath().hashCode();<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        ret = ret * 31 + Bytes.hashCode(data);<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        return ret * 31 + Integer.hashCode(version);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      }<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    }<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span><a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>  /**<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>   * Convert from ZKUtilOp to ZKOp<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>   */<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  private static Op toZooKeeperOp(ZKWatcher zkw, ZKUtilOp op) throws UnsupportedOperationException {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>    if(op == null) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      return null;<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span><a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>    if (op instanceof CreateAndFailSilent) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>      CreateAndFailSilent cafs = (CreateAndFailSilent)op;<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      return Op.create(cafs.getPath(), cafs.getData(), createACL(zkw, cafs.getPath()),<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        CreateMode.PERSISTENT);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      DeleteNodeFailSilent dnfs = (DeleteNodeFailSilent)op;<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      return Op.delete(dnfs.getPath(), -1);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    } else if (op instanceof SetData) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>      SetData sd = (SetData) op;<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      return Op.setData(sd.getPath(), sd.getData(), sd.getVersion());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    } else {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>      throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        + op.getClass().getName());<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>  }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span><a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>  /**<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>   * Use ZooKeeper's multi-update functionality.<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>   *<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>   * If all of the following are true:<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>   * - runSequentialOnMultiFailure is true<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>   * - on calling multi, we get a ZooKeeper exception that can be handled by a sequential call(*)<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>   * Then:<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>   * - we retry the operations one-by-one (sequentially)<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>   *<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>   * Note *: an example is receiving a NodeExistsException from a "create" call.  Without multi,<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>   * a user could call "createAndFailSilent" to ensure that a node exists if they don't care who<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>   * actually created the node (i.e. the NodeExistsException from ZooKeeper is caught).<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * This will cause all operations in the multi to fail, however, because<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * the NodeExistsException that zk.create throws will fail the multi transaction.<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   * In this case, if the previous conditions hold, the commands are run sequentially, which should<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   * result in the correct final state, but means that the operations will not run atomically.<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>   *<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>   */<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  public static void multiOrSequential(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops,<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>                                       boolean runSequentialOnMultiFailure) throws KeeperException {<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    if (zkw.getConfiguration().get("hbase.zookeeper.useMulti") != null) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      LOG.warn("hbase.zookeeper.useMulti is deprecated. Default to true always.");<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    if (ops == null) {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      return;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>    }<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span><a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>    List&lt;Op&gt; zkOps = new LinkedList&lt;&gt;();<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    for (ZKUtilOp op : ops) {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      zkOps.add(toZooKeeperOp(zkw, op));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    try {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      zkw.getRecoverableZooKeeper().multi(zkOps);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    } catch (KeeperException ke) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      switch (ke.code()) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>        case NODEEXISTS:<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        case NONODE:<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>        case BADVERSION:<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>        case NOAUTH:<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>        case NOTEMPTY:<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>          // if we get an exception that could be solved by running sequentially<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>          // (and the client asked us to), then break out and run sequentially<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>          if (runSequentialOnMultiFailure) {<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            LOG.info("multi exception: {}; running operations sequentially " +<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>              "(runSequentialOnMultiFailure=true); {}", ke.toString(),<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>              ops.stream().map(o -&gt; o.toString()).collect(Collectors.joining(",")));<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>            processSequentially(zkw, ops);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>            break;<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>          }<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>        default:<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>          throw ke;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    } catch (InterruptedException ie) {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>      zkw.interruptedException(ie);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>  }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>  private static void processSequentially(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops)<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      throws KeeperException, NoNodeException {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    for (ZKUtilOp op : ops) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      if (op instanceof CreateAndFailSilent) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>        createAndFailSilent(zkw, (CreateAndFailSilent) op);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>      } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        deleteNodeFailSilent(zkw, (DeleteNodeFailSilent) op);<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      } else if (op instanceof SetData) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        setData(zkw, (SetData) op);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      } else {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>            + op.getClass().getName());<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      }<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span><a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>  //<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  // ZooKeeper cluster information<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  //<a name="line.1794"></a>
+<span class="sourceLineNo">1671</span>      public int getVersion() {<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        return version;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span><a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>      @Override<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>      public boolean equals(Object o) {<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        if (this == o) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>          return true;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>        }<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        if (!(o instanceof SetData)) {<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>          return false;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>        }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        SetData op = (SetData) o;<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data)<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>            &amp;&amp; getVersion() == op.getVersion();<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>      }<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span><a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      @Override<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      public int hashCode() {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        int ret = getPath().hashCode();<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>        ret = ret * 31 + Bytes.hashCode(data);<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        return ret * 31 + Integer.hashCode(version);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  }<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span><a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>  /**<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>   * Convert from ZKUtilOp to ZKOp<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>   */<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>  private static Op toZooKeeperOp(ZKWatcher zkw, ZKUtilOp op) throws UnsupportedOperationException {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    if(op == null) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      return null;<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    }<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span><a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    if (op instanceof CreateAndFailSilent) {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      CreateAndFailSilent cafs = (CreateAndFailSilent)op;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      return Op.create(cafs.getPath(), cafs.getData(), createACL(zkw, cafs.getPath()),<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        CreateMode.PERSISTENT);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      DeleteNodeFailSilent dnfs = (DeleteNodeFailSilent)op;<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      return Op.delete(dnfs.getPath(), -1);<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    } else if (op instanceof SetData) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      SetData sd = (SetData) op;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      return Op.setData(sd.getPath(), sd.getData(), sd.getVersion());<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>    } else {<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>      throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>        + op.getClass().getName());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>  }<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span><a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>  /**<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>   * Use ZooKeeper's multi-update functionality.<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>   *<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>   * If all of the following are true:<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>   * - runSequentialOnMultiFailure is true<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>   * - on calling multi, we get a ZooKeeper exception that can be handled by a sequential call(*)<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>   * Then:<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>   * - we retry the operations one-by-one (sequentially)<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>   *<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>   * Note *: an example is receiving a NodeExistsException from a "create" call.  Without multi,<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>   * a user could call "createAndFailSilent" to ensure that a node exists if they don't care who<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>   * actually created the node (i.e. the NodeExistsException from ZooKeeper is caught).<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>   * This will cause all operations in the multi to fail, however, because<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>   * the NodeExistsException that zk.create throws will fail the multi transaction.<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>   * In this case, if the previous conditions hold, the commands are run sequentially, which should<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * result in the correct final state, but means that the operations will not run atomically.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   *<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public static void multiOrSequential(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops,<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>                                       boolean runSequentialOnMultiFailure) throws KeeperException {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    if (zkw.getConfiguration().get("hbase.zookeeper.useMulti") != null) {<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      LOG.warn("hbase.zookeeper.useMulti is deprecated. Default to true always.");<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    if (ops == null) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      return;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    List&lt;Op&gt; zkOps = new LinkedList&lt;&gt;();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>    for (ZKUtilOp op : ops) {<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      zkOps.add(toZooKeeperOp(zkw, op));<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    try {<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      zkw.getRecoverableZooKeeper().multi(zkOps);<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    } catch (KeeperException ke) {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      switch (ke.code()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        case NODEEXISTS:<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        case NONODE:<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>        case BADVERSION:<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        case NOAUTH:<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>        case NOTEMPTY:<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>          // if we get an exception that could be solved by running sequentially<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>          // (and the client asked us to), then break out and run sequentially<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>          if (runSequentialOnMultiFailure) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>            LOG.info("multi exception: {}; running operations sequentially " +<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>              "(runSequentialOnMultiFailure=true); {}", ke.toString(),<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>              ops.stream().map(o -&gt; o.toString()).collect(Collectors.joining(",")));<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>            processSequentially(zkw, ops);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>            break;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>          }<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        default:<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          throw ke;<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      }<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    } catch (InterruptedException ie) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      zkw.interruptedException(ie);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    }<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  private static void processSequentially(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops)<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      throws KeeperException, NoNodeException {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    for (ZKUtilOp op : ops) {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (op instanceof CreateAndFailSilent) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        createAndFailSilent(zkw, (CreateAndFailSilent) op);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>      } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        deleteNodeFailSilent(zkw, (DeleteNodeFailSilent) op);<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      } else if (op instanceof SetData) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        setData(zkw, (SetData) op);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      } else {<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>            + op.getClass().getName());<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  /** @return String dump of everything in ZooKeeper. */<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  public static String dump(ZKWatcher zkw) {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    StringBuilder sb = new StringBuilder();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    try {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      sb.append("\nActive master address: ");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      try {<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      } catch (IOException e) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      sb.append("\nBackup master addresses:");<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      final List&lt;String&gt; backupMasterChildrenNoWatchList = listChildrenNoWatch(zkw,<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>              zkw.getZNodePaths().backupMasterAddressesZNode);<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      if (backupMasterChildrenNoWatchList != null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>        for (String child : backupMasterChildrenNoWatchList) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>          sb.append("\n ").append(child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>        }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      }<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        + MetaTableLocator.getMetaRegionLocation(zkw));<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    + MetaTableLocator.getMetaRegionLocation(zkw, i));<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      sb.append("\nRegion servers:");<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      final List&lt;String&gt; rsChildrenNoWatchList =<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>              listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      if (rsChildrenNoWatchList != null) {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        for (String child : rsChildrenNoWatchList) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          sb.append("\n ").append(child);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      }<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      try {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      } catch (KeeperException ke) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      for (String server : servers) {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>        sb.append("\n ").append(server);<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        try {<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span><a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          if (stat == null) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>            break;<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>          }<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>          for (String s : stat) {<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>            sb.append("\n  ").append(s);<a name="line.1850"></a>
+<span class="sourceLineNo">1796</span>  //<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  // ZooKeeper cluster information<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>  //<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  /** @return String dump of everything in ZooKeeper. */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public static String dump(ZKWatcher zkw) {<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    StringBuilder sb = new StringBuilder();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    try {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      sb.append("\nActive master address: ");<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      try {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      } catch (IOException e) {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>      }<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      sb.append("\nBackup master addresses:");<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      final List&lt;String&gt; backupMasterChildrenNoWatchList = listChildrenNoWatch(zkw,<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>              zkw.getZNodePaths().backupMasterAddressesZNode);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (backupMasterChildrenNoWatchList != null) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        for (String child : backupMasterChildrenNoWatchList) {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>          sb.append("\n ").append(child);<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        }<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      }<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        + MetaTableLocator.getMetaRegionLocation(zkw));<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>                    + MetaTableLocator.getMetaRegionLocation(zkw, i));<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      sb.append("\nRegion servers:");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      final List&lt;String&gt; rsChildrenNoWatchList =<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      if (rsChildrenNoWatchList != null) {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        for (String child : rsChildrenNoWatchList) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>          sb.append("\n ").append(child);<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        }<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>      }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>      try {<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      } catch (KeeperException ke) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      }<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>      for (String server : servers) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>        sb.append("\n ").append(server);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>        try {<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>          if (stat == null) {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>            break;<a name="line.1850"></a>
 <span class="sourceLineNo">1851</span>          }<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        } catch (Exception e) {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>        }<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    } catch (KeeperException ke) {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      sb.append("\n" + ke.getMessage());<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    }<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    return sb.toString();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>  }<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span><a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>  /**<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>   *<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>   */<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      throws KeeperException {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span><a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      return;<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    }<a name="line.1876"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>          for (String s : stat) {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            sb.append("\n  ").append(s);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          }<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        } catch (Exception e) {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      }<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>    } catch (KeeperException ke) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      sb.append("\n" + ke.getMessage());<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    return sb.toString();<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>  }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>  /**<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>   *<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>   */<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      throws KeeperException {<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1876"></a>
 <span class="sourceLineNo">1877</span><a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    // do a ls -r on this znode<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>    if (children != null) {<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>      Collections.sort(children);<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      for (String child : children) {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        String zNode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        if (zNode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>          appendPeersZnodes(zkw, zNode, sb);<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>        } else if (zNode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>          appendRSZnodes(zkw, zNode, sb);<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        } else if (zNode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          appendHFileRefsZNodes(zkw, zNode, sb);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>        }<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      }<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  private static void appendHFileRefsZNodes(ZKWatcher zkw, String hFileRefsZNode,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    sb.append("\n").append(hFileRefsZNode).append(": ");<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    final List&lt;String&gt; hFileRefChildrenNoWatchList =<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            ZKUtil.listChildrenNoWatch(zkw, hFileRefsZNode);<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>    if (hFileRefChildrenNoWatchList != null) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      for (String peerIdZNode : hFileRefChildrenNoWatchList) {<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        String zNodeToProcess = ZNodePaths.joinZNode(hFileRefsZNode, peerIdZNode);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>        sb.append("\n").append(zNodeToProcess).append(": ");<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        List&lt;String&gt; peerHFileRefsZNodes = ZKUtil.listChildrenNoWatch(zkw, zNodeToProcess);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>        if (peerHFileRefsZNodes != null) {<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>          sb.append(String.join(", ", peerHFileRefsZNodes));<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>        }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      }<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    }<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>  }<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>  /**<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>   * @return aq string of replication znodes and log positions<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>   */<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    StringBuilder sb = new StringBuilder();<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    return sb.toString();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span><a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      throws KeeperException {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    stack.add(znode);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    do {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      byte[] data;<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>      try {<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      } catch (InterruptedException e) {<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>        zkw.interruptedException(e);<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        return;<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        long position = 0;<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        try {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>          sb.append(position);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        } catch (DeserializationException ignored) {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>        } catch (InterruptedException e) {<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          zkw.interruptedException(e);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>          return;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>        }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>      }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    } while (stack.size() &gt; 0);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span><a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      byte[] data;<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try {<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      } catch (InterruptedException e) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        zkw.interruptedException(e);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        return;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      // parse the data of the above peer znode.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      try {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        String clusterKey = builder.getClusterkey();<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>        // add the peer-state.<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>      } catch (IOException ipbe) {<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      "peer-state");<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      if (!child.equals(peerState)) {<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>        continue;<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      byte[] peerStateData;<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>      try {<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        sb.append(builder.getState().name());<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      } catch (IOException ipbe) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>      } catch (InterruptedException e) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>        zkw.interruptedException(e);<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>        return;<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>      }<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>  }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span><a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  /**<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>   * Gets the statistics from the given server.<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>   *<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>   * @param server  The server to get the statistics from.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>   * @param timeout  The socket timeout to use.<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * @return The array of response strings.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   * @throws IOException When the socket communication fails.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>   */<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>  private static String[] getServerStats(String server, int timeout)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    String[] sp = server.split(":");<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    if (sp.length == 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      return null;<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>    }<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    String host = sp[0];<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.2028"></a>
+<span class="sourceLineNo">1878</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      return;<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span><a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>    // do a ls -r on this znode<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    if (children != null) {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      Collections.sort(children);<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>      for (String child : children) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>        String zNode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        if (zNode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>          appendPeersZnodes(zkw, zNode, sb);<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        } else if (zNode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          appendRSZnodes(zkw, zNode, sb);<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        } else if (zNode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>          appendHFileRefsZNodes(zkw, zNode, sb);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>  }<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span><a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>  private static void appendHFileRefsZNodes(ZKWatcher zkw, String hFileRefsZNode,<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>    sb.append("\n").append(hFileRefsZNode).append(": ");<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>    final List&lt;String&gt; hFileRefChildrenNoWatchList =<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>            ZKUtil.listChildrenNoWatch(zkw, hFileRefsZNode);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    if (hFileRefChildrenNoWatchList != null) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      for (String peerIdZNode : hFileRefChildrenNoWatchList) {<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        String zNodeToProcess = ZNodePaths.joinZNode(hFileRefsZNode, peerIdZNode);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        sb.append("\n").append(zNodeToProcess).append(": ");<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        List&lt;String&gt; peerHFileRefsZNodes = ZKUtil.listChildrenNoWatch(zkw, zNodeToProcess);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        if (peerHFileRefsZNodes != null) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>          sb.append(String.join(", ", peerHFileRefsZNodes));<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>        }<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      }<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    }<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>  }<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span><a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>  /**<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>   * @return aq string of replication znodes and log positions<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>   */<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    StringBuilder sb = new StringBuilder();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return sb.toString();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span><a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      throws KeeperException {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>    stack.add(znode);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>    do {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      byte[] data;<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      try {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      } catch (InterruptedException e) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        zkw.interruptedException(e);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>        return;<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      }<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        long position = 0;<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        try {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>          sb.append(position);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        } catch (DeserializationException ignored) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>        } catch (InterruptedException e) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          zkw.interruptedException(e);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          return;<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>        }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>      }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>    } while (stack.size() &gt; 0);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>  }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span><a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      byte[] data;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch (InterruptedException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        zkw.interruptedException(e);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        return;<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      // parse the data of the above peer znode.<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      try {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        String clusterKey = builder.getClusterkey();<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        // add the peer-state.<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      } catch (IOException ipbe) {<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>      }<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    }<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>  }<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span><a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      "peer-state");<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      if (!child.equals(peerState)) {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        continue;<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>      }<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      byte[] peerStateData;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>      try {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        sb.append(builder.getState().name());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>      } catch (IOException ipbe) {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      } catch (InterruptedException e) {<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>        zkw.interruptedException(e);<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        return;<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      }<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span><a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>   * Gets the statistics from the given server.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>   *<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>   * @param server  The server to get the statistics from.<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>   * @param timeout  The socket timeout to use.<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>   * @return The array of response strings.<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * @throws IOException When the socket communication fails.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private static String[] getServerStats(String server, int timeout)<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    throws IOException {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    String[] sp = server.split(":");<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (sp.length == 0) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return null;<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
 <span class="sourceLineNo">2029</span><a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    try (Socket socket = new Socket()) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      socket.connect(sockAddr, timeout);<a name="line.2032"></a>
+<span class="sourceLineNo">2030</span>    String host = sp[0];<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.2032"></a>
 <span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>      socket.setSoTimeout(timeout);<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>          BufferedReader in = new BufferedReader(<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        out.println("stat");<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        out.flush();<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        while (true) {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          String line = in.readLine();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>          if (line != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>            res.add(line);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>          } else {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>            break;<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>          }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>        }<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>        return res.toArray(new String[res.size()]);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    }<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span><a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    if (!LOG.isTraceEnabled()) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      return;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      " byte(s) of data from znode " + znode +<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>          zkw.getZNodePaths().isMetaZNodePrefix(znode)?<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>            getServerNameOrEmptyString(data):<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>            getServerNameOrEmptyString(data):<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (DeserializationException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      return "";<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @throws IOException on ZK errors<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   */<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    LOG.info("Waiting until the base znode is available");<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    final int maxTimeMs = 10000;<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    KeeperException keeperEx = null;<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    try {<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      try {<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>          try {<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>              LOG.info("Parent znode exists: {}", parentZNode);<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>              keeperEx = null;<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>              break;<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>            }<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>          } catch (KeeperException e) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>            keeperEx = e;<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>        }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      } finally {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        zk.close();<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    } catch (InterruptedException ex) {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>      Thread.currentThread().interrupt();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span><a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (keeperEx != null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new IOException(keeperEx);<a name="line.2118"></a>
+<span class="sourceLineNo">2034</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    try (Socket socket = new Socket()) {<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      socket.connect(sockAddr, timeout);<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>      socket.setSoTimeout(timeout);<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          BufferedReader in = new BufferedReader(<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        out.println("stat");<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        out.flush();<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>        while (true) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>          String line = in.readLine();<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>          if (line != null) {<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>            res.add(line);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>          } else {<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>            break;<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>          }<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>        }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>        return res.toArray(new String[res.size()]);<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      }<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>  }<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span><a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (!LOG.isTraceEnabled()) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      return;<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span><a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      " byte(s) of data from znode " + znode +<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>          zkw.getZNodePaths().isMetaZNodePrefix(znode)?<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>            getServerNameOrEmptyString(data):<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>            getServerNameOrEmptyString(data):<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>  }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    try {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    } catch (DeserializationException e) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      return "";<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>  }<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span><a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  /**<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>   * @throws IOException on ZK errors<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   */<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>    LOG.info("Waiting until the base znode is available");<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span><a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    final int maxTimeMs = 10000;<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    KeeperException keeperEx = null;<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    try {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      try {<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          try {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>              LOG.info("Parent znode exists: {}", parentZNode);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>              keeperEx = null;<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>              break;<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>            }<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          } catch (KeeperException e) {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>            keeperEx = e;<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      } finally {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>        zk.close();<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      }<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    } catch (InterruptedException ex) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      Thread.currentThread().interrupt();<a name="line.2118"></a>
 <span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>  }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>  /**<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>   * @param e Exception to convert<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>   * @return Converted exception<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>   */<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    ke.initCause(e);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    return ke;<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span><a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>  /**<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>   * @param root name of the root directory in zk to print<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>   */<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    if (!LOG.isDebugEnabled()) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>      return;<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span><a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    LOG.debug("Current zk system:");<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    String prefix = "|-";<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>    LOG.debug(prefix + root);<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    try {<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      logZKTree(zkw, root, prefix);<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    } catch (KeeperException e) {<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      throw new RuntimeException(e);<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    }<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>  }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span><a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  /**<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>   * Helper method to print the current state of the ZK tree.<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>      throws KeeperException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    if (children == null) {<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      return;<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>    }<a name="line.2164"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (keeperEx != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      throw new IOException(keeperEx);<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>  /**<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>   * @param e Exception to convert<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>   * @return Converted exception<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>    ke.initCause(e);<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    return ke;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>  }<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span><a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>  /**<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>   * @param root name of the root directory in zk to print<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>   */<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    if (!LOG.isDebugEnabled()) {<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      return;<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    }<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span><a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>    LOG.debug("Current zk system:");<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    String prefix = "|-";<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    LOG.debug(prefix + root);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>    try {<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>      logZKTree(zkw, root, prefix);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>    } catch (KeeperException e) {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      throw new RuntimeException(e);<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Helper method to print the current state of the ZK tree.<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>      throws KeeperException {<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2164"></a>
 <span class="sourceLineNo">2165</span><a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    for (String child : children) {<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>      LOG.debug(prefix + child);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span><a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>   * @param position the position to serialize<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>   *         for use as content of an wal position in a replication queue.<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>   */<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        .build().toByteArray();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>  }<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span><a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  /**<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>   * @param bytes - Content of a WAL position znode.<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>   * @return long - The current WAL position.<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   */<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>    if (bytes == null) {<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      try {<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>        position = builder.build();<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      } catch (IOException e) {<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>        throw new DeserializationException(e);<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      return position.getPosition();<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    } else {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      if (bytes.length &gt; 0) {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        return Bytes.toLong(bytes);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>      }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      return 0;<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>}<a name="line.2212"></a>
+<span class="sourceLineNo">2166</span>    if (children == null) {<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>      return;<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    }<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span><a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    for (String child : children) {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>      LOG.debug(prefix + child);<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>  }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>  /**<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>   * @param position the position to serialize<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>   *         for use as content of an wal position in a replication queue.<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>   */<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .build().toByteArray();<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>  }<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span><a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>  /**<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>   * @param bytes - Content of a WAL position znode.<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>   * @return long - The current WAL position.<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>   */<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>    if (bytes == null) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>      try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        position = builder.build();<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      } catch (IOException e) {<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>        throw new DeserializationException(e);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      }<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      return position.getPosition();<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    } else {<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>      if (bytes.length &gt; 0) {<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>        return Bytes.toLong(bytes);<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>      }<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>      return 0;<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>    }<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  }<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>}<a name="line.2216"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
index 0bef1b6..00ebc53 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.NodeAndData.html
@@ -750,1474 +750,1478 @@
 <span class="sourceLineNo">742</span>    if (nodes != null) {<a name="line.742"></a>
 <span class="sourceLineNo">743</span>      List&lt;NodeAndData&gt; newNodes = new ArrayList&lt;&gt;();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      for (String node : nodes) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        String nodePath = ZNodePaths.joinZNode(baseNode, node);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        newNodes.add(new NodeAndData(nodePath, data));<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      return newNodes;<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    return null;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /**<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   * Update the data of an existing node with the expected version to have the<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * specified data.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   *<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * Throws an exception if there is a version mismatch or some other problem.<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Sets no watches under any conditions.<a name="line.760"></a>
+<span class="sourceLineNo">745</span>        if (Thread.interrupted()) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>          // Partial data should not be processed. Cancel processing by sending empty list.<a name="line.746"></a>
+<span class="sourceLineNo">747</span>          return Collections.emptyList();<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        }<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        String nodePath = ZNodePaths.joinZNode(baseNode, node);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>        byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath);<a name="line.750"></a>
+<span class="sourceLineNo">751</span>        newNodes.add(new NodeAndData(nodePath, data));<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      return newNodes;<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return null;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Update the data of an existing node with the expected version to have the<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * specified data.<a name="line.760"></a>
 <span class="sourceLineNo">761</span>   *<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param zkw zk reference<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param znode the path to the ZNode<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @param data the data to store in ZooKeeper<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * @param expectedVersion the expected version<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @throws KeeperException.BadVersionException if version mismatch<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * @deprecated Unused<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  @Deprecated<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  public static void updateExistingNodeData(ZKWatcher zkw, String znode, byte[] data,<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      int expectedVersion) throws KeeperException {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    try {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    } catch(InterruptedException ie) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      zkw.interruptedException(ie);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  //<a name="line.780"></a>
-<span class="sourceLineNo">781</span>  // Data setting<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  //<a name="line.782"></a>
+<span class="sourceLineNo">762</span>   * Throws an exception if there is a version mismatch or some other problem.<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Sets no watches under any conditions.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @param zkw zk reference<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param znode the path to the ZNode<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @param data the data to store in ZooKeeper<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * @param expectedVersion the expected version<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   * @throws KeeperException.BadVersionException if version mismatch<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @deprecated Unused<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   */<a name="line.773"></a>
+<span class="sourceLineNo">774</span>  @Deprecated<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  public static void updateExistingNodeData(ZKWatcher zkw, String znode, byte[] data,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      int expectedVersion) throws KeeperException {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    try {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    } catch(InterruptedException ie) {<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      zkw.interruptedException(ie);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
 <span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  /**<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * Sets the data of the existing znode to be the specified data.  Ensures that<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * the current data has the specified expected version.<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   *<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   *<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * &lt;p&gt;If their is a version mismatch, method returns null.<a name="line.790"></a>
+<span class="sourceLineNo">784</span>  //<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  // Data setting<a name="line.785"></a>
+<span class="sourceLineNo">786</span>  //<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span>  /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span>   * Sets the data of the existing znode to be the specified data.  Ensures that<a name="line.789"></a>
+<span class="sourceLineNo">790</span>   * the current data has the specified expected version.<a name="line.790"></a>
 <span class="sourceLineNo">791</span>   *<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * node.<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   *<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   *<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * @param zkw zk reference<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * @param znode path of node<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param data data to set for node<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * @param expectedVersion version expected when setting data<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @return true if data set, false if version mismatch<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.804"></a>
-<span class="sourceLineNo">805</span>                                byte [] data, int expectedVersion)<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    try {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    } catch (InterruptedException e) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>      zkw.interruptedException(e);<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      return false;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
-<span class="sourceLineNo">816</span>   * Set data into node creating node if it doesn't yet exist.<a name="line.816"></a>
-<span class="sourceLineNo">817</span>   * Does not set watch.<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   *<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * @param zkw zk reference<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * @param znode path of node<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * @param data data to set for node<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   */<a name="line.823"></a>
-<span class="sourceLineNo">824</span>  public static void createSetData(final ZKWatcher zkw, final String znode, final byte [] data)<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          throws KeeperException {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    if (checkExists(zkw, znode) == -1) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      ZKUtil.createWithParents(zkw, znode, data);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    } else {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      ZKUtil.setData(zkw, znode, data);<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Sets the data of the existing znode to be the specified data.  The node<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * must exist but no checks are done on the existing data or version.<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   *<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   * node.<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   *<a name="line.841"></a>
-<span class="sourceLineNo">842</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.842"></a>
-<span class="sourceLineNo">843</span>   *<a name="line.843"></a>
-<span class="sourceLineNo">844</span>   * @param zkw zk reference<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * @param znode path of node<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * @param data data to set for node<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   */<a name="line.848"></a>
-<span class="sourceLineNo">849</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.856"></a>
-<span class="sourceLineNo">857</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.857"></a>
-<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
-<span class="sourceLineNo">859</span><a name="line.859"></a>
-<span class="sourceLineNo">860</span>  /**<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * Returns whether or not secure authentication is enabled<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * (whether &lt;code&gt;hbase.security.authentication&lt;/code&gt; is set to<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * &lt;code&gt;kerberos&lt;/code&gt;.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public static boolean isSecureZooKeeper(Configuration conf) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    // Detection for embedded HBase client with jaas configuration<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    // defined for third party programs.<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    try {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      javax.security.auth.login.Configuration testConfig =<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          javax.security.auth.login.Configuration.getConfiguration();<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      if (testConfig.getAppConfigurationEntry("Client") == null<a name="line.871"></a>
-<span class="sourceLineNo">872</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.872"></a>
-<span class="sourceLineNo">873</span>            JaasConfiguration.CLIENT_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.873"></a>
-<span class="sourceLineNo">874</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.874"></a>
-<span class="sourceLineNo">875</span>              JaasConfiguration.SERVER_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.875"></a>
-<span class="sourceLineNo">876</span>          &amp;&amp; conf.get(HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL) == null<a name="line.876"></a>
-<span class="sourceLineNo">877</span>          &amp;&amp; conf.get(HConstants.ZK_SERVER_KERBEROS_PRINCIPAL) == null) {<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span>        return false;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      }<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    } catch(Exception e) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      // No Jaas configuration defined.<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      return false;<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>    // Master &amp; RSs uses hbase.zookeeper.client.*<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return "kerberos".equalsIgnoreCase(conf.get("hbase.security.authentication"));<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
+<span class="sourceLineNo">792</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   *<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   * &lt;p&gt;If their is a version mismatch, method returns null.<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   *<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * node.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   *<a name="line.798"></a>
+<span class="sourceLineNo">799</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.799"></a>
+<span class="sourceLineNo">800</span>   *<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * @param zkw zk reference<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param znode path of node<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param data data to set for node<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param expectedVersion version expected when setting data<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @return true if data set, false if version mismatch<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   */<a name="line.807"></a>
+<span class="sourceLineNo">808</span>  public static boolean setData(ZKWatcher zkw, String znode,<a name="line.808"></a>
+<span class="sourceLineNo">809</span>                                byte [] data, int expectedVersion)<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    try {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      return zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion) != null;<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    } catch (InterruptedException e) {<a name="line.813"></a>
+<span class="sourceLineNo">814</span>      zkw.interruptedException(e);<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      return false;<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
+<span class="sourceLineNo">817</span>  }<a name="line.817"></a>
+<span class="sourceLineNo">818</span><a name="line.818"></a>
+<span class="sourceLineNo">819</span>  /**<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   * Set data into node creating node if it doesn't yet exist.<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * Does not set watch.<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   *<a name="line.822"></a>
+<span class="sourceLineNo">823</span>   * @param zkw zk reference<a name="line.823"></a>
+<span class="sourceLineNo">824</span>   * @param znode path of node<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   * @param data data to set for node<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
+<span class="sourceLineNo">828</span>  public static void createSetData(final ZKWatcher zkw, final String znode, final byte [] data)<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          throws KeeperException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    if (checkExists(zkw, znode) == -1) {<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      ZKUtil.createWithParents(zkw, znode, data);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    } else {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      ZKUtil.setData(zkw, znode, data);<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
+<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>  /**<a name="line.837"></a>
+<span class="sourceLineNo">838</span>   * Sets the data of the existing znode to be the specified data.  The node<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * must exist but no checks are done on the existing data or version.<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   *<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   * &lt;p&gt;If the node does not exist, a {@link NoNodeException} will be thrown.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>   *<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   * &lt;p&gt;No watches are set but setting data will trigger other watchers of this<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   * node.<a name="line.844"></a>
+<span class="sourceLineNo">845</span>   *<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * &lt;p&gt;If there is another problem, a KeeperException will be thrown.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   *<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @param zkw zk reference<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   * @param znode path of node<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * @param data data to set for node<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   */<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  public static void setData(ZKWatcher zkw, String znode, byte [] data)<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    setData(zkw, (SetData)ZKUtilOp.setData(znode, data));<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  private static void setData(ZKWatcher zkw, SetData setData)<a name="line.858"></a>
+<span class="sourceLineNo">859</span>    throws KeeperException, KeeperException.NoNodeException {<a name="line.859"></a>
+<span class="sourceLineNo">860</span>    SetDataRequest sd = (SetDataRequest)toZooKeeperOp(zkw, setData).toRequestRecord();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    setData(zkw, sd.getPath(), sd.getData(), sd.getVersion());<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * Returns whether or not secure authentication is enabled<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * (whether &lt;code&gt;hbase.security.authentication&lt;/code&gt; is set to<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * &lt;code&gt;kerberos&lt;/code&gt;.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   */<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  public static boolean isSecureZooKeeper(Configuration conf) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>    // Detection for embedded HBase client with jaas configuration<a name="line.870"></a>
+<span class="sourceLineNo">871</span>    // defined for third party programs.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>    try {<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      javax.security.auth.login.Configuration testConfig =<a name="line.873"></a>
+<span class="sourceLineNo">874</span>          javax.security.auth.login.Configuration.getConfiguration();<a name="line.874"></a>
+<span class="sourceLineNo">875</span>      if (testConfig.getAppConfigurationEntry("Client") == null<a name="line.875"></a>
+<span class="sourceLineNo">876</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.876"></a>
+<span class="sourceLineNo">877</span>            JaasConfiguration.CLIENT_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.877"></a>
+<span class="sourceLineNo">878</span>          &amp;&amp; testConfig.getAppConfigurationEntry(<a name="line.878"></a>
+<span class="sourceLineNo">879</span>              JaasConfiguration.SERVER_KEYTAB_KERBEROS_CONFIG_NAME) == null<a name="line.879"></a>
+<span class="sourceLineNo">880</span>          &amp;&amp; conf.get(HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL) == null<a name="line.880"></a>
+<span class="sourceLineNo">881</span>          &amp;&amp; conf.get(HConstants.ZK_SERVER_KERBEROS_PRINCIPAL) == null) {<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>        return false;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      }<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    } catch(Exception e) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      // No Jaas configuration defined.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>      return false;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
 <span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  private static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    return createACL(zkw, node, isSecureZooKeeper(zkw.getConfiguration()));<a name="line.891"></a>
+<span class="sourceLineNo">890</span>    // Master &amp; RSs uses hbase.zookeeper.client.*<a name="line.890"></a>
+<span class="sourceLineNo">891</span>    return "kerberos".equalsIgnoreCase(conf.get("hbase.security.authentication"));<a name="line.891"></a>
 <span class="sourceLineNo">892</span>  }<a name="line.892"></a>
 <span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.894"></a>
-<span class="sourceLineNo">895</span>                                         boolean isSecureZooKeeper) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    if (isSecureZooKeeper) {<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      ArrayList&lt;ACL&gt; acls = new ArrayList&lt;&gt;();<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // add permission to hbase supper user<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      String[] superUsers = zkw.getConfiguration().getStrings(Superusers.SUPERUSER_CONF_KEY);<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      String hbaseUser = null;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        hbaseUser = UserGroupInformation.getCurrentUser().getShortUserName();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      } catch (IOException e) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        LOG.debug("Could not acquire current User.", e);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      if (superUsers != null) {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>        List&lt;String&gt; groups = new ArrayList&lt;&gt;();<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        for (String user : superUsers) {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>          if (AuthUtil.isGroupPrincipal(user)) {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>            // TODO: Set node ACL for groups when ZK supports this feature<a name="line.913"></a>
-<span class="sourceLineNo">914</span>            groups.add(user);<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          } else {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            if(!user.equals(hbaseUser)) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>              acls.add(new ACL(Perms.ALL, new Id("sasl", user)));<a name="line.917"></a>
-<span class="sourceLineNo">918</span>            }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>          }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>        }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        if (!groups.isEmpty()) {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>          LOG.warn("Znode ACL setting for group {} is skipped, ZooKeeper doesn't support this " +<a name="line.922"></a>
-<span class="sourceLineNo">923</span>            "feature presently.", groups);<a name="line.923"></a>
+<span class="sourceLineNo">894</span>  private static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span>    return createACL(zkw, node, isSecureZooKeeper(zkw.getConfiguration()));<a name="line.895"></a>
+<span class="sourceLineNo">896</span>  }<a name="line.896"></a>
+<span class="sourceLineNo">897</span><a name="line.897"></a>
+<span class="sourceLineNo">898</span>  public static ArrayList&lt;ACL&gt; createACL(ZKWatcher zkw, String node,<a name="line.898"></a>
+<span class="sourceLineNo">899</span>                                         boolean isSecureZooKeeper) {<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    if (!node.startsWith(zkw.getZNodePaths().baseZNode)) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    }<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    if (isSecureZooKeeper) {<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      ArrayList&lt;ACL&gt; acls = new ArrayList&lt;&gt;();<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      // add permission to hbase supper user<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      String[] superUsers = zkw.getConfiguration().getStrings(Superusers.SUPERUSER_CONF_KEY);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>      String hbaseUser = null;<a name="line.907"></a>
+<span class="sourceLineNo">908</span>      try {<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        hbaseUser = UserGroupInformation.getCurrentUser().getShortUserName();<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      } catch (IOException e) {<a name="line.910"></a>
+<span class="sourceLineNo">911</span>        LOG.debug("Could not acquire current User.", e);<a name="line.911"></a>
+<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      if (superUsers != null) {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>        List&lt;String&gt; groups = new ArrayList&lt;&gt;();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>        for (String user : superUsers) {<a name="line.915"></a>
+<span class="sourceLineNo">916</span>          if (AuthUtil.isGroupPrincipal(user)) {<a name="line.916"></a>
+<span class="sourceLineNo">917</span>            // TODO: Set node ACL for groups when ZK supports this feature<a name="line.917"></a>
+<span class="sourceLineNo">918</span>            groups.add(user);<a name="line.918"></a>
+<span class="sourceLineNo">919</span>          } else {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>            if(!user.equals(hbaseUser)) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>              acls.add(new ACL(Perms.ALL, new Id("sasl", user)));<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
 <span class="sourceLineNo">924</span>        }<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      }<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      // Certain znodes are accessed directly by the client,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      // so they must be readable by non-authenticated clients<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.929"></a>
-<span class="sourceLineNo">930</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      } else {<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      }<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      return acls;<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    } else {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  //<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  // Node creation<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  //<a name="line.942"></a>
+<span class="sourceLineNo">925</span>        if (!groups.isEmpty()) {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>          LOG.warn("Znode ACL setting for group {} is skipped, ZooKeeper doesn't support this " +<a name="line.926"></a>
+<span class="sourceLineNo">927</span>            "feature presently.", groups);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      }<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      // Certain znodes are accessed directly by the client,<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      // so they must be readable by non-authenticated clients<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      if (zkw.getZNodePaths().isClientReadable(node)) {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.933"></a>
+<span class="sourceLineNo">934</span>        acls.addAll(Ids.READ_ACL_UNSAFE);<a name="line.934"></a>
+<span class="sourceLineNo">935</span>      } else {<a name="line.935"></a>
+<span class="sourceLineNo">936</span>        acls.addAll(Ids.CREATOR_ALL_ACL);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      }<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      return acls;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    } else {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      return Ids.OPEN_ACL_UNSAFE;<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    }<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
 <span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  /**<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   *<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * Set the specified znode to be an ephemeral node carrying the specified<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * data.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   *<a name="line.948"></a>
-<span class="sourceLineNo">949</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.949"></a>
-<span class="sourceLineNo">950</span>   *<a name="line.950"></a>
-<span class="sourceLineNo">951</span>   * If the node is not created successfully because it already exists, this<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * method will also set a watcher on the node.<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   *<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.954"></a>
-<span class="sourceLineNo">955</span>   *<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * @param zkw zk reference<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   * @param znode path of node<a name="line.957"></a>
-<span class="sourceLineNo">958</span>   * @param data data of node<a name="line.958"></a>
-<span class="sourceLineNo">959</span>   * @return true if node created, false if not, watch set in both cases<a name="line.959"></a>
-<span class="sourceLineNo">960</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.960"></a>
-<span class="sourceLineNo">961</span>   */<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      String znode, byte [] data)<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    throws KeeperException {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    boolean ret = true;<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    try {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.967"></a>
-<span class="sourceLineNo">968</span>          CreateMode.EPHEMERAL);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.969"></a>
-<span class="sourceLineNo">970</span>      ret = false;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    } catch (InterruptedException e) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      LOG.info("Interrupted", e);<a name="line.972"></a>
-<span class="sourceLineNo">973</span>      Thread.currentThread().interrupt();<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    }<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    if(!watchAndCheckExists(zkw, znode)) {<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      // It did exist but now it doesn't, try again<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      return createEphemeralNodeAndWatch(zkw, znode, data);<a name="line.977"></a>
+<span class="sourceLineNo">944</span>  //<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  // Node creation<a name="line.945"></a>
+<span class="sourceLineNo">946</span>  //<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span>  /**<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   *<a name="line.949"></a>
+<span class="sourceLineNo">950</span>   * Set the specified znode to be an ephemeral node carrying the specified<a name="line.950"></a>
+<span class="sourceLineNo">951</span>   * data.<a name="line.951"></a>
+<span class="sourceLineNo">952</span>   *<a name="line.952"></a>
+<span class="sourceLineNo">953</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.953"></a>
+<span class="sourceLineNo">954</span>   *<a name="line.954"></a>
+<span class="sourceLineNo">955</span>   * If the node is not created successfully because it already exists, this<a name="line.955"></a>
+<span class="sourceLineNo">956</span>   * method will also set a watcher on the node.<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   *<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.958"></a>
+<span class="sourceLineNo">959</span>   *<a name="line.959"></a>
+<span class="sourceLineNo">960</span>   * @param zkw zk reference<a name="line.960"></a>
+<span class="sourceLineNo">961</span>   * @param znode path of node<a name="line.961"></a>
+<span class="sourceLineNo">962</span>   * @param data data of node<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * @return true if node created, false if not, watch set in both cases<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   */<a name="line.965"></a>
+<span class="sourceLineNo">966</span>  public static boolean createEphemeralNodeAndWatch(ZKWatcher zkw,<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      String znode, byte [] data)<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    throws KeeperException {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    boolean ret = true;<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    try {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.971"></a>
+<span class="sourceLineNo">972</span>          CreateMode.EPHEMERAL);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      ret = false;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    } catch (InterruptedException e) {<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      LOG.info("Interrupted", e);<a name="line.976"></a>
+<span class="sourceLineNo">977</span>      Thread.currentThread().interrupt();<a name="line.977"></a>
 <span class="sourceLineNo">978</span>    }<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    return ret;<a name="line.979"></a>
-<span class="sourceLineNo">980</span>  }<a name="line.980"></a>
-<span class="sourceLineNo">981</span><a name="line.981"></a>
-<span class="sourceLineNo">982</span>  /**<a name="line.982"></a>
-<span class="sourceLineNo">983</span>   * Creates the specified znode to be a persistent node carrying the specified<a name="line.983"></a>
-<span class="sourceLineNo">984</span>   * data.<a name="line.984"></a>
-<span class="sourceLineNo">985</span>   *<a name="line.985"></a>
-<span class="sourceLineNo">986</span>   * Returns true if the node was successfully created, false if the node<a name="line.986"></a>
-<span class="sourceLineNo">987</span>   * already existed.<a name="line.987"></a>
-<span class="sourceLineNo">988</span>   *<a name="line.988"></a>
-<span class="sourceLineNo">989</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.989"></a>
-<span class="sourceLineNo">990</span>   *<a name="line.990"></a>
-<span class="sourceLineNo">991</span>   * If the node is not created successfully because it already exists, this<a name="line.991"></a>
-<span class="sourceLineNo">992</span>   * method will also set a watcher on the node but return false.<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   *<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   *<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   * @param zkw zk reference<a name="line.996"></a>
-<span class="sourceLineNo">997</span>   * @param znode path of node<a name="line.997"></a>
-<span class="sourceLineNo">998</span>   * @param data data of node<a name="line.998"></a>
-<span class="sourceLineNo">999</span>   * @return true if node created, false if not, watch set in both cases<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>   */<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    throws KeeperException {<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    boolean ret = true;<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    try {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>          CreateMode.PERSISTENT);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      ret = false;<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    } catch (InterruptedException e) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      zkw.interruptedException(e);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      return false;<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>    }<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    try {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    } catch (InterruptedException e) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      zkw.interruptedException(e);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      return false;<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    return ret;<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  }<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  /**<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>   * Creates the specified znode with the specified data but does not watch it.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>   *<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>   * Returns the znode of the newly created node<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   *<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.1029"></a>
+<span class="sourceLineNo">979</span>    if(!watchAndCheckExists(zkw, znode)) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      // It did exist but now it doesn't, try again<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      return createEphemeralNodeAndWatch(zkw, znode, data);<a name="line.981"></a>
+<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    return ret;<a name="line.983"></a>
+<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
+<span class="sourceLineNo">985</span><a name="line.985"></a>
+<span class="sourceLineNo">986</span>  /**<a name="line.986"></a>
+<span class="sourceLineNo">987</span>   * Creates the specified znode to be a persistent node carrying the specified<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   * data.<a name="line.988"></a>
+<span class="sourceLineNo">989</span>   *<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   * Returns true if the node was successfully created, false if the node<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   * already existed.<a name="line.991"></a>
+<span class="sourceLineNo">992</span>   *<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   * If the node is created successfully, a watcher is also set on the node.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   *<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * If the node is not created successfully because it already exists, this<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * method will also set a watcher on the node but return false.<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   *<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.998"></a>
+<span class="sourceLineNo">999</span>   *<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>   * @param zkw zk reference<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>   * @param znode path of node<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>   * @param data data of node<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>   * @return true if node created, false if not, watch set in both cases<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>   */<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>  public static boolean createNodeIfNotExistsAndWatch(<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>          ZKWatcher zkw, String znode, byte [] data)<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    throws KeeperException {<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    boolean ret = true;<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>    try {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>          CreateMode.PERSISTENT);<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      ret = false;<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>    } catch (InterruptedException e) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      zkw.interruptedException(e);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      return false;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>    try {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    } catch (InterruptedException e) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>      zkw.interruptedException(e);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      return false;<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    return ret;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  }<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span><a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>  /**<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>   * Creates the specified znode with the specified data but does not watch it.<a name="line.1029"></a>
 <span class="sourceLineNo">1030</span>   *<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>   * @param zkw zk reference<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>   * @param znode path of node<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>   * @param data data of node<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>   * @param createMode specifying whether the node to be created is ephemeral and/or sequential<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>   * @return true name of the newly created znode or null<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>   */<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  public static String createNodeIfNotExistsNoWatch(ZKWatcher zkw, String znode, byte[] data,<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      CreateMode createMode) throws KeeperException {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    String createdZNode = null;<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    try {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>      createdZNode = zkw.getRecoverableZooKeeper().create(znode, data,<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>          createACL(zkw, znode), createMode);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      return znode;<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    } catch (InterruptedException e) {<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      zkw.interruptedException(e);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>      return null;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    }<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    return createdZNode;<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>  }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>  /**<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   * Creates the specified node with the specified data and watches it.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>   *<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>   *<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1058"></a>
+<span class="sourceLineNo">1031</span>   * Returns the znode of the newly created node<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>   *<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>   * If there is another problem, a KeeperException will be thrown.<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>   *<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>   * @param zkw zk reference<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>   * @param znode path of node<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>   * @param data data of node<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>   * @param createMode specifying whether the node to be created is ephemeral and/or sequential<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>   * @return true name of the newly created znode or null<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>   */<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>  public static String createNodeIfNotExistsNoWatch(ZKWatcher zkw, String znode, byte[] data,<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      CreateMode createMode) throws KeeperException {<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>    String createdZNode = null;<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    try {<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      createdZNode = zkw.getRecoverableZooKeeper().create(znode, data,<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>          createACL(zkw, znode), createMode);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    } catch (KeeperException.NodeExistsException nee) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>      return znode;<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    } catch (InterruptedException e) {<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>      zkw.interruptedException(e);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>      return null;<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    return createdZNode;<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  }<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>  /**<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>   * Creates the specified node with the specified data and watches it.<a name="line.1058"></a>
 <span class="sourceLineNo">1059</span>   *<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * &lt;p&gt;Returns the version number of the created node if successful.<a name="line.1060"></a>
+<span class="sourceLineNo">1060</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1060"></a>
 <span class="sourceLineNo">1061</span>   *<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   * @param zkw zk reference<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   * @param znode path of node to create<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   * @param data data of node to create<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * @return version of node created<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>   * @throws KeeperException.NodeExistsException if node already exists<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>   */<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      String znode, byte [] data)<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    try {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>          CreateMode.PERSISTENT);<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      if (stat == null){<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>        // Likely a race condition. Someone deleted the znode.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>        throw KeeperException.create(KeeperException.Code.SYSTEMERROR,<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>            "ZK.exists returned null (i.e.: znode does not exist) for znode=" + znode);<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>      }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>      return stat.getVersion();<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    } catch (InterruptedException e) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      zkw.interruptedException(e);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      return -1;<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>  }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  /**<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>   * Async creates the specified node with the specified data.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>   *<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>   *<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1094"></a>
+<span class="sourceLineNo">1062</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   *<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>   * &lt;p&gt;Returns the version number of the created node if successful.<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>   *<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>   * @param zkw zk reference<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   * @param znode path of node to create<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   * @param data data of node to create<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>   * @return version of node created<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>   * @throws KeeperException.NodeExistsException if node already exists<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>   */<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>  public static int createAndWatch(ZKWatcher zkw,<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      String znode, byte [] data)<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    throws KeeperException, KeeperException.NodeExistsException {<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    try {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>          CreateMode.PERSISTENT);<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      Stat stat = zkw.getRecoverableZooKeeper().exists(znode, zkw);<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      if (stat == null){<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>        // Likely a race condition. Someone deleted the znode.<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>        throw KeeperException.create(KeeperException.Code.SYSTEMERROR,<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>            "ZK.exists returned null (i.e.: znode does not exist) for znode=" + znode);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span><a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      return stat.getVersion();<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    } catch (InterruptedException e) {<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      zkw.interruptedException(e);<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      return -1;<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>  }<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span><a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>  /**<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>   * Async creates the specified node with the specified data.<a name="line.1094"></a>
 <span class="sourceLineNo">1095</span>   *<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>   * @param zkw zk reference<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>   * @param znode path of node to create<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>   * @param data data of node to create<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>   * @param cb the callback to use for the creation<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>   * @param ctx the context to use for the creation<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>   */<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static void asyncCreate(ZKWatcher zkw,<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      String znode, byte [] data, final AsyncCallback.StringCallback cb,<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      final Object ctx) {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    zkw.getRecoverableZooKeeper().getZooKeeper().create(znode, data,<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        createACL(zkw, znode), CreateMode.PERSISTENT, cb, ctx);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  }<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span><a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>  /**<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>   * Creates the specified node, iff the node does not exist.  Does not set a<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>   * watch and fails silently if the node already exists.<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>   *<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>   * The node created is persistent and open access.<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>   *<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>   * @param zkw zk reference<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>   * @param znode path of node<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>   */<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>      String znode) throws KeeperException {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    createAndFailSilent(zkw, znode, new byte[0]);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>  }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span><a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>  /**<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>   * Creates the specified node containing specified data, iff the node does not exist.  Does<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   * not set a watch and fails silently if the node already exists.<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>   *<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>   * The node created is persistent and open access.<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>   *<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>   * @param zkw zk reference<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   * @param znode path of node<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   * @param data a byte array data to store in the znode<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>   */<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      String znode, byte[] data)<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    throws KeeperException {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    createAndFailSilent(zkw,<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>  }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>    throws KeeperException {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    String znode = create.getPath();<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    try {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      RecoverableZooKeeper zk = zkw.getRecoverableZooKeeper();<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      if (zk.exists(znode, false) == null) {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        zk.create(znode, create.getData(), create.getAcl(), CreateMode.fromFlag(create.getFlags()));<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    } catch(KeeperException.NoAuthException nee){<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      try {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>        if (null == zkw.getRecoverableZooKeeper().exists(znode, false)) {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>          // If we failed to create the file and it does not already exist.<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>          throw(nee);<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>        }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      } catch (InterruptedException ie) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        zkw.interruptedException(ie);<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    } catch(InterruptedException ie) {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      zkw.interruptedException(ie);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>  }<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span><a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  /**<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>   * Creates the specified node and all parent nodes required for it to exist.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>   *<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>   *<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>   * The nodes created are persistent and open access.<a name="line.1171"></a>
+<span class="sourceLineNo">1096</span>   * &lt;p&gt;Throws an exception if the node already exists.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>   *<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>   * &lt;p&gt;The node created is persistent and open access.<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>   *<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>   * @param zkw zk reference<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>   * @param znode path of node to create<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>   * @param data data of node to create<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>   * @param cb the callback to use for the creation<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>   * @param ctx the context to use for the creation<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>   */<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>  public static void asyncCreate(ZKWatcher zkw,<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      String znode, byte [] data, final AsyncCallback.StringCallback cb,<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      final Object ctx) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    zkw.getRecoverableZooKeeper().getZooKeeper().create(znode, data,<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        createACL(zkw, znode), CreateMode.PERSISTENT, cb, ctx);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>  }<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span><a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>  /**<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>   * Creates the specified node, iff the node does not exist.  Does not set a<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>   * watch and fails silently if the node already exists.<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>   *<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>   * The node created is persistent and open access.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>   *<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>   * @param zkw zk reference<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>   * @param znode path of node<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      String znode) throws KeeperException {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    createAndFailSilent(zkw, znode, new byte[0]);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>  /**<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>   * Creates the specified node containing specified data, iff the node does not exist.  Does<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>   * not set a watch and fails silently if the node already exists.<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>   *<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>   * The node created is persistent and open access.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>   *<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>   * @param zkw zk reference<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>   * @param znode path of node<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>   * @param data a byte array data to store in the znode<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   */<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>  public static void createAndFailSilent(ZKWatcher zkw,<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      String znode, byte[] data)<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    throws KeeperException {<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    createAndFailSilent(zkw,<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        (CreateAndFailSilent)ZKUtilOp.createAndFailSilent(znode, data));<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>  }<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span><a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>  private static void createAndFailSilent(ZKWatcher zkw, CreateAndFailSilent cafs)<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    throws KeeperException {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    CreateRequest create = (CreateRequest)toZooKeeperOp(zkw, cafs).toRequestRecord();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    String znode = create.getPath();<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    try {<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      RecoverableZooKeeper zk = zkw.getRecoverableZooKeeper();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      if (zk.exists(znode, false) == null) {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>        zk.create(znode, create.getData(), create.getAcl(), CreateMode.fromFlag(create.getFlags()));<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    } catch(KeeperException.NoAuthException nee){<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      try {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>        if (null == zkw.getRecoverableZooKeeper().exists(znode, false)) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>          // If we failed to create the file and it does not already exist.<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>          throw(nee);<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>        }<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      } catch (InterruptedException ie) {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>        zkw.interruptedException(ie);<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      }<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    } catch(InterruptedException ie) {<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      zkw.interruptedException(ie);<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>  }<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span><a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>  /**<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   * Creates the specified node and all parent nodes required for it to exist.<a name="line.1171"></a>
 <span class="sourceLineNo">1172</span>   *<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>   * @param zkw zk reference<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>   * @param znode path of node<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>   */<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    throws KeeperException {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  }<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>  /**<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>   * Creates the specified node and all parent nodes required for it to exist.  The creation of<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>   * parent znodes is not atomic with the leafe znode creation but the data is written atomically<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>   * when the leaf node is created.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>   *<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>   *<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>   * The nodes created are persistent and open access.<a name="line.1189"></a>
+<span class="sourceLineNo">1173</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   *<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   * The nodes created are persistent and open access.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   *<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   * @param zkw zk reference<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   * @param znode path of node<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   */<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>  public static void createWithParents(ZKWatcher zkw, String znode)<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    throws KeeperException {<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    createWithParents(zkw, znode, new byte[0]);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>  }<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span><a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  /**<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>   * Creates the specified node and all parent nodes required for it to exist.  The creation of<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>   * parent znodes is not atomic with the leafe znode creation but the data is written atomically<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>   * when the leaf node is created.<a name="line.1189"></a>
 <span class="sourceLineNo">1190</span>   *<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>   * @param zkw zk reference<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>   * @param znode path of node<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>   */<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    throws KeeperException {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    try {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>      if(znode == null) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        return;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          CreateMode.PERSISTENT);<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      return;<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      createWithParents(zkw, getParent(znode));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      createWithParents(zkw, znode, data);<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>    } catch(InterruptedException ie) {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      zkw.interruptedException(ie);<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  //<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  // Deletes<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>  //<a name="line.1215"></a>
+<span class="sourceLineNo">1191</span>   * No watches are set and no errors are thrown if the node already exists.<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>   *<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>   * The nodes created are persistent and open access.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>   *<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>   * @param zkw zk reference<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * @param znode path of node<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   */<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>  public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    throws KeeperException {<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    try {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      if(znode == null) {<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>        return;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      zkw.getRecoverableZooKeeper().create(znode, data, createACL(zkw, znode),<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>          CreateMode.PERSISTENT);<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    } catch(KeeperException.NodeExistsException nee) {<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      return;<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      createWithParents(zkw, getParent(znode));<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      createWithParents(zkw, znode, data);<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    } catch(InterruptedException ie) {<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      zkw.interruptedException(ie);<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    }<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
 <span class="sourceLineNo">1216</span><a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  /**<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>   */<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    throws KeeperException {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>    deleteNode(zkw, node, -1);<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>  }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span><a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>  /**<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>   * Delete the specified node with the specified version.  Sets no watches.<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>   * Throws all exceptions.<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>   */<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>                                   int version)<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>    throws KeeperException {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>    try {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      return true;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    } catch(KeeperException.BadVersionException bve) {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      return false;<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>    } catch(InterruptedException ie) {<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      zkw.interruptedException(ie);<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>      return false;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    }<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  }<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span><a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  /**<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * Deletes the specified node.  Fails silent if the node does not exist.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   *<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   * @param node the node to delete<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   */<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    throws KeeperException {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    deleteNodeFailSilent(zkw,<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>  private static void deleteNodeFailSilent(ZKWatcher zkw,<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      DeleteNodeFailSilent dnfs) throws KeeperException {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    DeleteRequest delete = (DeleteRequest)toZooKeeperOp(zkw, dnfs).toRequestRecord();<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      zkw.getRecoverableZooKeeper().delete(delete.getPath(), delete.getVersion());<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    } catch(InterruptedException ie) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      zkw.interruptedException(ie);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>  }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span><a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>  /**<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>   * Delete the specified node and all of it's children.<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * &lt;p&gt;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * If the node does not exist, just returns.<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   * &lt;p&gt;<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * children.<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   */<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    throws KeeperException {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>  }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span><a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>  /**<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   * Delete all the children of the specified node but not the node itself.<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>   *<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>   * Sets no watches.  Throws all exceptions besides dealing with deletion of<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * children.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   *<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  public static void deleteChildrenRecursively(ZKWatcher zkw, String node)<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>      throws KeeperException {<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    deleteChildrenRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  }<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span><a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  /**<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>   * Delete all the children of the specified node but not the node itself. This<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>   * will first traverse the znode tree for listing the children and then delete<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>   * these znodes using multi-update api or sequential based on the specified<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>   * configurations.<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>   * &lt;p&gt;<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>   * children.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>   * &lt;p&gt;<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>   * If the following is true:<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>   * &lt;ul&gt;<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * &lt;/ul&gt;<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   *<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * @param zkw<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>   *          - zk reference<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   * @param runSequentialOnMultiFailure<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>   *          operations one-by-one (sequentially)<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>   * @param pathRoots<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>   *          - path of the parent node(s)<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>   * @throws KeeperException.NotEmptyException<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   *           if node has children while deleting<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * @throws KeeperException<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   *           if unexpected ZooKeeper exception<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * @throws IllegalArgumentException<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *           if an invalid path is specified<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   */<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  public static void deleteChildrenRecursivelyMultiOrSequential(<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>          ZKWatcher zkw, boolean runSequentialOnMultiFailure,<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          String... pathRoots) throws KeeperException {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      LOG.warn("Given path is not valid!");<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      return;<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    for (String eachRoot : pathRoots) {<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      List&lt;String&gt; children = listChildrenBFSNoWatch(zkw, eachRoot);<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>      }<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  }<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span><a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>  /**<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Delete the specified node and its children. This traverse the<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * znode tree for listing the children and then delete<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * these znodes including the parent using multi-update api or<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * sequential based on the specified configurations.<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   * &lt;p&gt;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>   * children.<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>   * &lt;p&gt;<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>   * If the following is true:<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>   * &lt;ul&gt;<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * &lt;/ul&gt;<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>   *<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>   * @param zkw<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   *          - zk reference<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   * @param runSequentialOnMultiFailure<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>   *          operations one-by-one (sequentially)<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>   * @param pathRoots<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>   *          - path of the parent node(s)<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>   * @throws KeeperException.NotEmptyException<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>   *           if node has children while deleting<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>   * @throws KeeperException<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   *           if unexpected ZooKeeper exception<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * @throws IllegalArgumentException<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   *           if an invalid path is specified<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>   */<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static void deleteNodeRecursivelyMultiOrSequential(ZKWatcher zkw,<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      boolean runSequentialOnMultiFailure, String... pathRoots) throws KeeperException {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>      LOG.warn("Given path is not valid!");<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      return;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    for (String eachRoot : pathRoots) {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      // ZooKeeper Watches are one time triggers; When children of parent nodes are deleted<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      // recursively, must set another watch, get notified of delete node<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      List&lt;String&gt; children = listChildrenBFSAndWatchThem(zkw, eachRoot);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      try {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>        if (zkw.getRecoverableZooKeeper().exists(eachRoot, zkw) != null) {<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>          ops.add(ZKUtilOp.deleteNodeFailSilent(eachRoot));<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      } catch (InterruptedException e) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>        zkw.interruptedException(e);<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>      }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    }<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>  }<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span><a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>  /**<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>   * Chunks the provided {@code ops} when their approximate size exceeds the the configured limit.<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>   * Take caution that this can ONLY be used for operations where atomicity is not important,<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>   * e.g. deletions. It must not be used when atomicity of the operations is critical.<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>   *<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>   * @param zkw reference to the {@link ZKWatcher} which contains configuration and constants<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>   * @param runSequentialOnMultiFailure if true when we get a ZooKeeper exception that could<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>   *        retry the operations one-by-one (sequentially)<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>   * @param ops list of ZKUtilOp {@link ZKUtilOp} to partition while submitting batched multi<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>   *        or sequential<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>   * @throws KeeperException unexpected ZooKeeper Exception / Zookeeper unreachable<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>   */<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>  private static void submitBatchedMultiOrSequential(ZKWatcher zkw,<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      boolean runSequentialOnMultiFailure, List&lt;ZKUtilOp&gt; ops) throws KeeperException {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>    // at least one element should exist<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    if (ops.isEmpty()) {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      return;<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>    final int maxMultiSize = zkw.getRecoverableZooKeeper().getMaxMultiSizeLimit();<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>    // Batch up the items to over smashing through jute.maxbuffer with too many Ops.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    final List&lt;List&lt;ZKUtilOp&gt;&gt; batchedOps = partitionOps(ops, maxMultiSize);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    // Would use forEach() but have to handle KeeperException<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    for (List&lt;ZKUtilOp&gt; batch : batchedOps) {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      multiOrSequential(zkw, batch, runSequentialOnMultiFailure);<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    }<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  /**<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   * Partition the list of {@code ops} by size (using {@link #estimateSize(ZKUtilOp)}).<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>   */<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>  static List&lt;List&lt;ZKUtilOp&gt;&gt; partitionOps(List&lt;ZKUtilOp&gt; ops, int maxPartitionSize) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    List&lt;List&lt;ZKUtilOp&gt;&gt; partitionedOps = new ArrayList&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    List&lt;ZKUtilOp&gt; currentPartition = new ArrayList&lt;&gt;();<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    int currentPartitionSize = 0;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    partitionedOps.add(currentPartition);<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>    Iterator&lt;ZKUtilOp&gt; iter = ops.iterator();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    while (iter.hasNext()) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      ZKUtilOp currentOp = iter.next();<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>      int currentOpSize = estimateSize(currentOp);<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span><a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      // Roll a new partition if necessary<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      // If the current partition is empty, put the element in there anyways.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      // We can roll a new partition if we get another element<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      if (!currentPartition.isEmpty() &amp;&amp; currentOpSize + currentPartitionSize &gt; maxPartitionSize) {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>        currentPartition = new ArrayList&lt;&gt;();<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>        partitionedOps.add(currentPartition);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        currentPartitionSize = 0;<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      // Add the current op to the partition<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      currentPartition.add(currentOp);<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>      // And record its size<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>      currentPartitionSize += currentOpSize;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    return partitionedOps;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>  static int estimateSize(ZKUtilOp op) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    return Bytes.toBytes(op.getPath()).length;<a name="line.1456"></a>
+<span class="sourceLineNo">1217</span>  //<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  // Deletes<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>  //<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span><a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>  /**<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>   * Delete the specified node.  Sets no watches.  Throws all exceptions.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>   */<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  public static void deleteNode(ZKWatcher zkw, String node)<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    throws KeeperException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    deleteNode(zkw, node, -1);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>   * Delete the specified node with the specified version.  Sets no watches.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>   * Throws all exceptions.<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   */<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  public static boolean deleteNode(ZKWatcher zkw, String node,<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>                                   int version)<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    throws KeeperException {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>    try {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      zkw.getRecoverableZooKeeper().delete(node, version);<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      return true;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    } catch(KeeperException.BadVersionException bve) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      return false;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    } catch(InterruptedException ie) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      zkw.interruptedException(ie);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      return false;<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>  }<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span><a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>  /**<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   * Deletes the specified node.  Fails silent if the node does not exist.<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   *<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   * @param node the node to delete<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>   */<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  public static void deleteNodeFailSilent(ZKWatcher zkw, String node)<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>    throws KeeperException {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    deleteNodeFailSilent(zkw,<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      (DeleteNodeFailSilent)ZKUtilOp.deleteNodeFailSilent(node));<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>  }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span><a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  private static void deleteNodeFailSilent(ZKWatcher zkw,<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>      DeleteNodeFailSilent dnfs) throws KeeperException {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>    DeleteRequest delete = (DeleteRequest)toZooKeeperOp(zkw, dnfs).toRequestRecord();<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    try {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>      zkw.getRecoverableZooKeeper().delete(delete.getPath(), delete.getVersion());<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    } catch(KeeperException.NoNodeException nne) {<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    } catch(InterruptedException ie) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      zkw.interruptedException(ie);<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>  }<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span><a name="line.1270"></a>
+<span class="sourceLineNo">1271</span><a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * Delete the specified node and all of it's children.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * &lt;p&gt;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * If the node does not exist, just returns.<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * &lt;p&gt;<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>   * children.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>   */<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>  public static void deleteNodeRecursively(ZKWatcher zkw, String node)<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    throws KeeperException {<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    deleteNodeRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  }<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span><a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>  /**<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>   * Delete all the children of the specified node but not the node itself.<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>   *<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * Sets no watches.  Throws all exceptions besides dealing with deletion of<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * children.<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   */<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>  public static void deleteChildrenRecursively(ZKWatcher zkw, String node)<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      throws KeeperException {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    deleteChildrenRecursivelyMultiOrSequential(zkw, true, node);<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span><a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>  /**<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * Delete all the children of the specified node but not the node itself. This<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   * will first traverse the znode tree for listing the children and then delete<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>   * these znodes using multi-update api or sequential based on the specified<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>   * configurations.<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>   * &lt;p&gt;<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>   * children.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>   * &lt;p&gt;<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * If the following is true:<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   * &lt;ul&gt;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * &lt;/ul&gt;<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>   *<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>   * @param zkw<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>   *          - zk reference<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>   * @param runSequentialOnMultiFailure<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>   *          operations one-by-one (sequentially)<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>   * @param pathRoots<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>   *          - path of the parent node(s)<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * @throws KeeperException.NotEmptyException<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   *           if node has children while deleting<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   * @throws KeeperException<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   *           if unexpected ZooKeeper exception<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @throws IllegalArgumentException<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   *           if an invalid path is specified<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  public static void deleteChildrenRecursivelyMultiOrSequential(<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>          ZKWatcher zkw, boolean runSequentialOnMultiFailure,<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>          String... pathRoots) throws KeeperException {<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>      LOG.warn("Given path is not valid!");<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      return;<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    for (String eachRoot : pathRoots) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      List&lt;String&gt; children = listChildrenBFSNoWatch(zkw, eachRoot);<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    }<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>  }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span><a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>  /**<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>   * Delete the specified node and its children. This traverse the<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * znode tree for listing the children and then delete<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   * these znodes including the parent using multi-update api or<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>   * sequential based on the specified configurations.<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>   * &lt;p&gt;<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>   * Sets no watches. Throws all exceptions besides dealing with deletion of<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>   * children.<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>   * &lt;p&gt;<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>   * If the following is true:<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>   * &lt;ul&gt;<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * &lt;li&gt;runSequentialOnMultiFailure is true<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * &lt;/ul&gt;<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * on calling multi, we get a ZooKeeper exception that can be handled by a<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * sequential call(*), we retry the operations one-by-one (sequentially).<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   *<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * @param zkw<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   *          - zk reference<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>   * @param runSequentialOnMultiFailure<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>   *          - if true when we get a ZooKeeper exception that could retry the<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>   *          operations one-by-one (sequentially)<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>   * @param pathRoots<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>   *          - path of the parent node(s)<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>   * @throws KeeperException.NotEmptyException<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>   *           if node has children while deleting<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   * @throws KeeperException<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>   *           if unexpected ZooKeeper exception<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   * @throws IllegalArgumentException<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>   *           if an invalid path is specified<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>   */<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>  public static void deleteNodeRecursivelyMultiOrSequential(ZKWatcher zkw,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      boolean runSequentialOnMultiFailure, String... pathRoots) throws KeeperException {<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    if (pathRoots == null || pathRoots.length &lt;= 0) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      LOG.warn("Given path is not valid!");<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      return;<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    }<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    List&lt;ZKUtilOp&gt; ops = new ArrayList&lt;&gt;();<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    for (String eachRoot : pathRoots) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // ZooKeeper Watches are one time triggers; When children of parent nodes are deleted<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      // recursively, must set another watch, get notified of delete node<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      List&lt;String&gt; children = listChildrenBFSAndWatchThem(zkw, eachRoot);<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // Delete the leaves first and eventually get rid of the root<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      for (int i = children.size() - 1; i &gt;= 0; --i) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        ops.add(ZKUtilOp.deleteNodeFailSilent(children.get(i)));<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      }<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      try {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        if (zkw.getRecoverableZooKeeper().exists(eachRoot, zkw) != null) {<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>          ops.add(ZKUtilOp.deleteNodeFailSilent(eachRoot));<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>        }<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>      } catch (InterruptedException e) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        zkw.interruptedException(e);<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      }<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    }<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    submitBatchedMultiOrSequential(zkw, runSequentialOnMultiFailure, ops);<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  }<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  /**<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>   * Chunks the provided {@code ops} when their approximate size exceeds the the configured limit.<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>   * Take caution that this can ONLY be used for operations where atomicity is not important,<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>   * e.g. deletions. It must not be used when atomicity of the operations is critical.<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>   *<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>   * @param zkw reference to the {@link ZKWatcher} which contains configuration and constants<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>   * @param runSequentialOnMultiFailure if true when we get a ZooKeeper exception that could<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>   *        retry the operations one-by-one (sequentially)<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>   * @param ops list of ZKUtilOp {@link ZKUtilOp} to partition while submitting batched multi<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>   *        or sequential<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>   * @throws KeeperException unexpected ZooKeeper Exception / Zookeeper unreachable<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   */<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>  private static void submitBatchedMultiOrSequential(ZKWatcher zkw,<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      boolean runSequentialOnMultiFailure, List&lt;ZKUtilOp&gt; ops) throws KeeperException {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>    // at least one element should exist<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    if (ops.isEmpty()) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      return;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    final int maxMultiSize = zkw.getRecoverableZooKeeper().getMaxMultiSizeLimit();<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    // Batch up the items to over smashing through jute.maxbuffer with too many Ops.<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>    final List&lt;List&lt;ZKUtilOp&gt;&gt; batchedOps = partitionOps(ops, maxMultiSize);<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    // Would use forEach() but have to handle KeeperException<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>    for (List&lt;ZKUtilOp&gt; batch : batchedOps) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      multiOrSequential(zkw, batch, runSequentialOnMultiFailure);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>  }<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span><a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>  /**<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>   * Partition the list of {@code ops} by size (using {@link #estimateSize(ZKUtilOp)}).<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>   */<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  static List&lt;List&lt;ZKUtilOp&gt;&gt; partitionOps(List&lt;ZKUtilOp&gt; ops, int maxPartitionSize) {<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    List&lt;List&lt;ZKUtilOp&gt;&gt; partitionedOps = new ArrayList&lt;&gt;();<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    List&lt;ZKUtilOp&gt; currentPartition = new ArrayList&lt;&gt;();<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>    int currentPartitionSize = 0;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>    partitionedOps.add(currentPartition);<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>    Iterator&lt;ZKUtilOp&gt; iter = ops.iterator();<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>    while (iter.hasNext()) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      ZKUtilOp currentOp = iter.next();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      int currentOpSize = estimateSize(currentOp);<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span><a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>      // Roll a new partition if necessary<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      // If the current partition is empty, put the element in there anyways.<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      // We can roll a new partition if we get another element<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (!currentPartition.isEmpty() &amp;&amp; currentOpSize + currentPartitionSize &gt; maxPartitionSize) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        currentPartition = new ArrayList&lt;&gt;();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        partitionedOps.add(currentPartition);<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        currentPartitionSize = 0;<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      }<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span><a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // Add the current op to the partition<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      currentPartition.add(currentOp);<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      // And record its size<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>      currentPartitionSize += currentOpSize;<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    }<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    return partitionedOps;<a name="line.1456"></a>
 <span class="sourceLineNo">1457</span>  }<a name="line.1457"></a>
 <span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>  /**<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   * in the same order as that of the traversal. Lists all the children without<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>   * setting any watches.<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>   *<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>   * @param zkw<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>   *          - zk reference<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>   * @param znode<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>   *          - path of node<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>   * @return list of children znodes under the path<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>   * @throws KeeperException<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>   *           if unexpected ZooKeeper exception<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>   */<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private static List&lt;String&gt; listChildrenBFSNoWatch(ZKWatcher zkw,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final String znode) throws KeeperException {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>    queue.add(znode);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    while (true) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      String node = queue.pollFirst();<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      if (node == null) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        break;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      }<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      List&lt;String&gt; children = listChildrenNoWatch(zkw, node);<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (children == null) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        continue;<a name="line.1484"></a>
+<span class="sourceLineNo">1459</span>  static int estimateSize(ZKUtilOp op) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    return Bytes.toBytes(op.getPath()).length;<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>  }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span><a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  /**<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>   * in the same order as that of the traversal. Lists all the children without<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>   * setting any watches.<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>   *<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>   * @param zkw<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>   *          - zk reference<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>   * @param znode<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>   *          - path of node<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>   * @return list of children znodes under the path<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * @throws KeeperException<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>   *           if unexpected ZooKeeper exception<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>   */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>  private static List&lt;String&gt; listChildrenBFSNoWatch(ZKWatcher zkw,<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      final String znode) throws KeeperException {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>    queue.add(znode);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    while (true) {<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>      String node = queue.pollFirst();<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>      if (node == null) {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        break;<a name="line.1484"></a>
 <span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      for (final String child : children) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>        final String childPath = node + "/" + child;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        queue.add(childPath);<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>        tree.add(childPath);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>      }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>    }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>    return tree;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span><a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>  /**<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>   * in the same order as that of the traversal.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>   * Lists all the children and set watches on to them.<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>   *<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>   * @param zkw<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>   *          - zk reference<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>   * @param znode<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>   *          - path of node<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>   * @return list of children znodes under the path<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>   * @throws KeeperException<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>   *           if unexpected ZooKeeper exception<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>   */<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>  private static List&lt;String&gt; listChildrenBFSAndWatchThem(ZKWatcher zkw, final String znode)<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      throws KeeperException {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    queue.add(znode);<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    while (true) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>      String node = queue.pollFirst();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      if (node == null) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        break;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      List&lt;String&gt; children = listChildrenAndWatchThem(zkw, node);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>      if (children == null) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>        continue;<a name="line.1520"></a>
+<span class="sourceLineNo">1486</span>      List&lt;String&gt; children = listChildrenNoWatch(zkw, node);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (children == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        continue;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      for (final String child : children) {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        final String childPath = node + "/" + child;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>        queue.add(childPath);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        tree.add(childPath);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      }<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    return tree;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>  }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span><a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>  /**<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>   * BFS Traversal of all the children under path, with the entries in the list,<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>   * in the same order as that of the traversal.<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>   * Lists all the children and set watches on to them.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>   *<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>   * @param zkw<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>   *          - zk reference<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>   * @param znode<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>   *          - path of node<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>   * @return list of children znodes under the path<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>   * @throws KeeperException<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>   *           if unexpected ZooKeeper exception<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   */<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  private static List&lt;String&gt; listChildrenBFSAndWatchThem(ZKWatcher zkw, final String znode)<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      throws KeeperException {<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    Deque&lt;String&gt; queue = new LinkedList&lt;&gt;();<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    List&lt;String&gt; tree = new ArrayList&lt;&gt;();<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    queue.add(znode);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    while (true) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      String node = queue.pollFirst();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      if (node == null) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>        break;<a name="line.1520"></a>
 <span class="sourceLineNo">1521</span>      }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>      for (final String child : children) {<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        final String childPath = node + "/" + child;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>        queue.add(childPath);<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>        tree.add(childPath);<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      }<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    return tree;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  /**<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>   * Represents an action taken by ZKUtil, e.g. createAndFailSilent.<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>   * These actions are higher-level than ZKOp actions, which represent<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>   * individual actions in the ZooKeeper API, like create.<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public abstract static class ZKUtilOp {<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    private String path;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    @Override public String toString() {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      return this.getClass().getSimpleName() + ", path=" + this.path;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    }<a name="line.1541"></a>
+<span class="sourceLineNo">1522</span>      List&lt;String&gt; children = listChildrenAndWatchThem(zkw, node);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      if (children == null) {<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>        continue;<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      for (final String child : children) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>        final String childPath = node + "/" + child;<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        queue.add(childPath);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>        tree.add(childPath);<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>      }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    return tree;<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span><a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>  /**<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>   * Represents an action taken by ZKUtil, e.g. createAndFailSilent.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>   * These actions are higher-level than ZKOp actions, which represent<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>   * individual actions in the ZooKeeper API, like create.<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>   */<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  public abstract static class ZKUtilOp {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    private String path;<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span><a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>    private ZKUtilOp(String path) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      this.path = path;<a name="line.1544"></a>
+<span class="sourceLineNo">1543</span>    @Override public String toString() {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      return this.getClass().getSimpleName() + ", path=" + this.path;<a name="line.1544"></a>
 <span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
 <span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    /**<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>     * @return a createAndFailSilent ZKUtilOp<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>     */<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>    public static ZKUtilOp createAndFailSilent(String path, byte[] data) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      return new CreateAndFailSilent(path, data);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span><a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>    /**<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>     * @return a deleteNodeFailSilent ZKUtilOP<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>     */<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public static ZKUtilOp deleteNodeFailSilent(String path) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      return new DeleteNodeFailSilent(path);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    /**<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>     * @return a setData ZKUtilOp<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>     */<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>    public static ZKUtilOp setData(String path, byte[] data) {<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      return new SetData(path, data);<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span><a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    /**<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>     * @return a setData ZKUtilOp<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>     */<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    public static ZKUtilOp setData(String path, byte[] data, int version) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      return new SetData(path, data, version);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    }<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span><a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>    /**<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>     * @return path to znode where the ZKOp will occur<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>     */<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>    public String getPath() {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      return path;<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>    }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    /**<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>     * ZKUtilOp representing createAndFailSilent in ZooKeeper<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>     * (attempt to create node, ignore error if already exists)<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>     */<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    public static final class CreateAndFailSilent extends ZKUtilOp {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      private byte [] data;<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span><a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      private CreateAndFailSilent(String path, byte [] data) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        super(path);<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        this.data = data;<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      public byte[] getData() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        return data;<a name="line.1595"></a>
+<span class="sourceLineNo">1547</span>    private ZKUtilOp(String path) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      this.path = path;<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>    }<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span><a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    /**<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>     * @return a createAndFailSilent ZKUtilOp<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>     */<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>    public static ZKUtilOp createAndFailSilent(String path, byte[] data) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      return new CreateAndFailSilent(path, data);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>    }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span><a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>    /**<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>     * @return a deleteNodeFailSilent ZKUtilOP<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>     */<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    public static ZKUtilOp deleteNodeFailSilent(String path) {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>      return new DeleteNodeFailSilent(path);<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    /**<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>     * @return a setData ZKUtilOp<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>     */<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    public static ZKUtilOp setData(String path, byte[] data) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      return new SetData(path, data);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>    }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    /**<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>     * @return a setData ZKUtilOp<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>     */<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>    public static ZKUtilOp setData(String path, byte[] data, int version) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      return new SetData(path, data, version);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>    }<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    /**<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>     * @return path to znode where the ZKOp will occur<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>     */<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>    public String getPath() {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      return path;<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>    }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    /**<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>     * ZKUtilOp representing createAndFailSilent in ZooKeeper<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>     * (attempt to create node, ignore error if already exists)<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>     */<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    public static final class CreateAndFailSilent extends ZKUtilOp {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      private byte [] data;<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      private CreateAndFailSilent(String path, byte [] data) {<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>        super(path);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>        this.data = data;<a name="line.1595"></a>
 <span class="sourceLineNo">1596</span>      }<a name="line.1596"></a>
 <span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      @Override<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      public boolean equals(Object o) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        if (this == o) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>          return true;<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>        }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>        if (!(o instanceof CreateAndFailSilent)) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>          return false;<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>        }<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        CreateAndFailSilent op = (CreateAndFailSilent) o;<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1598</span>      public byte[] getData() {<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        return data;<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      }<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span><a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      @Override<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      public boolean equals(Object o) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>        if (this == o) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>          return true;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>        if (!(o instanceof CreateAndFailSilent)) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>          return false;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>        }<a name="line.1609"></a>
 <span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      @Override<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      public int hashCode() {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        int ret = 17 + getPath().hashCode() * 31;<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>        return ret * 31 + Bytes.hashCode(data);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      }<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span><a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>    /**<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>     * ZKUtilOp representing deleteNodeFailSilent in ZooKeeper<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>     * (attempt to delete node, ignore error if node doesn't exist)<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>     */<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    public static final class DeleteNodeFailSilent extends ZKUtilOp {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      private DeleteNodeFailSilent(String path) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        super(path);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      @Override<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      public boolean equals(Object o) {<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        if (this == o) {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>          return true;<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        }<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        if (!(o instanceof DeleteNodeFailSilent)) {<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>          return false;<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span><a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        return super.equals(o);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      @Override<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      public int hashCode() {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        return getPath().hashCode();<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    /**<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>     * ZKUtilOp representing setData in ZooKeeper<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>     */<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    public static final class SetData extends ZKUtilOp {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>      private byte[] data;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      private int version = -1;<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span><a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      private SetData(String path, byte[] data) {<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>        super(path);<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>        this.data = data;<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>      }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>      private SetData(String path, byte[] data, int version) {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>        super(path);<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>        this.data = data;<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        this.version = version;<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      }<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span><a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      public byte[] getData() {<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>        return data;<a name="line.1664"></a>
+<span class="sourceLineNo">1611</span>        CreateAndFailSilent op = (CreateAndFailSilent) o;<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data);<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      @Override<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      public int hashCode() {<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>        int ret = 17 + getPath().hashCode() * 31;<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        return ret * 31 + Bytes.hashCode(data);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      }<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>    }<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span><a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    /**<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>     * ZKUtilOp representing deleteNodeFailSilent in ZooKeeper<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>     * (attempt to delete node, ignore error if node doesn't exist)<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>     */<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    public static final class DeleteNodeFailSilent extends ZKUtilOp {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      private DeleteNodeFailSilent(String path) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        super(path);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      @Override<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      public boolean equals(Object o) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        if (this == o) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>          return true;<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        if (!(o instanceof DeleteNodeFailSilent)) {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>          return false;<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>        }<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span><a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        return super.equals(o);<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span><a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      @Override<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>      public int hashCode() {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>        return getPath().hashCode();<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span><a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>    /**<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>     * ZKUtilOp representing setData in ZooKeeper<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>     */<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>    public static final class SetData extends ZKUtilOp {<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      private byte[] data;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      private int version = -1;<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      private SetData(String path, byte[] data) {<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>        super(path);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>        this.data = data;<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      private SetData(String path, byte[] data, int version) {<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>        super(path);<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>        this.data = data;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>        this.version = version;<a name="line.1664"></a>
 <span class="sourceLineNo">1665</span>      }<a name="line.1665"></a>
 <span class="sourceLineNo">1666</span><a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      public int getVersion() {<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>        return version;<a name="line.1668"></a>
+<span class="sourceLineNo">1667</span>      public byte[] getData() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>        return data;<a name="line.1668"></a>
 <span class="sourceLineNo">1669</span>      }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      @Override<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>      public boolean equals(Object o) {<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (this == o) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          return true;<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        }<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        if (!(o instanceof SetData)) {<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>          return false;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        SetData op = (SetData) o;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data)<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>            &amp;&amp; getVersion() == op.getVersion();<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      }<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      @Override<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      public int hashCode() {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>        int ret = getPath().hashCode();<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        ret = ret * 31 + Bytes.hashCode(data);<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        return ret * 31 + Integer.hashCode(version);<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      }<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    }<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span><a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>  /**<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>   * Convert from ZKUtilOp to ZKOp<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>   */<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  private static Op toZooKeeperOp(ZKWatcher zkw, ZKUtilOp op) throws UnsupportedOperationException {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>    if(op == null) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      return null;<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span><a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>    if (op instanceof CreateAndFailSilent) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>      CreateAndFailSilent cafs = (CreateAndFailSilent)op;<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      return Op.create(cafs.getPath(), cafs.getData(), createACL(zkw, cafs.getPath()),<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        CreateMode.PERSISTENT);<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      DeleteNodeFailSilent dnfs = (DeleteNodeFailSilent)op;<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      return Op.delete(dnfs.getPath(), -1);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    } else if (op instanceof SetData) {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>      SetData sd = (SetData) op;<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      return Op.setData(sd.getPath(), sd.getData(), sd.getVersion());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    } else {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>      throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        + op.getClass().getName());<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>  }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span><a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>  /**<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>   * Use ZooKeeper's multi-update functionality.<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>   *<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>   * If all of the following are true:<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>   * - runSequentialOnMultiFailure is true<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>   * - on calling multi, we get a ZooKeeper exception that can be handled by a sequential call(*)<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>   * Then:<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>   * - we retry the operations one-by-one (sequentially)<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>   *<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>   * Note *: an example is receiving a NodeExistsException from a "create" call.  Without multi,<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>   * a user could call "createAndFailSilent" to ensure that a node exists if they don't care who<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>   * actually created the node (i.e. the NodeExistsException from ZooKeeper is caught).<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * This will cause all operations in the multi to fail, however, because<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * the NodeExistsException that zk.create throws will fail the multi transaction.<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   * In this case, if the previous conditions hold, the commands are run sequentially, which should<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   * result in the correct final state, but means that the operations will not run atomically.<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>   *<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>   */<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  public static void multiOrSequential(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops,<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>                                       boolean runSequentialOnMultiFailure) throws KeeperException {<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    if (zkw.getConfiguration().get("hbase.zookeeper.useMulti") != null) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      LOG.warn("hbase.zookeeper.useMulti is deprecated. Default to true always.");<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    if (ops == null) {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      return;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>    }<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span><a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>    List&lt;Op&gt; zkOps = new LinkedList&lt;&gt;();<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    for (ZKUtilOp op : ops) {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      zkOps.add(toZooKeeperOp(zkw, op));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    try {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      zkw.getRecoverableZooKeeper().multi(zkOps);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    } catch (KeeperException ke) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      switch (ke.code()) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>        case NODEEXISTS:<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        case NONODE:<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>        case BADVERSION:<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>        case NOAUTH:<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>        case NOTEMPTY:<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>          // if we get an exception that could be solved by running sequentially<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>          // (and the client asked us to), then break out and run sequentially<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>          if (runSequentialOnMultiFailure) {<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            LOG.info("multi exception: {}; running operations sequentially " +<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>              "(runSequentialOnMultiFailure=true); {}", ke.toString(),<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>              ops.stream().map(o -&gt; o.toString()).collect(Collectors.joining(",")));<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>            processSequentially(zkw, ops);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>            break;<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>          }<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>        default:<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>          throw ke;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    } catch (InterruptedException ie) {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>      zkw.interruptedException(ie);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>  }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>  private static void processSequentially(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops)<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      throws KeeperException, NoNodeException {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    for (ZKUtilOp op : ops) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      if (op instanceof CreateAndFailSilent) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>        createAndFailSilent(zkw, (CreateAndFailSilent) op);<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>      } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>        deleteNodeFailSilent(zkw, (DeleteNodeFailSilent) op);<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      } else if (op instanceof SetData) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        setData(zkw, (SetData) op);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      } else {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>            + op.getClass().getName());<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      }<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span><a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>  //<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  // ZooKeeper cluster information<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  //<a name="line.1794"></a>
+<span class="sourceLineNo">1671</span>      public int getVersion() {<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        return version;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      }<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span><a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>      @Override<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>      public boolean equals(Object o) {<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        if (this == o) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>          return true;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>        }<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>        if (!(o instanceof SetData)) {<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>          return false;<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>        }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        SetData op = (SetData) o;<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>        return getPath().equals(op.getPath()) &amp;&amp; Arrays.equals(data, op.data)<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>            &amp;&amp; getVersion() == op.getVersion();<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>      }<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span><a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      @Override<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      public int hashCode() {<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        int ret = getPath().hashCode();<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>        ret = ret * 31 + Bytes.hashCode(data);<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        return ret * 31 + Integer.hashCode(version);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  }<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span><a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>  /**<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>   * Convert from ZKUtilOp to ZKOp<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>   */<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>  private static Op toZooKeeperOp(ZKWatcher zkw, ZKUtilOp op) throws UnsupportedOperationException {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    if(op == null) {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      return null;<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>    }<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span><a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>    if (op instanceof CreateAndFailSilent) {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      CreateAndFailSilent cafs = (CreateAndFailSilent)op;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      return Op.create(cafs.getPath(), cafs.getData(), createACL(zkw, cafs.getPath()),<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        CreateMode.PERSISTENT);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      DeleteNodeFailSilent dnfs = (DeleteNodeFailSilent)op;<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      return Op.delete(dnfs.getPath(), -1);<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    } else if (op instanceof SetData) {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      SetData sd = (SetData) op;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      return Op.setData(sd.getPath(), sd.getData(), sd.getVersion());<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>    } else {<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>      throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>        + op.getClass().getName());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>  }<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span><a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>  /**<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>   * Use ZooKeeper's multi-update functionality.<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>   *<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>   * If all of the following are true:<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>   * - runSequentialOnMultiFailure is true<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>   * - on calling multi, we get a ZooKeeper exception that can be handled by a sequential call(*)<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>   * Then:<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>   * - we retry the operations one-by-one (sequentially)<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>   *<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>   * Note *: an example is receiving a NodeExistsException from a "create" call.  Without multi,<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>   * a user could call "createAndFailSilent" to ensure that a node exists if they don't care who<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>   * actually created the node (i.e. the NodeExistsException from ZooKeeper is caught).<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>   * This will cause all operations in the multi to fail, however, because<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>   * the NodeExistsException that zk.create throws will fail the multi transaction.<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>   * In this case, if the previous conditions hold, the commands are run sequentially, which should<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * result in the correct final state, but means that the operations will not run atomically.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   *<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public static void multiOrSequential(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops,<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>                                       boolean runSequentialOnMultiFailure) throws KeeperException {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    if (zkw.getConfiguration().get("hbase.zookeeper.useMulti") != null) {<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      LOG.warn("hbase.zookeeper.useMulti is deprecated. Default to true always.");<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>    }<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    if (ops == null) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      return;<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    }<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    List&lt;Op&gt; zkOps = new LinkedList&lt;&gt;();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>    for (ZKUtilOp op : ops) {<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      zkOps.add(toZooKeeperOp(zkw, op));<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    }<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    try {<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      zkw.getRecoverableZooKeeper().multi(zkOps);<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    } catch (KeeperException ke) {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      switch (ke.code()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        case NODEEXISTS:<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        case NONODE:<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>        case BADVERSION:<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>        case NOAUTH:<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>        case NOTEMPTY:<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>          // if we get an exception that could be solved by running sequentially<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>          // (and the client asked us to), then break out and run sequentially<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>          if (runSequentialOnMultiFailure) {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>            LOG.info("multi exception: {}; running operations sequentially " +<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>              "(runSequentialOnMultiFailure=true); {}", ke.toString(),<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>              ops.stream().map(o -&gt; o.toString()).collect(Collectors.joining(",")));<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>            processSequentially(zkw, ops);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>            break;<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>          }<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        default:<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>          throw ke;<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      }<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    } catch (InterruptedException ie) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      zkw.interruptedException(ie);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    }<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  private static void processSequentially(ZKWatcher zkw, List&lt;ZKUtilOp&gt; ops)<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      throws KeeperException, NoNodeException {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    for (ZKUtilOp op : ops) {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (op instanceof CreateAndFailSilent) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        createAndFailSilent(zkw, (CreateAndFailSilent) op);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>      } else if (op instanceof DeleteNodeFailSilent) {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        deleteNodeFailSilent(zkw, (DeleteNodeFailSilent) op);<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      } else if (op instanceof SetData) {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        setData(zkw, (SetData) op);<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      } else {<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        throw new UnsupportedOperationException("Unexpected ZKUtilOp type: "<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>            + op.getClass().getName());<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  /** @return String dump of everything in ZooKeeper. */<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  public static String dump(ZKWatcher zkw) {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    StringBuilder sb = new StringBuilder();<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    try {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      sb.append("\nActive master address: ");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      try {<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      } catch (IOException e) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      sb.append("\nBackup master addresses:");<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      final List&lt;String&gt; backupMasterChildrenNoWatchList = listChildrenNoWatch(zkw,<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>              zkw.getZNodePaths().backupMasterAddressesZNode);<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      if (backupMasterChildrenNoWatchList != null) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>        for (String child : backupMasterChildrenNoWatchList) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>          sb.append("\n ").append(child);<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>        }<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      }<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        + MetaTableLocator.getMetaRegionLocation(zkw));<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    + MetaTableLocator.getMetaRegionLocation(zkw, i));<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      }<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      sb.append("\nRegion servers:");<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      final List&lt;String&gt; rsChildrenNoWatchList =<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>              listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      if (rsChildrenNoWatchList != null) {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        for (String child : rsChildrenNoWatchList) {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          sb.append("\n ").append(child);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>      }<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      try {<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      } catch (KeeperException ke) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>      for (String server : servers) {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>        sb.append("\n ").append(server);<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>        try {<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span><a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          if (stat == null) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>            break;<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>          }<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>          for (String s : stat) {<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>            sb.append("\n  ").append(s);<a name="line.1850"></a>
+<span class="sourceLineNo">1796</span>  //<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  // ZooKeeper cluster information<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>  //<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  /** @return String dump of everything in ZooKeeper. */<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public static String dump(ZKWatcher zkw) {<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    StringBuilder sb = new StringBuilder();<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    try {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      sb.append("HBase is rooted at ").append(zkw.getZNodePaths().baseZNode);<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      sb.append("\nActive master address: ");<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      try {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>        sb.append(MasterAddressTracker.getMasterAddress(zkw));<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      } catch (IOException e) {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        sb.append("&lt;&lt;FAILED LOOKUP: " + e.getMessage() + "&gt;&gt;");<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>      }<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      sb.append("\nBackup master addresses:");<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      final List&lt;String&gt; backupMasterChildrenNoWatchList = listChildrenNoWatch(zkw,<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>              zkw.getZNodePaths().backupMasterAddressesZNode);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      if (backupMasterChildrenNoWatchList != null) {<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        for (String child : backupMasterChildrenNoWatchList) {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>          sb.append("\n ").append(child);<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        }<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      }<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>      sb.append("\nRegion server holding hbase:meta: "<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        + MetaTableLocator.getMetaRegionLocation(zkw));<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>      int numMetaReplicas = conf.getInt(HConstants.META_REPLICAS_NUM,<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>               HConstants.DEFAULT_META_REPLICA_NUM);<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>      for (int i = 1; i &lt; numMetaReplicas; i++) {<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        sb.append("\nRegion server holding hbase:meta, replicaId " + i + " "<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>                    + MetaTableLocator.getMetaRegionLocation(zkw, i));<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      sb.append("\nRegion servers:");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>      final List&lt;String&gt; rsChildrenNoWatchList =<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              listChildrenNoWatch(zkw, zkw.getZNodePaths().rsZNode);<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      if (rsChildrenNoWatchList != null) {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        for (String child : rsChildrenNoWatchList) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>          sb.append("\n ").append(child);<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        }<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>      }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>      try {<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>        getReplicationZnodesDump(zkw, sb);<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      } catch (KeeperException ke) {<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>        LOG.warn("Couldn't get the replication znode dump", ke);<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      }<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>      sb.append("\nQuorum Server Statistics:");<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      String[] servers = zkw.getQuorum().split(",");<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>      for (String server : servers) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>        sb.append("\n ").append(server);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>        try {<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>          String[] stat = getServerStats(server, ZKUtil.zkDumpConnectionTimeOut);<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>          if (stat == null) {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>            sb.append("[Error] invalid quorum server: " + server);<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>            break;<a name="line.1850"></a>
 <span class="sourceLineNo">1851</span>          }<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        } catch (Exception e) {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>        }<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    } catch (KeeperException ke) {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      sb.append("\n" + ke.getMessage());<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    }<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    return sb.toString();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>  }<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span><a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>  /**<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>   *<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>   */<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      throws KeeperException {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span><a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      return;<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    }<a name="line.1876"></a>
+<span class="sourceLineNo">1852</span><a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>          for (String s : stat) {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            sb.append("\n  ").append(s);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          }<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        } catch (Exception e) {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>          sb.append("\n  ERROR: ").append(e.getMessage());<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>        }<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      }<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>    } catch (KeeperException ke) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      sb.append("\nFATAL ZooKeeper Exception!\n");<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      sb.append("\n" + ke.getMessage());<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    return sb.toString();<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>  }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>  /**<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>   * Appends replication znodes to the passed StringBuilder.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>   *<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>   * @param sb the {@link StringBuilder} to append to<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>   * @throws KeeperException if a ZooKeeper operation fails<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>   */<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>  private static void getReplicationZnodesDump(ZKWatcher zkw, StringBuilder sb)<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      throws KeeperException {<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>    String replicationZnode = zkw.getZNodePaths().replicationZNode;<a name="line.1876"></a>
 <span class="sourceLineNo">1877</span><a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    // do a ls -r on this znode<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>    if (children != null) {<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>      Collections.sort(children);<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      for (String child : children) {<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        String zNode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        if (zNode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>          appendPeersZnodes(zkw, zNode, sb);<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>        } else if (zNode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>          appendRSZnodes(zkw, zNode, sb);<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>        } else if (zNode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>          appendHFileRefsZNodes(zkw, zNode, sb);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>        }<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      }<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span><a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  private static void appendHFileRefsZNodes(ZKWatcher zkw, String hFileRefsZNode,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    sb.append("\n").append(hFileRefsZNode).append(": ");<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    final List&lt;String&gt; hFileRefChildrenNoWatchList =<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>            ZKUtil.listChildrenNoWatch(zkw, hFileRefsZNode);<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>    if (hFileRefChildrenNoWatchList != null) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      for (String peerIdZNode : hFileRefChildrenNoWatchList) {<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        String zNodeToProcess = ZNodePaths.joinZNode(hFileRefsZNode, peerIdZNode);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>        sb.append("\n").append(zNodeToProcess).append(": ");<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        List&lt;String&gt; peerHFileRefsZNodes = ZKUtil.listChildrenNoWatch(zkw, zNodeToProcess);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>        if (peerHFileRefsZNodes != null) {<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>          sb.append(String.join(", ", peerHFileRefsZNodes));<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>        }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      }<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    }<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>  }<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span><a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>  /**<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>   * @return aq string of replication znodes and log positions<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>   */<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    StringBuilder sb = new StringBuilder();<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    return sb.toString();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span><a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      throws KeeperException {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    stack.add(znode);<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>    do {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      byte[] data;<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>      try {<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      } catch (InterruptedException e) {<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>        zkw.interruptedException(e);<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        return;<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>        long position = 0;<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        try {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>          sb.append(position);<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        } catch (DeserializationException ignored) {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>        } catch (InterruptedException e) {<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>          zkw.interruptedException(e);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>          return;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>        }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>      }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    } while (stack.size() &gt; 0);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  }<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span><a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      byte[] data;<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      try {<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      } catch (InterruptedException e) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        zkw.interruptedException(e);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        return;<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      // parse the data of the above peer znode.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      try {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        String clusterKey = builder.getClusterkey();<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>        // add the peer-state.<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>      } catch (IOException ipbe) {<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      "peer-state");<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      if (!child.equals(peerState)) {<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>        continue;<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>      byte[] peerStateData;<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>      try {<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        sb.append(builder.getState().name());<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      } catch (IOException ipbe) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>      } catch (InterruptedException e) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>        zkw.interruptedException(e);<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>        return;<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>      }<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>  }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span><a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  /**<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>   * Gets the statistics from the given server.<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>   *<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>   * @param server  The server to get the statistics from.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>   * @param timeout  The socket timeout to use.<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * @return The array of response strings.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   * @throws IOException When the socket communication fails.<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>   */<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>  private static String[] getServerStats(String server, int timeout)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    String[] sp = server.split(":");<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    if (sp.length == 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>      return null;<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>    }<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    String host = sp[0];<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.2028"></a>
+<span class="sourceLineNo">1878</span>    if (ZKUtil.checkExists(zkw, replicationZnode) == -1) {<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      return;<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span><a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>    // do a ls -r on this znode<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    sb.append("\n").append(replicationZnode).append(": ");<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, replicationZnode);<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>    if (children != null) {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      Collections.sort(children);<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>      for (String child : children) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>        String zNode = ZNodePaths.joinZNode(replicationZnode, child);<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        if (zNode.equals(zkw.getZNodePaths().peersZNode)) {<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>          appendPeersZnodes(zkw, zNode, sb);<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        } else if (zNode.equals(zkw.getZNodePaths().queuesZNode)) {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          appendRSZnodes(zkw, zNode, sb);<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>        } else if (zNode.equals(zkw.getZNodePaths().hfileRefsZNode)) {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>          appendHFileRefsZNodes(zkw, zNode, sb);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>        }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>  }<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span><a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>  private static void appendHFileRefsZNodes(ZKWatcher zkw, String hFileRefsZNode,<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>                                            StringBuilder sb) throws KeeperException {<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>    sb.append("\n").append(hFileRefsZNode).append(": ");<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>    final List&lt;String&gt; hFileRefChildrenNoWatchList =<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>            ZKUtil.listChildrenNoWatch(zkw, hFileRefsZNode);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    if (hFileRefChildrenNoWatchList != null) {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      for (String peerIdZNode : hFileRefChildrenNoWatchList) {<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        String zNodeToProcess = ZNodePaths.joinZNode(hFileRefsZNode, peerIdZNode);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        sb.append("\n").append(zNodeToProcess).append(": ");<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        List&lt;String&gt; peerHFileRefsZNodes = ZKUtil.listChildrenNoWatch(zkw, zNodeToProcess);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        if (peerHFileRefsZNodes != null) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>          sb.append(String.join(", ", peerHFileRefsZNodes));<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>        }<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      }<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    }<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>  }<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span><a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>  /**<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>   * Returns a string with replication znodes and position of the replication log<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>   * @param zkw reference to the {@link ZKWatcher} which also contains configuration and operation<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>   * @return aq string of replication znodes and log positions<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>   */<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  public static String getReplicationZnodesDump(ZKWatcher zkw) throws KeeperException {<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    StringBuilder sb = new StringBuilder();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    getReplicationZnodesDump(zkw, sb);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return sb.toString();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span><a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>  private static void appendRSZnodes(ZKWatcher zkw, String znode, StringBuilder sb)<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      throws KeeperException {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    List&lt;String&gt; stack = new LinkedList&lt;&gt;();<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>    stack.add(znode);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>    do {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      String znodeToProcess = stack.remove(stack.size() - 1);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>      sb.append("\n").append(znodeToProcess).append(": ");<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      byte[] data;<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      try {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      } catch (InterruptedException e) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        zkw.interruptedException(e);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>        return;<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      }<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      if (data != null &amp;&amp; data.length &gt; 0) { // log position<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        long position = 0;<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        try {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>          position = ZKUtil.parseWALPositionFrom(ZKUtil.getData(zkw, znodeToProcess));<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>          sb.append(position);<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        } catch (DeserializationException ignored) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>        } catch (InterruptedException e) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>          zkw.interruptedException(e);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          return;<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>        }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>      }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>      for (String zNodeChild : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>        stack.add(ZNodePaths.joinZNode(znodeToProcess, zNodeChild));<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>    } while (stack.size() &gt; 0);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>  }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span><a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>  private static void appendPeersZnodes(ZKWatcher zkw, String peersZnode,<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>                                        StringBuilder sb) throws KeeperException {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    sb.append("\n").append(peersZnode).append(": ");<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (String peerIdZnode : ZKUtil.listChildrenNoWatch(zkw, peersZnode)) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      String znodeToProcess = ZNodePaths.joinZNode(peersZnode, peerIdZnode);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      byte[] data;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        data = ZKUtil.getData(zkw, znodeToProcess);<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch (InterruptedException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        zkw.interruptedException(e);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        return;<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      // parse the data of the above peer znode.<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      try {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>        ReplicationProtos.ReplicationPeer.Builder builder =<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          ReplicationProtos.ReplicationPeer.newBuilder();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>        ProtobufUtil.mergeFrom(builder, data, pblen, data.length - pblen);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>        String clusterKey = builder.getClusterkey();<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        sb.append("\n").append(znodeToProcess).append(": ").append(clusterKey);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        // add the peer-state.<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        appendPeerState(zkw, znodeToProcess, sb);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      } catch (IOException ipbe) {<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>      }<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    }<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>  }<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span><a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>  private static void appendPeerState(ZKWatcher zkw, String znodeToProcess, StringBuilder sb)<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>          throws KeeperException, InvalidProtocolBufferException {<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    String peerState = zkw.getConfiguration().get("zookeeper.znode.replication.peers.state",<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      "peer-state");<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    for (String child : ZKUtil.listChildrenNoWatch(zkw, znodeToProcess)) {<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      if (!child.equals(peerState)) {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        continue;<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>      }<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      String peerStateZnode = ZNodePaths.joinZNode(znodeToProcess, child);<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>      sb.append("\n").append(peerStateZnode).append(": ");<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      byte[] peerStateData;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>      try {<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        peerStateData = ZKUtil.getData(zkw, peerStateZnode);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>        ReplicationProtos.ReplicationState.Builder builder =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>            ReplicationProtos.ReplicationState.newBuilder();<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        ProtobufUtil.mergeFrom(builder, peerStateData, pblen, peerStateData.length - pblen);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        sb.append(builder.getState().name());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>      } catch (IOException ipbe) {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        LOG.warn("Got Exception while parsing peer: " + znodeToProcess, ipbe);<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>      } catch (InterruptedException e) {<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>        zkw.interruptedException(e);<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        return;<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      }<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span><a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>   * Gets the statistics from the given server.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>   *<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>   * @param server  The server to get the statistics from.<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>   * @param timeout  The socket timeout to use.<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>   * @return The array of response strings.<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * @throws IOException When the socket communication fails.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private static String[] getServerStats(String server, int timeout)<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    throws IOException {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    String[] sp = server.split(":");<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (sp.length == 0) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return null;<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
 <span class="sourceLineNo">2029</span><a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    try (Socket socket = new Socket()) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      socket.connect(sockAddr, timeout);<a name="line.2032"></a>
+<span class="sourceLineNo">2030</span>    String host = sp[0];<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    int port = sp.length &gt; 1 ? Integer.parseInt(sp[1])<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        : HConstants.DEFAULT_ZOOKEEPER_CLIENT_PORT;<a name="line.2032"></a>
 <span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>      socket.setSoTimeout(timeout);<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>          BufferedReader in = new BufferedReader(<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        out.println("stat");<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        out.flush();<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        while (true) {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          String line = in.readLine();<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>          if (line != null) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>            res.add(line);<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>          } else {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>            break;<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>          }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>        }<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>        return res.toArray(new String[res.size()]);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>      }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    }<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span><a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    if (!LOG.isTraceEnabled()) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      return;<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    }<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      " byte(s) of data from znode " + znode +<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>          zkw.getZNodePaths().isMetaZNodePrefix(znode)?<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>            getServerNameOrEmptyString(data):<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>            getServerNameOrEmptyString(data):<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    try {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    } catch (DeserializationException e) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      return "";<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    }<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  /**<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * @throws IOException on ZK errors<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   */<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    LOG.info("Waiting until the base znode is available");<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    final int maxTimeMs = 10000;<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    KeeperException keeperEx = null;<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    try {<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      try {<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>          try {<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>              LOG.info("Parent znode exists: {}", parentZNode);<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>              keeperEx = null;<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>              break;<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>            }<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>          } catch (KeeperException e) {<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>            keeperEx = e;<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>          }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>        }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      } finally {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        zk.close();<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>      }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    } catch (InterruptedException ex) {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>      Thread.currentThread().interrupt();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    }<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span><a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    if (keeperEx != null) {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      throw new IOException(keeperEx);<a name="line.2118"></a>
+<span class="sourceLineNo">2034</span>    InetSocketAddress sockAddr = new InetSocketAddress(host, port);<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    try (Socket socket = new Socket()) {<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      socket.connect(sockAddr, timeout);<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>      socket.setSoTimeout(timeout);<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>      try (PrintWriter out = new PrintWriter(new BufferedWriter(<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>          new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8)), true);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          BufferedReader in = new BufferedReader(<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>              new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8))) {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        out.println("stat");<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        out.flush();<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        ArrayList&lt;String&gt; res = new ArrayList&lt;&gt;();<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>        while (true) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>          String line = in.readLine();<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>          if (line != null) {<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>            res.add(line);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>          } else {<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>            break;<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>          }<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>        }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>        return res.toArray(new String[res.size()]);<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      }<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>  }<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span><a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>  private static void logRetrievedMsg(final ZKWatcher zkw,<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      final String znode, final byte [] data, final boolean watcherSet) {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (!LOG.isTraceEnabled()) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      return;<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span><a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>    LOG.trace(zkw.prefix("Retrieved " + ((data == null)? 0: data.length) +<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      " byte(s) of data from znode " + znode +<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      (watcherSet? " and set watcher; ": "; data=") +<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      (data == null? "null": data.length == 0? "empty": (<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>          zkw.getZNodePaths().isMetaZNodePrefix(znode)?<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>            getServerNameOrEmptyString(data):<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>          znode.startsWith(zkw.getZNodePaths().backupMasterAddressesZNode)?<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>            getServerNameOrEmptyString(data):<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>          StringUtils.abbreviate(Bytes.toStringBinary(data), 32)))));<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>  }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>  private static String getServerNameOrEmptyString(final byte [] data) {<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    try {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      return ProtobufUtil.parseServerNameFrom(data).toString();<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    } catch (DeserializationException e) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      return "";<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>  }<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span><a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  /**<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>   * Waits for HBase installation's base (parent) znode to become available.<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>   * @throws IOException on ZK errors<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   */<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>  public static void waitForBaseZNode(Configuration conf) throws IOException {<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>    LOG.info("Waiting until the base znode is available");<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    String parentZNode = conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    ZooKeeper zk = new ZooKeeper(ZKConfig.getZKQuorumServersString(conf),<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>        conf.getInt(HConstants.ZK_SESSION_TIMEOUT,<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>        HConstants.DEFAULT_ZK_SESSION_TIMEOUT), EmptyWatcher.instance);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span><a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    final int maxTimeMs = 10000;<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span><a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    KeeperException keeperEx = null;<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    try {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>      try {<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>        for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          try {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            if (zk.exists(parentZNode, false) != null) {<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>              LOG.info("Parent znode exists: {}", parentZNode);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>              keeperEx = null;<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>              break;<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>            }<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>          } catch (KeeperException e) {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>            keeperEx = e;<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>          }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>          Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      } finally {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>        zk.close();<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      }<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>    } catch (InterruptedException ex) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      Thread.currentThread().interrupt();<a name="line.2118"></a>
 <span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>  }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>  /**<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>   * @param e Exception to convert<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>   * @return Converted exception<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>   */<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>    ke.initCause(e);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    return ke;<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span><a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>  /**<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>   * @param root name of the root directory in zk to print<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>   */<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    if (!LOG.isDebugEnabled()) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>      return;<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span><a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    LOG.debug("Current zk system:");<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    String prefix = "|-";<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>    LOG.debug(prefix + root);<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    try {<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      logZKTree(zkw, root, prefix);<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    } catch (KeeperException e) {<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      throw new RuntimeException(e);<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    }<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>  }<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span><a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>  /**<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>   * Helper method to print the current state of the ZK tree.<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   */<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>  private static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>      throws KeeperException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    if (children == null) {<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      return;<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>    }<a name="line.2164"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (keeperEx != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      throw new IOException(keeperEx);<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>  /**<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>   * Convert a {@link DeserializationException} to a more palatable {@link KeeperException}.<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>   * Used when can't let a {@link DeserializationException} out w/o changing public API.<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>   * @param e Exception to convert<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>   * @return Converted exception<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>   */<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  public static KeeperException convert(final DeserializationException e) {<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>    KeeperException ke = new KeeperException.DataInconsistencyException();<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>    ke.initCause(e);<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    return ke;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>  }<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span><a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>  /**<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>   * Recursively print the current state of ZK (non-transactional)<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>   * @param root name of the root directory in zk to print<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>   */<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>  public static void logZKTree(ZKWatcher zkw, String root) {<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    if (!LOG.isDebugEnabled()) {<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      return;<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    }<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span><a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>    LOG.debug("Current zk system:");<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    String prefix = "|-";<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    LOG.debug(prefix + root);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>    try {<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>      logZKTree(zkw, root, prefix);<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>    } catch (KeeperException e) {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>      throw new RuntimeException(e);<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>  }<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span><a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  /**<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * Helper method to print the current state of the ZK tree.<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   * @see #logZKTree(ZKWatcher, String)<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * @throws KeeperException if an unexpected exception occurs<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private static void logZKTree(ZKWatcher zkw, String root, String prefix)<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>      throws KeeperException {<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    List&lt;String&gt; children = ZKUtil.listChildrenNoWatch(zkw, root);<a name="line.2164"></a>
 <span class="sourceLineNo">2165</span><a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    for (String child : children) {<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>      LOG.debug(prefix + child);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span><a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>  /**<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>   * @param position the position to serialize<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>   *         for use as content of an wal position in a replication queue.<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>   */<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        .build().toByteArray();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>  }<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span><a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  /**<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>   * @param bytes - Content of a WAL position znode.<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>   * @return long - The current WAL position.<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   */<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>    if (bytes == null) {<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      try {<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>        position = builder.build();<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      } catch (IOException e) {<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>        throw new DeserializationException(e);<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      return position.getPosition();<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    } else {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      if (bytes.length &gt; 0) {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        return Bytes.toLong(bytes);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>      }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      return 0;<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    }<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>}<a name="line.2212"></a>
+<span class="sourceLineNo">2166</span>    if (children == null) {<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>      return;<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    }<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span><a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    for (String child : children) {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>      LOG.debug(prefix + child);<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>      String node = ZNodePaths.joinZNode(root.equals("/") ? "" : root, child);<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>      logZKTree(zkw, node, prefix + "---");<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>  }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>  /**<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>   * @param position the position to serialize<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>   * @return Serialized protobuf of &lt;code&gt;position&lt;/code&gt; with pb magic prefix prepended suitable<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>   *         for use as content of an wal position in a replication queue.<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>   */<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>  public static byte[] positionToByteArray(final long position) {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>    byte[] bytes = ReplicationProtos.ReplicationHLogPosition.newBuilder().setPosition(position)<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        .build().toByteArray();<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    return ProtobufUtil.prependPBMagic(bytes);<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>  }<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span><a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>  /**<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>   * @param bytes - Content of a WAL position znode.<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>   * @return long - The current WAL position.<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>   * @throws DeserializationException if the WAL position cannot be parsed<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>   */<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>  public static long parseWALPositionFrom(final byte[] bytes) throws DeserializationException {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>    if (bytes == null) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>      throw new DeserializationException("Unable to parse null WAL position.");<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>    if (ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>      ReplicationProtos.ReplicationHLogPosition.Builder builder =<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>          ReplicationProtos.ReplicationHLogPosition.newBuilder();<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>      ReplicationProtos.ReplicationHLogPosition position;<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>      try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        position = builder.build();<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      } catch (IOException e) {<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>        throw new DeserializationException(e);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      }<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      return position.getPosition();<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    } else {<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>      if (bytes.length &gt; 0) {<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>        return Bytes.toLong(bytes);<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>      }<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>      return 0;<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>    }<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  }<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>}<a name="line.2216"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
index 0bef1b6..00ebc53 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKUtil.ZKUtilOp.CreateAndFailSilent.html
@@ -750,1474 +750,1478 @@
 <span class="sourceLineNo">742</span>    if (nodes != null) {<a name="line.742"></a>
 <span class="sourceLineNo">743</span>      List&lt;NodeAndData&gt; newNodes = new ArrayList&lt;&gt;();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      for (String node : nodes) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        String nodePath = ZNodePaths.joinZNode(baseNode, node);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        newNodes.add(new NodeAndData(nodePath, data));<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      return newNodes;<a name="line.749"></a>
-<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    return null;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /**<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   * Update the data of an existing node with the expected version to have the<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * specified data.<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   *<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * Throws an exception if there is a version mismatch or some other problem.<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   *<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * Sets no watches under any conditions.<a name="line.760"></a>
+<span class="sourceLineNo">745</span>        if (Thread.interrupted()) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>          // Partial data should not be processed. Cancel processing by sending empty list.<a name="line.746"></a>
+<span class="sourceLineNo">747</span>          return Collections.emptyList();<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        }<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        String nodePath = ZNodePaths.joinZNode(baseNode, node);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>        byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath);<a name="line.750"></a>
+<span class="sourceLineNo">751</span>        newNodes.add(new NodeAndData(nodePath, data));<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      return newNodes;<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return null;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Update the data of an existing node with the expected version to have the<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * specified data.<a name="line.760"></a>
 <span class="sourceLineNo">761</span>   *<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param zkw zk reference<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param znode the path to the ZNode<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @param data the data to store in ZooKeeper<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * @param expectedVersion the expected version<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @throws KeeperException if unexpected zookeeper exception<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @throws KeeperException.BadVersionException if version mismatch<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * @deprecated Unused<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   */<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  @Deprecated<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  public static void updateExistingNodeData(ZKWatcher zkw, String znode, byte[] data,<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      int expectedVersion) throws KeeperException {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    try {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      zkw.getRecoverableZooKeeper().setData(znode, data, expectedVersion);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    } catch(InterruptedException ie) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      zkw.interruptedException(ie);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  //<a name="line.780"></a>
-<span class="sourceLineNo">781</span>  // Data setting<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  //<a name="line.782"></a>
+<span class="sourceLineNo">762</span>   * Throws an exception if there is a version mismatch or some other problem.<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * Sets no watches under any conditions.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @param zkw zk reference<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @param znode the path to the ZNode<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * @param data the data to store in ZooKeeper<a name="line.768"></a>
... 14761 lines suppressed ...