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> <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> <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> <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> <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> <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> <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> <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> <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="<init>(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> <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 server,
+<div class="member-signature"><span class="modifiers">public</span> <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 server,
org.apache.hadoop.hbase.executor.EventType 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> 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> 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> <span
class="return-type">void</span> <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> <span
class="return-type">void</span> <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 status)</code></div>
<div class="col-last even-row-color method-summary-table
method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table
method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
@@ -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> <span
class="return-type">void</span> <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 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> <span
class="return-type">boolean</span> <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 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> <span
class="return-type">void</span> <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> <span
class="return-type">void</span> <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> <span
class="return-type">void</span> <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> <span
class="return-type">void</span> <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() < (maxThreads * 2) && tries < 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 < (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<Exception>() {</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, () -> {</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"> () ->
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() < (maxThreads * 2) && tries < 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 < (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<Exception>() {</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, () -> {</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() < (maxThreads * 2) && tries < 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 < (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<Exception>() {</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, () -> {</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"> () ->
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() < (maxThreads * 2) && tries < 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 < (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<Exception>() {</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, () -> {</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>