This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits 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 df425aff834 Published site at f00dc6db90c21def119ad3c5cd3e3688402513c2.
df425aff834 is described below

commit df425aff834ec480a86e99e35da39aaa2fb4f799
Author: HBase <[email protected]>
AuthorDate: Sat Aug 22 23:54:02 2026 +0000

    Published site at f00dc6db90c21def119ad3c5cd3e3688402513c2.
---
 books/apache-hbase-reference-guide-dark-mode.pdf   | Bin 38775818 -> 38775819 
bytes
 books/apache-hbase-reference-guide.pdf             | Bin 38665189 -> 38665189 
bytes
 checkstyle-aggregate.html                          |   2 +-
 dependency-convergence.html                        |   2 +-
 dependency-info.html                               |   2 +-
 dependency-management.html                         |   2 +-
 hbase-website/dependency-convergence.html          |   2 +-
 hbase-website/dependency-info.html                 |   2 +-
 hbase-website/dependency-management.html           |   2 +-
 hbase-website/index.html                           |   2 +-
 hbase-website/issue-management.html                |   2 +-
 hbase-website/licenses.html                        |   2 +-
 hbase-website/mailing-lists.html                   |   2 +-
 hbase-website/plugin-management.html               |   2 +-
 hbase-website/plugins.html                         |   2 +-
 hbase-website/project-info.html                    |   2 +-
 hbase-website/scm.html                             |   2 +-
 hbase-website/summary.html                         |   2 +-
 hbase-website/team.html                            |   2 +-
 issue-management.html                              |   2 +-
 licenses.html                                      |   2 +-
 mailing-lists.html                                 |   2 +-
 plugin-management.html                             |   2 +-
 plugins.html                                       |   2 +-
 project-info.html                                  |   2 +-
 project-reports.html                               |   2 +-
 scm.html                                           |   2 +-
 summary.html                                       |   2 +-
 team.html                                          |   2 +-
 .../TestExecutorService.TestEventHandler.html      |  10 +-
 .../hadoop/hbase/executor/TestExecutorService.html |  10 +-
 .../TestExecutorService.TestEventHandler.html      | 299 +++++++++++----------
 .../hadoop/hbase/executor/TestExecutorService.html | 299 +++++++++++----------
 33 files changed, 337 insertions(+), 335 deletions(-)

diff --git a/books/apache-hbase-reference-guide-dark-mode.pdf 
b/books/apache-hbase-reference-guide-dark-mode.pdf
index b297c41b0bc..5839b26a965 100644
Binary files a/books/apache-hbase-reference-guide-dark-mode.pdf and 
b/books/apache-hbase-reference-guide-dark-mode.pdf differ
diff --git a/books/apache-hbase-reference-guide.pdf 
b/books/apache-hbase-reference-guide.pdf
index b9cea4cb179..778daea0a32 100644
Binary files a/books/apache-hbase-reference-guide.pdf and 
b/books/apache-hbase-reference-guide.pdf differ
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index f6f814095f8..ffdb3e78f09 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/dependency-convergence.html b/dependency-convergence.html
index e6b99ef7db8..e0ac7b79b30 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/dependency-info.html b/dependency-info.html
index 94976a1fc18..52ff336a441 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/dependency-management.html b/dependency-management.html
index 948c8df8f9a..a4282171cf2 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/dependency-convergence.html 
b/hbase-website/dependency-convergence.html
index dce03f205ec..8d69c86db4a 100644
--- a/hbase-website/dependency-convergence.html
+++ b/hbase-website/dependency-convergence.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/dependency-info.html 
b/hbase-website/dependency-info.html
index 8a7cd9f5aff..d5083c218e4 100644
--- a/hbase-website/dependency-info.html
+++ b/hbase-website/dependency-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/dependency-management.html 
b/hbase-website/dependency-management.html
index c52141b5f72..3a6db5787c3 100644
--- a/hbase-website/dependency-management.html
+++ b/hbase-website/dependency-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/index.html b/hbase-website/index.html
index ef3978d6617..9cbe5b3af7a 100644
--- a/hbase-website/index.html
+++ b/hbase-website/index.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/issue-management.html 
b/hbase-website/issue-management.html
index ebecb3fba99..956070aca78 100644
--- a/hbase-website/issue-management.html
+++ b/hbase-website/issue-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/licenses.html b/hbase-website/licenses.html
index f0f23c6e508..34e89032e49 100644
--- a/hbase-website/licenses.html
+++ b/hbase-website/licenses.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/mailing-lists.html b/hbase-website/mailing-lists.html
index 97ecdff7c6d..ca0eb0fc639 100644
--- a/hbase-website/mailing-lists.html
+++ b/hbase-website/mailing-lists.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists 
at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists 
at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/plugin-management.html 
b/hbase-website/plugin-management.html
index b6919e24b9c..a67e8aa3f54 100644
--- a/hbase-website/plugin-management.html
+++ b/hbase-website/plugin-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/plugins.html b/hbase-website/plugins.html
index 300cfaca676..384f39dffc3 100644
--- a/hbase-website/plugins.html
+++ b/hbase-website/plugins.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/project-info.html b/hbase-website/project-info.html
index dce7009682f..95fccd33f1f 100644
--- a/hbase-website/project-info.html
+++ b/hbase-website/project-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/scm.html b/hbase-website/scm.html
index 56162a794e6..62a2d0d7868 100644
--- a/hbase-website/scm.html
+++ b/hbase-website/scm.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/summary.html b/hbase-website/summary.html
index ea43b331d50..375af0e2237 100644
--- a/hbase-website/summary.html
+++ b/hbase-website/summary.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/hbase-website/team.html b/hbase-website/team.html
index 4deaff8270a..06c1d5fc34b 100644
--- a/hbase-website/team.html
+++ b/hbase-website/team.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/issue-management.html b/issue-management.html
index 7bf5e1c32a4..2042e9d3587 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/licenses.html b/licenses.html
index a764b13a347..11f4d49c0fd 100644
--- a/licenses.html
+++ b/licenses.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/mailing-lists.html b/mailing-lists.html
index b76042e39ff..7498dad77cc 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists 
at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists 
at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/plugin-management.html b/plugin-management.html
index 8b22fd98d0e..304de2df3d6 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management
 at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management
 at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/plugins.html b/plugins.html
index 45f7742c3b8..e1046eadd64 100644
--- a/plugins.html
+++ b/plugins.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/project-info.html b/project-info.html
index 58fb99df46a..c0dfbef7c84 100644
--- a/project-info.html
+++ b/project-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/project-reports.html b/project-reports.html
index 198a2f33d6b..f8fe19c39f5 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/scm.html b/scm.html
index 48710cc3608..bdc2a012ad3 100644
--- a/scm.html
+++ b/scm.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/summary.html b/summary.html
index 966a578b277..15990b308a3 100644
--- a/summary.html
+++ b/summary.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git a/team.html b/team.html
index dcab65d85f6..08392ef401c 100644
--- a/team.html
+++ b/team.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 
2026-08-20
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from 
org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 
2026-08-22
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
diff --git 
a/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
 
b/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
index dde34e60e1b..d42a9b07d2d 100644
--- 
a/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
+++ 
b/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
@@ -87,7 +87,7 @@ loadScripts(document, 'script');</script>
 <dd><a href="TestExecutorService.html" title="class in 
org.apache.hadoop.hbase.executor">TestExecutorService</a></dd>
 </dl>
 <hr>
-<div class="type-signature"><span class="modifiers">public static class 
</span><span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-153">TestExecutorService.TestEventHandler</a></span>
+<div class="type-signature"><span class="modifiers">public static class 
</span><span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-154">TestExecutorService.TestEventHandler</a></span>
 <span class="extends-implements">extends 
org.apache.hadoop.hbase.executor.EventHandler</span></div>
 </section>
 <section class="summary">
@@ -166,13 +166,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="lock">
 <h3>lock</h3>
-<div class="member-signature"><span class="modifiers">private 
final</span>&nbsp;<span class="return-type"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicBoolean.html";
 title="class or interface in java.util.concurrent.atomic" 
class="external-link">AtomicBoolean</a></span>&nbsp;<span 
class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-154">lock</a></spa
 [...]
+<div class="member-signature"><span class="modifiers">private 
final</span>&nbsp;<span class="return-type"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicBoolean.html";
 title="class or interface in java.util.concurrent.atomic" 
class="external-link">AtomicBoolean</a></span>&nbsp;<span 
class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-155">lock</a></spa
 [...]
 </section>
 </li>
 <li>
 <section class="detail" id="counter">
 <h3>counter</h3>
-<div class="member-signature"><span 
class="modifiers">private</span>&nbsp;<span class="return-type"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicInteger.html";
 title="class or interface in java.util.concurrent.atomic" 
class="external-link">AtomicInteger</a></span>&nbsp;<span 
class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-155">counter</a></span></div>
+<div class="member-signature"><span 
class="modifiers">private</span>&nbsp;<span class="return-type"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicInteger.html";
 title="class or interface in java.util.concurrent.atomic" 
class="external-link">AtomicInteger</a></span>&nbsp;<span 
class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-156">counter</a></span></div>
 </section>
 </li>
 </ul>
@@ -186,7 +186,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" 
id="&lt;init&gt;(org.apache.hadoop.hbase.Server,org.apache.hadoop.hbase.executor.EventType,java.util.concurrent.atomic.AtomicBoolean,java.util.concurrent.atomic.AtomicInteger)">
 <h3>TestEventHandler</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span 
class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-157">TestEventHandler</a></span><wbr><span
 class="parameters">(org.apache.hadoop.hbase.Server&nbsp;server,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span 
class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-158">TestEventHandler</a></span><wbr><span
 class="parameters">(org.apache.hadoop.hbase.Server&nbsp;server,
  org.apache.hadoop.hbase.executor.EventType&nbsp;eventType,
  <a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicBoolean.html";
 title="class or interface in java.util.concurrent.atomic" 
class="external-link">AtomicBoolean</a>&nbsp;lock,
  <a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicInteger.html";
 title="class or interface in java.util.concurrent.atomic" 
class="external-link">AtomicInteger</a>&nbsp;counter)</span></div>
@@ -203,7 +203,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="process()">
 <h3>process</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-164">process</a></span>()
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html#line-165">process</a></span>()
              throws <span class="exceptions"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html";
 title="class or interface in java.io" 
class="external-link">IOException</a></span></div>
 <dl class="notes">
 <dt>Specified by:</dt>
diff --git 
a/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.html 
b/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.html
index 5cc97d7ac70..cd7bbbc9a64 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/executor/TestExecutorService.html
@@ -137,7 +137,7 @@ loadScripts(document, 'script');</script>
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color method-summary-table 
method-summary-table-tab2 method-summary-table-tab4"><code>private 
void</code></div>
+<div class="col-first even-row-color method-summary-table 
method-summary-table-tab2 method-summary-table-tab4"><code>private 
boolean</code></div>
 <div class="col-second even-row-color method-summary-table 
method-summary-table-tab2 method-summary-table-tab4"><code><a 
href="#checkStatusDump(org.apache.hadoop.hbase.executor.ExecutorService.ExecutorStatus)"
 
class="member-name-link">checkStatusDump</a><wbr>(org.apache.hadoop.hbase.executor.ExecutorService.ExecutorStatus&nbsp;status)</code></div>
 <div class="col-last even-row-color method-summary-table 
method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
 <div class="col-first odd-row-color method-summary-table 
method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
@@ -209,8 +209,8 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" 
id="checkStatusDump(org.apache.hadoop.hbase.executor.ExecutorService.ExecutorStatus)">
 <h3>checkStatusDump</h3>
-<div class="member-signature"><span 
class="modifiers">private</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-144">checkStatusDump</a></span><wbr><span
 
class="parameters">(org.apache.hadoop.hbase.executor.ExecutorService.ExecutorStatus&nbsp;status)</span>
-                      throws <span class="exceptions"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html";
 title="class or interface in java.io" 
class="external-link">IOException</a></span></div>
+<div class="member-signature"><span 
class="modifiers">private</span>&nbsp;<span 
class="return-type">boolean</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-145">checkStatusDump</a></span><wbr><span
 
class="parameters">(org.apache.hadoop.hbase.executor.ExecutorService.ExecutorStatus&nbsp;status)</span>
+                         throws <span class="exceptions"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html";
 title="class or interface in java.io" 
class="external-link">IOException</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
 <dd><code><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html";
 title="class or interface in java.io" 
class="external-link">IOException</a></code></dd>
@@ -221,7 +221,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testAborting()">
 <h3>testAborting</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-181">testAborting</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-182">testAborting</a></span>()
                   throws <span class="exceptions"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html";
 title="class or interface in java.lang" 
class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -233,7 +233,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testSnapshotHandlers()">
 <h3>testSnapshotHandlers</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-213">testSnapshotHandlers</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span 
class="return-type">void</span>&nbsp;<span class="element-name"><a 
href="../../../../../src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html#line-214">testSnapshotHandlers</a></span>()
                           throws <span class="exceptions"><a 
href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html";
 title="class or interface in java.lang" 
class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
diff --git 
a/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
 
b/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
index 3a5ac209597..9faa3f5a72c 100644
--- 
a/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
+++ 
b/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.TestEventHandler.html
@@ -111,155 +111,156 @@
 <span class="source-line-no">098</span><span id="line-98">    ExecutorStatus 
status = executor.getStatus();</span>
 <span class="source-line-no">099</span><span id="line-99">    
assertTrue(status.queuedEvents.isEmpty());</span>
 <span class="source-line-no">100</span><span id="line-100">    assertEquals(5, 
status.running.size());</span>
-<span class="source-line-no">101</span><span id="line-101">    
checkStatusDump(status);</span>
-<span class="source-line-no">102</span><span id="line-102"></span>
-<span class="source-line-no">103</span><span id="line-103">    // Now 
interrupt the running Executor</span>
-<span class="source-line-no">104</span><span id="line-104">    synchronized 
(lock) {</span>
-<span class="source-line-no">105</span><span id="line-105">      
lock.set(false);</span>
-<span class="source-line-no">106</span><span id="line-106">      
lock.notifyAll();</span>
-<span class="source-line-no">107</span><span id="line-107">    }</span>
-<span class="source-line-no">108</span><span id="line-108"></span>
-<span class="source-line-no">109</span><span id="line-109">    // Executor 
increments counter again on way out so.... test that happened.</span>
-<span class="source-line-no">110</span><span id="line-110">    while 
(counter.get() &lt; (maxThreads * 2) &amp;&amp; tries &lt; maxTries) {</span>
-<span class="source-line-no">111</span><span id="line-111">      
System.out.println("Waiting for all event handlers to finish...");</span>
-<span class="source-line-no">112</span><span id="line-112">      
Thread.sleep(sleepInterval);</span>
-<span class="source-line-no">113</span><span id="line-113">      
tries++;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    
assertEquals(maxThreads * 2, counter.get());</span>
-<span class="source-line-no">117</span><span id="line-117">    
assertEquals(maxThreads, pool.getPoolSize());</span>
-<span class="source-line-no">118</span><span id="line-118"></span>
-<span class="source-line-no">119</span><span id="line-119">    // Add more 
than the number of threads items.</span>
-<span class="source-line-no">120</span><span id="line-120">    // Make sure we 
don't get RejectedExecutionException.</span>
-<span class="source-line-no">121</span><span id="line-121">    for (int i = 0; 
i &lt; (2 * maxThreads); i++) {</span>
-<span class="source-line-no">122</span><span id="line-122">      
executorService</span>
-<span class="source-line-no">123</span><span id="line-123">        .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
-<span class="source-line-no">124</span><span id="line-124">    }</span>
-<span class="source-line-no">125</span><span id="line-125">    // Now 
interrupt the running Executor</span>
-<span class="source-line-no">126</span><span id="line-126">    synchronized 
(lock) {</span>
-<span class="source-line-no">127</span><span id="line-127">      
lock.set(false);</span>
-<span class="source-line-no">128</span><span id="line-128">      
lock.notifyAll();</span>
-<span class="source-line-no">129</span><span id="line-129">    }</span>
-<span class="source-line-no">130</span><span id="line-130"></span>
-<span class="source-line-no">131</span><span id="line-131">    // Make sure 
threads are still around even after their timetolive expires.</span>
-<span class="source-line-no">132</span><span id="line-132">    
Thread.sleep(ExecutorConfig.KEEP_ALIVE_TIME_MILLIS_DEFAULT * 2);</span>
-<span class="source-line-no">133</span><span id="line-133">    
assertEquals(maxThreads, pool.getPoolSize());</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135">    
executorService.shutdown();</span>
-<span class="source-line-no">136</span><span id="line-136"></span>
-<span class="source-line-no">137</span><span id="line-137">    assertEquals(0, 
executorService.getAllExecutorStatuses().size());</span>
-<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139">    // Test that 
submit doesn't throw NPEs</span>
-<span class="source-line-no">140</span><span id="line-140">    
executorService</span>
-<span class="source-line-no">141</span><span id="line-141">      .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
-<span class="source-line-no">142</span><span id="line-142">  }</span>
-<span class="source-line-no">143</span><span id="line-143"></span>
-<span class="source-line-no">144</span><span id="line-144">  private void 
checkStatusDump(ExecutorStatus status) throws IOException {</span>
-<span class="source-line-no">145</span><span id="line-145">    StringWriter sw 
= new StringWriter();</span>
-<span class="source-line-no">146</span><span id="line-146">    
status.dumpTo(sw, "");</span>
-<span class="source-line-no">147</span><span id="line-147">    String dump = 
sw.toString();</span>
-<span class="source-line-no">148</span><span id="line-148">    LOG.info("Got 
status dump:\n" + dump);</span>
-<span class="source-line-no">149</span><span id="line-149"></span>
-<span class="source-line-no">150</span><span id="line-150">    
assertTrue(dump.contains("Waiting on 
java.util.concurrent.atomic.AtomicBoolean"));</span>
-<span class="source-line-no">151</span><span id="line-151">  }</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153">  public static 
class TestEventHandler extends EventHandler {</span>
-<span class="source-line-no">154</span><span id="line-154">    private final 
AtomicBoolean lock;</span>
-<span class="source-line-no">155</span><span id="line-155">    private 
AtomicInteger counter;</span>
-<span class="source-line-no">156</span><span id="line-156"></span>
-<span class="source-line-no">157</span><span id="line-157">    public 
TestEventHandler(Server server, EventType eventType, AtomicBoolean lock,</span>
-<span class="source-line-no">158</span><span id="line-158">      AtomicInteger 
counter) {</span>
-<span class="source-line-no">159</span><span id="line-159">      super(server, 
eventType);</span>
-<span class="source-line-no">160</span><span id="line-160">      this.lock = 
lock;</span>
-<span class="source-line-no">161</span><span id="line-161">      this.counter 
= counter;</span>
-<span class="source-line-no">162</span><span id="line-162">    }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164">    @Override</span>
-<span class="source-line-no">165</span><span id="line-165">    public void 
process() throws IOException {</span>
-<span class="source-line-no">166</span><span id="line-166">      int num = 
counter.incrementAndGet();</span>
-<span class="source-line-no">167</span><span id="line-167">      
LOG.info("Running process #" + num + ", threadName=" + 
Thread.currentThread().getName());</span>
-<span class="source-line-no">168</span><span id="line-168">      synchronized 
(lock) {</span>
-<span class="source-line-no">169</span><span id="line-169">        while 
(lock.get()) {</span>
-<span class="source-line-no">170</span><span id="line-170">          try 
{</span>
-<span class="source-line-no">171</span><span id="line-171">            
lock.wait();</span>
-<span class="source-line-no">172</span><span id="line-172">          } catch 
(InterruptedException e) {</span>
-<span class="source-line-no">173</span><span id="line-173">            // do 
nothing</span>
-<span class="source-line-no">174</span><span id="line-174">          }</span>
-<span class="source-line-no">175</span><span id="line-175">        }</span>
-<span class="source-line-no">176</span><span id="line-176">      }</span>
-<span class="source-line-no">177</span><span id="line-177">      
counter.incrementAndGet();</span>
-<span class="source-line-no">178</span><span id="line-178">    }</span>
-<span class="source-line-no">179</span><span id="line-179">  }</span>
-<span class="source-line-no">180</span><span id="line-180"></span>
-<span class="source-line-no">181</span><span id="line-181">  @Test</span>
-<span class="source-line-no">182</span><span id="line-182">  public void 
testAborting() throws Exception {</span>
-<span class="source-line-no">183</span><span id="line-183">    final 
Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">184</span><span id="line-184">    final Server 
server = mock(Server.class);</span>
-<span class="source-line-no">185</span><span id="line-185">    
when(server.getConfiguration()).thenReturn(conf);</span>
-<span class="source-line-no">186</span><span id="line-186"></span>
-<span class="source-line-no">187</span><span id="line-187">    ExecutorService 
executorService = new ExecutorService("unit_test");</span>
-<span class="source-line-no">188</span><span id="line-188">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
-<span class="source-line-no">189</span><span id="line-189">      
.setExecutorType(ExecutorType.MASTER_SERVER_OPERATIONS).setCorePoolSize(1));</span>
-<span class="source-line-no">190</span><span id="line-190"></span>
-<span class="source-line-no">191</span><span id="line-191">    
executorService.submit(new EventHandler(server, EventType.M_SERVER_SHUTDOWN) 
{</span>
-<span class="source-line-no">192</span><span id="line-192">      
@Override</span>
-<span class="source-line-no">193</span><span id="line-193">      public void 
process() throws IOException {</span>
-<span class="source-line-no">194</span><span id="line-194">        throw new 
RuntimeException("Should cause abort");</span>
-<span class="source-line-no">195</span><span id="line-195">      }</span>
-<span class="source-line-no">196</span><span id="line-196">    });</span>
-<span class="source-line-no">197</span><span id="line-197"></span>
-<span class="source-line-no">198</span><span id="line-198">    
Waiter.waitFor(conf, 30000, new Predicate&lt;Exception&gt;() {</span>
-<span class="source-line-no">199</span><span id="line-199">      
@Override</span>
-<span class="source-line-no">200</span><span id="line-200">      public 
boolean evaluate() throws Exception {</span>
-<span class="source-line-no">201</span><span id="line-201">        try {</span>
-<span class="source-line-no">202</span><span id="line-202">          
verify(server, times(1)).abort(anyString(), any());</span>
-<span class="source-line-no">203</span><span id="line-203">          return 
true;</span>
-<span class="source-line-no">204</span><span id="line-204">        } catch 
(Throwable t) {</span>
-<span class="source-line-no">205</span><span id="line-205">          return 
false;</span>
-<span class="source-line-no">206</span><span id="line-206">        }</span>
-<span class="source-line-no">207</span><span id="line-207">      }</span>
-<span class="source-line-no">208</span><span id="line-208">    });</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210">    
executorService.shutdown();</span>
-<span class="source-line-no">211</span><span id="line-211">  }</span>
-<span class="source-line-no">212</span><span id="line-212"></span>
-<span class="source-line-no">213</span><span id="line-213">  @Test</span>
-<span class="source-line-no">214</span><span id="line-214">  public void 
testSnapshotHandlers() throws Exception {</span>
-<span class="source-line-no">215</span><span id="line-215">    final 
Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">216</span><span id="line-216">    final Server 
server = mock(Server.class);</span>
-<span class="source-line-no">217</span><span id="line-217">    
when(server.getConfiguration()).thenReturn(conf);</span>
-<span class="source-line-no">218</span><span id="line-218"></span>
-<span class="source-line-no">219</span><span id="line-219">    ExecutorService 
executorService = new ExecutorService("testSnapshotHandlers");</span>
-<span class="source-line-no">220</span><span id="line-220">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
-<span class="source-line-no">221</span><span id="line-221">      
.setExecutorType(ExecutorType.MASTER_SNAPSHOT_OPERATIONS).setCorePoolSize(1));</span>
-<span class="source-line-no">222</span><span id="line-222"></span>
-<span class="source-line-no">223</span><span id="line-223">    CountDownLatch 
latch = new CountDownLatch(1);</span>
-<span class="source-line-no">224</span><span id="line-224">    CountDownLatch 
waitForEventToStart = new CountDownLatch(1);</span>
-<span class="source-line-no">225</span><span id="line-225">    
executorService.submit(new EventHandler(server, EventType.C_M_SNAPSHOT_TABLE) 
{</span>
-<span class="source-line-no">226</span><span id="line-226">      
@Override</span>
-<span class="source-line-no">227</span><span id="line-227">      public void 
process() throws IOException {</span>
-<span class="source-line-no">228</span><span id="line-228">        
waitForEventToStart.countDown();</span>
-<span class="source-line-no">229</span><span id="line-229">        try {</span>
-<span class="source-line-no">230</span><span id="line-230">          
latch.await();</span>
-<span class="source-line-no">231</span><span id="line-231">        } catch 
(InterruptedException e) {</span>
-<span class="source-line-no">232</span><span id="line-232">          
Thread.currentThread().interrupt();</span>
-<span class="source-line-no">233</span><span id="line-233">        }</span>
-<span class="source-line-no">234</span><span id="line-234">      }</span>
-<span class="source-line-no">235</span><span id="line-235">    });</span>
-<span class="source-line-no">236</span><span id="line-236"></span>
-<span class="source-line-no">237</span><span id="line-237">    // Wait 
EventHandler to start</span>
-<span class="source-line-no">238</span><span id="line-238">    
waitForEventToStart.await(10, TimeUnit.SECONDS);</span>
-<span class="source-line-no">239</span><span id="line-239">    int activeCount 
= executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
-<span class="source-line-no">240</span><span id="line-240">      
.getThreadPoolExecutor().getActiveCount();</span>
-<span class="source-line-no">241</span><span id="line-241">    assertEquals(1, 
activeCount);</span>
-<span class="source-line-no">242</span><span id="line-242">    
latch.countDown();</span>
-<span class="source-line-no">243</span><span id="line-243">    
Waiter.waitFor(conf, 3000, () -&gt; {</span>
-<span class="source-line-no">244</span><span id="line-244">      int count = 
executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
-<span class="source-line-no">245</span><span id="line-245">        
.getThreadPoolExecutor().getActiveCount();</span>
-<span class="source-line-no">246</span><span id="line-246">      return count 
== 0;</span>
-<span class="source-line-no">247</span><span id="line-247">    });</span>
-<span class="source-line-no">248</span><span id="line-248">  }</span>
-<span class="source-line-no">249</span><span id="line-249">}</span>
+<span class="source-line-no">101</span><span id="line-101">    
Waiter.waitFor(mockedServer.getConfiguration(), 10000,</span>
+<span class="source-line-no">102</span><span id="line-102">      () -&gt; 
checkStatusDump(executor.getStatus()));</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104">    // Now 
interrupt the running Executor</span>
+<span class="source-line-no">105</span><span id="line-105">    synchronized 
(lock) {</span>
+<span class="source-line-no">106</span><span id="line-106">      
lock.set(false);</span>
+<span class="source-line-no">107</span><span id="line-107">      
lock.notifyAll();</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    // Executor 
increments counter again on way out so.... test that happened.</span>
+<span class="source-line-no">111</span><span id="line-111">    while 
(counter.get() &lt; (maxThreads * 2) &amp;&amp; tries &lt; maxTries) {</span>
+<span class="source-line-no">112</span><span id="line-112">      
System.out.println("Waiting for all event handlers to finish...");</span>
+<span class="source-line-no">113</span><span id="line-113">      
Thread.sleep(sleepInterval);</span>
+<span class="source-line-no">114</span><span id="line-114">      
tries++;</span>
+<span class="source-line-no">115</span><span id="line-115">    }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117">    
assertEquals(maxThreads * 2, counter.get());</span>
+<span class="source-line-no">118</span><span id="line-118">    
assertEquals(maxThreads, pool.getPoolSize());</span>
+<span class="source-line-no">119</span><span id="line-119"></span>
+<span class="source-line-no">120</span><span id="line-120">    // Add more 
than the number of threads items.</span>
+<span class="source-line-no">121</span><span id="line-121">    // Make sure we 
don't get RejectedExecutionException.</span>
+<span class="source-line-no">122</span><span id="line-122">    for (int i = 0; 
i &lt; (2 * maxThreads); i++) {</span>
+<span class="source-line-no">123</span><span id="line-123">      
executorService</span>
+<span class="source-line-no">124</span><span id="line-124">        .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
+<span class="source-line-no">125</span><span id="line-125">    }</span>
+<span class="source-line-no">126</span><span id="line-126">    // Now 
interrupt the running Executor</span>
+<span class="source-line-no">127</span><span id="line-127">    synchronized 
(lock) {</span>
+<span class="source-line-no">128</span><span id="line-128">      
lock.set(false);</span>
+<span class="source-line-no">129</span><span id="line-129">      
lock.notifyAll();</span>
+<span class="source-line-no">130</span><span id="line-130">    }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132">    // Make sure 
threads are still around even after their timetolive expires.</span>
+<span class="source-line-no">133</span><span id="line-133">    
Thread.sleep(ExecutorConfig.KEEP_ALIVE_TIME_MILLIS_DEFAULT * 2);</span>
+<span class="source-line-no">134</span><span id="line-134">    
assertEquals(maxThreads, pool.getPoolSize());</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">    
executorService.shutdown();</span>
+<span class="source-line-no">137</span><span id="line-137"></span>
+<span class="source-line-no">138</span><span id="line-138">    assertEquals(0, 
executorService.getAllExecutorStatuses().size());</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140">    // Test that 
submit doesn't throw NPEs</span>
+<span class="source-line-no">141</span><span id="line-141">    
executorService</span>
+<span class="source-line-no">142</span><span id="line-142">      .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
+<span class="source-line-no">143</span><span id="line-143">  }</span>
+<span class="source-line-no">144</span><span id="line-144"></span>
+<span class="source-line-no">145</span><span id="line-145">  private boolean 
checkStatusDump(ExecutorStatus status) throws IOException {</span>
+<span class="source-line-no">146</span><span id="line-146">    StringWriter sw 
= new StringWriter();</span>
+<span class="source-line-no">147</span><span id="line-147">    
status.dumpTo(sw, "");</span>
+<span class="source-line-no">148</span><span id="line-148">    String dump = 
sw.toString();</span>
+<span class="source-line-no">149</span><span id="line-149">    LOG.info("Got 
status dump:\n" + dump);</span>
+<span class="source-line-no">150</span><span id="line-150"></span>
+<span class="source-line-no">151</span><span id="line-151">    return 
dump.contains("Waiting on java.util.concurrent.atomic.AtomicBoolean");</span>
+<span class="source-line-no">152</span><span id="line-152">  }</span>
+<span class="source-line-no">153</span><span id="line-153"></span>
+<span class="source-line-no">154</span><span id="line-154">  public static 
class TestEventHandler extends EventHandler {</span>
+<span class="source-line-no">155</span><span id="line-155">    private final 
AtomicBoolean lock;</span>
+<span class="source-line-no">156</span><span id="line-156">    private 
AtomicInteger counter;</span>
+<span class="source-line-no">157</span><span id="line-157"></span>
+<span class="source-line-no">158</span><span id="line-158">    public 
TestEventHandler(Server server, EventType eventType, AtomicBoolean lock,</span>
+<span class="source-line-no">159</span><span id="line-159">      AtomicInteger 
counter) {</span>
+<span class="source-line-no">160</span><span id="line-160">      super(server, 
eventType);</span>
+<span class="source-line-no">161</span><span id="line-161">      this.lock = 
lock;</span>
+<span class="source-line-no">162</span><span id="line-162">      this.counter 
= counter;</span>
+<span class="source-line-no">163</span><span id="line-163">    }</span>
+<span class="source-line-no">164</span><span id="line-164"></span>
+<span class="source-line-no">165</span><span id="line-165">    @Override</span>
+<span class="source-line-no">166</span><span id="line-166">    public void 
process() throws IOException {</span>
+<span class="source-line-no">167</span><span id="line-167">      int num = 
counter.incrementAndGet();</span>
+<span class="source-line-no">168</span><span id="line-168">      
LOG.info("Running process #" + num + ", threadName=" + 
Thread.currentThread().getName());</span>
+<span class="source-line-no">169</span><span id="line-169">      synchronized 
(lock) {</span>
+<span class="source-line-no">170</span><span id="line-170">        while 
(lock.get()) {</span>
+<span class="source-line-no">171</span><span id="line-171">          try 
{</span>
+<span class="source-line-no">172</span><span id="line-172">            
lock.wait();</span>
+<span class="source-line-no">173</span><span id="line-173">          } catch 
(InterruptedException e) {</span>
+<span class="source-line-no">174</span><span id="line-174">            // do 
nothing</span>
+<span class="source-line-no">175</span><span id="line-175">          }</span>
+<span class="source-line-no">176</span><span id="line-176">        }</span>
+<span class="source-line-no">177</span><span id="line-177">      }</span>
+<span class="source-line-no">178</span><span id="line-178">      
counter.incrementAndGet();</span>
+<span class="source-line-no">179</span><span id="line-179">    }</span>
+<span class="source-line-no">180</span><span id="line-180">  }</span>
+<span class="source-line-no">181</span><span id="line-181"></span>
+<span class="source-line-no">182</span><span id="line-182">  @Test</span>
+<span class="source-line-no">183</span><span id="line-183">  public void 
testAborting() throws Exception {</span>
+<span class="source-line-no">184</span><span id="line-184">    final 
Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">185</span><span id="line-185">    final Server 
server = mock(Server.class);</span>
+<span class="source-line-no">186</span><span id="line-186">    
when(server.getConfiguration()).thenReturn(conf);</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188">    ExecutorService 
executorService = new ExecutorService("unit_test");</span>
+<span class="source-line-no">189</span><span id="line-189">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
+<span class="source-line-no">190</span><span id="line-190">      
.setExecutorType(ExecutorType.MASTER_SERVER_OPERATIONS).setCorePoolSize(1));</span>
+<span class="source-line-no">191</span><span id="line-191"></span>
+<span class="source-line-no">192</span><span id="line-192">    
executorService.submit(new EventHandler(server, EventType.M_SERVER_SHUTDOWN) 
{</span>
+<span class="source-line-no">193</span><span id="line-193">      
@Override</span>
+<span class="source-line-no">194</span><span id="line-194">      public void 
process() throws IOException {</span>
+<span class="source-line-no">195</span><span id="line-195">        throw new 
RuntimeException("Should cause abort");</span>
+<span class="source-line-no">196</span><span id="line-196">      }</span>
+<span class="source-line-no">197</span><span id="line-197">    });</span>
+<span class="source-line-no">198</span><span id="line-198"></span>
+<span class="source-line-no">199</span><span id="line-199">    
Waiter.waitFor(conf, 30000, new Predicate&lt;Exception&gt;() {</span>
+<span class="source-line-no">200</span><span id="line-200">      
@Override</span>
+<span class="source-line-no">201</span><span id="line-201">      public 
boolean evaluate() throws Exception {</span>
+<span class="source-line-no">202</span><span id="line-202">        try {</span>
+<span class="source-line-no">203</span><span id="line-203">          
verify(server, times(1)).abort(anyString(), any());</span>
+<span class="source-line-no">204</span><span id="line-204">          return 
true;</span>
+<span class="source-line-no">205</span><span id="line-205">        } catch 
(Throwable t) {</span>
+<span class="source-line-no">206</span><span id="line-206">          return 
false;</span>
+<span class="source-line-no">207</span><span id="line-207">        }</span>
+<span class="source-line-no">208</span><span id="line-208">      }</span>
+<span class="source-line-no">209</span><span id="line-209">    });</span>
+<span class="source-line-no">210</span><span id="line-210"></span>
+<span class="source-line-no">211</span><span id="line-211">    
executorService.shutdown();</span>
+<span class="source-line-no">212</span><span id="line-212">  }</span>
+<span class="source-line-no">213</span><span id="line-213"></span>
+<span class="source-line-no">214</span><span id="line-214">  @Test</span>
+<span class="source-line-no">215</span><span id="line-215">  public void 
testSnapshotHandlers() throws Exception {</span>
+<span class="source-line-no">216</span><span id="line-216">    final 
Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">217</span><span id="line-217">    final Server 
server = mock(Server.class);</span>
+<span class="source-line-no">218</span><span id="line-218">    
when(server.getConfiguration()).thenReturn(conf);</span>
+<span class="source-line-no">219</span><span id="line-219"></span>
+<span class="source-line-no">220</span><span id="line-220">    ExecutorService 
executorService = new ExecutorService("testSnapshotHandlers");</span>
+<span class="source-line-no">221</span><span id="line-221">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
+<span class="source-line-no">222</span><span id="line-222">      
.setExecutorType(ExecutorType.MASTER_SNAPSHOT_OPERATIONS).setCorePoolSize(1));</span>
+<span class="source-line-no">223</span><span id="line-223"></span>
+<span class="source-line-no">224</span><span id="line-224">    CountDownLatch 
latch = new CountDownLatch(1);</span>
+<span class="source-line-no">225</span><span id="line-225">    CountDownLatch 
waitForEventToStart = new CountDownLatch(1);</span>
+<span class="source-line-no">226</span><span id="line-226">    
executorService.submit(new EventHandler(server, EventType.C_M_SNAPSHOT_TABLE) 
{</span>
+<span class="source-line-no">227</span><span id="line-227">      
@Override</span>
+<span class="source-line-no">228</span><span id="line-228">      public void 
process() throws IOException {</span>
+<span class="source-line-no">229</span><span id="line-229">        
waitForEventToStart.countDown();</span>
+<span class="source-line-no">230</span><span id="line-230">        try {</span>
+<span class="source-line-no">231</span><span id="line-231">          
latch.await();</span>
+<span class="source-line-no">232</span><span id="line-232">        } catch 
(InterruptedException e) {</span>
+<span class="source-line-no">233</span><span id="line-233">          
Thread.currentThread().interrupt();</span>
+<span class="source-line-no">234</span><span id="line-234">        }</span>
+<span class="source-line-no">235</span><span id="line-235">      }</span>
+<span class="source-line-no">236</span><span id="line-236">    });</span>
+<span class="source-line-no">237</span><span id="line-237"></span>
+<span class="source-line-no">238</span><span id="line-238">    // Wait 
EventHandler to start</span>
+<span class="source-line-no">239</span><span id="line-239">    
waitForEventToStart.await(10, TimeUnit.SECONDS);</span>
+<span class="source-line-no">240</span><span id="line-240">    int activeCount 
= executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
+<span class="source-line-no">241</span><span id="line-241">      
.getThreadPoolExecutor().getActiveCount();</span>
+<span class="source-line-no">242</span><span id="line-242">    assertEquals(1, 
activeCount);</span>
+<span class="source-line-no">243</span><span id="line-243">    
latch.countDown();</span>
+<span class="source-line-no">244</span><span id="line-244">    
Waiter.waitFor(conf, 3000, () -&gt; {</span>
+<span class="source-line-no">245</span><span id="line-245">      int count = 
executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
+<span class="source-line-no">246</span><span id="line-246">        
.getThreadPoolExecutor().getActiveCount();</span>
+<span class="source-line-no">247</span><span id="line-247">      return count 
== 0;</span>
+<span class="source-line-no">248</span><span id="line-248">    });</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250">}</span>
 
 
 
diff --git 
a/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html
 
b/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html
index a3a859f943f..d1a773adef0 100644
--- 
a/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html
+++ 
b/testdevapidocs/src-html/org/apache/hadoop/hbase/executor/TestExecutorService.html
@@ -111,155 +111,156 @@
 <span class="source-line-no">098</span><span id="line-98">    ExecutorStatus 
status = executor.getStatus();</span>
 <span class="source-line-no">099</span><span id="line-99">    
assertTrue(status.queuedEvents.isEmpty());</span>
 <span class="source-line-no">100</span><span id="line-100">    assertEquals(5, 
status.running.size());</span>
-<span class="source-line-no">101</span><span id="line-101">    
checkStatusDump(status);</span>
-<span class="source-line-no">102</span><span id="line-102"></span>
-<span class="source-line-no">103</span><span id="line-103">    // Now 
interrupt the running Executor</span>
-<span class="source-line-no">104</span><span id="line-104">    synchronized 
(lock) {</span>
-<span class="source-line-no">105</span><span id="line-105">      
lock.set(false);</span>
-<span class="source-line-no">106</span><span id="line-106">      
lock.notifyAll();</span>
-<span class="source-line-no">107</span><span id="line-107">    }</span>
-<span class="source-line-no">108</span><span id="line-108"></span>
-<span class="source-line-no">109</span><span id="line-109">    // Executor 
increments counter again on way out so.... test that happened.</span>
-<span class="source-line-no">110</span><span id="line-110">    while 
(counter.get() &lt; (maxThreads * 2) &amp;&amp; tries &lt; maxTries) {</span>
-<span class="source-line-no">111</span><span id="line-111">      
System.out.println("Waiting for all event handlers to finish...");</span>
-<span class="source-line-no">112</span><span id="line-112">      
Thread.sleep(sleepInterval);</span>
-<span class="source-line-no">113</span><span id="line-113">      
tries++;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    
assertEquals(maxThreads * 2, counter.get());</span>
-<span class="source-line-no">117</span><span id="line-117">    
assertEquals(maxThreads, pool.getPoolSize());</span>
-<span class="source-line-no">118</span><span id="line-118"></span>
-<span class="source-line-no">119</span><span id="line-119">    // Add more 
than the number of threads items.</span>
-<span class="source-line-no">120</span><span id="line-120">    // Make sure we 
don't get RejectedExecutionException.</span>
-<span class="source-line-no">121</span><span id="line-121">    for (int i = 0; 
i &lt; (2 * maxThreads); i++) {</span>
-<span class="source-line-no">122</span><span id="line-122">      
executorService</span>
-<span class="source-line-no">123</span><span id="line-123">        .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
-<span class="source-line-no">124</span><span id="line-124">    }</span>
-<span class="source-line-no">125</span><span id="line-125">    // Now 
interrupt the running Executor</span>
-<span class="source-line-no">126</span><span id="line-126">    synchronized 
(lock) {</span>
-<span class="source-line-no">127</span><span id="line-127">      
lock.set(false);</span>
-<span class="source-line-no">128</span><span id="line-128">      
lock.notifyAll();</span>
-<span class="source-line-no">129</span><span id="line-129">    }</span>
-<span class="source-line-no">130</span><span id="line-130"></span>
-<span class="source-line-no">131</span><span id="line-131">    // Make sure 
threads are still around even after their timetolive expires.</span>
-<span class="source-line-no">132</span><span id="line-132">    
Thread.sleep(ExecutorConfig.KEEP_ALIVE_TIME_MILLIS_DEFAULT * 2);</span>
-<span class="source-line-no">133</span><span id="line-133">    
assertEquals(maxThreads, pool.getPoolSize());</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135">    
executorService.shutdown();</span>
-<span class="source-line-no">136</span><span id="line-136"></span>
-<span class="source-line-no">137</span><span id="line-137">    assertEquals(0, 
executorService.getAllExecutorStatuses().size());</span>
-<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139">    // Test that 
submit doesn't throw NPEs</span>
-<span class="source-line-no">140</span><span id="line-140">    
executorService</span>
-<span class="source-line-no">141</span><span id="line-141">      .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
-<span class="source-line-no">142</span><span id="line-142">  }</span>
-<span class="source-line-no">143</span><span id="line-143"></span>
-<span class="source-line-no">144</span><span id="line-144">  private void 
checkStatusDump(ExecutorStatus status) throws IOException {</span>
-<span class="source-line-no">145</span><span id="line-145">    StringWriter sw 
= new StringWriter();</span>
-<span class="source-line-no">146</span><span id="line-146">    
status.dumpTo(sw, "");</span>
-<span class="source-line-no">147</span><span id="line-147">    String dump = 
sw.toString();</span>
-<span class="source-line-no">148</span><span id="line-148">    LOG.info("Got 
status dump:\n" + dump);</span>
-<span class="source-line-no">149</span><span id="line-149"></span>
-<span class="source-line-no">150</span><span id="line-150">    
assertTrue(dump.contains("Waiting on 
java.util.concurrent.atomic.AtomicBoolean"));</span>
-<span class="source-line-no">151</span><span id="line-151">  }</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153">  public static 
class TestEventHandler extends EventHandler {</span>
-<span class="source-line-no">154</span><span id="line-154">    private final 
AtomicBoolean lock;</span>
-<span class="source-line-no">155</span><span id="line-155">    private 
AtomicInteger counter;</span>
-<span class="source-line-no">156</span><span id="line-156"></span>
-<span class="source-line-no">157</span><span id="line-157">    public 
TestEventHandler(Server server, EventType eventType, AtomicBoolean lock,</span>
-<span class="source-line-no">158</span><span id="line-158">      AtomicInteger 
counter) {</span>
-<span class="source-line-no">159</span><span id="line-159">      super(server, 
eventType);</span>
-<span class="source-line-no">160</span><span id="line-160">      this.lock = 
lock;</span>
-<span class="source-line-no">161</span><span id="line-161">      this.counter 
= counter;</span>
-<span class="source-line-no">162</span><span id="line-162">    }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164">    @Override</span>
-<span class="source-line-no">165</span><span id="line-165">    public void 
process() throws IOException {</span>
-<span class="source-line-no">166</span><span id="line-166">      int num = 
counter.incrementAndGet();</span>
-<span class="source-line-no">167</span><span id="line-167">      
LOG.info("Running process #" + num + ", threadName=" + 
Thread.currentThread().getName());</span>
-<span class="source-line-no">168</span><span id="line-168">      synchronized 
(lock) {</span>
-<span class="source-line-no">169</span><span id="line-169">        while 
(lock.get()) {</span>
-<span class="source-line-no">170</span><span id="line-170">          try 
{</span>
-<span class="source-line-no">171</span><span id="line-171">            
lock.wait();</span>
-<span class="source-line-no">172</span><span id="line-172">          } catch 
(InterruptedException e) {</span>
-<span class="source-line-no">173</span><span id="line-173">            // do 
nothing</span>
-<span class="source-line-no">174</span><span id="line-174">          }</span>
-<span class="source-line-no">175</span><span id="line-175">        }</span>
-<span class="source-line-no">176</span><span id="line-176">      }</span>
-<span class="source-line-no">177</span><span id="line-177">      
counter.incrementAndGet();</span>
-<span class="source-line-no">178</span><span id="line-178">    }</span>
-<span class="source-line-no">179</span><span id="line-179">  }</span>
-<span class="source-line-no">180</span><span id="line-180"></span>
-<span class="source-line-no">181</span><span id="line-181">  @Test</span>
-<span class="source-line-no">182</span><span id="line-182">  public void 
testAborting() throws Exception {</span>
-<span class="source-line-no">183</span><span id="line-183">    final 
Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">184</span><span id="line-184">    final Server 
server = mock(Server.class);</span>
-<span class="source-line-no">185</span><span id="line-185">    
when(server.getConfiguration()).thenReturn(conf);</span>
-<span class="source-line-no">186</span><span id="line-186"></span>
-<span class="source-line-no">187</span><span id="line-187">    ExecutorService 
executorService = new ExecutorService("unit_test");</span>
-<span class="source-line-no">188</span><span id="line-188">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
-<span class="source-line-no">189</span><span id="line-189">      
.setExecutorType(ExecutorType.MASTER_SERVER_OPERATIONS).setCorePoolSize(1));</span>
-<span class="source-line-no">190</span><span id="line-190"></span>
-<span class="source-line-no">191</span><span id="line-191">    
executorService.submit(new EventHandler(server, EventType.M_SERVER_SHUTDOWN) 
{</span>
-<span class="source-line-no">192</span><span id="line-192">      
@Override</span>
-<span class="source-line-no">193</span><span id="line-193">      public void 
process() throws IOException {</span>
-<span class="source-line-no">194</span><span id="line-194">        throw new 
RuntimeException("Should cause abort");</span>
-<span class="source-line-no">195</span><span id="line-195">      }</span>
-<span class="source-line-no">196</span><span id="line-196">    });</span>
-<span class="source-line-no">197</span><span id="line-197"></span>
-<span class="source-line-no">198</span><span id="line-198">    
Waiter.waitFor(conf, 30000, new Predicate&lt;Exception&gt;() {</span>
-<span class="source-line-no">199</span><span id="line-199">      
@Override</span>
-<span class="source-line-no">200</span><span id="line-200">      public 
boolean evaluate() throws Exception {</span>
-<span class="source-line-no">201</span><span id="line-201">        try {</span>
-<span class="source-line-no">202</span><span id="line-202">          
verify(server, times(1)).abort(anyString(), any());</span>
-<span class="source-line-no">203</span><span id="line-203">          return 
true;</span>
-<span class="source-line-no">204</span><span id="line-204">        } catch 
(Throwable t) {</span>
-<span class="source-line-no">205</span><span id="line-205">          return 
false;</span>
-<span class="source-line-no">206</span><span id="line-206">        }</span>
-<span class="source-line-no">207</span><span id="line-207">      }</span>
-<span class="source-line-no">208</span><span id="line-208">    });</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210">    
executorService.shutdown();</span>
-<span class="source-line-no">211</span><span id="line-211">  }</span>
-<span class="source-line-no">212</span><span id="line-212"></span>
-<span class="source-line-no">213</span><span id="line-213">  @Test</span>
-<span class="source-line-no">214</span><span id="line-214">  public void 
testSnapshotHandlers() throws Exception {</span>
-<span class="source-line-no">215</span><span id="line-215">    final 
Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">216</span><span id="line-216">    final Server 
server = mock(Server.class);</span>
-<span class="source-line-no">217</span><span id="line-217">    
when(server.getConfiguration()).thenReturn(conf);</span>
-<span class="source-line-no">218</span><span id="line-218"></span>
-<span class="source-line-no">219</span><span id="line-219">    ExecutorService 
executorService = new ExecutorService("testSnapshotHandlers");</span>
-<span class="source-line-no">220</span><span id="line-220">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
-<span class="source-line-no">221</span><span id="line-221">      
.setExecutorType(ExecutorType.MASTER_SNAPSHOT_OPERATIONS).setCorePoolSize(1));</span>
-<span class="source-line-no">222</span><span id="line-222"></span>
-<span class="source-line-no">223</span><span id="line-223">    CountDownLatch 
latch = new CountDownLatch(1);</span>
-<span class="source-line-no">224</span><span id="line-224">    CountDownLatch 
waitForEventToStart = new CountDownLatch(1);</span>
-<span class="source-line-no">225</span><span id="line-225">    
executorService.submit(new EventHandler(server, EventType.C_M_SNAPSHOT_TABLE) 
{</span>
-<span class="source-line-no">226</span><span id="line-226">      
@Override</span>
-<span class="source-line-no">227</span><span id="line-227">      public void 
process() throws IOException {</span>
-<span class="source-line-no">228</span><span id="line-228">        
waitForEventToStart.countDown();</span>
-<span class="source-line-no">229</span><span id="line-229">        try {</span>
-<span class="source-line-no">230</span><span id="line-230">          
latch.await();</span>
-<span class="source-line-no">231</span><span id="line-231">        } catch 
(InterruptedException e) {</span>
-<span class="source-line-no">232</span><span id="line-232">          
Thread.currentThread().interrupt();</span>
-<span class="source-line-no">233</span><span id="line-233">        }</span>
-<span class="source-line-no">234</span><span id="line-234">      }</span>
-<span class="source-line-no">235</span><span id="line-235">    });</span>
-<span class="source-line-no">236</span><span id="line-236"></span>
-<span class="source-line-no">237</span><span id="line-237">    // Wait 
EventHandler to start</span>
-<span class="source-line-no">238</span><span id="line-238">    
waitForEventToStart.await(10, TimeUnit.SECONDS);</span>
-<span class="source-line-no">239</span><span id="line-239">    int activeCount 
= executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
-<span class="source-line-no">240</span><span id="line-240">      
.getThreadPoolExecutor().getActiveCount();</span>
-<span class="source-line-no">241</span><span id="line-241">    assertEquals(1, 
activeCount);</span>
-<span class="source-line-no">242</span><span id="line-242">    
latch.countDown();</span>
-<span class="source-line-no">243</span><span id="line-243">    
Waiter.waitFor(conf, 3000, () -&gt; {</span>
-<span class="source-line-no">244</span><span id="line-244">      int count = 
executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
-<span class="source-line-no">245</span><span id="line-245">        
.getThreadPoolExecutor().getActiveCount();</span>
-<span class="source-line-no">246</span><span id="line-246">      return count 
== 0;</span>
-<span class="source-line-no">247</span><span id="line-247">    });</span>
-<span class="source-line-no">248</span><span id="line-248">  }</span>
-<span class="source-line-no">249</span><span id="line-249">}</span>
+<span class="source-line-no">101</span><span id="line-101">    
Waiter.waitFor(mockedServer.getConfiguration(), 10000,</span>
+<span class="source-line-no">102</span><span id="line-102">      () -&gt; 
checkStatusDump(executor.getStatus()));</span>
+<span class="source-line-no">103</span><span id="line-103"></span>
+<span class="source-line-no">104</span><span id="line-104">    // Now 
interrupt the running Executor</span>
+<span class="source-line-no">105</span><span id="line-105">    synchronized 
(lock) {</span>
+<span class="source-line-no">106</span><span id="line-106">      
lock.set(false);</span>
+<span class="source-line-no">107</span><span id="line-107">      
lock.notifyAll();</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    // Executor 
increments counter again on way out so.... test that happened.</span>
+<span class="source-line-no">111</span><span id="line-111">    while 
(counter.get() &lt; (maxThreads * 2) &amp;&amp; tries &lt; maxTries) {</span>
+<span class="source-line-no">112</span><span id="line-112">      
System.out.println("Waiting for all event handlers to finish...");</span>
+<span class="source-line-no">113</span><span id="line-113">      
Thread.sleep(sleepInterval);</span>
+<span class="source-line-no">114</span><span id="line-114">      
tries++;</span>
+<span class="source-line-no">115</span><span id="line-115">    }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117">    
assertEquals(maxThreads * 2, counter.get());</span>
+<span class="source-line-no">118</span><span id="line-118">    
assertEquals(maxThreads, pool.getPoolSize());</span>
+<span class="source-line-no">119</span><span id="line-119"></span>
+<span class="source-line-no">120</span><span id="line-120">    // Add more 
than the number of threads items.</span>
+<span class="source-line-no">121</span><span id="line-121">    // Make sure we 
don't get RejectedExecutionException.</span>
+<span class="source-line-no">122</span><span id="line-122">    for (int i = 0; 
i &lt; (2 * maxThreads); i++) {</span>
+<span class="source-line-no">123</span><span id="line-123">      
executorService</span>
+<span class="source-line-no">124</span><span id="line-124">        .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
+<span class="source-line-no">125</span><span id="line-125">    }</span>
+<span class="source-line-no">126</span><span id="line-126">    // Now 
interrupt the running Executor</span>
+<span class="source-line-no">127</span><span id="line-127">    synchronized 
(lock) {</span>
+<span class="source-line-no">128</span><span id="line-128">      
lock.set(false);</span>
+<span class="source-line-no">129</span><span id="line-129">      
lock.notifyAll();</span>
+<span class="source-line-no">130</span><span id="line-130">    }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132">    // Make sure 
threads are still around even after their timetolive expires.</span>
+<span class="source-line-no">133</span><span id="line-133">    
Thread.sleep(ExecutorConfig.KEEP_ALIVE_TIME_MILLIS_DEFAULT * 2);</span>
+<span class="source-line-no">134</span><span id="line-134">    
assertEquals(maxThreads, pool.getPoolSize());</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">    
executorService.shutdown();</span>
+<span class="source-line-no">137</span><span id="line-137"></span>
+<span class="source-line-no">138</span><span id="line-138">    assertEquals(0, 
executorService.getAllExecutorStatuses().size());</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140">    // Test that 
submit doesn't throw NPEs</span>
+<span class="source-line-no">141</span><span id="line-141">    
executorService</span>
+<span class="source-line-no">142</span><span id="line-142">      .submit(new 
TestEventHandler(mockedServer, EventType.M_SERVER_SHUTDOWN, lock, 
counter));</span>
+<span class="source-line-no">143</span><span id="line-143">  }</span>
+<span class="source-line-no">144</span><span id="line-144"></span>
+<span class="source-line-no">145</span><span id="line-145">  private boolean 
checkStatusDump(ExecutorStatus status) throws IOException {</span>
+<span class="source-line-no">146</span><span id="line-146">    StringWriter sw 
= new StringWriter();</span>
+<span class="source-line-no">147</span><span id="line-147">    
status.dumpTo(sw, "");</span>
+<span class="source-line-no">148</span><span id="line-148">    String dump = 
sw.toString();</span>
+<span class="source-line-no">149</span><span id="line-149">    LOG.info("Got 
status dump:\n" + dump);</span>
+<span class="source-line-no">150</span><span id="line-150"></span>
+<span class="source-line-no">151</span><span id="line-151">    return 
dump.contains("Waiting on java.util.concurrent.atomic.AtomicBoolean");</span>
+<span class="source-line-no">152</span><span id="line-152">  }</span>
+<span class="source-line-no">153</span><span id="line-153"></span>
+<span class="source-line-no">154</span><span id="line-154">  public static 
class TestEventHandler extends EventHandler {</span>
+<span class="source-line-no">155</span><span id="line-155">    private final 
AtomicBoolean lock;</span>
+<span class="source-line-no">156</span><span id="line-156">    private 
AtomicInteger counter;</span>
+<span class="source-line-no">157</span><span id="line-157"></span>
+<span class="source-line-no">158</span><span id="line-158">    public 
TestEventHandler(Server server, EventType eventType, AtomicBoolean lock,</span>
+<span class="source-line-no">159</span><span id="line-159">      AtomicInteger 
counter) {</span>
+<span class="source-line-no">160</span><span id="line-160">      super(server, 
eventType);</span>
+<span class="source-line-no">161</span><span id="line-161">      this.lock = 
lock;</span>
+<span class="source-line-no">162</span><span id="line-162">      this.counter 
= counter;</span>
+<span class="source-line-no">163</span><span id="line-163">    }</span>
+<span class="source-line-no">164</span><span id="line-164"></span>
+<span class="source-line-no">165</span><span id="line-165">    @Override</span>
+<span class="source-line-no">166</span><span id="line-166">    public void 
process() throws IOException {</span>
+<span class="source-line-no">167</span><span id="line-167">      int num = 
counter.incrementAndGet();</span>
+<span class="source-line-no">168</span><span id="line-168">      
LOG.info("Running process #" + num + ", threadName=" + 
Thread.currentThread().getName());</span>
+<span class="source-line-no">169</span><span id="line-169">      synchronized 
(lock) {</span>
+<span class="source-line-no">170</span><span id="line-170">        while 
(lock.get()) {</span>
+<span class="source-line-no">171</span><span id="line-171">          try 
{</span>
+<span class="source-line-no">172</span><span id="line-172">            
lock.wait();</span>
+<span class="source-line-no">173</span><span id="line-173">          } catch 
(InterruptedException e) {</span>
+<span class="source-line-no">174</span><span id="line-174">            // do 
nothing</span>
+<span class="source-line-no">175</span><span id="line-175">          }</span>
+<span class="source-line-no">176</span><span id="line-176">        }</span>
+<span class="source-line-no">177</span><span id="line-177">      }</span>
+<span class="source-line-no">178</span><span id="line-178">      
counter.incrementAndGet();</span>
+<span class="source-line-no">179</span><span id="line-179">    }</span>
+<span class="source-line-no">180</span><span id="line-180">  }</span>
+<span class="source-line-no">181</span><span id="line-181"></span>
+<span class="source-line-no">182</span><span id="line-182">  @Test</span>
+<span class="source-line-no">183</span><span id="line-183">  public void 
testAborting() throws Exception {</span>
+<span class="source-line-no">184</span><span id="line-184">    final 
Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">185</span><span id="line-185">    final Server 
server = mock(Server.class);</span>
+<span class="source-line-no">186</span><span id="line-186">    
when(server.getConfiguration()).thenReturn(conf);</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188">    ExecutorService 
executorService = new ExecutorService("unit_test");</span>
+<span class="source-line-no">189</span><span id="line-189">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
+<span class="source-line-no">190</span><span id="line-190">      
.setExecutorType(ExecutorType.MASTER_SERVER_OPERATIONS).setCorePoolSize(1));</span>
+<span class="source-line-no">191</span><span id="line-191"></span>
+<span class="source-line-no">192</span><span id="line-192">    
executorService.submit(new EventHandler(server, EventType.M_SERVER_SHUTDOWN) 
{</span>
+<span class="source-line-no">193</span><span id="line-193">      
@Override</span>
+<span class="source-line-no">194</span><span id="line-194">      public void 
process() throws IOException {</span>
+<span class="source-line-no">195</span><span id="line-195">        throw new 
RuntimeException("Should cause abort");</span>
+<span class="source-line-no">196</span><span id="line-196">      }</span>
+<span class="source-line-no">197</span><span id="line-197">    });</span>
+<span class="source-line-no">198</span><span id="line-198"></span>
+<span class="source-line-no">199</span><span id="line-199">    
Waiter.waitFor(conf, 30000, new Predicate&lt;Exception&gt;() {</span>
+<span class="source-line-no">200</span><span id="line-200">      
@Override</span>
+<span class="source-line-no">201</span><span id="line-201">      public 
boolean evaluate() throws Exception {</span>
+<span class="source-line-no">202</span><span id="line-202">        try {</span>
+<span class="source-line-no">203</span><span id="line-203">          
verify(server, times(1)).abort(anyString(), any());</span>
+<span class="source-line-no">204</span><span id="line-204">          return 
true;</span>
+<span class="source-line-no">205</span><span id="line-205">        } catch 
(Throwable t) {</span>
+<span class="source-line-no">206</span><span id="line-206">          return 
false;</span>
+<span class="source-line-no">207</span><span id="line-207">        }</span>
+<span class="source-line-no">208</span><span id="line-208">      }</span>
+<span class="source-line-no">209</span><span id="line-209">    });</span>
+<span class="source-line-no">210</span><span id="line-210"></span>
+<span class="source-line-no">211</span><span id="line-211">    
executorService.shutdown();</span>
+<span class="source-line-no">212</span><span id="line-212">  }</span>
+<span class="source-line-no">213</span><span id="line-213"></span>
+<span class="source-line-no">214</span><span id="line-214">  @Test</span>
+<span class="source-line-no">215</span><span id="line-215">  public void 
testSnapshotHandlers() throws Exception {</span>
+<span class="source-line-no">216</span><span id="line-216">    final 
Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">217</span><span id="line-217">    final Server 
server = mock(Server.class);</span>
+<span class="source-line-no">218</span><span id="line-218">    
when(server.getConfiguration()).thenReturn(conf);</span>
+<span class="source-line-no">219</span><span id="line-219"></span>
+<span class="source-line-no">220</span><span id="line-220">    ExecutorService 
executorService = new ExecutorService("testSnapshotHandlers");</span>
+<span class="source-line-no">221</span><span id="line-221">    
executorService.startExecutorService(executorService.new ExecutorConfig()</span>
+<span class="source-line-no">222</span><span id="line-222">      
.setExecutorType(ExecutorType.MASTER_SNAPSHOT_OPERATIONS).setCorePoolSize(1));</span>
+<span class="source-line-no">223</span><span id="line-223"></span>
+<span class="source-line-no">224</span><span id="line-224">    CountDownLatch 
latch = new CountDownLatch(1);</span>
+<span class="source-line-no">225</span><span id="line-225">    CountDownLatch 
waitForEventToStart = new CountDownLatch(1);</span>
+<span class="source-line-no">226</span><span id="line-226">    
executorService.submit(new EventHandler(server, EventType.C_M_SNAPSHOT_TABLE) 
{</span>
+<span class="source-line-no">227</span><span id="line-227">      
@Override</span>
+<span class="source-line-no">228</span><span id="line-228">      public void 
process() throws IOException {</span>
+<span class="source-line-no">229</span><span id="line-229">        
waitForEventToStart.countDown();</span>
+<span class="source-line-no">230</span><span id="line-230">        try {</span>
+<span class="source-line-no">231</span><span id="line-231">          
latch.await();</span>
+<span class="source-line-no">232</span><span id="line-232">        } catch 
(InterruptedException e) {</span>
+<span class="source-line-no">233</span><span id="line-233">          
Thread.currentThread().interrupt();</span>
+<span class="source-line-no">234</span><span id="line-234">        }</span>
+<span class="source-line-no">235</span><span id="line-235">      }</span>
+<span class="source-line-no">236</span><span id="line-236">    });</span>
+<span class="source-line-no">237</span><span id="line-237"></span>
+<span class="source-line-no">238</span><span id="line-238">    // Wait 
EventHandler to start</span>
+<span class="source-line-no">239</span><span id="line-239">    
waitForEventToStart.await(10, TimeUnit.SECONDS);</span>
+<span class="source-line-no">240</span><span id="line-240">    int activeCount 
= executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
+<span class="source-line-no">241</span><span id="line-241">      
.getThreadPoolExecutor().getActiveCount();</span>
+<span class="source-line-no">242</span><span id="line-242">    assertEquals(1, 
activeCount);</span>
+<span class="source-line-no">243</span><span id="line-243">    
latch.countDown();</span>
+<span class="source-line-no">244</span><span id="line-244">    
Waiter.waitFor(conf, 3000, () -&gt; {</span>
+<span class="source-line-no">245</span><span id="line-245">      int count = 
executorService.getExecutor(ExecutorType.MASTER_SNAPSHOT_OPERATIONS)</span>
+<span class="source-line-no">246</span><span id="line-246">        
.getThreadPoolExecutor().getActiveCount();</span>
+<span class="source-line-no">247</span><span id="line-247">      return count 
== 0;</span>
+<span class="source-line-no">248</span><span id="line-248">    });</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250">}</span>
 
 
 

Reply via email to