You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2026/01/18 14:51:00 UTC
(hbase-site) branch asf-site updated: Published site at 2c8d1c0073078c30efacf1a5542196199557d52c.
This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 2529b19cb58 Published site at 2c8d1c0073078c30efacf1a5542196199557d52c.
2529b19cb58 is described below
commit 2529b19cb58d7e7c84a058208fff4f1da8df0e2b
Author: jenkins <bu...@apache.org>
AuthorDate: Sun Jan 18 14:50:38 2026 +0000
Published site at 2c8d1c0073078c30efacf1a5542196199557d52c.
---
apache_hbase_reference_guide.pdf | 4 +-
book.html | 2 +-
checkstyle-aggregate.html | 4 +-
dependency-convergence.html | 4 +-
dependency-info.html | 4 +-
dependency-management.html | 4 +-
hbase-website/dependency-convergence.html | 4 +-
hbase-website/dependency-info.html | 4 +-
hbase-website/dependency-management.html | 4 +-
hbase-website/index.html | 4 +-
hbase-website/issue-management.html | 4 +-
hbase-website/licenses.html | 4 +-
hbase-website/mailing-lists.html | 4 +-
hbase-website/plugin-management.html | 4 +-
hbase-website/plugins.html | 4 +-
hbase-website/project-info.html | 4 +-
hbase-website/scm.html | 4 +-
hbase-website/summary.html | 4 +-
hbase-website/team.html | 4 +-
issue-management.html | 4 +-
licenses.html | 4 +-
mailing-lists.html | 4 +-
plugin-management.html | 4 +-
plugins.html | 4 +-
project-info.html | 4 +-
project-reports.html | 4 +-
scm.html | 4 +-
summary.html | 4 +-
team.html | 4 +-
testapidocs/index-all.html | 38 +-
testapidocs/member-search-index.js | 2 +-
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 69 +-
.../class-use/HBaseParameterizedTestTemplate.html | 24 +-
.../hbase/io/crypto/tls/class-use/X509KeyType.html | 18 +-
.../org/apache/hadoop/hbase/package-use.html | 10 +-
.../apache/hadoop/hbase/ipc/AbstractTestIPC.html | 1362 ++++++++++----------
.../apache/hadoop/hbase/ipc/TestBlockingIPC.html | 133 +-
.../org/apache/hadoop/hbase/ipc/TestNettyIPC.html | 247 ++--
.../apache/hadoop/hbase/ipc/TestNettyTlsIPC.html | 144 +--
testdevapidocs/index-all.html | 26 +-
testdevapidocs/member-search-index.js | 2 +-
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 69 +-
.../class-use/HBaseParameterizedTestTemplate.html | 24 +-
.../hbase/io/crypto/tls/class-use/X509KeyType.html | 18 +-
...C.FailingSimpleRpcServer.FailingConnection.html | 6 +-
.../AbstractTestIPC.FailingSimpleRpcServer.html | 6 +-
.../apache/hadoop/hbase/ipc/AbstractTestIPC.html | 123 +-
.../apache/hadoop/hbase/ipc/TestBlockingIPC.html | 54 +-
.../org/apache/hadoop/hbase/ipc/TestNettyIPC.html | 62 +-
.../apache/hadoop/hbase/ipc/TestNettyTlsIPC.html | 100 +-
.../org/apache/hadoop/hbase/package-use.html | 10 +-
...C.FailingSimpleRpcServer.FailingConnection.html | 1362 ++++++++++----------
.../AbstractTestIPC.FailingSimpleRpcServer.html | 1362 ++++++++++----------
.../apache/hadoop/hbase/ipc/AbstractTestIPC.html | 1362 ++++++++++----------
.../apache/hadoop/hbase/ipc/TestBlockingIPC.html | 133 +-
.../org/apache/hadoop/hbase/ipc/TestNettyIPC.html | 247 ++--
.../apache/hadoop/hbase/ipc/TestNettyTlsIPC.html | 144 +--
57 files changed, 3647 insertions(+), 3624 deletions(-)
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 3af3d73c7ef..3ef37a46b15 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
/Producer (Apache HBase Team)
-/ModDate (D:20260115143212+00'00')
-/CreationDate (D:20260115144712+00'00')
+/ModDate (D:20260118143121+00'00')
+/CreationDate (D:20260118144602+00'00')
>>
endobj
2 0 obj
diff --git a/book.html b/book.html
index db1be186c81..8028e39643c 100644
--- a/book.html
+++ b/book.html
@@ -50183,7 +50183,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
<div id="footer">
<div id="footer-text">
Version 4.0.0-alpha-1-SNAPSHOT<br>
-Last updated 2026-01-15 14:32:12 UTC
+Last updated 2026-01-18 14:31:21 UTC
</div>
</div>
<script type="text/x-mathjax-config">
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index e2cf19288cc..872ca5e7546 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 2026-01-15
+ from org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index a6b3c8c14d8..c11af53c559 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/dependency-info.html b/dependency-info.html
index 94898cd85b3..82fc17bf29e 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/dependency-management.html b/dependency-management.html
index dcc48867937..1b99f3dcfd4 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/dependency-convergence.html b/hbase-website/dependency-convergence.html
index 3e59f7b84b4..ceaa57954f0 100644
--- a/hbase-website/dependency-convergence.html
+++ b/hbase-website/dependency-convergence.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/dependency-info.html b/hbase-website/dependency-info.html
index 403555781da..d89a82d9169 100644
--- a/hbase-website/dependency-info.html
+++ b/hbase-website/dependency-info.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/dependency-management.html b/hbase-website/dependency-management.html
index 4a016ed37a1..6f6c2971def 100644
--- a/hbase-website/dependency-management.html
+++ b/hbase-website/dependency-management.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/index.html b/hbase-website/index.html
index 9845e867a42..1e6b1b80db9 100644
--- a/hbase-website/index.html
+++ b/hbase-website/index.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/issue-management.html b/hbase-website/issue-management.html
index 52b85bf8f02..ff886ddc0b8 100644
--- a/hbase-website/issue-management.html
+++ b/hbase-website/issue-management.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/licenses.html b/hbase-website/licenses.html
index b1be56373da..246d237811f 100644
--- a/hbase-website/licenses.html
+++ b/hbase-website/licenses.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/mailing-lists.html b/hbase-website/mailing-lists.html
index 2865891cade..0367321ccc0 100644
--- a/hbase-website/mailing-lists.html
+++ b/hbase-website/mailing-lists.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/plugin-management.html b/hbase-website/plugin-management.html
index d6932b6f1e8..e4e67924b65 100644
--- a/hbase-website/plugin-management.html
+++ b/hbase-website/plugin-management.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/plugins.html b/hbase-website/plugins.html
index f5f5297f5ba..4708e187d40 100644
--- a/hbase-website/plugins.html
+++ b/hbase-website/plugins.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/project-info.html b/hbase-website/project-info.html
index 51f0e7ff554..07cb42c62a0 100644
--- a/hbase-website/project-info.html
+++ b/hbase-website/project-info.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-site-plugin:3.12.0:CategorySummaryDocumentRenderer at 2026-01-15
+ from org.apache.maven.plugins:maven-site-plugin:3.12.0:CategorySummaryDocumentRenderer at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/scm.html b/hbase-website/scm.html
index 219695f4795..088fca0a0b5 100644
--- a/hbase-website/scm.html
+++ b/hbase-website/scm.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/summary.html b/hbase-website/summary.html
index 8aade0f5e43..189eede6d43 100644
--- a/hbase-website/summary.html
+++ b/hbase-website/summary.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/hbase-website/team.html b/hbase-website/team.html
index ed2bd63db4b..1d7af6b05fa 100644
--- a/hbase-website/team.html
+++ b/hbase-website/team.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase - Website
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/issue-management.html b/issue-management.html
index 5660024cdd2..6dca8b75d00 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/licenses.html b/licenses.html
index fb52edcff23..b530ed96cdd 100644
--- a/licenses.html
+++ b/licenses.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/mailing-lists.html b/mailing-lists.html
index 08c14ce8628..b0b94eb2092 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/plugin-management.html b/plugin-management.html
index 7b925492597..4fa871934a6 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/plugins.html b/plugins.html
index 48ad3b425e9..53704fedbba 100644
--- a/plugins.html
+++ b/plugins.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/project-info.html b/project-info.html
index e26fa76e0ed..8b730477c2c 100644
--- a/project-info.html
+++ b/project-info.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-site-plugin:3.12.0:CategorySummaryDocumentRenderer at 2026-01-15
+ from org.apache.maven.plugins:maven-site-plugin:3.12.0:CategorySummaryDocumentRenderer at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/project-reports.html b/project-reports.html
index 8a907ed399e..f503e30875a 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-site-plugin:3.12.0:CategorySummaryDocumentRenderer at 2026-01-15
+ from org.apache.maven.plugins:maven-site-plugin:3.12.0:CategorySummaryDocumentRenderer at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/scm.html b/scm.html
index c5deffde98a..f8ef8016c62 100644
--- a/scm.html
+++ b/scm.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/summary.html b/summary.html
index a1db6f3a679..30889478efe 100644
--- a/summary.html
+++ b/summary.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/team.html b/team.html
index 70aeb359f48..d9eaccd0ea9 100644
--- a/team.html
+++ b/team.html
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1
- from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-01-15
+ from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-01-18
| Rendered using Apache Maven Default Skin
-->
@@ -45,7 +45,7 @@ Apache HBase
<div class="xleft">
- <span id="publishDate">Last Published: 2026-01-15</span>
+ <span id="publishDate">Last Published: 2026-01-18</span>
| <span id="projectVersion">Version: 4.0.0-alpha-1-SNAPSHOT</span>
diff --git a/testapidocs/index-all.html b/testapidocs/index-all.html
index f9b48b4e757..0a3aedf049e 100644
--- a/testapidocs/index-all.html
+++ b/testapidocs/index-all.html
@@ -158,7 +158,7 @@ loadScripts(document, 'script');</script>
<dd>
<div class="block">Some basic ipc tests.</div>
</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#%3Cinit%3E()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">AbstractTestIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">AbstractTestIPC</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#%3Cinit%3E(java.lang.Class)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">AbstractTestIPC(Class<? extends RpcServer>)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">AbstractTestIPC</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver.wal">AbstractTestLogRolling</a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
<dd>
@@ -242,8 +242,6 @@ loadScripts(document, 'script');</script>
</dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html#%3Cinit%3E()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls">AbstractTestX509Parameterized()</a> - Constructor for class org.apache.hadoop.hbase.io.crypto.tls.<a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="externa [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#acceptPlainText" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">acceptPlainText</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/http/HttpServerFunctionalTest.html#access(java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">access(String)</a> - Static method in class org.apache.hadoop.hbase.http.<a href="../apidocs/org/apache/hadoop/hbase/http/HttpServerFunctionalTest.html" title="class or interface in org.apache.hadoop.hbase.http" class="external-link">HttpServerFunctionalTest</a></dt>
<dd>
<div class="block">access a url, ignoring some IOException such as the page does not exist</div>
@@ -1731,8 +1729,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html#caKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls">caKeyType</a> - Variable in class org.apache.hadoop.hbase.io.crypto.tls.<a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">AbstractTestX509Param [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#caKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">caKeyType</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html#caKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">caKeyType</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestMutualTls</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html#caKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">caKeyType</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestTlsRejectPlainText</a></dt>
@@ -1799,8 +1795,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html#certKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls">certKeyType</a> - Variable in class org.apache.hadoop.hbase.io.crypto.tls.<a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">AbstractTestX509P [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#certKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">certKeyType</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html#certKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">certKeyType</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestMutualTls</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html#certKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">certKeyType</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestTlsRejectPlainText</a></dt>
@@ -3091,8 +3085,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/util/TestMemorySizeUtil.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.util">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.io.util.<a href="../apidocs/org/apache/hadoop/hbase/io/util/TestMemorySizeUtil.html" title="class or interface in org.apache.hadoop.hbase.io.util" class="external-link">TestMemorySizeUtil</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestBlockingIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBufferChain.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBufferChain.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestBufferChain</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestCallRunner.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestCallRunner.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestCallRunner</a></dt>
@@ -3117,16 +3109,12 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyChannelWritability</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyIPCCloseConnection</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcConnection.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcConnection.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyRpcConnection</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyRpcServer</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestProtoBufRpc</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestRemoteWithExtrasException.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestRemoteWithExtrasException.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestRemoteWithExtrasException</a></dt>
@@ -5240,8 +5228,6 @@ loadScripts(document, 'script');</script>
<dd>
<div class="block">Tag a test as related to the client.</div>
</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#clientTlsEnabled" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">clientTlsEnabled</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestCloneSnapshotFromClientCustomSFT.html#CLONE_SFT" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">CLONE_SFT</a> - Static variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestCloneSnapshotFromClientCustomSFT.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestCloneSnapshotFromClientCustomSF [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#cloneAndAssertOneRetry(java.lang.String,org.apache.hadoop.hbase.TableName)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">cloneAndAssertOneRetry(String, TableName)</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hado [...]
@@ -6912,10 +6898,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html#data()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.hfile">data()</a> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" title="class or interface in org.apache.hadoop.hbase.io.hfile" class="external-link">TestLazyDataBlockDecompression</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#data()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">data()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestBlockingIPC</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#data()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">data()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.html#data()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mob">data()</a> - Static method in class org.apache.hadoop.hbase.mob.<a href="../apidocs/org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.html" title="class or interface in org.apache.hadoop.hbase.mob" class="external-link">TestDefaultMobStoreFlusher</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html#data()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mob">data()</a> - Static method in class org.apache.hadoop.hbase.mob.<a href="../apidocs/org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html" title="class or interface in org.apache.hadoop.hbase.mob" class="external-link">TestMobCompactionWithDefaults</a></dt>
@@ -8000,8 +7982,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt>EVENT_ID - Enum constant in enum class org.apache.hadoop.hbase.util.bulkdatagenerator.Utility.TableColumnNames</dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#eventLoopType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">eventLoopType</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyIPC</a></dt>
-<dd> </dd>
<dt>org.apache.hadoop.hbase.client.trace.hamcrest.EventMatchers - Class in <a href="org/apache/hadoop/hbase/client/trace/hamcrest/package-summary.html">org.apache.hadoop.hbase.client.trace.hamcrest</a></dt>
<dd>
<div class="block">Helper methods for matching against instances of <code>EventData</code>.</div>
@@ -12993,8 +12973,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html#keyPassword" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls">keyPassword</a> - Variable in class org.apache.hadoop.hbase.io.crypto.tls.<a href="../apidocs/org/apache/hadoop/hbase/io/crypto/tls/AbstractTestX509Parameterized.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">AbstractTestX509P [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#keyPassword" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">keyPassword</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html#keyPassword" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">keyPassword</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestMutualTls</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html#keyPassword" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">keyPassword</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestTlsRejectPlainText</a></dt>
@@ -15639,10 +15617,14 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestSeekTo.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.hfile">parameters()</a> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestSeekTo.html" title="class or interface in org.apache.hadoop.hbase.io.hfile" class="external-link">TestSeekTo</a></dt>
<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestBlockingIPC</a></dt>
+<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyIPC</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyRpcServer</a></dt>
<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
+<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestProtoBufRpc</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestRpcHandlerException.html#parameters()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestRpcHandlerException.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestRpcHandlerException</a></dt>
@@ -18109,8 +18091,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/TestMutualTlsClientSideNonLocalhost.html#rpcServer" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">rpcServer</a> - Variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/TestMutualTlsClientSideNonLocalhost.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">TestMutualTlsClientSideNonLocalhos [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#rpcServerImpl" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">rpcServerImpl</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">AbstractTestIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestMultipleServerPrincipalsIPC.html#rpcServerImpl" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">rpcServerImpl</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestMultipleServerPrincipalsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestMultipleServerPrincipalsIPC</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#rpcServerImpl" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">rpcServerImpl</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestProtoBufRpc</a></dt>
@@ -26004,7 +25984,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#%3Cinit%3E()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestBlockingIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestBlockingIPC</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#%3Cinit%3E(java.lang.Class)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestBlockingIPC(Class<? extends RpcServer>)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestBlockingIPC</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestBlockIOUtils.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.hfile">TestBlockIOUtils</a> - Class in <a href="org/apache/hadoop/hbase/io/hfile/package-summary.html">org.apache.hadoop.hbase.io.hfile</a></dt>
<dd> </dd>
@@ -37068,7 +37048,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyIPC</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#%3Cinit%3E()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyIPC</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#%3Cinit%3E(java.lang.Class,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyIPC(Class<? extends RpcServer>, String)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyIPC</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyIPCCloseConnection</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd>
@@ -37094,7 +37074,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#%3Cinit%3E()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestNettyTlsIPC</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#%3Cinit%3E(java.lang.Class,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,char%5B%5D,boolean,boolean)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC(Class<? extends RpcServer>, X509KeyType, X509KeyType, char[], boolean, boolean)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href= [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/TestNettyTLSIPCFileWatcher.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">TestNettyTLSIPCFileWatcher</a> - Class in <a href="org/apache/hadoop/hbase/security/package-summary.html">org.apache.hadoop.hbase.security</a></dt>
<dd> </dd>
@@ -46402,8 +46382,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableTracing.html#traceRule" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">traceRule</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableTracing.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAsyncTableTracing</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#traceRule" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">traceRule</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">AbstractTestIPC</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestHRegionTracing.html#traceRule" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">traceRule</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestHRegionTracing.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">TestHRegionTracing</a></dt>
<dd> </dd>
<dt>org.apache.hadoop.hbase.client.trace.hamcrest.TraceTestUtil - Class in <a href="org/apache/hadoop/hbase/client/trace/hamcrest/package-summary.html">org.apache.hadoop.hbase.client.trace.hamcrest</a></dt>
diff --git a/testapidocs/member-search-index.js b/testapidocs/member-search-index.js
index ac1733ecd21..d386250e99c 100644
--- a/testapidocs/member-search-index.js
+++ b/testapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"TestRegionObserverInterface","l":"A"},{"p":"org.apache.hadoop.hbase.client","c":"TestGetProcedureResult.DummyProcedure","l":"abort(MasterProcedureEnv)","u":"abort(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)"},{"p":"org.apache.hadoop.hbase.master","c":"TestMigrateNamespaceTable.SuspendProcedure","l" [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"TestRegionObserverInterface","l":"A"},{"p":"org.apache.hadoop.hbase.client","c":"TestGetProcedureResult.DummyProcedure","l":"abort(MasterProcedureEnv)","u":"abort(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)"},{"p":"org.apache.hadoop.hbase.master","c":"TestMigrateNamespaceTable.SuspendProcedure","l" [...]
\ No newline at end of file
diff --git a/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 5bc5c1de2df..1cbeba152fa 100644
--- a/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -2378,46 +2378,40 @@ loadScripts(document, 'script');</script>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestBlockingIPC.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestBufferChain.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestBufferChain.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestBufferChain.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestBufferChain.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestCallRunner.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestCallRunner.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCallRunner.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestCallRunner.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestCellBlockBuilder.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestCellBlockBuilder.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestCellBlockBuilder.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestCellBlockBuilder.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestConnectionId.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestConnectionId.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestConnectionId.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestConnectionId.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestFailedServersLog.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestFailedServersLog.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestFailedServersLog.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestFailedServersLog.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestFifoRpcScheduler.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestFifoRpcScheduler.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestFifoRpcScheduler.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestHBaseClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestHBaseClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestHBaseClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestHBaseClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestHBaseRpcControllerImpl.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestHBaseRpcControllerImpl.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestHBaseRpcControllerImpl.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestHBaseRpcControllerImpl.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestIPCUtil.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestIPCUtil.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestIPCUtil.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestIPCUtil.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestMasterFifoRpcScheduler.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestMasterFifoRpcScheduler.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestMasterFifoRpcScheduler.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestMasterFifoRpcScheduler.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestMultipleServerPrincipalsIPC.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestMultipleServerPrincipalsIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestMultipleServerPrincipalsIPC.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestMultipleServerPrincipalsIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestNettyChannelWritability.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestNettyIPC.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestNettyChannelWritability.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">TestNettyIPCCloseConnection.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
@@ -2429,62 +2423,59 @@ loadScripts(document, 'script');</script>
<div class="col-second even-row-color"><span class="type-name-label">TestNettyRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestNettyTlsIPC.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestProtoBufRpc.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestProtoBufRpc.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRemoteWithExtrasException.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRemoteWithExtrasException.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRemoteWithExtrasException.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRemoteWithExtrasException.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcClientDeprecatedNameMapping.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcClientDeprecatedNameMapping.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcClientDeprecatedNameMapping.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcClientDeprecatedNameMapping.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcClientLeaks.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcClientLeaks.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcConnectionHeader.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcConnectionHeader.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcConnectionHeader.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcConnectionHeader.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcHandlerException.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcHandlerException.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcHandlerException.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcHandlerException.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcMetrics.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcMetrics.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcServerSlowConnectionSetup.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcServerSlowConnectionSetup.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcServerSlowConnectionSetup.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcServerSlowConnectionSetup.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcServerTraceLogging.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcServerTraceLogging.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcServerTraceLogging.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcServerTraceLogging.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcSkipInitialSaslHandshake.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcSkipInitialSaslHandshake.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcSkipInitialSaslHandshake.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRpcSkipInitialSaslHandshake.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRWQueueRpcExecutor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRWQueueRpcExecutor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRWQueueRpcExecutor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestRWQueueRpcExecutor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestSecureNettyRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSecureNettyRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSecureNettyRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSecureNettyRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestSecureSimpleRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSecureSimpleRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSecureSimpleRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSecureSimpleRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestSecurityRpcSentBytesMetrics.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSecurityRpcSentBytesMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSecurityRpcSentBytesMetrics.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSecurityRpcSentBytesMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestServerCall.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestServerCall.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestServerCall.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestServerCall.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestSimpleRpcScheduler.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSimpleRpcScheduler.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSimpleRpcScheduler.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestSimpleRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSimpleRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSimpleRpcServer.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestSimpleRpcServer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestTLSHandshadeFailure.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestTLSHandshadeFailure.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestTLSHandshadeFailure.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestTLSHandshadeFailure.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
</div>
</section>
</li>
diff --git a/testapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html b/testapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html
index ba5b730a17a..866cc9dfef0 100644
--- a/testapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html
+++ b/testapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html
@@ -57,8 +57,10 @@ loadScripts(document, 'script');</script>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.io.asyncfs">org.apache.hadoop.hbase.io.asyncfs</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.ipc">org.apache.hadoop.hbase.ipc</a></div>
<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></div>
+<div class="col-last even-row-color"> </div>
</div>
<section class="class-uses">
<ul class="block-list">
@@ -77,6 +79,26 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="org.apache.hadoop.hbase.ipc">
+<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseParameterizedTestTemplate.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseParameterizedTestTemplate</a> in <a href="../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></h2>
+<div class="caption"><span>Classes in <a href="../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> with annotations of type <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseParameterizedTestTemplate.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseParameterizedTestTemplate</a></span></div>
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Class</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><code>class </code></div>
+<div class="col-second even-row-color"><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>class </code></div>
+<div class="col-second odd-row-color"><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>class </code></div>
+<div class="col-second even-row-color"><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></code></div>
+<div class="col-last even-row-color"> </div>
+</div>
+</section>
+</li>
+<li>
<section class="detail" id="org.apache.hadoop.hbase.security">
<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseParameterizedTestTemplate.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseParameterizedTestTemplate</a> in <a href="../security/package-summary.html">org.apache.hadoop.hbase.security</a></h2>
<div class="caption"><span>Classes in <a href="../security/package-summary.html">org.apache.hadoop.hbase.security</a> with annotations of type <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseParameterizedTestTemplate.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseParameterizedTestTemplate</a></span></div>
diff --git a/testapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html b/testapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html
index 19ae8c696af..f080206aacd 100644
--- a/testapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html
+++ b/testapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html
@@ -124,17 +124,19 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="org.apache.hadoop.hbase.ipc">
<h2>Uses of <a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a> in <a href="../../../../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></h2>
-<div class="caption"><span>Fields in <a href="../../../../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> declared as <a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a></span></div>
+<div class="caption"><span>Constructors in <a href="../../../../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> with parameters of type <a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a></span></div>
<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
+<div class="table-header col-first">Modifier</div>
+<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code><a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestNettyTlsIPC.</span><code><a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#caKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">caKeyType</a></code></div>
+<div class="col-first even-row-color"><code> </code></div>
+<div class="col-second even-row-color"><code><a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#%3Cinit%3E(java.lang.Class,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,char%5B%5D,boolean,boolean)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/l [...]
+ <a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a> caKeyType,
+ <a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a> certKeyType,
+ char[] keyPassword,
+ boolean acceptPlainText,
+ boolean clientTlsEnabled)</code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code><a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/io/crypto/tls/X509KeyType.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.tls" class="external-link">X509KeyType</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestNettyTlsIPC.</span><code><a href="../../../../../../../../../apidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#certKeyType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">certKeyType</a></code></div>
-<div class="col-last odd-row-color"> </div>
</div>
</section>
</li>
diff --git a/testapidocs/org/apache/hadoop/hbase/package-use.html b/testapidocs/org/apache/hadoop/hbase/package-use.html
index ecd4e392291..3e2a13d07a5 100644
--- a/testapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/testapidocs/org/apache/hadoop/hbase/package-use.html
@@ -949,12 +949,16 @@ loadScripts(document, 'script');</script>
<div class="col-last even-row-color">
<div class="block">The class level TestRule for all the tests.</div>
</div>
-<div class="col-first odd-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.ipc">HBaseTestingUtil</a></div>
+<div class="col-first odd-row-color"><a href="class-use/HBaseParameterizedTestTemplate.html#org.apache.hadoop.hbase.ipc">HBaseParameterizedTestTemplate</a></div>
<div class="col-last odd-row-color">
-<div class="block">Facility for testing HBase.</div>
+<div class="block">The annotation for running JUnit4 like parameterized tests with JUnit5.</div>
</div>
-<div class="col-first even-row-color"><a href="class-use/TableNameTestRule.html#org.apache.hadoop.hbase.ipc">TableNameTestRule</a></div>
+<div class="col-first even-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.ipc">HBaseTestingUtil</a></div>
<div class="col-last even-row-color">
+<div class="block">Facility for testing HBase.</div>
+</div>
+<div class="col-first odd-row-color"><a href="class-use/TableNameTestRule.html#org.apache.hadoop.hbase.ipc">TableNameTestRule</a></div>
+<div class="col-last odd-row-color">
<div class="block">Returns a <code>TableName</code> based on currently running test method name.</div>
</div>
</div>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
index 6e454396038..1cdaeb4e72d 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
@@ -40,691 +40,695 @@
<span class="source-line-no">027</span><span id="line-27">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.SERVICE;</span>
<span class="source-line-no">028</span><span id="line-28">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newBlockingStub;</span>
<span class="source-line-no">029</span><span id="line-29">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newStub;</span>
-<span class="source-line-no">030</span><span id="line-30">import static org.hamcrest.MatcherAssert.assertThat;</span>
-<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.Matchers.allOf;</span>
-<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.containsString;</span>
-<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.everyItem;</span>
-<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
-<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.hasItem;</span>
-<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.instanceOf;</span>
-<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.startsWith;</span>
-<span class="source-line-no">038</span><span id="line-38">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">039</span><span id="line-39">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">040</span><span id="line-40">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">041</span><span id="line-41">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">042</span><span id="line-42">import static org.junit.Assert.assertThrows;</span>
-<span class="source-line-no">043</span><span id="line-43">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">044</span><span id="line-44">import static org.junit.Assert.fail;</span>
-<span class="source-line-no">045</span><span id="line-45">import static org.mockito.ArgumentMatchers.any;</span>
-<span class="source-line-no">046</span><span id="line-46">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">047</span><span id="line-47">import static org.mockito.Mockito.spy;</span>
-<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.verify;</span>
-<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">050</span><span id="line-50">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
-<span class="source-line-no">051</span><span id="line-51"></span>
-<span class="source-line-no">052</span><span id="line-52">import io.opentelemetry.api.common.AttributeKey;</span>
-<span class="source-line-no">053</span><span id="line-53">import io.opentelemetry.api.trace.SpanKind;</span>
-<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.trace.StatusCode;</span>
-<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule;</span>
-<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.sdk.trace.data.SpanData;</span>
-<span class="source-line-no">057</span><span id="line-57">import java.io.IOException;</span>
-<span class="source-line-no">058</span><span id="line-58">import java.net.InetSocketAddress;</span>
-<span class="source-line-no">059</span><span id="line-59">import java.nio.channels.SocketChannel;</span>
-<span class="source-line-no">060</span><span id="line-60">import java.time.Duration;</span>
-<span class="source-line-no">061</span><span id="line-61">import java.util.ArrayList;</span>
-<span class="source-line-no">062</span><span id="line-62">import java.util.Collections;</span>
-<span class="source-line-no">063</span><span id="line-63">import java.util.List;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.CellScanner;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.HBaseServerBase;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.KeyValue;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.MatcherPredicate;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.Server;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Waiter;</span>
-<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
-<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.security.User;</span>
-<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.io.compress.GzipCodec;</span>
-<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.ipc.RemoteException;</span>
-<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.util.StringUtils;</span>
-<span class="source-line-no">084</span><span id="line-84">import org.hamcrest.Matcher;</span>
-<span class="source-line-no">085</span><span id="line-85">import org.junit.Before;</span>
-<span class="source-line-no">086</span><span id="line-86">import org.junit.Rule;</span>
-<span class="source-line-no">087</span><span id="line-87">import org.junit.Test;</span>
-<span class="source-line-no">088</span><span id="line-88">import org.junit.runners.Parameterized.Parameter;</span>
-<span class="source-line-no">089</span><span id="line-89">import org.slf4j.Logger;</span>
-<span class="source-line-no">090</span><span id="line-90">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
-<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
-<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
-<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
-<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
-<span class="source-line-no">097</span><span id="line-97"></span>
-<span class="source-line-no">098</span><span id="line-98">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
-<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
-<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
-<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
-<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
-<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
-<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
-<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
-<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
-<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
-<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110">/**</span>
-<span class="source-line-no">111</span><span id="line-111"> * Some basic ipc tests.</span>
-<span class="source-line-no">112</span><span id="line-112"> */</span>
-<span class="source-line-no">113</span><span id="line-113">public abstract class AbstractTestIPC {</span>
-<span class="source-line-no">114</span><span id="line-114"></span>
-<span class="source-line-no">115</span><span id="line-115"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
-<span class="source-line-no">118</span><span id="line-118"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> protected RpcServer createRpcServer(Server server, String name,</span>
-<span class="source-line-no">123</span><span id="line-123"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
-<span class="source-line-no">124</span><span id="line-124"> RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
-<span class="source-line-no">129</span><span id="line-129"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">130</span><span id="line-130"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> @Rule</span>
-<span class="source-line-no">136</span><span id="line-136"> public OpenTelemetryRule traceRule = OpenTelemetryRule.create();</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Parameter(0)</span>
-<span class="source-line-no">139</span><span id="line-139"> public Class<? extends RpcServer> rpcServerImpl;</span>
+<span class="source-line-no">030</span><span id="line-30">import static org.awaitility.Awaitility.await;</span>
+<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.MatcherAssert.assertThat;</span>
+<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.allOf;</span>
+<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.containsString;</span>
+<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.everyItem;</span>
+<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
+<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.hasItem;</span>
+<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.instanceOf;</span>
+<span class="source-line-no">038</span><span id="line-38">import static org.hamcrest.Matchers.lessThan;</span>
+<span class="source-line-no">039</span><span id="line-39">import static org.hamcrest.Matchers.startsWith;</span>
+<span class="source-line-no">040</span><span id="line-40">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">041</span><span id="line-41">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">042</span><span id="line-42">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">043</span><span id="line-43">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">044</span><span id="line-44">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">045</span><span id="line-45">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">046</span><span id="line-46">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">047</span><span id="line-47">import static org.mockito.ArgumentMatchers.any;</span>
+<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.spy;</span>
+<span class="source-line-no">050</span><span id="line-50">import static org.mockito.Mockito.verify;</span>
+<span class="source-line-no">051</span><span id="line-51">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">052</span><span id="line-52">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.common.AttributeKey;</span>
+<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.api.trace.SpanKind;</span>
+<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.api.trace.StatusCode;</span>
+<span class="source-line-no">057</span><span id="line-57">import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension;</span>
+<span class="source-line-no">058</span><span id="line-58">import io.opentelemetry.sdk.trace.data.SpanData;</span>
+<span class="source-line-no">059</span><span id="line-59">import java.io.IOException;</span>
+<span class="source-line-no">060</span><span id="line-60">import java.net.InetSocketAddress;</span>
+<span class="source-line-no">061</span><span id="line-61">import java.nio.channels.SocketChannel;</span>
+<span class="source-line-no">062</span><span id="line-62">import java.time.Duration;</span>
+<span class="source-line-no">063</span><span id="line-63">import java.util.ArrayList;</span>
+<span class="source-line-no">064</span><span id="line-64">import java.util.Collections;</span>
+<span class="source-line-no">065</span><span id="line-65">import java.util.List;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.CellScanner;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.ExtendedCell;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.HBaseServerBase;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.KeyValue;</span>
+<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.MatcherPredicate;</span>
+<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
+<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Server;</span>
+<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.Waiter;</span>
+<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
+<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.security.User;</span>
+<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.io.compress.GzipCodec;</span>
+<span class="source-line-no">084</span><span id="line-84">import org.apache.hadoop.ipc.RemoteException;</span>
+<span class="source-line-no">085</span><span id="line-85">import org.apache.hadoop.util.StringUtils;</span>
+<span class="source-line-no">086</span><span id="line-86">import org.hamcrest.Matcher;</span>
+<span class="source-line-no">087</span><span id="line-87">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">088</span><span id="line-88">import org.junit.jupiter.api.TestTemplate;</span>
+<span class="source-line-no">089</span><span id="line-89">import org.junit.jupiter.api.extension.RegisterExtension;</span>
+<span class="source-line-no">090</span><span id="line-90">import org.slf4j.Logger;</span>
+<span class="source-line-no">091</span><span id="line-91">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
+<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
+<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
+<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
+<span class="source-line-no">097</span><span id="line-97">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
+<span class="source-line-no">098</span><span id="line-98"></span>
+<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
+<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
+<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
+<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
+<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
+<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
+<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
+<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
+<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
+<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
+<span class="source-line-no">109</span><span id="line-109">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111">/**</span>
+<span class="source-line-no">112</span><span id="line-112"> * Some basic ipc tests.</span>
+<span class="source-line-no">113</span><span id="line-113"> */</span>
+<span class="source-line-no">114</span><span id="line-114">public abstract class AbstractTestIPC {</span>
+<span class="source-line-no">115</span><span id="line-115"></span>
+<span class="source-line-no">116</span><span id="line-116"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
+<span class="source-line-no">119</span><span id="line-119"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
+<span class="source-line-no">120</span><span id="line-120"></span>
+<span class="source-line-no">121</span><span id="line-121"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">122</span><span id="line-122"></span>
+<span class="source-line-no">123</span><span id="line-123"> protected RpcServer createRpcServer(Server server, String name,</span>
+<span class="source-line-no">124</span><span id="line-124"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
+<span class="source-line-no">125</span><span id="line-125"> RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">126</span><span id="line-126"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">127</span><span id="line-127"> }</span>
+<span class="source-line-no">128</span><span id="line-128"></span>
+<span class="source-line-no">129</span><span id="line-129"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
+<span class="source-line-no">130</span><span id="line-130"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">131</span><span id="line-131"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"></span>
+<span class="source-line-no">134</span><span id="line-134"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> @RegisterExtension</span>
+<span class="source-line-no">137</span><span id="line-137"> private static final OpenTelemetryExtension OTEL_EXT = OpenTelemetryExtension.create();</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139"> private Class<? extends RpcServer> rpcServerImpl;</span>
<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141"> @Before</span>
-<span class="source-line-no">142</span><span id="line-142"> public void setUpBeforeTest() {</span>
-<span class="source-line-no">143</span><span id="line-143"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
-<span class="source-line-no">144</span><span id="line-144"> }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> /**</span>
-<span class="source-line-no">147</span><span id="line-147"> * Ensure we do not HAVE TO HAVE a codec.</span>
-<span class="source-line-no">148</span><span id="line-148"> */</span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testNoCodec() throws IOException, ServiceException {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">153</span><span id="line-153"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">154</span><span id="line-154"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">155</span><span id="line-155"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
-<span class="source-line-no">156</span><span id="line-156"> rpcServer.start();</span>
-<span class="source-line-no">157</span><span id="line-157"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">158</span><span id="line-158"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">159</span><span id="line-159"> String message = "hello";</span>
-<span class="source-line-no">160</span><span id="line-160"> assertEquals(message,</span>
-<span class="source-line-no">161</span><span id="line-161"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">162</span><span id="line-162"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">163</span><span id="line-163"> } finally {</span>
-<span class="source-line-no">164</span><span id="line-164"> rpcServer.stop();</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"> }</span>
-<span class="source-line-no">167</span><span id="line-167"></span>
-<span class="source-line-no">168</span><span id="line-168"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
-<span class="source-line-no">169</span><span id="line-169"></span>
-<span class="source-line-no">170</span><span id="line-170"> /**</span>
-<span class="source-line-no">171</span><span id="line-171"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
-<span class="source-line-no">172</span><span id="line-172"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
-<span class="source-line-no">173</span><span id="line-173"> * confirm that compression is happening down in the client and server).</span>
-<span class="source-line-no">174</span><span id="line-174"> */</span>
-<span class="source-line-no">175</span><span id="line-175"> @Test</span>
-<span class="source-line-no">176</span><span id="line-176"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
-<span class="source-line-no">177</span><span id="line-177"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">178</span><span id="line-178"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
-<span class="source-line-no">179</span><span id="line-179"> List<ExtendedCell> cells = new ArrayList<>();</span>
-<span class="source-line-no">180</span><span id="line-180"> int count = 3;</span>
-<span class="source-line-no">181</span><span id="line-181"> for (int i = 0; i < count; i++) {</span>
-<span class="source-line-no">182</span><span id="line-182"> cells.add(CELL);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">185</span><span id="line-185"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">186</span><span id="line-186"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">187</span><span id="line-187"></span>
-<span class="source-line-no">188</span><span id="line-188"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">189</span><span id="line-189"> rpcServer.start();</span>
-<span class="source-line-no">190</span><span id="line-190"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">191</span><span id="line-191"> HBaseRpcController pcrc =</span>
-<span class="source-line-no">192</span><span id="line-192"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
-<span class="source-line-no">193</span><span id="line-193"> String message = "hello";</span>
-<span class="source-line-no">194</span><span id="line-194"> assertEquals(message,</span>
-<span class="source-line-no">195</span><span id="line-195"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">196</span><span id="line-196"> int index = 0;</span>
-<span class="source-line-no">197</span><span id="line-197"> CellScanner cellScanner = pcrc.cellScanner();</span>
-<span class="source-line-no">198</span><span id="line-198"> assertNotNull(cellScanner);</span>
-<span class="source-line-no">199</span><span id="line-199"> while (cellScanner.advance()) {</span>
-<span class="source-line-no">200</span><span id="line-200"> assertEquals(CELL, cellScanner.current());</span>
-<span class="source-line-no">201</span><span id="line-201"> index++;</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> assertEquals(count, index);</span>
-<span class="source-line-no">204</span><span id="line-204"> } finally {</span>
-<span class="source-line-no">205</span><span id="line-205"> rpcServer.stop();</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"> protected abstract AbstractRpcClient<?></span>
-<span class="source-line-no">210</span><span id="line-210"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> @Test</span>
-<span class="source-line-no">213</span><span id="line-213"> public void testRTEDuringConnectionSetup() throws Exception {</span>
-<span class="source-line-no">214</span><span id="line-214"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">215</span><span id="line-215"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">216</span><span id="line-216"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">217</span><span id="line-217"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">218</span><span id="line-218"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
-<span class="source-line-no">219</span><span id="line-219"> rpcServer.start();</span>
-<span class="source-line-no">220</span><span id="line-220"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">221</span><span id="line-221"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">222</span><span id="line-222"> fail("Expected an exception to have been thrown!");</span>
-<span class="source-line-no">223</span><span id="line-223"> } catch (Exception e) {</span>
-<span class="source-line-no">224</span><span id="line-224"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">225</span><span id="line-225"> assertTrue(e.toString(), StringUtils.stringifyException(e).contains("Injected fault"));</span>
-<span class="source-line-no">226</span><span id="line-226"> } finally {</span>
-<span class="source-line-no">227</span><span id="line-227"> rpcServer.stop();</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> /**</span>
-<span class="source-line-no">232</span><span id="line-232"> * Tests that the rpc scheduler is called when requests arrive.</span>
-<span class="source-line-no">233</span><span id="line-233"> */</span>
-<span class="source-line-no">234</span><span id="line-234"> @Test</span>
-<span class="source-line-no">235</span><span id="line-235"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
-<span class="source-line-no">236</span><span id="line-236"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">237</span><span id="line-237"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">238</span><span id="line-238"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">239</span><span id="line-239"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">240</span><span id="line-240"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
-<span class="source-line-no">241</span><span id="line-241"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
-<span class="source-line-no">242</span><span id="line-242"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">243</span><span id="line-243"> rpcServer.start();</span>
-<span class="source-line-no">244</span><span id="line-244"> verify(scheduler).start();</span>
-<span class="source-line-no">245</span><span id="line-245"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">246</span><span id="line-246"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">247</span><span id="line-247"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">248</span><span id="line-248"> stub.echo(null, param);</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
-<span class="source-line-no">251</span><span id="line-251"> } finally {</span>
-<span class="source-line-no">252</span><span id="line-252"> rpcServer.stop();</span>
-<span class="source-line-no">253</span><span id="line-253"> verify(scheduler).stop();</span>
-<span class="source-line-no">254</span><span id="line-254"> }</span>
-<span class="source-line-no">255</span><span id="line-255"> }</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
-<span class="source-line-no">258</span><span id="line-258"> @Test</span>
-<span class="source-line-no">259</span><span id="line-259"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
-<span class="source-line-no">260</span><span id="line-260"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">261</span><span id="line-261"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
-<span class="source-line-no">262</span><span id="line-262"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">263</span><span id="line-263"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">264</span><span id="line-264"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
-<span class="source-line-no">265</span><span id="line-265"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">266</span><span id="line-266"> rpcServer.start();</span>
-<span class="source-line-no">267</span><span id="line-267"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">268</span><span id="line-268"> StringBuilder message = new StringBuilder(1200);</span>
-<span class="source-line-no">269</span><span id="line-269"> for (int i = 0; i < 200; i++) {</span>
-<span class="source-line-no">270</span><span id="line-270"> message.append("hello.");</span>
-<span class="source-line-no">271</span><span id="line-271"> }</span>
-<span class="source-line-no">272</span><span id="line-272"> // set total RPC size bigger than 100 bytes</span>
-<span class="source-line-no">273</span><span id="line-273"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
-<span class="source-line-no">274</span><span id="line-274"> stub.echo(new HBaseRpcControllerImpl(</span>
-<span class="source-line-no">275</span><span id="line-275"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
-<span class="source-line-no">276</span><span id="line-276"> fail("RPC should have failed because it exceeds max request size");</span>
-<span class="source-line-no">277</span><span id="line-277"> } catch (ServiceException e) {</span>
-<span class="source-line-no">278</span><span id="line-278"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">279</span><span id="line-279"> assertTrue(e.toString(),</span>
-<span class="source-line-no">280</span><span id="line-280"> StringUtils.stringifyException(e).contains("RequestTooBigException"));</span>
-<span class="source-line-no">281</span><span id="line-281"> } finally {</span>
-<span class="source-line-no">282</span><span id="line-282"> rpcServer.stop();</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"></span>
-<span class="source-line-no">286</span><span id="line-286"> /**</span>
-<span class="source-line-no">287</span><span id="line-287"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
-<span class="source-line-no">288</span><span id="line-288"> * remoteAddress set to its Call Object</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> @Test</span>
-<span class="source-line-no">291</span><span id="line-291"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
-<span class="source-line-no">292</span><span id="line-292"> throws IOException, ServiceException {</span>
-<span class="source-line-no">293</span><span id="line-293"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">294</span><span id="line-294"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">295</span><span id="line-295"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">296</span><span id="line-296"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">297</span><span id="line-297"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
-<span class="source-line-no">298</span><span id="line-298"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">299</span><span id="line-299"> rpcServer.start();</span>
-<span class="source-line-no">300</span><span id="line-300"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">301</span><span id="line-301"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
-<span class="source-line-no">302</span><span id="line-302"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
-<span class="source-line-no">303</span><span id="line-303"> } finally {</span>
-<span class="source-line-no">304</span><span id="line-304"> rpcServer.stop();</span>
-<span class="source-line-no">305</span><span id="line-305"> }</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"></span>
-<span class="source-line-no">308</span><span id="line-308"> @Test</span>
-<span class="source-line-no">309</span><span id="line-309"> public void testRemoteError() throws IOException, ServiceException {</span>
-<span class="source-line-no">310</span><span id="line-310"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">311</span><span id="line-311"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">312</span><span id="line-312"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">313</span><span id="line-313"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">314</span><span id="line-314"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">315</span><span id="line-315"> rpcServer.start();</span>
-<span class="source-line-no">316</span><span id="line-316"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">317</span><span id="line-317"> stub.error(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">318</span><span id="line-318"> } catch (ServiceException e) {</span>
-<span class="source-line-no">319</span><span id="line-319"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">320</span><span id="line-320"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">321</span><span id="line-321"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">322</span><span id="line-322"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">323</span><span id="line-323"> } finally {</span>
-<span class="source-line-no">324</span><span id="line-324"> rpcServer.stop();</span>
-<span class="source-line-no">325</span><span id="line-325"> }</span>
-<span class="source-line-no">326</span><span id="line-326"> }</span>
-<span class="source-line-no">327</span><span id="line-327"></span>
-<span class="source-line-no">328</span><span id="line-328"> @Test</span>
-<span class="source-line-no">329</span><span id="line-329"> public void testTimeout() throws IOException {</span>
-<span class="source-line-no">330</span><span id="line-330"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">331</span><span id="line-331"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">332</span><span id="line-332"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">333</span><span id="line-333"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">334</span><span id="line-334"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">335</span><span id="line-335"> rpcServer.start();</span>
-<span class="source-line-no">336</span><span id="line-336"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">337</span><span id="line-337"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">338</span><span id="line-338"> int ms = 1000;</span>
-<span class="source-line-no">339</span><span id="line-339"> int timeout = 100;</span>
-<span class="source-line-no">340</span><span id="line-340"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">341</span><span id="line-341"> pcrc.reset();</span>
-<span class="source-line-no">342</span><span id="line-342"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">343</span><span id="line-343"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">344</span><span id="line-344"> try {</span>
-<span class="source-line-no">345</span><span id="line-345"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build());</span>
-<span class="source-line-no">346</span><span id="line-346"> } catch (ServiceException e) {</span>
-<span class="source-line-no">347</span><span id="line-347"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">348</span><span id="line-348"> // expected</span>
-<span class="source-line-no">349</span><span id="line-349"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">350</span><span id="line-350"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">352</span><span id="line-352"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">353</span><span id="line-353"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">354</span><span id="line-354"> }</span>
-<span class="source-line-no">355</span><span id="line-355"> }</span>
-<span class="source-line-no">356</span><span id="line-356"> } finally {</span>
-<span class="source-line-no">357</span><span id="line-357"> rpcServer.stop();</span>
-<span class="source-line-no">358</span><span id="line-358"> }</span>
-<span class="source-line-no">359</span><span id="line-359"> }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
-<span class="source-line-no">362</span><span id="line-362"></span>
-<span class="source-line-no">363</span><span id="line-363"> FailingSimpleRpcServer(Server server, String name,</span>
-<span class="source-line-no">364</span><span id="line-364"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
-<span class="source-line-no">365</span><span id="line-365"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">366</span><span id="line-366"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
-<span class="source-line-no">367</span><span id="line-367"> }</span>
+<span class="source-line-no">141</span><span id="line-141"> protected AbstractTestIPC(Class<? extends RpcServer> rpcServerImpl) {</span>
+<span class="source-line-no">142</span><span id="line-142"> this.rpcServerImpl = rpcServerImpl;</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"> @BeforeEach</span>
+<span class="source-line-no">146</span><span id="line-146"> public void setUpBeforeTest() {</span>
+<span class="source-line-no">147</span><span id="line-147"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> }</span>
+<span class="source-line-no">149</span><span id="line-149"></span>
+<span class="source-line-no">150</span><span id="line-150"> /**</span>
+<span class="source-line-no">151</span><span id="line-151"> * Ensure we do not HAVE TO HAVE a codec.</span>
+<span class="source-line-no">152</span><span id="line-152"> */</span>
+<span class="source-line-no">153</span><span id="line-153"> @TestTemplate</span>
+<span class="source-line-no">154</span><span id="line-154"> public void testNoCodec() throws IOException, ServiceException {</span>
+<span class="source-line-no">155</span><span id="line-155"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">156</span><span id="line-156"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">157</span><span id="line-157"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">158</span><span id="line-158"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">159</span><span id="line-159"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
+<span class="source-line-no">160</span><span id="line-160"> rpcServer.start();</span>
+<span class="source-line-no">161</span><span id="line-161"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">162</span><span id="line-162"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">163</span><span id="line-163"> String message = "hello";</span>
+<span class="source-line-no">164</span><span id="line-164"> assertEquals(message,</span>
+<span class="source-line-no">165</span><span id="line-165"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">166</span><span id="line-166"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">167</span><span id="line-167"> } finally {</span>
+<span class="source-line-no">168</span><span id="line-168"> rpcServer.stop();</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"> }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> /**</span>
+<span class="source-line-no">175</span><span id="line-175"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
+<span class="source-line-no">176</span><span id="line-176"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
+<span class="source-line-no">177</span><span id="line-177"> * confirm that compression is happening down in the client and server).</span>
+<span class="source-line-no">178</span><span id="line-178"> */</span>
+<span class="source-line-no">179</span><span id="line-179"> @TestTemplate</span>
+<span class="source-line-no">180</span><span id="line-180"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
+<span class="source-line-no">181</span><span id="line-181"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">182</span><span id="line-182"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
+<span class="source-line-no">183</span><span id="line-183"> List<ExtendedCell> cells = new ArrayList<>();</span>
+<span class="source-line-no">184</span><span id="line-184"> int count = 3;</span>
+<span class="source-line-no">185</span><span id="line-185"> for (int i = 0; i < count; i++) {</span>
+<span class="source-line-no">186</span><span id="line-186"> cells.add(CELL);</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">189</span><span id="line-189"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">190</span><span id="line-190"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 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"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">193</span><span id="line-193"> rpcServer.start();</span>
+<span class="source-line-no">194</span><span id="line-194"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">195</span><span id="line-195"> HBaseRpcController pcrc =</span>
+<span class="source-line-no">196</span><span id="line-196"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
+<span class="source-line-no">197</span><span id="line-197"> String message = "hello";</span>
+<span class="source-line-no">198</span><span id="line-198"> assertEquals(message,</span>
+<span class="source-line-no">199</span><span id="line-199"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">200</span><span id="line-200"> int index = 0;</span>
+<span class="source-line-no">201</span><span id="line-201"> CellScanner cellScanner = pcrc.cellScanner();</span>
+<span class="source-line-no">202</span><span id="line-202"> assertNotNull(cellScanner);</span>
+<span class="source-line-no">203</span><span id="line-203"> while (cellScanner.advance()) {</span>
+<span class="source-line-no">204</span><span id="line-204"> assertEquals(CELL, cellScanner.current());</span>
+<span class="source-line-no">205</span><span id="line-205"> index++;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"> assertEquals(count, index);</span>
+<span class="source-line-no">208</span><span id="line-208"> } finally {</span>
+<span class="source-line-no">209</span><span id="line-209"> rpcServer.stop();</span>
+<span class="source-line-no">210</span><span id="line-210"> }</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"> protected abstract AbstractRpcClient<?></span>
+<span class="source-line-no">214</span><span id="line-214"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
+<span class="source-line-no">215</span><span id="line-215"></span>
+<span class="source-line-no">216</span><span id="line-216"> @TestTemplate</span>
+<span class="source-line-no">217</span><span id="line-217"> public void testRTEDuringConnectionSetup() throws Exception {</span>
+<span class="source-line-no">218</span><span id="line-218"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">219</span><span id="line-219"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">220</span><span id="line-220"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">221</span><span id="line-221"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">222</span><span id="line-222"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
+<span class="source-line-no">223</span><span id="line-223"> rpcServer.start();</span>
+<span class="source-line-no">224</span><span id="line-224"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">225</span><span id="line-225"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
+<span class="source-line-no">226</span><span id="line-226"> fail("Expected an exception to have been thrown!");</span>
+<span class="source-line-no">227</span><span id="line-227"> } catch (Exception e) {</span>
+<span class="source-line-no">228</span><span id="line-228"> LOG.info("Caught expected exception: " + e.toString());</span>
+<span class="source-line-no">229</span><span id="line-229"> assertTrue(StringUtils.stringifyException(e).contains("Injected fault"), e.toString());</span>
+<span class="source-line-no">230</span><span id="line-230"> } finally {</span>
+<span class="source-line-no">231</span><span id="line-231"> rpcServer.stop();</span>
+<span class="source-line-no">232</span><span id="line-232"> }</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"> * Tests that the rpc scheduler is called when requests arrive.</span>
+<span class="source-line-no">237</span><span id="line-237"> */</span>
+<span class="source-line-no">238</span><span id="line-238"> @TestTemplate</span>
+<span class="source-line-no">239</span><span id="line-239"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
+<span class="source-line-no">240</span><span id="line-240"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">241</span><span id="line-241"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">242</span><span id="line-242"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">243</span><span id="line-243"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">244</span><span id="line-244"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
+<span class="source-line-no">245</span><span id="line-245"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
+<span class="source-line-no">246</span><span id="line-246"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">247</span><span id="line-247"> rpcServer.start();</span>
+<span class="source-line-no">248</span><span id="line-248"> verify(scheduler).start();</span>
+<span class="source-line-no">249</span><span id="line-249"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">250</span><span id="line-250"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">251</span><span id="line-251"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">252</span><span id="line-252"> stub.echo(null, param);</span>
+<span class="source-line-no">253</span><span id="line-253"> }</span>
+<span class="source-line-no">254</span><span id="line-254"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
+<span class="source-line-no">255</span><span id="line-255"> } finally {</span>
+<span class="source-line-no">256</span><span id="line-256"> rpcServer.stop();</span>
+<span class="source-line-no">257</span><span id="line-257"> verify(scheduler).stop();</span>
+<span class="source-line-no">258</span><span id="line-258"> }</span>
+<span class="source-line-no">259</span><span id="line-259"> }</span>
+<span class="source-line-no">260</span><span id="line-260"></span>
+<span class="source-line-no">261</span><span id="line-261"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
+<span class="source-line-no">262</span><span id="line-262"> @TestTemplate</span>
+<span class="source-line-no">263</span><span id="line-263"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
+<span class="source-line-no">264</span><span id="line-264"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">265</span><span id="line-265"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
+<span class="source-line-no">266</span><span id="line-266"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">267</span><span id="line-267"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">268</span><span id="line-268"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
+<span class="source-line-no">269</span><span id="line-269"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">270</span><span id="line-270"> rpcServer.start();</span>
+<span class="source-line-no">271</span><span id="line-271"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">272</span><span id="line-272"> StringBuilder message = new StringBuilder(1200);</span>
+<span class="source-line-no">273</span><span id="line-273"> for (int i = 0; i < 200; i++) {</span>
+<span class="source-line-no">274</span><span id="line-274"> message.append("hello.");</span>
+<span class="source-line-no">275</span><span id="line-275"> }</span>
+<span class="source-line-no">276</span><span id="line-276"> // set total RPC size bigger than 100 bytes</span>
+<span class="source-line-no">277</span><span id="line-277"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
+<span class="source-line-no">278</span><span id="line-278"> stub.echo(new HBaseRpcControllerImpl(</span>
+<span class="source-line-no">279</span><span id="line-279"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
+<span class="source-line-no">280</span><span id="line-280"> fail("RPC should have failed because it exceeds max request size");</span>
+<span class="source-line-no">281</span><span id="line-281"> } catch (ServiceException e) {</span>
+<span class="source-line-no">282</span><span id="line-282"> LOG.info("Caught expected exception: " + e);</span>
+<span class="source-line-no">283</span><span id="line-283"> assertTrue(StringUtils.stringifyException(e).contains("RequestTooBigException"),</span>
+<span class="source-line-no">284</span><span id="line-284"> e.toString());</span>
+<span class="source-line-no">285</span><span id="line-285"> } finally {</span>
+<span class="source-line-no">286</span><span id="line-286"> rpcServer.stop();</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
+<span class="source-line-no">292</span><span id="line-292"> * remoteAddress set to its Call Object</span>
+<span class="source-line-no">293</span><span id="line-293"> */</span>
+<span class="source-line-no">294</span><span id="line-294"> @TestTemplate</span>
+<span class="source-line-no">295</span><span id="line-295"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
+<span class="source-line-no">296</span><span id="line-296"> throws IOException, ServiceException {</span>
+<span class="source-line-no">297</span><span id="line-297"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">298</span><span id="line-298"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">299</span><span id="line-299"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">300</span><span id="line-300"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">301</span><span id="line-301"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
+<span class="source-line-no">302</span><span id="line-302"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">303</span><span id="line-303"> rpcServer.start();</span>
+<span class="source-line-no">304</span><span id="line-304"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">305</span><span id="line-305"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
+<span class="source-line-no">306</span><span id="line-306"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
+<span class="source-line-no">307</span><span id="line-307"> } finally {</span>
+<span class="source-line-no">308</span><span id="line-308"> rpcServer.stop();</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"> }</span>
+<span class="source-line-no">311</span><span id="line-311"></span>
+<span class="source-line-no">312</span><span id="line-312"> @TestTemplate</span>
+<span class="source-line-no">313</span><span id="line-313"> public void testRemoteError() throws IOException, ServiceException {</span>
+<span class="source-line-no">314</span><span id="line-314"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">315</span><span id="line-315"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">316</span><span id="line-316"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">317</span><span id="line-317"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">318</span><span id="line-318"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">319</span><span id="line-319"> rpcServer.start();</span>
+<span class="source-line-no">320</span><span id="line-320"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">321</span><span id="line-321"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">322</span><span id="line-322"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">323</span><span id="line-323"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">324</span><span id="line-324"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">325</span><span id="line-325"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">326</span><span id="line-326"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">327</span><span id="line-327"> } finally {</span>
+<span class="source-line-no">328</span><span id="line-328"> rpcServer.stop();</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"> }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332"> @TestTemplate</span>
+<span class="source-line-no">333</span><span id="line-333"> public void testTimeout() throws IOException {</span>
+<span class="source-line-no">334</span><span id="line-334"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">335</span><span id="line-335"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">336</span><span id="line-336"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">337</span><span id="line-337"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">338</span><span id="line-338"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">339</span><span id="line-339"> rpcServer.start();</span>
+<span class="source-line-no">340</span><span id="line-340"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">341</span><span id="line-341"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">342</span><span id="line-342"> int ms = 1000;</span>
+<span class="source-line-no">343</span><span id="line-343"> int timeout = 100;</span>
+<span class="source-line-no">344</span><span id="line-344"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">345</span><span id="line-345"> pcrc.reset();</span>
+<span class="source-line-no">346</span><span id="line-346"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">347</span><span id="line-347"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">348</span><span id="line-348"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">349</span><span id="line-349"> () -> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build()));</span>
+<span class="source-line-no">350</span><span id="line-350"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">351</span><span id="line-351"> // expected</span>
+<span class="source-line-no">352</span><span id="line-352"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">353</span><span id="line-353"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">354</span><span id="line-354"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">355</span><span id="line-355"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">356</span><span id="line-356"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">357</span><span id="line-357"> }</span>
+<span class="source-line-no">358</span><span id="line-358"> } finally {</span>
+<span class="source-line-no">359</span><span id="line-359"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">360</span><span id="line-360"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">361</span><span id="line-361"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">362</span><span id="line-362"> rpcServer.stop();</span>
+<span class="source-line-no">363</span><span id="line-363"> }</span>
+<span class="source-line-no">364</span><span id="line-364"> }</span>
+<span class="source-line-no">365</span><span id="line-365"></span>
+<span class="source-line-no">366</span><span id="line-366"> @SuppressWarnings("deprecation")</span>
+<span class="source-line-no">367</span><span id="line-367"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> final class FailingConnection extends SimpleServerRpcConnection {</span>
-<span class="source-line-no">370</span><span id="line-370"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
-<span class="source-line-no">371</span><span id="line-371"> long lastContact) {</span>
-<span class="source-line-no">372</span><span id="line-372"> super(rpcServer, channel, lastContact);</span>
-<span class="source-line-no">373</span><span id="line-373"> }</span>
+<span class="source-line-no">369</span><span id="line-369"> FailingSimpleRpcServer(Server server, String name,</span>
+<span class="source-line-no">370</span><span id="line-370"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
+<span class="source-line-no">371</span><span id="line-371"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">372</span><span id="line-372"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
+<span class="source-line-no">373</span><span id="line-373"> }</span>
<span class="source-line-no">374</span><span id="line-374"></span>
-<span class="source-line-no">375</span><span id="line-375"> @Override</span>
-<span class="source-line-no">376</span><span id="line-376"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
-<span class="source-line-no">377</span><span id="line-377"> // this will throw exception after the connection header is read, and an RPC is sent</span>
-<span class="source-line-no">378</span><span id="line-378"> // from client</span>
-<span class="source-line-no">379</span><span id="line-379"> throw new DoNotRetryIOException("Failing for test");</span>
-<span class="source-line-no">380</span><span id="line-380"> }</span>
-<span class="source-line-no">381</span><span id="line-381"> }</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> @Override</span>
-<span class="source-line-no">384</span><span id="line-384"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
-<span class="source-line-no">385</span><span id="line-385"> return new FailingConnection(this, channel, time);</span>
-<span class="source-line-no">386</span><span id="line-386"> }</span>
-<span class="source-line-no">387</span><span id="line-387"> }</span>
+<span class="source-line-no">375</span><span id="line-375"> final class FailingConnection extends SimpleServerRpcConnection {</span>
+<span class="source-line-no">376</span><span id="line-376"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
+<span class="source-line-no">377</span><span id="line-377"> long lastContact) {</span>
+<span class="source-line-no">378</span><span id="line-378"> super(rpcServer, channel, lastContact);</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"></span>
+<span class="source-line-no">381</span><span id="line-381"> @Override</span>
+<span class="source-line-no">382</span><span id="line-382"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
+<span class="source-line-no">383</span><span id="line-383"> // this will throw exception after the connection header is read, and an RPC is sent</span>
+<span class="source-line-no">384</span><span id="line-384"> // from client</span>
+<span class="source-line-no">385</span><span id="line-385"> throw new DoNotRetryIOException("Failing for test");</span>
+<span class="source-line-no">386</span><span id="line-386"> }</span>
+<span class="source-line-no">387</span><span id="line-387"> }</span>
<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389"> protected RpcServer createTestFailingRpcServer(final String name,</span>
-<span class="source-line-no">390</span><span id="line-390"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
-<span class="source-line-no">391</span><span id="line-391"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">392</span><span id="line-392"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
-<span class="source-line-no">393</span><span id="line-393"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">394</span><span id="line-394"> } else {</span>
-<span class="source-line-no">395</span><span id="line-395"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">396</span><span id="line-396"> }</span>
-<span class="source-line-no">397</span><span id="line-397"> }</span>
-<span class="source-line-no">398</span><span id="line-398"></span>
-<span class="source-line-no">399</span><span id="line-399"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
-<span class="source-line-no">400</span><span id="line-400"> @Test</span>
-<span class="source-line-no">401</span><span id="line-401"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">403</span><span id="line-403"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
-<span class="source-line-no">404</span><span id="line-404"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">405</span><span id="line-405"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">406</span><span id="line-406"></span>
-<span class="source-line-no">407</span><span id="line-407"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">408</span><span id="line-408"> rpcServer.start();</span>
-<span class="source-line-no">409</span><span id="line-409"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">410</span><span id="line-410"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">411</span><span id="line-411"> stub.echo(null, param);</span>
-<span class="source-line-no">412</span><span id="line-412"> fail("RPC should have failed because connection closed");</span>
-<span class="source-line-no">413</span><span id="line-413"> } catch (ServiceException e) {</span>
-<span class="source-line-no">414</span><span id="line-414"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">415</span><span id="line-415"> } finally {</span>
-<span class="source-line-no">416</span><span id="line-416"> rpcServer.stop();</span>
-<span class="source-line-no">417</span><span id="line-417"> }</span>
-<span class="source-line-no">418</span><span id="line-418"> }</span>
-<span class="source-line-no">419</span><span id="line-419"></span>
-<span class="source-line-no">420</span><span id="line-420"> @Test</span>
-<span class="source-line-no">421</span><span id="line-421"> public void testAsyncEcho() throws IOException {</span>
-<span class="source-line-no">422</span><span id="line-422"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">423</span><span id="line-423"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">424</span><span id="line-424"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">425</span><span id="line-425"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">426</span><span id="line-426"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">427</span><span id="line-427"> rpcServer.start();</span>
-<span class="source-line-no">428</span><span id="line-428"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">429</span><span id="line-429"> int num = 10;</span>
-<span class="source-line-no">430</span><span id="line-430"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">431</span><span id="line-431"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">432</span><span id="line-432"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">433</span><span id="line-433"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">434</span><span id="line-434"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">435</span><span id="line-435"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
-<span class="source-line-no">436</span><span id="line-436"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">437</span><span id="line-437"> callbackList.add(done);</span>
-<span class="source-line-no">438</span><span id="line-438"> }</span>
-<span class="source-line-no">439</span><span id="line-439"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">440</span><span id="line-440"> EchoResponseProto resp = callbackList.get(i).get();</span>
-<span class="source-line-no">441</span><span id="line-441"> HBaseRpcController pcrc = pcrcList.get(i);</span>
-<span class="source-line-no">442</span><span id="line-442"> assertEquals("hello-" + i, resp.getMessage());</span>
-<span class="source-line-no">443</span><span id="line-443"> assertFalse(pcrc.failed());</span>
-<span class="source-line-no">444</span><span id="line-444"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">445</span><span id="line-445"> }</span>
-<span class="source-line-no">446</span><span id="line-446"> } finally {</span>
-<span class="source-line-no">447</span><span id="line-447"> rpcServer.stop();</span>
-<span class="source-line-no">448</span><span id="line-448"> }</span>
-<span class="source-line-no">449</span><span id="line-449"> }</span>
-<span class="source-line-no">450</span><span id="line-450"></span>
-<span class="source-line-no">451</span><span id="line-451"> @Test</span>
-<span class="source-line-no">452</span><span id="line-452"> public void testAsyncRemoteError() throws IOException {</span>
-<span class="source-line-no">453</span><span id="line-453"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">454</span><span id="line-454"> AbstractRpcClient<?> client = createRpcClient(clientConf);</span>
-<span class="source-line-no">455</span><span id="line-455"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">456</span><span id="line-456"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">457</span><span id="line-457"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">458</span><span id="line-458"> try {</span>
-<span class="source-line-no">459</span><span id="line-459"> rpcServer.start();</span>
-<span class="source-line-no">460</span><span id="line-460"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">461</span><span id="line-461"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">462</span><span id="line-462"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">463</span><span id="line-463"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
-<span class="source-line-no">464</span><span id="line-464"> assertNull(callback.get());</span>
-<span class="source-line-no">465</span><span id="line-465"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">466</span><span id="line-466"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">467</span><span id="line-467"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">468</span><span id="line-468"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">469</span><span id="line-469"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">470</span><span id="line-470"> } finally {</span>
-<span class="source-line-no">471</span><span id="line-471"> client.close();</span>
-<span class="source-line-no">472</span><span id="line-472"> rpcServer.stop();</span>
-<span class="source-line-no">473</span><span id="line-473"> }</span>
-<span class="source-line-no">474</span><span id="line-474"> }</span>
-<span class="source-line-no">475</span><span id="line-475"></span>
-<span class="source-line-no">476</span><span id="line-476"> @Test</span>
-<span class="source-line-no">477</span><span id="line-477"> public void testAsyncTimeout() throws IOException {</span>
-<span class="source-line-no">478</span><span id="line-478"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">479</span><span id="line-479"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">480</span><span id="line-480"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">481</span><span id="line-481"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">482</span><span id="line-482"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">483</span><span id="line-483"> rpcServer.start();</span>
-<span class="source-line-no">484</span><span id="line-484"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">485</span><span id="line-485"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">486</span><span id="line-486"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">487</span><span id="line-487"> int ms = 1000;</span>
-<span class="source-line-no">488</span><span id="line-488"> int timeout = 100;</span>
-<span class="source-line-no">489</span><span id="line-489"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">490</span><span id="line-490"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">491</span><span id="line-491"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">492</span><span id="line-492"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">493</span><span id="line-493"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">494</span><span id="line-494"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
-<span class="source-line-no">495</span><span id="line-495"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">496</span><span id="line-496"> callbackList.add(callback);</span>
-<span class="source-line-no">497</span><span id="line-497"> }</span>
-<span class="source-line-no">498</span><span id="line-498"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
-<span class="source-line-no">499</span><span id="line-499"> assertNull(callback.get());</span>
-<span class="source-line-no">500</span><span id="line-500"> }</span>
-<span class="source-line-no">501</span><span id="line-501"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">502</span><span id="line-502"> for (HBaseRpcController pcrc : pcrcList) {</span>
-<span class="source-line-no">503</span><span id="line-503"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">504</span><span id="line-504"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">505</span><span id="line-505"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">506</span><span id="line-506"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">507</span><span id="line-507"> }</span>
-<span class="source-line-no">508</span><span id="line-508"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">509</span><span id="line-509"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">510</span><span id="line-510"> } finally {</span>
-<span class="source-line-no">511</span><span id="line-511"> rpcServer.stop();</span>
-<span class="source-line-no">512</span><span id="line-512"> }</span>
-<span class="source-line-no">513</span><span id="line-513"> }</span>
-<span class="source-line-no">514</span><span id="line-514"></span>
-<span class="source-line-no">515</span><span id="line-515"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
-<span class="source-line-no">516</span><span id="line-516"> Waiter.waitFor(CONF, 1000,</span>
-<span class="source-line-no">517</span><span id="line-517"> new MatcherPredicate<>(() -> traceRule.getSpans(), hasItem(matcher)));</span>
-<span class="source-line-no">518</span><span id="line-518"> return traceRule.getSpans().stream().filter(matcher::matches).findFirst()</span>
-<span class="source-line-no">519</span><span id="line-519"> .orElseThrow(AssertionError::new);</span>
-<span class="source-line-no">520</span><span id="line-520"> }</span>
-<span class="source-line-no">521</span><span id="line-521"></span>
-<span class="source-line-no">522</span><span id="line-522"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">523</span><span id="line-523"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">389</span><span id="line-389"> @Override</span>
+<span class="source-line-no">390</span><span id="line-390"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
+<span class="source-line-no">391</span><span id="line-391"> return new FailingConnection(this, channel, time);</span>
+<span class="source-line-no">392</span><span id="line-392"> }</span>
+<span class="source-line-no">393</span><span id="line-393"> }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395"> protected RpcServer createTestFailingRpcServer(final String name,</span>
+<span class="source-line-no">396</span><span id="line-396"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
+<span class="source-line-no">397</span><span id="line-397"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">398</span><span id="line-398"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
+<span class="source-line-no">399</span><span id="line-399"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">400</span><span id="line-400"> } else {</span>
+<span class="source-line-no">401</span><span id="line-401"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">402</span><span id="line-402"> }</span>
+<span class="source-line-no">403</span><span id="line-403"> }</span>
+<span class="source-line-no">404</span><span id="line-404"></span>
+<span class="source-line-no">405</span><span id="line-405"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
+<span class="source-line-no">406</span><span id="line-406"> @TestTemplate</span>
+<span class="source-line-no">407</span><span id="line-407"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">409</span><span id="line-409"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
+<span class="source-line-no">410</span><span id="line-410"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">411</span><span id="line-411"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">412</span><span id="line-412"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">413</span><span id="line-413"> rpcServer.start();</span>
+<span class="source-line-no">414</span><span id="line-414"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">415</span><span id="line-415"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">416</span><span id="line-416"> ServiceException se = assertThrows(ServiceException.class, () -> stub.echo(null, param),</span>
+<span class="source-line-no">417</span><span id="line-417"> "RPC should have failed because connection closed");</span>
+<span class="source-line-no">418</span><span id="line-418"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">419</span><span id="line-419"> } finally {</span>
+<span class="source-line-no">420</span><span id="line-420"> rpcServer.stop();</span>
+<span class="source-line-no">421</span><span id="line-421"> }</span>
+<span class="source-line-no">422</span><span id="line-422"> }</span>
+<span class="source-line-no">423</span><span id="line-423"></span>
+<span class="source-line-no">424</span><span id="line-424"> @TestTemplate</span>
+<span class="source-line-no">425</span><span id="line-425"> public void testAsyncEcho() throws IOException {</span>
+<span class="source-line-no">426</span><span id="line-426"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">427</span><span id="line-427"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">428</span><span id="line-428"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">429</span><span id="line-429"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">430</span><span id="line-430"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">431</span><span id="line-431"> rpcServer.start();</span>
+<span class="source-line-no">432</span><span id="line-432"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">433</span><span id="line-433"> int num = 10;</span>
+<span class="source-line-no">434</span><span id="line-434"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">435</span><span id="line-435"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">436</span><span id="line-436"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">437</span><span id="line-437"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">438</span><span id="line-438"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">439</span><span id="line-439"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
+<span class="source-line-no">440</span><span id="line-440"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">441</span><span id="line-441"> callbackList.add(done);</span>
+<span class="source-line-no">442</span><span id="line-442"> }</span>
+<span class="source-line-no">443</span><span id="line-443"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">444</span><span id="line-444"> EchoResponseProto resp = callbackList.get(i).get();</span>
+<span class="source-line-no">445</span><span id="line-445"> HBaseRpcController pcrc = pcrcList.get(i);</span>
+<span class="source-line-no">446</span><span id="line-446"> assertEquals("hello-" + i, resp.getMessage());</span>
+<span class="source-line-no">447</span><span id="line-447"> assertFalse(pcrc.failed());</span>
+<span class="source-line-no">448</span><span id="line-448"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">449</span><span id="line-449"> }</span>
+<span class="source-line-no">450</span><span id="line-450"> } finally {</span>
+<span class="source-line-no">451</span><span id="line-451"> rpcServer.stop();</span>
+<span class="source-line-no">452</span><span id="line-452"> }</span>
+<span class="source-line-no">453</span><span id="line-453"> }</span>
+<span class="source-line-no">454</span><span id="line-454"></span>
+<span class="source-line-no">455</span><span id="line-455"> @TestTemplate</span>
+<span class="source-line-no">456</span><span id="line-456"> public void testAsyncRemoteError() throws IOException {</span>
+<span class="source-line-no">457</span><span id="line-457"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">458</span><span id="line-458"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">459</span><span id="line-459"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">460</span><span id="line-460"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">461</span><span id="line-461"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">462</span><span id="line-462"> rpcServer.start();</span>
+<span class="source-line-no">463</span><span id="line-463"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">464</span><span id="line-464"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">465</span><span id="line-465"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">466</span><span id="line-466"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
+<span class="source-line-no">467</span><span id="line-467"> assertNull(callback.get());</span>
+<span class="source-line-no">468</span><span id="line-468"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">469</span><span id="line-469"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">470</span><span id="line-470"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">471</span><span id="line-471"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">472</span><span id="line-472"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">473</span><span id="line-473"> } finally {</span>
+<span class="source-line-no">474</span><span id="line-474"> rpcServer.stop();</span>
+<span class="source-line-no">475</span><span id="line-475"> }</span>
+<span class="source-line-no">476</span><span id="line-476"> }</span>
+<span class="source-line-no">477</span><span id="line-477"></span>
+<span class="source-line-no">478</span><span id="line-478"> @TestTemplate</span>
+<span class="source-line-no">479</span><span id="line-479"> public void testAsyncTimeout() throws IOException {</span>
+<span class="source-line-no">480</span><span id="line-480"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">481</span><span id="line-481"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">482</span><span id="line-482"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">483</span><span id="line-483"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">484</span><span id="line-484"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">485</span><span id="line-485"> rpcServer.start();</span>
+<span class="source-line-no">486</span><span id="line-486"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">487</span><span id="line-487"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">488</span><span id="line-488"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">489</span><span id="line-489"> int ms = 1000;</span>
+<span class="source-line-no">490</span><span id="line-490"> int timeout = 100;</span>
+<span class="source-line-no">491</span><span id="line-491"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">492</span><span id="line-492"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">493</span><span id="line-493"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">494</span><span id="line-494"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">495</span><span id="line-495"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">496</span><span id="line-496"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
+<span class="source-line-no">497</span><span id="line-497"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">498</span><span id="line-498"> callbackList.add(callback);</span>
+<span class="source-line-no">499</span><span id="line-499"> }</span>
+<span class="source-line-no">500</span><span id="line-500"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
+<span class="source-line-no">501</span><span id="line-501"> assertNull(callback.get());</span>
+<span class="source-line-no">502</span><span id="line-502"> }</span>
+<span class="source-line-no">503</span><span id="line-503"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">504</span><span id="line-504"> for (HBaseRpcController pcrc : pcrcList) {</span>
+<span class="source-line-no">505</span><span id="line-505"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">506</span><span id="line-506"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">507</span><span id="line-507"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">508</span><span id="line-508"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">509</span><span id="line-509"> }</span>
+<span class="source-line-no">510</span><span id="line-510"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">511</span><span id="line-511"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">512</span><span id="line-512"> } finally {</span>
+<span class="source-line-no">513</span><span id="line-513"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">514</span><span id="line-514"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">515</span><span id="line-515"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">516</span><span id="line-516"> rpcServer.stop();</span>
+<span class="source-line-no">517</span><span id="line-517"> }</span>
+<span class="source-line-no">518</span><span id="line-518"> }</span>
+<span class="source-line-no">519</span><span id="line-519"></span>
+<span class="source-line-no">520</span><span id="line-520"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
+<span class="source-line-no">521</span><span id="line-521"> Waiter.waitFor(CONF, 1000, new MatcherPredicate<>(() -> OTEL_EXT.getSpans(), hasItem(matcher)));</span>
+<span class="source-line-no">522</span><span id="line-522"> return OTEL_EXT.getSpans().stream().filter(matcher::matches).findFirst()</span>
+<span class="source-line-no">523</span><span id="line-523"> .orElseThrow(AssertionError::new);</span>
<span class="source-line-no">524</span><span id="line-524"> }</span>
<span class="source-line-no">525</span><span id="line-525"></span>
-<span class="source-line-no">526</span><span id="line-526"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">527</span><span id="line-527"> final String methodName) {</span>
-<span class="source-line-no">528</span><span id="line-528"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">529</span><span id="line-529"> hasKind(SpanKind.CLIENT));</span>
-<span class="source-line-no">530</span><span id="line-530"> }</span>
-<span class="source-line-no">531</span><span id="line-531"></span>
-<span class="source-line-no">532</span><span id="line-532"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">533</span><span id="line-533"> final String methodName) {</span>
-<span class="source-line-no">534</span><span id="line-534"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">535</span><span id="line-535"> hasKind(SpanKind.SERVER));</span>
-<span class="source-line-no">536</span><span id="line-536"> }</span>
-<span class="source-line-no">537</span><span id="line-537"></span>
-<span class="source-line-no">538</span><span id="line-538"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
-<span class="source-line-no">539</span><span id="line-539"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
-<span class="source-line-no">540</span><span id="line-540"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">541</span><span id="line-541"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
-<span class="source-line-no">542</span><span id="line-542"> containsEntry("net.peer.name", isa.getHostName()),</span>
-<span class="source-line-no">543</span><span id="line-543"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
-<span class="source-line-no">544</span><span id="line-544"> }</span>
-<span class="source-line-no">545</span><span id="line-545"></span>
-<span class="source-line-no">546</span><span id="line-546"> private static Matcher<SpanData></span>
-<span class="source-line-no">547</span><span id="line-547"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">548</span><span id="line-548"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">549</span><span id="line-549"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
-<span class="source-line-no">550</span><span id="line-550"> }</span>
-<span class="source-line-no">551</span><span id="line-551"></span>
-<span class="source-line-no">552</span><span id="line-552"> private void assertRemoteSpan() {</span>
-<span class="source-line-no">553</span><span id="line-553"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
-<span class="source-line-no">554</span><span id="line-554"> assertTrue(data.getParentSpanContext().isRemote());</span>
-<span class="source-line-no">555</span><span id="line-555"> assertEquals(SpanKind.SERVER, data.getKind());</span>
-<span class="source-line-no">556</span><span id="line-556"> }</span>
-<span class="source-line-no">557</span><span id="line-557"></span>
-<span class="source-line-no">558</span><span id="line-558"> @Test</span>
-<span class="source-line-no">559</span><span id="line-559"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
-<span class="source-line-no">560</span><span id="line-560"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">561</span><span id="line-561"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">562</span><span id="line-562"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">563</span><span id="line-563"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">564</span><span id="line-564"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">565</span><span id="line-565"> rpcServer.start();</span>
-<span class="source-line-no">566</span><span id="line-566"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">567</span><span id="line-567"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
-<span class="source-line-no">568</span><span id="line-568"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">569</span><span id="line-569"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">570</span><span id="line-570"> final SpanData pauseClientSpan =</span>
-<span class="source-line-no">571</span><span id="line-571"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">572</span><span id="line-572"> assertThat(pauseClientSpan,</span>
-<span class="source-line-no">573</span><span id="line-573"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
-<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseServerSpan =</span>
-<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseServerSpan,</span>
-<span class="source-line-no">577</span><span id="line-577"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">578</span><span id="line-578"> assertRemoteSpan();</span>
-<span class="source-line-no">579</span><span id="line-579"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">580</span><span id="line-580"> assertThat(traceRule.getSpans(),</span>
-<span class="source-line-no">581</span><span id="line-581"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
-<span class="source-line-no">582</span><span id="line-582"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()),</span>
-<span class="source-line-no">583</span><span id="line-583"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
-<span class="source-line-no">584</span><span id="line-584"> } finally {</span>
-<span class="source-line-no">585</span><span id="line-585"> rpcServer.stop();</span>
-<span class="source-line-no">586</span><span id="line-586"> }</span>
-<span class="source-line-no">587</span><span id="line-587"> }</span>
-<span class="source-line-no">588</span><span id="line-588"></span>
-<span class="source-line-no">589</span><span id="line-589"> @Test</span>
-<span class="source-line-no">590</span><span id="line-590"> public void testTracingErrorIpc() throws IOException {</span>
-<span class="source-line-no">591</span><span id="line-591"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">592</span><span id="line-592"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">593</span><span id="line-593"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">594</span><span id="line-594"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">595</span><span id="line-595"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">596</span><span id="line-596"> rpcServer.start();</span>
-<span class="source-line-no">597</span><span id="line-597"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">598</span><span id="line-598"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">599</span><span id="line-599"> assertThrows(ServiceException.class,</span>
-<span class="source-line-no">600</span><span id="line-600"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
-<span class="source-line-no">601</span><span id="line-601"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">602</span><span id="line-602"> final SpanData errorClientSpan =</span>
-<span class="source-line-no">603</span><span id="line-603"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">604</span><span id="line-604"> assertThat(errorClientSpan,</span>
-<span class="source-line-no">605</span><span id="line-605"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
-<span class="source-line-no">606</span><span id="line-606"> final SpanData errorServerSpan =</span>
-<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">608</span><span id="line-608"> assertThat(errorServerSpan,</span>
-<span class="source-line-no">609</span><span id="line-609"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">610</span><span id="line-610"> assertRemoteSpan();</span>
-<span class="source-line-no">611</span><span id="line-611"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">612</span><span id="line-612"> assertThat(traceRule.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
-<span class="source-line-no">613</span><span id="line-613"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()))));</span>
-<span class="source-line-no">614</span><span id="line-614"> } finally {</span>
-<span class="source-line-no">615</span><span id="line-615"> rpcServer.stop();</span>
-<span class="source-line-no">616</span><span id="line-616"> }</span>
-<span class="source-line-no">617</span><span id="line-617"> }</span>
-<span class="source-line-no">618</span><span id="line-618"></span>
-<span class="source-line-no">619</span><span id="line-619"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
-<span class="source-line-no">620</span><span id="line-620"></span>
-<span class="source-line-no">621</span><span id="line-621"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
-<span class="source-line-no">622</span><span id="line-622"> ServiceException se = assertThrows(ServiceException.class,</span>
-<span class="source-line-no">623</span><span id="line-623"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
-<span class="source-line-no">624</span><span id="line-624"> return ProtobufUtil.handleRemoteException(se);</span>
-<span class="source-line-no">625</span><span id="line-625"> }</span>
-<span class="source-line-no">626</span><span id="line-626"></span>
-<span class="source-line-no">627</span><span id="line-627"> @Test</span>
-<span class="source-line-no">628</span><span id="line-628"> public void testBadPreambleHeader() throws Exception {</span>
-<span class="source-line-no">629</span><span id="line-629"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">630</span><span id="line-630"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">631</span><span id="line-631"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">632</span><span id="line-632"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
-<span class="source-line-no">633</span><span id="line-633"> rpcServer.start();</span>
-<span class="source-line-no">634</span><span id="line-634"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">635</span><span id="line-635"> BadAuthException error = null;</span>
-<span class="source-line-no">636</span><span id="line-636"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
-<span class="source-line-no">637</span><span id="line-637"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
-<span class="source-line-no">638</span><span id="line-638"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">639</span><span id="line-639"> IOException ioe = doBadPreableHeaderCall(stub);</span>
-<span class="source-line-no">640</span><span id="line-640"> if (ioe instanceof BadAuthException) {</span>
-<span class="source-line-no">641</span><span id="line-641"> error = (BadAuthException) ioe;</span>
-<span class="source-line-no">642</span><span id="line-642"> break;</span>
-<span class="source-line-no">643</span><span id="line-643"> }</span>
-<span class="source-line-no">644</span><span id="line-644"> Thread.sleep(100);</span>
-<span class="source-line-no">645</span><span id="line-645"> }</span>
-<span class="source-line-no">646</span><span id="line-646"> assertNotNull("Can not get expected BadAuthException", error);</span>
-<span class="source-line-no">647</span><span id="line-647"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
-<span class="source-line-no">648</span><span id="line-648"> } finally {</span>
-<span class="source-line-no">649</span><span id="line-649"> rpcServer.stop();</span>
-<span class="source-line-no">650</span><span id="line-650"> }</span>
-<span class="source-line-no">651</span><span id="line-651"> }</span>
-<span class="source-line-no">652</span><span id="line-652"></span>
-<span class="source-line-no">653</span><span id="line-653"> /**</span>
-<span class="source-line-no">654</span><span id="line-654"> * Testcase for getting connection registry information through connection preamble header, see</span>
-<span class="source-line-no">655</span><span id="line-655"> * HBASE-25051 for more details.</span>
-<span class="source-line-no">656</span><span id="line-656"> */</span>
-<span class="source-line-no">657</span><span id="line-657"> @Test</span>
-<span class="source-line-no">658</span><span id="line-658"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
-<span class="source-line-no">659</span><span id="line-659"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">660</span><span id="line-660"> String clusterId = "test_cluster_id";</span>
-<span class="source-line-no">661</span><span id="line-661"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
-<span class="source-line-no">662</span><span id="line-662"> when(server.getClusterId()).thenReturn(clusterId);</span>
-<span class="source-line-no">663</span><span id="line-663"> // do not need any services</span>
-<span class="source-line-no">664</span><span id="line-664"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">665</span><span id="line-665"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">666</span><span id="line-666"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">667</span><span id="line-667"> rpcServer.start();</span>
-<span class="source-line-no">668</span><span id="line-668"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">669</span><span id="line-669"> BlockingRpcChannel channel =</span>
-<span class="source-line-no">670</span><span id="line-670"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
-<span class="source-line-no">671</span><span id="line-671"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">672</span><span id="line-672"> ConnectionRegistryService.BlockingInterface stub =</span>
-<span class="source-line-no">673</span><span id="line-673"> ConnectionRegistryService.newBlockingStub(channel);</span>
-<span class="source-line-no">674</span><span id="line-674"> GetConnectionRegistryResponse resp =</span>
-<span class="source-line-no">675</span><span id="line-675"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
-<span class="source-line-no">676</span><span id="line-676"> assertEquals(clusterId, resp.getClusterId());</span>
-<span class="source-line-no">677</span><span id="line-677"> } finally {</span>
-<span class="source-line-no">678</span><span id="line-678"> rpcServer.stop();</span>
-<span class="source-line-no">679</span><span id="line-679"> }</span>
-<span class="source-line-no">680</span><span id="line-680"> }</span>
-<span class="source-line-no">681</span><span id="line-681"></span>
-<span class="source-line-no">682</span><span id="line-682"> /**</span>
-<span class="source-line-no">683</span><span id="line-683"> * Test server does not support getting connection registry information through connection</span>
-<span class="source-line-no">684</span><span id="line-684"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
-<span class="source-line-no">685</span><span id="line-685"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
-<span class="source-line-no">686</span><span id="line-686"> */</span>
-<span class="source-line-no">687</span><span id="line-687"> @Test</span>
-<span class="source-line-no">688</span><span id="line-688"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
-<span class="source-line-no">689</span><span id="line-689"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">690</span><span id="line-690"> // do not need any services</span>
-<span class="source-line-no">691</span><span id="line-691"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">692</span><span id="line-692"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">693</span><span id="line-693"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">694</span><span id="line-694"> rpcServer.start();</span>
-<span class="source-line-no">695</span><span id="line-695"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">696</span><span id="line-696"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
-<span class="source-line-no">697</span><span id="line-697"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">698</span><span id="line-698"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
-<span class="source-line-no">699</span><span id="line-699"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">700</span><span id="line-700"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">701</span><span id="line-701"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
-<span class="source-line-no">702</span><span id="line-702"> // should have failed so no response</span>
-<span class="source-line-no">703</span><span id="line-703"> assertNull(done.get());</span>
-<span class="source-line-no">704</span><span id="line-704"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">705</span><span id="line-705"> // should be a FatalConnectionException</span>
-<span class="source-line-no">706</span><span id="line-706"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
-<span class="source-line-no">707</span><span id="line-707"> assertEquals(FatalConnectionException.class.getName(),</span>
-<span class="source-line-no">708</span><span id="line-708"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
-<span class="source-line-no">709</span><span id="line-709"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
-<span class="source-line-no">710</span><span id="line-710"> } finally {</span>
-<span class="source-line-no">711</span><span id="line-711"> rpcServer.stop();</span>
-<span class="source-line-no">712</span><span id="line-712"> }</span>
-<span class="source-line-no">713</span><span id="line-713"> }</span>
-<span class="source-line-no">714</span><span id="line-714">}</span>
+<span class="source-line-no">526</span><span id="line-526"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">527</span><span id="line-527"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">528</span><span id="line-528"> }</span>
+<span class="source-line-no">529</span><span id="line-529"></span>
+<span class="source-line-no">530</span><span id="line-530"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">531</span><span id="line-531"> final String methodName) {</span>
+<span class="source-line-no">532</span><span id="line-532"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">533</span><span id="line-533"> hasKind(SpanKind.CLIENT));</span>
+<span class="source-line-no">534</span><span id="line-534"> }</span>
+<span class="source-line-no">535</span><span id="line-535"></span>
+<span class="source-line-no">536</span><span id="line-536"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">537</span><span id="line-537"> final String methodName) {</span>
+<span class="source-line-no">538</span><span id="line-538"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">539</span><span id="line-539"> hasKind(SpanKind.SERVER));</span>
+<span class="source-line-no">540</span><span id="line-540"> }</span>
+<span class="source-line-no">541</span><span id="line-541"></span>
+<span class="source-line-no">542</span><span id="line-542"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
+<span class="source-line-no">543</span><span id="line-543"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
+<span class="source-line-no">544</span><span id="line-544"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">545</span><span id="line-545"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
+<span class="source-line-no">546</span><span id="line-546"> containsEntry("net.peer.name", isa.getHostName()),</span>
+<span class="source-line-no">547</span><span id="line-547"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
+<span class="source-line-no">548</span><span id="line-548"> }</span>
+<span class="source-line-no">549</span><span id="line-549"></span>
+<span class="source-line-no">550</span><span id="line-550"> private static Matcher<SpanData></span>
+<span class="source-line-no">551</span><span id="line-551"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">552</span><span id="line-552"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">553</span><span id="line-553"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
+<span class="source-line-no">554</span><span id="line-554"> }</span>
+<span class="source-line-no">555</span><span id="line-555"></span>
+<span class="source-line-no">556</span><span id="line-556"> private void assertRemoteSpan() {</span>
+<span class="source-line-no">557</span><span id="line-557"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
+<span class="source-line-no">558</span><span id="line-558"> assertTrue(data.getParentSpanContext().isRemote());</span>
+<span class="source-line-no">559</span><span id="line-559"> assertEquals(SpanKind.SERVER, data.getKind());</span>
+<span class="source-line-no">560</span><span id="line-560"> }</span>
+<span class="source-line-no">561</span><span id="line-561"></span>
+<span class="source-line-no">562</span><span id="line-562"> @TestTemplate</span>
+<span class="source-line-no">563</span><span id="line-563"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
+<span class="source-line-no">564</span><span id="line-564"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">565</span><span id="line-565"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">566</span><span id="line-566"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">567</span><span id="line-567"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">568</span><span id="line-568"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">569</span><span id="line-569"> rpcServer.start();</span>
+<span class="source-line-no">570</span><span id="line-570"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">571</span><span id="line-571"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
+<span class="source-line-no">572</span><span id="line-572"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">573</span><span id="line-573"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseClientSpan =</span>
+<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseClientSpan,</span>
+<span class="source-line-no">577</span><span id="line-577"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
+<span class="source-line-no">578</span><span id="line-578"> final SpanData pauseServerSpan =</span>
+<span class="source-line-no">579</span><span id="line-579"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">580</span><span id="line-580"> assertThat(pauseServerSpan,</span>
+<span class="source-line-no">581</span><span id="line-581"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">582</span><span id="line-582"> assertRemoteSpan();</span>
+<span class="source-line-no">583</span><span id="line-583"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">584</span><span id="line-584"> assertThat(OTEL_EXT.getSpans(),</span>
+<span class="source-line-no">585</span><span id="line-585"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
+<span class="source-line-no">586</span><span id="line-586"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()),</span>
+<span class="source-line-no">587</span><span id="line-587"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
+<span class="source-line-no">588</span><span id="line-588"> } finally {</span>
+<span class="source-line-no">589</span><span id="line-589"> rpcServer.stop();</span>
+<span class="source-line-no">590</span><span id="line-590"> }</span>
+<span class="source-line-no">591</span><span id="line-591"> }</span>
+<span class="source-line-no">592</span><span id="line-592"></span>
+<span class="source-line-no">593</span><span id="line-593"> @TestTemplate</span>
+<span class="source-line-no">594</span><span id="line-594"> public void testTracingErrorIpc() throws IOException {</span>
+<span class="source-line-no">595</span><span id="line-595"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">596</span><span id="line-596"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">597</span><span id="line-597"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">598</span><span id="line-598"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">599</span><span id="line-599"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">600</span><span id="line-600"> rpcServer.start();</span>
+<span class="source-line-no">601</span><span id="line-601"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">602</span><span id="line-602"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">603</span><span id="line-603"> assertThrows(ServiceException.class,</span>
+<span class="source-line-no">604</span><span id="line-604"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">605</span><span id="line-605"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">606</span><span id="line-606"> final SpanData errorClientSpan =</span>
+<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">608</span><span id="line-608"> assertThat(errorClientSpan,</span>
+<span class="source-line-no">609</span><span id="line-609"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
+<span class="source-line-no">610</span><span id="line-610"> final SpanData errorServerSpan =</span>
+<span class="source-line-no">611</span><span id="line-611"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">612</span><span id="line-612"> assertThat(errorServerSpan,</span>
+<span class="source-line-no">613</span><span id="line-613"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">614</span><span id="line-614"> assertRemoteSpan();</span>
+<span class="source-line-no">615</span><span id="line-615"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">616</span><span id="line-616"> assertThat(OTEL_EXT.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
+<span class="source-line-no">617</span><span id="line-617"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()))));</span>
+<span class="source-line-no">618</span><span id="line-618"> } finally {</span>
+<span class="source-line-no">619</span><span id="line-619"> rpcServer.stop();</span>
+<span class="source-line-no">620</span><span id="line-620"> }</span>
+<span class="source-line-no">621</span><span id="line-621"> }</span>
+<span class="source-line-no">622</span><span id="line-622"></span>
+<span class="source-line-no">623</span><span id="line-623"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
+<span class="source-line-no">624</span><span id="line-624"></span>
+<span class="source-line-no">625</span><span id="line-625"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
+<span class="source-line-no">626</span><span id="line-626"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">627</span><span id="line-627"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
+<span class="source-line-no">628</span><span id="line-628"> return ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">629</span><span id="line-629"> }</span>
+<span class="source-line-no">630</span><span id="line-630"></span>
+<span class="source-line-no">631</span><span id="line-631"> @TestTemplate</span>
+<span class="source-line-no">632</span><span id="line-632"> public void testBadPreambleHeader() throws Exception {</span>
+<span class="source-line-no">633</span><span id="line-633"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">634</span><span id="line-634"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">635</span><span id="line-635"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">636</span><span id="line-636"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
+<span class="source-line-no">637</span><span id="line-637"> rpcServer.start();</span>
+<span class="source-line-no">638</span><span id="line-638"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">639</span><span id="line-639"> BadAuthException error = null;</span>
+<span class="source-line-no">640</span><span id="line-640"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
+<span class="source-line-no">641</span><span id="line-641"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
+<span class="source-line-no">642</span><span id="line-642"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">643</span><span id="line-643"> IOException ioe = doBadPreableHeaderCall(stub);</span>
+<span class="source-line-no">644</span><span id="line-644"> if (ioe instanceof BadAuthException) {</span>
+<span class="source-line-no">645</span><span id="line-645"> error = (BadAuthException) ioe;</span>
+<span class="source-line-no">646</span><span id="line-646"> break;</span>
+<span class="source-line-no">647</span><span id="line-647"> }</span>
+<span class="source-line-no">648</span><span id="line-648"> Thread.sleep(100);</span>
+<span class="source-line-no">649</span><span id="line-649"> }</span>
+<span class="source-line-no">650</span><span id="line-650"> assertNotNull(error, "Can not get expected BadAuthException");</span>
+<span class="source-line-no">651</span><span id="line-651"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
+<span class="source-line-no">652</span><span id="line-652"> } finally {</span>
+<span class="source-line-no">653</span><span id="line-653"> rpcServer.stop();</span>
+<span class="source-line-no">654</span><span id="line-654"> }</span>
+<span class="source-line-no">655</span><span id="line-655"> }</span>
+<span class="source-line-no">656</span><span id="line-656"></span>
+<span class="source-line-no">657</span><span id="line-657"> /**</span>
+<span class="source-line-no">658</span><span id="line-658"> * Testcase for getting connection registry information through connection preamble header, see</span>
+<span class="source-line-no">659</span><span id="line-659"> * HBASE-25051 for more details.</span>
+<span class="source-line-no">660</span><span id="line-660"> */</span>
+<span class="source-line-no">661</span><span id="line-661"> @TestTemplate</span>
+<span class="source-line-no">662</span><span id="line-662"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
+<span class="source-line-no">663</span><span id="line-663"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">664</span><span id="line-664"> String clusterId = "test_cluster_id";</span>
+<span class="source-line-no">665</span><span id="line-665"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
+<span class="source-line-no">666</span><span id="line-666"> when(server.getClusterId()).thenReturn(clusterId);</span>
+<span class="source-line-no">667</span><span id="line-667"> // do not need any services</span>
+<span class="source-line-no">668</span><span id="line-668"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">669</span><span id="line-669"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">670</span><span id="line-670"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">671</span><span id="line-671"> rpcServer.start();</span>
+<span class="source-line-no">672</span><span id="line-672"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">673</span><span id="line-673"> BlockingRpcChannel channel =</span>
+<span class="source-line-no">674</span><span id="line-674"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
+<span class="source-line-no">675</span><span id="line-675"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">676</span><span id="line-676"> ConnectionRegistryService.BlockingInterface stub =</span>
+<span class="source-line-no">677</span><span id="line-677"> ConnectionRegistryService.newBlockingStub(channel);</span>
+<span class="source-line-no">678</span><span id="line-678"> GetConnectionRegistryResponse resp =</span>
+<span class="source-line-no">679</span><span id="line-679"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
+<span class="source-line-no">680</span><span id="line-680"> assertEquals(clusterId, resp.getClusterId());</span>
+<span class="source-line-no">681</span><span id="line-681"> } finally {</span>
+<span class="source-line-no">682</span><span id="line-682"> rpcServer.stop();</span>
+<span class="source-line-no">683</span><span id="line-683"> }</span>
+<span class="source-line-no">684</span><span id="line-684"> }</span>
+<span class="source-line-no">685</span><span id="line-685"></span>
+<span class="source-line-no">686</span><span id="line-686"> /**</span>
+<span class="source-line-no">687</span><span id="line-687"> * Test server does not support getting connection registry information through connection</span>
+<span class="source-line-no">688</span><span id="line-688"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
+<span class="source-line-no">689</span><span id="line-689"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
+<span class="source-line-no">690</span><span id="line-690"> */</span>
+<span class="source-line-no">691</span><span id="line-691"> @TestTemplate</span>
+<span class="source-line-no">692</span><span id="line-692"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
+<span class="source-line-no">693</span><span id="line-693"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">694</span><span id="line-694"> // do not need any services</span>
+<span class="source-line-no">695</span><span id="line-695"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">696</span><span id="line-696"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">697</span><span id="line-697"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">698</span><span id="line-698"> rpcServer.start();</span>
+<span class="source-line-no">699</span><span id="line-699"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">700</span><span id="line-700"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
+<span class="source-line-no">701</span><span id="line-701"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">702</span><span id="line-702"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
+<span class="source-line-no">703</span><span id="line-703"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">704</span><span id="line-704"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">705</span><span id="line-705"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
+<span class="source-line-no">706</span><span id="line-706"> // should have failed so no response</span>
+<span class="source-line-no">707</span><span id="line-707"> assertNull(done.get());</span>
+<span class="source-line-no">708</span><span id="line-708"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">709</span><span id="line-709"> // should be a FatalConnectionException</span>
+<span class="source-line-no">710</span><span id="line-710"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
+<span class="source-line-no">711</span><span id="line-711"> assertEquals(FatalConnectionException.class.getName(),</span>
+<span class="source-line-no">712</span><span id="line-712"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
+<span class="source-line-no">713</span><span id="line-713"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
+<span class="source-line-no">714</span><span id="line-714"> } finally {</span>
+<span class="source-line-no">715</span><span id="line-715"> rpcServer.stop();</span>
+<span class="source-line-no">716</span><span id="line-716"> }</span>
+<span class="source-line-no">717</span><span id="line-717"> }</span>
+<span class="source-line-no">718</span><span id="line-718">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
index a277e239b1c..2bcc4dfa63f 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
@@ -31,79 +31,74 @@
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.ipc;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
-<span class="source-line-no">021</span><span id="line-21">import java.util.Arrays;</span>
-<span class="source-line-no">022</span><span id="line-22">import java.util.List;</span>
-<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.codec.Codec;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.junit.ClassRule;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.junit.runner.RunWith;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.junit.runners.Parameterized;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.junit.runners.Parameterized.Parameters;</span>
-<span class="source-line-no">033</span><span id="line-33"></span>
-<span class="source-line-no">034</span><span id="line-34">@RunWith(Parameterized.class)</span>
-<span class="source-line-no">035</span><span id="line-35">@Category({ RPCTests.class, MediumTests.class })</span>
-<span class="source-line-no">036</span><span id="line-36">public class TestBlockingIPC extends AbstractTestIPC {</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38"> @ClassRule</span>
-<span class="source-line-no">039</span><span id="line-39"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">040</span><span id="line-40"> HBaseClassTestRule.forClass(TestBlockingIPC.class);</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42"> @Parameters(name = "{index}: rpcServerImpl={0}")</span>
-<span class="source-line-no">043</span><span id="line-43"> public static List<Object[]> data() {</span>
-<span class="source-line-no">044</span><span id="line-44"> return Arrays.asList(new Object[] { SimpleRpcServer.class },</span>
-<span class="source-line-no">045</span><span id="line-45"> new Object[] { NettyRpcServer.class });</span>
-<span class="source-line-no">046</span><span id="line-46"> }</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48"> @Override</span>
-<span class="source-line-no">049</span><span id="line-49"> protected BlockingRpcClient createRpcClientNoCodec(Configuration conf) {</span>
-<span class="source-line-no">050</span><span id="line-50"> return new BlockingRpcClient(conf) {</span>
-<span class="source-line-no">051</span><span id="line-51"> @Override</span>
-<span class="source-line-no">052</span><span id="line-52"> protected Codec getCodec() {</span>
-<span class="source-line-no">053</span><span id="line-53"> return null;</span>
-<span class="source-line-no">054</span><span id="line-54"> }</span>
-<span class="source-line-no">055</span><span id="line-55"> };</span>
+<span class="source-line-no">021</span><span id="line-21">import java.util.stream.Stream;</span>
+<span class="source-line-no">022</span><span id="line-22">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;</span>
+<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.codec.Codec;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.junit.jupiter.params.provider.Arguments;</span>
+<span class="source-line-no">029</span><span id="line-29"></span>
+<span class="source-line-no">030</span><span id="line-30">@Tag(RPCTests.TAG)</span>
+<span class="source-line-no">031</span><span id="line-31">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">032</span><span id="line-32">@HBaseParameterizedTestTemplate(name = "{index}: rpcServerImpl={0}")</span>
+<span class="source-line-no">033</span><span id="line-33">public class TestBlockingIPC extends AbstractTestIPC {</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35"> public TestBlockingIPC(Class<? extends RpcServer> rpcServerImpl) {</span>
+<span class="source-line-no">036</span><span id="line-36"> super(rpcServerImpl);</span>
+<span class="source-line-no">037</span><span id="line-37"> }</span>
+<span class="source-line-no">038</span><span id="line-38"></span>
+<span class="source-line-no">039</span><span id="line-39"> public static Stream<Arguments> parameters() {</span>
+<span class="source-line-no">040</span><span id="line-40"> return Stream.of(Arguments.of(SimpleRpcServer.class), Arguments.of(NettyRpcServer.class));</span>
+<span class="source-line-no">041</span><span id="line-41"> }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> @Override</span>
+<span class="source-line-no">044</span><span id="line-44"> protected BlockingRpcClient createRpcClientNoCodec(Configuration conf) {</span>
+<span class="source-line-no">045</span><span id="line-45"> return new BlockingRpcClient(conf) {</span>
+<span class="source-line-no">046</span><span id="line-46"> @Override</span>
+<span class="source-line-no">047</span><span id="line-47"> protected Codec getCodec() {</span>
+<span class="source-line-no">048</span><span id="line-48"> return null;</span>
+<span class="source-line-no">049</span><span id="line-49"> }</span>
+<span class="source-line-no">050</span><span id="line-50"> };</span>
+<span class="source-line-no">051</span><span id="line-51"> }</span>
+<span class="source-line-no">052</span><span id="line-52"></span>
+<span class="source-line-no">053</span><span id="line-53"> @Override</span>
+<span class="source-line-no">054</span><span id="line-54"> protected BlockingRpcClient createRpcClient(Configuration conf) {</span>
+<span class="source-line-no">055</span><span id="line-55"> return new BlockingRpcClient(conf);</span>
<span class="source-line-no">056</span><span id="line-56"> }</span>
<span class="source-line-no">057</span><span id="line-57"></span>
<span class="source-line-no">058</span><span id="line-58"> @Override</span>
-<span class="source-line-no">059</span><span id="line-59"> protected BlockingRpcClient createRpcClient(Configuration conf) {</span>
-<span class="source-line-no">060</span><span id="line-60"> return new BlockingRpcClient(conf);</span>
-<span class="source-line-no">061</span><span id="line-61"> }</span>
+<span class="source-line-no">059</span><span id="line-59"> protected BlockingRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf)</span>
+<span class="source-line-no">060</span><span id="line-60"> throws IOException {</span>
+<span class="source-line-no">061</span><span id="line-61"> return new BlockingRpcClient(conf) {</span>
<span class="source-line-no">062</span><span id="line-62"></span>
-<span class="source-line-no">063</span><span id="line-63"> @Override</span>
-<span class="source-line-no">064</span><span id="line-64"> protected BlockingRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf)</span>
-<span class="source-line-no">065</span><span id="line-65"> throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66"> return new BlockingRpcClient(conf) {</span>
-<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68"> @Override</span>
-<span class="source-line-no">069</span><span id="line-69"> protected boolean isTcpNoDelay() {</span>
-<span class="source-line-no">070</span><span id="line-70"> throw new RuntimeException("Injected fault");</span>
-<span class="source-line-no">071</span><span id="line-71"> }</span>
-<span class="source-line-no">072</span><span id="line-72"> };</span>
-<span class="source-line-no">073</span><span id="line-73"> }</span>
-<span class="source-line-no">074</span><span id="line-74"></span>
-<span class="source-line-no">075</span><span id="line-75"> @Override</span>
-<span class="source-line-no">076</span><span id="line-76"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
-<span class="source-line-no">077</span><span id="line-77"> return new BlockingRpcClient(conf) {</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @Override</span>
-<span class="source-line-no">080</span><span id="line-80"> protected BlockingRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81"> return new BlockingRpcConnection(this, remoteId) {</span>
-<span class="source-line-no">082</span><span id="line-82"> @Override</span>
-<span class="source-line-no">083</span><span id="line-83"> protected byte[] getConnectionHeaderPreamble() {</span>
-<span class="source-line-no">084</span><span id="line-84"> byte[] header = super.getConnectionHeaderPreamble();</span>
-<span class="source-line-no">085</span><span id="line-85"> // set an invalid auth code</span>
-<span class="source-line-no">086</span><span id="line-86"> header[header.length - 1] = -10;</span>
-<span class="source-line-no">087</span><span id="line-87"> return header;</span>
-<span class="source-line-no">088</span><span id="line-88"> }</span>
-<span class="source-line-no">089</span><span id="line-89"> };</span>
-<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"> };</span>
-<span class="source-line-no">092</span><span id="line-92"> }</span>
-<span class="source-line-no">093</span><span id="line-93">}</span>
+<span class="source-line-no">063</span><span id="line-63"> @Override</span>
+<span class="source-line-no">064</span><span id="line-64"> protected boolean isTcpNoDelay() {</span>
+<span class="source-line-no">065</span><span id="line-65"> throw new RuntimeException("Injected fault");</span>
+<span class="source-line-no">066</span><span id="line-66"> }</span>
+<span class="source-line-no">067</span><span id="line-67"> };</span>
+<span class="source-line-no">068</span><span id="line-68"> }</span>
+<span class="source-line-no">069</span><span id="line-69"></span>
+<span class="source-line-no">070</span><span id="line-70"> @Override</span>
+<span class="source-line-no">071</span><span id="line-71"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
+<span class="source-line-no">072</span><span id="line-72"> return new BlockingRpcClient(conf) {</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74"> @Override</span>
+<span class="source-line-no">075</span><span id="line-75"> protected BlockingRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
+<span class="source-line-no">076</span><span id="line-76"> return new BlockingRpcConnection(this, remoteId) {</span>
+<span class="source-line-no">077</span><span id="line-77"> @Override</span>
+<span class="source-line-no">078</span><span id="line-78"> protected byte[] getConnectionHeaderPreamble() {</span>
+<span class="source-line-no">079</span><span id="line-79"> byte[] header = super.getConnectionHeaderPreamble();</span>
+<span class="source-line-no">080</span><span id="line-80"> // set an invalid auth code</span>
+<span class="source-line-no">081</span><span id="line-81"> header[header.length - 1] = -10;</span>
+<span class="source-line-no">082</span><span id="line-82"> return header;</span>
+<span class="source-line-no">083</span><span id="line-83"> }</span>
+<span class="source-line-no">084</span><span id="line-84"> };</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> };</span>
+<span class="source-line-no">087</span><span id="line-87"> }</span>
+<span class="source-line-no">088</span><span id="line-88">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
index 8a884a10565..ee67d77c314 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
@@ -33,137 +33,134 @@
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.util.ArrayList;</span>
<span class="source-line-no">022</span><span id="line-22">import java.util.List;</span>
-<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.codec.Codec;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.util.JVM;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.junit.AfterClass;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.junit.BeforeClass;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.junit.ClassRule;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.junit.runner.RunWith;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.junit.runners.Parameterized;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.junit.runners.Parameterized.Parameter;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.junit.runners.Parameterized.Parameters;</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollSocketChannel;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hbase.thirdparty.io.netty.channel.socket.nio.NioSocketChannel;</span>
-<span class="source-line-no">042</span><span id="line-42"></span>
-<span class="source-line-no">043</span><span id="line-43">@RunWith(Parameterized.class)</span>
-<span class="source-line-no">044</span><span id="line-44">@Category({ RPCTests.class, MediumTests.class })</span>
-<span class="source-line-no">045</span><span id="line-45">public class TestNettyIPC extends AbstractTestIPC {</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47"> @ClassRule</span>
-<span class="source-line-no">048</span><span id="line-48"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">049</span><span id="line-49"> HBaseClassTestRule.forClass(TestNettyIPC.class);</span>
-<span class="source-line-no">050</span><span id="line-50"></span>
-<span class="source-line-no">051</span><span id="line-51"> private static List<String> getEventLoopTypes() {</span>
-<span class="source-line-no">052</span><span id="line-52"> List<String> types = new ArrayList<>();</span>
-<span class="source-line-no">053</span><span id="line-53"> types.add("nio");</span>
-<span class="source-line-no">054</span><span id="line-54"> types.add("perClientNio");</span>
-<span class="source-line-no">055</span><span id="line-55"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
-<span class="source-line-no">056</span><span id="line-56"> types.add("epoll");</span>
-<span class="source-line-no">057</span><span id="line-57"> }</span>
-<span class="source-line-no">058</span><span id="line-58"> return types;</span>
-<span class="source-line-no">059</span><span id="line-59"> }</span>
-<span class="source-line-no">060</span><span id="line-60"></span>
-<span class="source-line-no">061</span><span id="line-61"> @Parameters(name = "{index}: rpcServerImpl={0}, EventLoop={1}")</span>
-<span class="source-line-no">062</span><span id="line-62"> public static List<Object[]> parameters() {</span>
-<span class="source-line-no">063</span><span id="line-63"> List<Object[]> params = new ArrayList<>();</span>
-<span class="source-line-no">064</span><span id="line-64"> for (String eventLoopType : getEventLoopTypes()) {</span>
-<span class="source-line-no">065</span><span id="line-65"> params.add(new Object[] { SimpleRpcServer.class, eventLoopType });</span>
-<span class="source-line-no">066</span><span id="line-66"> params.add(new Object[] { NettyRpcServer.class, eventLoopType });</span>
-<span class="source-line-no">067</span><span id="line-67"> }</span>
-<span class="source-line-no">068</span><span id="line-68"> return params;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.util.stream.Stream;</span>
+<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.codec.Codec;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.util.JVM;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.junit.jupiter.params.provider.Arguments;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollSocketChannel;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hbase.thirdparty.io.netty.channel.socket.nio.NioSocketChannel;</span>
+<span class="source-line-no">039</span><span id="line-39"></span>
+<span class="source-line-no">040</span><span id="line-40">@Tag(RPCTests.TAG)</span>
+<span class="source-line-no">041</span><span id="line-41">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">042</span><span id="line-42">@HBaseParameterizedTestTemplate(name = "{index}: rpcServerImpl={0}, EventLoop={1}")</span>
+<span class="source-line-no">043</span><span id="line-43">public class TestNettyIPC extends AbstractTestIPC {</span>
+<span class="source-line-no">044</span><span id="line-44"></span>
+<span class="source-line-no">045</span><span id="line-45"> private static List<String> getEventLoopTypes() {</span>
+<span class="source-line-no">046</span><span id="line-46"> List<String> types = new ArrayList<>();</span>
+<span class="source-line-no">047</span><span id="line-47"> types.add("nio");</span>
+<span class="source-line-no">048</span><span id="line-48"> types.add("perClientNio");</span>
+<span class="source-line-no">049</span><span id="line-49"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
+<span class="source-line-no">050</span><span id="line-50"> types.add("epoll");</span>
+<span class="source-line-no">051</span><span id="line-51"> }</span>
+<span class="source-line-no">052</span><span id="line-52"> return types;</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> public static Stream<Arguments> parameters() {</span>
+<span class="source-line-no">056</span><span id="line-56"> List<Arguments> params = new ArrayList<>();</span>
+<span class="source-line-no">057</span><span id="line-57"> for (String eventLoopType : getEventLoopTypes()) {</span>
+<span class="source-line-no">058</span><span id="line-58"> params.add(Arguments.of(SimpleRpcServer.class, eventLoopType));</span>
+<span class="source-line-no">059</span><span id="line-59"> params.add(Arguments.of(NettyRpcServer.class, eventLoopType));</span>
+<span class="source-line-no">060</span><span id="line-60"> }</span>
+<span class="source-line-no">061</span><span id="line-61"> return params.stream();</span>
+<span class="source-line-no">062</span><span id="line-62"> }</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64"> private String eventLoopType;</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66"> public TestNettyIPC(Class<? extends RpcServer> rpcServerImpl, String eventLoopType) {</span>
+<span class="source-line-no">067</span><span id="line-67"> super(rpcServerImpl);</span>
+<span class="source-line-no">068</span><span id="line-68"> this.eventLoopType = eventLoopType;</span>
<span class="source-line-no">069</span><span id="line-69"> }</span>
<span class="source-line-no">070</span><span id="line-70"></span>
-<span class="source-line-no">071</span><span id="line-71"> @Parameter(1)</span>
-<span class="source-line-no">072</span><span id="line-72"> public String eventLoopType;</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74"> private static NioEventLoopGroup NIO;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> private static EpollEventLoopGroup EPOLL;</span>
-<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> @BeforeClass</span>
-<span class="source-line-no">079</span><span id="line-79"> public static void setUpBeforeClass() {</span>
-<span class="source-line-no">080</span><span id="line-80"> NIO = new NioEventLoopGroup();</span>
-<span class="source-line-no">081</span><span id="line-81"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
-<span class="source-line-no">082</span><span id="line-82"> EPOLL = new EpollEventLoopGroup();</span>
-<span class="source-line-no">083</span><span id="line-83"> }</span>
-<span class="source-line-no">084</span><span id="line-84"> }</span>
-<span class="source-line-no">085</span><span id="line-85"></span>
-<span class="source-line-no">086</span><span id="line-86"> @AfterClass</span>
-<span class="source-line-no">087</span><span id="line-87"> public static void tearDownAfterClass() {</span>
-<span class="source-line-no">088</span><span id="line-88"> if (NIO != null) {</span>
-<span class="source-line-no">089</span><span id="line-89"> NIO.shutdownGracefully();</span>
+<span class="source-line-no">071</span><span id="line-71"> private static NioEventLoopGroup NIO;</span>
+<span class="source-line-no">072</span><span id="line-72"></span>
+<span class="source-line-no">073</span><span id="line-73"> private static EpollEventLoopGroup EPOLL;</span>
+<span class="source-line-no">074</span><span id="line-74"></span>
+<span class="source-line-no">075</span><span id="line-75"> @BeforeAll</span>
+<span class="source-line-no">076</span><span id="line-76"> public static void setUpBeforeClass() {</span>
+<span class="source-line-no">077</span><span id="line-77"> NIO = new NioEventLoopGroup();</span>
+<span class="source-line-no">078</span><span id="line-78"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
+<span class="source-line-no">079</span><span id="line-79"> EPOLL = new EpollEventLoopGroup();</span>
+<span class="source-line-no">080</span><span id="line-80"> }</span>
+<span class="source-line-no">081</span><span id="line-81"> }</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83"> @AfterAll</span>
+<span class="source-line-no">084</span><span id="line-84"> public static void tearDownAfterClass() {</span>
+<span class="source-line-no">085</span><span id="line-85"> if (NIO != null) {</span>
+<span class="source-line-no">086</span><span id="line-86"> NIO.shutdownGracefully();</span>
+<span class="source-line-no">087</span><span id="line-87"> }</span>
+<span class="source-line-no">088</span><span id="line-88"> if (EPOLL != null) {</span>
+<span class="source-line-no">089</span><span id="line-89"> EPOLL.shutdownGracefully();</span>
<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"> if (EPOLL != null) {</span>
-<span class="source-line-no">092</span><span id="line-92"> EPOLL.shutdownGracefully();</span>
-<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"> }</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> private void setConf(Configuration conf) {</span>
-<span class="source-line-no">097</span><span id="line-97"> switch (eventLoopType) {</span>
-<span class="source-line-no">098</span><span id="line-98"> case "nio":</span>
-<span class="source-line-no">099</span><span id="line-99"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, NIO, NioSocketChannel.class);</span>
+<span class="source-line-no">091</span><span id="line-91"> }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93"> private void setConf(Configuration conf) {</span>
+<span class="source-line-no">094</span><span id="line-94"> switch (eventLoopType) {</span>
+<span class="source-line-no">095</span><span id="line-95"> case "nio":</span>
+<span class="source-line-no">096</span><span id="line-96"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, NIO, NioSocketChannel.class);</span>
+<span class="source-line-no">097</span><span id="line-97"> break;</span>
+<span class="source-line-no">098</span><span id="line-98"> case "epoll":</span>
+<span class="source-line-no">099</span><span id="line-99"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, EPOLL, EpollSocketChannel.class);</span>
<span class="source-line-no">100</span><span id="line-100"> break;</span>
-<span class="source-line-no">101</span><span id="line-101"> case "epoll":</span>
-<span class="source-line-no">102</span><span id="line-102"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, EPOLL, EpollSocketChannel.class);</span>
+<span class="source-line-no">101</span><span id="line-101"> case "perClientNio":</span>
+<span class="source-line-no">102</span><span id="line-102"> NettyRpcClientConfigHelper.createEventLoopPerClient(conf);</span>
<span class="source-line-no">103</span><span id="line-103"> break;</span>
-<span class="source-line-no">104</span><span id="line-104"> case "perClientNio":</span>
-<span class="source-line-no">105</span><span id="line-105"> NettyRpcClientConfigHelper.createEventLoopPerClient(conf);</span>
-<span class="source-line-no">106</span><span id="line-106"> break;</span>
-<span class="source-line-no">107</span><span id="line-107"> default:</span>
-<span class="source-line-no">108</span><span id="line-108"> break;</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> @Override</span>
-<span class="source-line-no">113</span><span id="line-113"> protected NettyRpcClient createRpcClientNoCodec(Configuration conf) {</span>
-<span class="source-line-no">114</span><span id="line-114"> setConf(conf);</span>
-<span class="source-line-no">115</span><span id="line-115"> return new NettyRpcClient(conf) {</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> @Override</span>
-<span class="source-line-no">118</span><span id="line-118"> protected Codec getCodec() {</span>
-<span class="source-line-no">119</span><span id="line-119"> return null;</span>
-<span class="source-line-no">120</span><span id="line-120"> }</span>
+<span class="source-line-no">104</span><span id="line-104"> default:</span>
+<span class="source-line-no">105</span><span id="line-105"> break;</span>
+<span class="source-line-no">106</span><span id="line-106"> }</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"> @Override</span>
+<span class="source-line-no">110</span><span id="line-110"> protected NettyRpcClient createRpcClientNoCodec(Configuration conf) {</span>
+<span class="source-line-no">111</span><span id="line-111"> setConf(conf);</span>
+<span class="source-line-no">112</span><span id="line-112"> return new NettyRpcClient(conf) {</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114"> @Override</span>
+<span class="source-line-no">115</span><span id="line-115"> protected Codec getCodec() {</span>
+<span class="source-line-no">116</span><span id="line-116"> return null;</span>
+<span class="source-line-no">117</span><span id="line-117"> }</span>
+<span class="source-line-no">118</span><span id="line-118"></span>
+<span class="source-line-no">119</span><span id="line-119"> };</span>
+<span class="source-line-no">120</span><span id="line-120"> }</span>
<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> };</span>
-<span class="source-line-no">123</span><span id="line-123"> }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125"> @Override</span>
-<span class="source-line-no">126</span><span id="line-126"> protected NettyRpcClient createRpcClient(Configuration conf) {</span>
-<span class="source-line-no">127</span><span id="line-127"> setConf(conf);</span>
-<span class="source-line-no">128</span><span id="line-128"> return new NettyRpcClient(conf);</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"> @Override</span>
-<span class="source-line-no">132</span><span id="line-132"> protected NettyRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf) {</span>
-<span class="source-line-no">133</span><span id="line-133"> setConf(conf);</span>
-<span class="source-line-no">134</span><span id="line-134"> return new NettyRpcClient(conf) {</span>
-<span class="source-line-no">135</span><span id="line-135"></span>
-<span class="source-line-no">136</span><span id="line-136"> @Override</span>
-<span class="source-line-no">137</span><span id="line-137"> protected boolean isTcpNoDelay() {</span>
-<span class="source-line-no">138</span><span id="line-138"> throw new RuntimeException("Injected fault");</span>
-<span class="source-line-no">139</span><span id="line-139"> }</span>
-<span class="source-line-no">140</span><span id="line-140"> };</span>
-<span class="source-line-no">141</span><span id="line-141"> }</span>
-<span class="source-line-no">142</span><span id="line-142"></span>
-<span class="source-line-no">143</span><span id="line-143"> @Override</span>
-<span class="source-line-no">144</span><span id="line-144"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
-<span class="source-line-no">145</span><span id="line-145"> return new NettyRpcClient(conf) {</span>
-<span class="source-line-no">146</span><span id="line-146"></span>
-<span class="source-line-no">147</span><span id="line-147"> @Override</span>
-<span class="source-line-no">148</span><span id="line-148"> protected NettyRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
-<span class="source-line-no">149</span><span id="line-149"> return new BadAuthNettyRpcConnection(this, remoteId);</span>
-<span class="source-line-no">150</span><span id="line-150"> }</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">}</span>
+<span class="source-line-no">122</span><span id="line-122"> @Override</span>
+<span class="source-line-no">123</span><span id="line-123"> protected NettyRpcClient createRpcClient(Configuration conf) {</span>
+<span class="source-line-no">124</span><span id="line-124"> setConf(conf);</span>
+<span class="source-line-no">125</span><span id="line-125"> return new NettyRpcClient(conf);</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> @Override</span>
+<span class="source-line-no">129</span><span id="line-129"> protected NettyRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf) {</span>
+<span class="source-line-no">130</span><span id="line-130"> setConf(conf);</span>
+<span class="source-line-no">131</span><span id="line-131"> return new NettyRpcClient(conf) {</span>
+<span class="source-line-no">132</span><span id="line-132"></span>
+<span class="source-line-no">133</span><span id="line-133"> @Override</span>
+<span class="source-line-no">134</span><span id="line-134"> protected boolean isTcpNoDelay() {</span>
+<span class="source-line-no">135</span><span id="line-135"> throw new RuntimeException("Injected fault");</span>
+<span class="source-line-no">136</span><span id="line-136"> }</span>
+<span class="source-line-no">137</span><span id="line-137"> };</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140"> @Override</span>
+<span class="source-line-no">141</span><span id="line-141"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
+<span class="source-line-no">142</span><span id="line-142"> return new NettyRpcClient(conf) {</span>
+<span class="source-line-no">143</span><span id="line-143"></span>
+<span class="source-line-no">144</span><span id="line-144"> @Override</span>
+<span class="source-line-no">145</span><span id="line-145"> protected NettyRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
+<span class="source-line-no">146</span><span id="line-146"> return new BadAuthNettyRpcConnection(this, remoteId);</span>
+<span class="source-line-no">147</span><span id="line-147"> }</span>
+<span class="source-line-no">148</span><span id="line-148"> };</span>
+<span class="source-line-no">149</span><span id="line-149"> }</span>
+<span class="source-line-no">150</span><span id="line-150">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
index 037a0246857..3c6f7a1a981 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
@@ -39,89 +39,89 @@
<span class="source-line-no">026</span><span id="line-26">import java.security.Security;</span>
<span class="source-line-no">027</span><span id="line-27">import java.util.ArrayList;</span>
<span class="source-line-no">028</span><span id="line-28">import java.util.List;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.commons.io.FileUtils;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.stream.Stream;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.commons.io.FileUtils;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.HBaseServerBase;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.Server;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.ConnectionRegistryEndpoint;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.codec.Codec;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.io.crypto.tls.KeyStoreFileType;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.crypto.tls.X509KeyType;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContext;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContextProvider;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.io.crypto.tls.X509Util;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.bouncycastle.jce.provider.BouncyCastleProvider;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.After;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.AfterClass;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.Before;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.junit.BeforeClass;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.junit.ClassRule;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.junit.runner.RunWith;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.junit.runners.Parameterized;</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">@RunWith(Parameterized.class)</span>
-<span class="source-line-no">057</span><span id="line-57">@Category({ RPCTests.class, MediumTests.class })</span>
-<span class="source-line-no">058</span><span id="line-58">public class TestNettyTlsIPC extends AbstractTestIPC {</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60"> @ClassRule</span>
-<span class="source-line-no">061</span><span id="line-61"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">062</span><span id="line-62"> HBaseClassTestRule.forClass(TestNettyTlsIPC.class);</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> private static final HBaseCommonTestingUtil UTIL = new HBaseCommonTestingUtil(CONF);</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66"> private static X509TestContextProvider PROVIDER;</span>
-<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68"> private static NettyEventLoopGroupConfig EVENT_LOOP_GROUP_CONFIG;</span>
-<span class="source-line-no">069</span><span id="line-69"></span>
-<span class="source-line-no">070</span><span id="line-70"> @Parameterized.Parameter(1)</span>
-<span class="source-line-no">071</span><span id="line-71"> public X509KeyType caKeyType;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.HBaseServerBase;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.Server;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.ConnectionRegistryEndpoint;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.codec.Codec;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.crypto.tls.KeyStoreFileType;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.crypto.tls.X509KeyType;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContext;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContextProvider;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.io.crypto.tls.X509Util;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.bouncycastle.jce.provider.BouncyCastleProvider;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.junit.jupiter.api.AfterEach;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.junit.jupiter.params.provider.Arguments;</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">@Tag(RPCTests.TAG)</span>
+<span class="source-line-no">056</span><span id="line-56">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">057</span><span id="line-57">@HBaseParameterizedTestTemplate(name = "{index}: rpcServerImpl={0}, caKeyType={1},"</span>
+<span class="source-line-no">058</span><span id="line-58"> + " certKeyType={2}, keyPassword={3}, acceptPlainText={4}, clientTlsEnabled={5}")</span>
+<span class="source-line-no">059</span><span id="line-59">public class TestNettyTlsIPC extends AbstractTestIPC {</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61"> private static final HBaseCommonTestingUtil UTIL = new HBaseCommonTestingUtil(CONF);</span>
+<span class="source-line-no">062</span><span id="line-62"></span>
+<span class="source-line-no">063</span><span id="line-63"> private static X509TestContextProvider PROVIDER;</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65"> private static NettyEventLoopGroupConfig EVENT_LOOP_GROUP_CONFIG;</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67"> private X509KeyType caKeyType;</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69"> private X509KeyType certKeyType;</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71"> private char[] keyPassword;</span>
<span class="source-line-no">072</span><span id="line-72"></span>
-<span class="source-line-no">073</span><span id="line-73"> @Parameterized.Parameter(2)</span>
-<span class="source-line-no">074</span><span id="line-74"> public X509KeyType certKeyType;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> @Parameterized.Parameter(3)</span>
-<span class="source-line-no">077</span><span id="line-77"> public char[] keyPassword;</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @Parameterized.Parameter(4)</span>
-<span class="source-line-no">080</span><span id="line-80"> public boolean acceptPlainText;</span>
-<span class="source-line-no">081</span><span id="line-81"></span>
-<span class="source-line-no">082</span><span id="line-82"> @Parameterized.Parameter(5)</span>
-<span class="source-line-no">083</span><span id="line-83"> public boolean clientTlsEnabled;</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85"> private X509TestContext x509TestContext;</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> // only netty rpc server supports TLS, so here we will only test NettyRpcServer</span>
-<span class="source-line-no">088</span><span id="line-88"> @Parameterized.Parameters(</span>
-<span class="source-line-no">089</span><span id="line-89"> name = "{index}: rpcServerImpl={0}, caKeyType={1}, certKeyType={2}, keyPassword={3},"</span>
-<span class="source-line-no">090</span><span id="line-90"> + " acceptPlainText={4}, clientTlsEnabled={5}")</span>
-<span class="source-line-no">091</span><span id="line-91"> public static List<Object[]> data() {</span>
-<span class="source-line-no">092</span><span id="line-92"> List<Object[]> params = new ArrayList<>();</span>
+<span class="source-line-no">073</span><span id="line-73"> private boolean acceptPlainText;</span>
+<span class="source-line-no">074</span><span id="line-74"></span>
+<span class="source-line-no">075</span><span id="line-75"> private boolean clientTlsEnabled;</span>
+<span class="source-line-no">076</span><span id="line-76"></span>
+<span class="source-line-no">077</span><span id="line-77"> public TestNettyTlsIPC(Class<? extends RpcServer> rpcServerImpl, X509KeyType caKeyType,</span>
+<span class="source-line-no">078</span><span id="line-78"> X509KeyType certKeyType, char[] keyPassword, boolean acceptPlainText,</span>
+<span class="source-line-no">079</span><span id="line-79"> boolean clientTlsEnabled) {</span>
+<span class="source-line-no">080</span><span id="line-80"> super(rpcServerImpl);</span>
+<span class="source-line-no">081</span><span id="line-81"> this.caKeyType = caKeyType;</span>
+<span class="source-line-no">082</span><span id="line-82"> this.certKeyType = certKeyType;</span>
+<span class="source-line-no">083</span><span id="line-83"> this.keyPassword = keyPassword;</span>
+<span class="source-line-no">084</span><span id="line-84"> this.acceptPlainText = acceptPlainText;</span>
+<span class="source-line-no">085</span><span id="line-85"> this.clientTlsEnabled = clientTlsEnabled;</span>
+<span class="source-line-no">086</span><span id="line-86"> }</span>
+<span class="source-line-no">087</span><span id="line-87"></span>
+<span class="source-line-no">088</span><span id="line-88"> private X509TestContext x509TestContext;</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90"> // only netty rpc server supports TLS, so here we will only test NettyRpcServer</span>
+<span class="source-line-no">091</span><span id="line-91"> public static Stream<Arguments> parameters() {</span>
+<span class="source-line-no">092</span><span id="line-92"> List<Arguments> params = new ArrayList<>();</span>
<span class="source-line-no">093</span><span id="line-93"> for (X509KeyType caKeyType : X509KeyType.values()) {</span>
<span class="source-line-no">094</span><span id="line-94"> for (X509KeyType certKeyType : X509KeyType.values()) {</span>
<span class="source-line-no">095</span><span id="line-95"> for (char[] keyPassword : new char[][] { "".toCharArray(), "pa$$w0rd".toCharArray() }) {</span>
<span class="source-line-no">096</span><span id="line-96"> // do not accept plain text</span>
-<span class="source-line-no">097</span><span id="line-97"> params.add(new Object[] { NettyRpcServer.class, caKeyType, certKeyType, keyPassword,</span>
-<span class="source-line-no">098</span><span id="line-98"> false, true });</span>
+<span class="source-line-no">097</span><span id="line-97"> params.add(</span>
+<span class="source-line-no">098</span><span id="line-98"> Arguments.of(NettyRpcServer.class, caKeyType, certKeyType, keyPassword, false, true));</span>
<span class="source-line-no">099</span><span id="line-99"> // support plain text and client enables tls</span>
<span class="source-line-no">100</span><span id="line-100"> params.add(</span>
-<span class="source-line-no">101</span><span id="line-101"> new Object[] { NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true, true });</span>
+<span class="source-line-no">101</span><span id="line-101"> Arguments.of(NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true, true));</span>
<span class="source-line-no">102</span><span id="line-102"> // support plain text and client disables tls</span>
-<span class="source-line-no">103</span><span id="line-103"> params.add(new Object[] { NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true,</span>
-<span class="source-line-no">104</span><span id="line-104"> false });</span>
+<span class="source-line-no">103</span><span id="line-103"> params.add(</span>
+<span class="source-line-no">104</span><span id="line-104"> Arguments.of(NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true, false));</span>
<span class="source-line-no">105</span><span id="line-105"> }</span>
<span class="source-line-no">106</span><span id="line-106"> }</span>
<span class="source-line-no">107</span><span id="line-107"> }</span>
-<span class="source-line-no">108</span><span id="line-108"> return params;</span>
+<span class="source-line-no">108</span><span id="line-108"> return params.stream();</span>
<span class="source-line-no">109</span><span id="line-109"> }</span>
<span class="source-line-no">110</span><span id="line-110"></span>
-<span class="source-line-no">111</span><span id="line-111"> @BeforeClass</span>
+<span class="source-line-no">111</span><span id="line-111"> @BeforeAll</span>
<span class="source-line-no">112</span><span id="line-112"> public static void setUpBeforeClass() throws IOException {</span>
<span class="source-line-no">113</span><span id="line-113"> Security.addProvider(new BouncyCastleProvider());</span>
<span class="source-line-no">114</span><span id="line-114"> File dir = new File(UTIL.getDataTestDir(TestNettyTlsIPC.class.getSimpleName()).toString())</span>
@@ -134,14 +134,14 @@
<span class="source-line-no">121</span><span id="line-121"> NettyEventLoopGroupConfig.setup(CONF, TestNettyTlsIPC.class.getSimpleName());</span>
<span class="source-line-no">122</span><span id="line-122"> }</span>
<span class="source-line-no">123</span><span id="line-123"></span>
-<span class="source-line-no">124</span><span id="line-124"> @AfterClass</span>
+<span class="source-line-no">124</span><span id="line-124"> @AfterAll</span>
<span class="source-line-no">125</span><span id="line-125"> public static void tearDownAfterClass() throws InterruptedException {</span>
<span class="source-line-no">126</span><span id="line-126"> Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);</span>
<span class="source-line-no">127</span><span id="line-127"> EVENT_LOOP_GROUP_CONFIG.group().shutdownGracefully().sync();</span>
<span class="source-line-no">128</span><span id="line-128"> UTIL.cleanupTestDir();</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"> @Before</span>
+<span class="source-line-no">131</span><span id="line-131"> @BeforeEach</span>
<span class="source-line-no">132</span><span id="line-132"> public void setUp() throws IOException {</span>
<span class="source-line-no">133</span><span id="line-133"> x509TestContext = PROVIDER.get(caKeyType, certKeyType, keyPassword);</span>
<span class="source-line-no">134</span><span id="line-134"> x509TestContext.setConfigurations(KeyStoreFileType.JKS, KeyStoreFileType.JKS);</span>
@@ -149,7 +149,7 @@
<span class="source-line-no">136</span><span id="line-136"> CONF.setBoolean(X509Util.HBASE_CLIENT_NETTY_TLS_ENABLED, clientTlsEnabled);</span>
<span class="source-line-no">137</span><span id="line-137"> }</span>
<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139"> @After</span>
+<span class="source-line-no">139</span><span id="line-139"> @AfterEach</span>
<span class="source-line-no">140</span><span id="line-140"> public void tearDown() {</span>
<span class="source-line-no">141</span><span id="line-141"> x509TestContext.clearConfigurations();</span>
<span class="source-line-no">142</span><span id="line-142"> x509TestContext.getConf().unset(X509Util.TLS_CONFIG_OCSP);</span>
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 9b81c0238a0..b86f64990ca 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -316,7 +316,7 @@ loadScripts(document, 'script');</script>
<dd>
<div class="block">Some basic ipc tests.</div>
</dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#%3Cinit%3E()" class="member-name-link">AbstractTestIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></dt>
+<dt><a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#%3Cinit%3E(java.lang.Class)" class="member-name-link">AbstractTestIPC(Class<? extends RpcServer>)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC.FailingSimpleRpcServer</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
@@ -6869,8 +6869,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/io/util/TestMemorySizeUtil.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.io.util.<a href="org/apache/hadoop/hbase/io/util/TestMemorySizeUtil.html" title="class in org.apache.hadoop.hbase.io.util">TestMemorySizeUtil</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestBufferChain.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestBufferChain.html" title="class in org.apache.hadoop.hbase.ipc">TestBufferChain</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestCallRunner.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestCallRunner.html" title="class in org.apache.hadoop.hbase.ipc">TestCallRunner</a></dt>
@@ -6895,16 +6893,12 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyChannelWritability</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPCCloseConnection</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyRpcConnection.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyRpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyRpcConnection</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyRpcServer</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html" title="class in org.apache.hadoop.hbase.ipc">TestProtoBufRpc</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestRemoteWithExtrasException.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestRemoteWithExtrasException.html" title="class in org.apache.hadoop.hbase.ipc">TestRemoteWithExtrasException</a></dt>
@@ -15781,10 +15775,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html#data()" class="member-name-link">data()</a> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" title="class in org.apache.hadoop.hbase.io.hfile">TestLazyDataBlockDecompression</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#data()" class="member-name-link">data()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></dt>
-<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#data()" class="member-name-link">data()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.html#data()" class="member-name-link">data()</a> - Static method in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.html" title="class in org.apache.hadoop.hbase.mob">TestDefaultMobStoreFlusher</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html#data()" class="member-name-link">data()</a> - Static method in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html" title="class in org.apache.hadoop.hbase.mob">TestMobCompactionWithDefaults</a></dt>
@@ -39353,6 +39343,8 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#OTEL_CLASS_RULE" class="member-name-link">OTEL_CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">AbstractTestAsyncTableScan</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#OTEL_EXT" class="member-name-link">OTEL_EXT</a> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/TestAsyncMetaRegionLocator.AbstractBase.html#otelClassRule" class="member-name-link">otelClassRule</a> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncMetaRegionLocator.AbstractBase.html" title="class in org.apache.hadoop.hbase.client">TestAsyncMetaRegionLocator.AbstractBase</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/master/procedure/TestProcedureTracing.html#otelClassRule" class="member-name-link">otelClassRule</a> - Static variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestProcedureTracing.html" title="class in org.apache.hadoop.hbase.master.procedure">TestProcedureTracing</a></dt>
@@ -39538,10 +39530,14 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/io/hfile/TestSeekTo.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestSeekTo.html" title="class in org.apache.hadoop.hbase.io.hfile">TestSeekTo</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyRpcServer.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyRpcServer</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestProtoBufRpc.html" title="class in org.apache.hadoop.hbase.ipc">TestProtoBufRpc</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestRpcHandlerException.html#parameters()" class="member-name-link">parameters()</a> - Static method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestRpcHandlerException.html" title="class in org.apache.hadoop.hbase.ipc">TestRpcHandlerException</a></dt>
@@ -62544,7 +62540,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#%3Cinit%3E()" class="member-name-link">TestBlockingIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></dt>
+<dt><a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#%3Cinit%3E(java.lang.Class)" class="member-name-link">TestBlockingIPC(Class<? extends RpcServer>)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestBlockingIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCacheRefCnt.html#testBlockInRAMCache()" class="member-name-link">testBlockInRAMCache()</a> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCacheRefCnt.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestBucketCacheRefCnt</a></dt>
<dd> </dd>
@@ -77107,7 +77103,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html#%3Cinit%3E()" class="member-name-link">TestNettyIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></dt>
+<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html#%3Cinit%3E(java.lang.Class,java.lang.String)" class="member-name-link">TestNettyIPC(Class<? extends RpcServer>, String)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPCCloseConnection</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd>
@@ -77133,7 +77129,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#%3Cinit%3E()" class="member-name-link">TestNettyTlsIPC()</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></dt>
+<dt><a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#%3Cinit%3E(java.lang.Class,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,char%5B%5D,boolean,boolean)" class="member-name-link">TestNettyTlsIPC(Class<? extends RpcServer>, X509KeyType, X509KeyType, char[], boolean, boolean)</a> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html" title="class in org.apache.hadoo [...]
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/security/TestNettyTLSIPCFileWatcher.html" class="type-name-link" title="class in org.apache.hadoop.hbase.security">TestNettyTLSIPCFileWatcher</a> - Class in <a href="org/apache/hadoop/hbase/security/package-summary.html">org.apache.hadoop.hbase.security</a></dt>
<dd> </dd>
@@ -91145,8 +91141,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/TestAsyncTableTracing.html#traceRule" class="member-name-link">traceRule</a> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncTableTracing.html" title="class in org.apache.hadoop.hbase.client">TestAsyncTableTracing</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#traceRule" class="member-name-link">traceRule</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/regionserver/TestHRegionTracing.html#traceRule" class="member-name-link">traceRule</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionTracing.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionTracing</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.TimingResult.html#traces" class="member-name-link">traces</a> - Variable in class org.apache.hadoop.hbase.mttr.<a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.TimingResult.html" title="class in org.apache.hadoop.hbase.mttr">IntegrationTestMTTR.TimingResult</a></dt>
diff --git a/testdevapidocs/member-search-index.js b/testdevapidocs/member-search-index.js
index 85d00e6deaa..38a89d85df9 100644
--- a/testdevapidocs/member-search-index.js
+++ b/testdevapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_ARI"},{"p":"org.apache.hadoop.hbase.io","c":"TestHalfStoreFileReader","l":"_b(String)","u":"_b(java.lang.String)"},{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_BRI"},{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.regionserver","c":"TestBlocksScanned","l":"_testBlo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_ARI"},{"p":"org.apache.hadoop.hbase.io","c":"TestHalfStoreFileReader","l":"_b(String)","u":"_b(java.lang.String)"},{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_BRI"},{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.regionserver","c":"TestBlocksScanned","l":"_testBlo [...]
\ No newline at end of file
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 98632de8cea..e5b19c53351 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -2775,46 +2775,40 @@ loadScripts(document, 'script');</script>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestBlockingIPC.</span><code><a href="../ipc/TestBlockingIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestBufferChain.</span><code><a href="../ipc/TestBufferChain.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestBufferChain.</span><code><a href="../ipc/TestBufferChain.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestCallRunner.</span><code><a href="../ipc/TestCallRunner.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCallRunner.</span><code><a href="../ipc/TestCallRunner.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestCellBlockBuilder.</span><code><a href="../ipc/TestCellBlockBuilder.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestCellBlockBuilder.</span><code><a href="../ipc/TestCellBlockBuilder.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestConnectionId.</span><code><a href="../ipc/TestConnectionId.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestConnectionId.</span><code><a href="../ipc/TestConnectionId.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestFailedServersLog.</span><code><a href="../ipc/TestFailedServersLog.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestFailedServersLog.</span><code><a href="../ipc/TestFailedServersLog.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestFifoRpcScheduler.</span><code><a href="../ipc/TestFifoRpcScheduler.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestFifoRpcScheduler.</span><code><a href="../ipc/TestFifoRpcScheduler.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestHBaseClient.</span><code><a href="../ipc/TestHBaseClient.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestHBaseClient.</span><code><a href="../ipc/TestHBaseClient.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestHBaseRpcControllerImpl.</span><code><a href="../ipc/TestHBaseRpcControllerImpl.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestHBaseRpcControllerImpl.</span><code><a href="../ipc/TestHBaseRpcControllerImpl.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestIPCUtil.</span><code><a href="../ipc/TestIPCUtil.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestIPCUtil.</span><code><a href="../ipc/TestIPCUtil.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestMasterFifoRpcScheduler.</span><code><a href="../ipc/TestMasterFifoRpcScheduler.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestMasterFifoRpcScheduler.</span><code><a href="../ipc/TestMasterFifoRpcScheduler.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestMultipleServerPrincipalsIPC.</span><code><a href="../ipc/TestMultipleServerPrincipalsIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestMultipleServerPrincipalsIPC.</span><code><a href="../ipc/TestMultipleServerPrincipalsIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestNettyChannelWritability.</span><code><a href="../ipc/TestNettyChannelWritability.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestNettyIPC.</span><code><a href="../ipc/TestNettyIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestNettyChannelWritability.</span><code><a href="../ipc/TestNettyChannelWritability.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">TestNettyIPCCloseConnection.</span><code><a href="../ipc/TestNettyIPCCloseConnection.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
@@ -2826,62 +2820,59 @@ loadScripts(document, 'script');</script>
<div class="col-second even-row-color"><span class="type-name-label">TestNettyRpcServer.</span><code><a href="../ipc/TestNettyRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestNettyTlsIPC.</span><code><a href="../ipc/TestNettyTlsIPC.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestProtoBufRpc.</span><code><a href="../ipc/TestProtoBufRpc.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestProtoBufRpc.</span><code><a href="../ipc/TestProtoBufRpc.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRemoteWithExtrasException.</span><code><a href="../ipc/TestRemoteWithExtrasException.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRemoteWithExtrasException.</span><code><a href="../ipc/TestRemoteWithExtrasException.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcClientDeprecatedNameMapping.</span><code><a href="../ipc/TestRpcClientDeprecatedNameMapping.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcClientDeprecatedNameMapping.</span><code><a href="../ipc/TestRpcClientDeprecatedNameMapping.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcClientLeaks.</span><code><a href="../ipc/TestRpcClientLeaks.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcClientLeaks.</span><code><a href="../ipc/TestRpcClientLeaks.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcConnectionHeader.</span><code><a href="../ipc/TestRpcConnectionHeader.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcConnectionHeader.</span><code><a href="../ipc/TestRpcConnectionHeader.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcHandlerException.</span><code><a href="../ipc/TestRpcHandlerException.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcHandlerException.</span><code><a href="../ipc/TestRpcHandlerException.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcMetrics.</span><code><a href="../ipc/TestRpcMetrics.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcMetrics.</span><code><a href="../ipc/TestRpcMetrics.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcServerSlowConnectionSetup.</span><code><a href="../ipc/TestRpcServerSlowConnectionSetup.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcServerSlowConnectionSetup.</span><code><a href="../ipc/TestRpcServerSlowConnectionSetup.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRpcServerTraceLogging.</span><code><a href="../ipc/TestRpcServerTraceLogging.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcServerTraceLogging.</span><code><a href="../ipc/TestRpcServerTraceLogging.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestRpcSkipInitialSaslHandshake.</span><code><a href="../ipc/TestRpcSkipInitialSaslHandshake.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRpcSkipInitialSaslHandshake.</span><code><a href="../ipc/TestRpcSkipInitialSaslHandshake.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestRWQueueRpcExecutor.</span><code><a href="../ipc/TestRWQueueRpcExecutor.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRWQueueRpcExecutor.</span><code><a href="../ipc/TestRWQueueRpcExecutor.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestSecureNettyRpcServer.</span><code><a href="../ipc/TestSecureNettyRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSecureNettyRpcServer.</span><code><a href="../ipc/TestSecureNettyRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestSecureSimpleRpcServer.</span><code><a href="../ipc/TestSecureSimpleRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSecureSimpleRpcServer.</span><code><a href="../ipc/TestSecureSimpleRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestSecurityRpcSentBytesMetrics.</span><code><a href="../ipc/TestSecurityRpcSentBytesMetrics.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSecurityRpcSentBytesMetrics.</span><code><a href="../ipc/TestSecurityRpcSentBytesMetrics.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestServerCall.</span><code><a href="../ipc/TestServerCall.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestServerCall.</span><code><a href="../ipc/TestServerCall.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestSimpleRpcScheduler.</span><code><a href="../ipc/TestSimpleRpcScheduler.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSimpleRpcScheduler.</span><code><a href="../ipc/TestSimpleRpcScheduler.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestSimpleRpcServer.</span><code><a href="../ipc/TestSimpleRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSimpleRpcServer.</span><code><a href="../ipc/TestSimpleRpcServer.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestTLSHandshadeFailure.</span><code><a href="../ipc/TestTLSHandshadeFailure.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestTLSHandshadeFailure.</span><code><a href="../ipc/TestTLSHandshadeFailure.html#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
</div>
</section>
</li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html
index 0ec40e4f7eb..2724c20f85e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseParameterizedTestTemplate.html
@@ -57,8 +57,10 @@ loadScripts(document, 'script');</script>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.io.asyncfs">org.apache.hadoop.hbase.io.asyncfs</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.ipc">org.apache.hadoop.hbase.ipc</a></div>
<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></div>
+<div class="col-last even-row-color"> </div>
</div>
<section class="class-uses">
<ul class="block-list">
@@ -77,6 +79,26 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="org.apache.hadoop.hbase.ipc">
+<h2>Uses of <a href="../HBaseParameterizedTestTemplate.html" title="annotation interface in org.apache.hadoop.hbase">HBaseParameterizedTestTemplate</a> in <a href="../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></h2>
+<div class="caption"><span>Classes in <a href="../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> with annotations of type <a href="../HBaseParameterizedTestTemplate.html" title="annotation interface in org.apache.hadoop.hbase">HBaseParameterizedTestTemplate</a></span></div>
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier and Type</div>
+<div class="table-header col-second">Class</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><code>class </code></div>
+<div class="col-second even-row-color"><code><a href="../ipc/TestBlockingIPC.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>class </code></div>
+<div class="col-second odd-row-color"><code><a href="../ipc/TestNettyIPC.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>class </code></div>
+<div class="col-second even-row-color"><code><a href="../ipc/TestNettyTlsIPC.html" class="type-name-link" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></code></div>
+<div class="col-last even-row-color"> </div>
+</div>
+</section>
+</li>
+<li>
<section class="detail" id="org.apache.hadoop.hbase.security">
<h2>Uses of <a href="../HBaseParameterizedTestTemplate.html" title="annotation interface in org.apache.hadoop.hbase">HBaseParameterizedTestTemplate</a> in <a href="../security/package-summary.html">org.apache.hadoop.hbase.security</a></h2>
<div class="caption"><span>Classes in <a href="../security/package-summary.html">org.apache.hadoop.hbase.security</a> with annotations of type <a href="../HBaseParameterizedTestTemplate.html" title="annotation interface in org.apache.hadoop.hbase">HBaseParameterizedTestTemplate</a></span></div>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html b/testdevapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html
index aeb65b54132..558ad34c304 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/crypto/tls/class-use/X509KeyType.html
@@ -162,13 +162,27 @@ the order they are declared.</div>
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code><a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
+<div class="col-first even-row-color"><code>private <a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">TestNettyTlsIPC.</span><code><a href="../../../../ipc/TestNettyTlsIPC.html#caKeyType" class="member-name-link">caKeyType</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code><a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
+<div class="col-first odd-row-color"><code>private <a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
<div class="col-second odd-row-color"><span class="type-name-label">TestNettyTlsIPC.</span><code><a href="../../../../ipc/TestNettyTlsIPC.html#certKeyType" class="member-name-link">certKeyType</a></code></div>
<div class="col-last odd-row-color"> </div>
</div>
+<div class="caption"><span>Constructors in <a href="../../../../ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a> with parameters of type <a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></span></div>
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier</div>
+<div class="table-header col-second">Constructor</div>
+<div class="table-header col-last">Description</div>
+<div class="col-first even-row-color"><code> </code></div>
+<div class="col-second even-row-color"><code><a href="../../../../ipc/TestNettyTlsIPC.html#%3Cinit%3E(java.lang.Class,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,char%5B%5D,boolean,boolean)" class="member-name-link">TestNettyTlsIPC</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop. [...]
+ <a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a> caKeyType,
+ <a href="../X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a> certKeyType,
+ char[] keyPassword,
+ boolean acceptPlainText,
+ boolean clientTlsEnabled)</code></div>
+<div class="col-last even-row-color"> </div>
+</div>
</section>
</li>
<li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html b/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html
index dfc15296aa8..7f75ad78593 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html
@@ -85,7 +85,7 @@ loadScripts(document, 'script');</script>
<dd><a href="AbstractTestIPC.FailingSimpleRpcServer.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC.FailingSimpleRpcServer</a></dd>
</dl>
<hr>
-<div class="type-signature"><span class="modifiers">final class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html#line-369">AbstractTestIPC.FailingSimpleRpcServer.FailingConnection</a></span>
+<div class="type-signature"><span class="modifiers">final class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html#line-375">AbstractTestIPC.FailingSimpleRpcServer.FailingConnection</a></span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
</section>
<section class="summary">
@@ -539,7 +539,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(org.apache.hadoop.hbase.ipc.AbstractTestIPC.FailingSimpleRpcServer,java.nio.channels.SocketChannel,long)">
<h3>FailingConnection</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html#line-370">FailingConnection</a></span><wbr><span class="parameters">(<a href="AbstractTestIPC.FailingSimpleRpcServer.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC.FailingSimpleRpcServer</a> rpcServer,
+<div class="member-signature"><span class="modifiers">private</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html#line-376">FailingConnection</a></span><wbr><span class="parameters">(<a href="AbstractTestIPC.FailingSimpleRpcServer.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC.FailingSimpleRpcServer</a> rpcServer,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/channels/SocketChannel.html" title="class or interface in java.nio.channels" class="external-link">SocketChannel</a> channel,
long lastContact)</span></div>
</section>
@@ -555,7 +555,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="processRequest(org.apache.hadoop.hbase.nio.ByteBuff)">
<h3>processRequest</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/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html#line-375">processRequest</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.nio.ByteBuff buf)</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/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html#line-381">processRequest</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.nio.ByteBuff buf)</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>,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/InterruptedException.html" title="class or interface in java.lang" class="external-link">InterruptedException</a></span></div>
<dl class="notes">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html b/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html
index 2d2e56ca805..5375f0b7d2d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html
@@ -89,7 +89,7 @@ loadScripts(document, 'script');</script>
<dd><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></dd>
</dl>
<hr>
-<div class="type-signature"><span class="modifiers">private static class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-361">AbstractTestIPC.FailingSimpleRpcServer</a></span>
+<div class="type-signature"><span class="modifiers">private static class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-366">AbstractTestIPC.FailingSimpleRpcServer</a></span>
<span class="extends-implements">extends org.apache.hadoop.hbase.ipc.SimpleRpcServer</span></div>
</section>
<section class="summary">
@@ -183,7 +183,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(org.apache.hadoop.hbase.Server,java.lang.String,java.util.List,java.net.InetSocketAddress,org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.ipc.RpcScheduler)">
<h3>FailingSimpleRpcServer</h3>
-<div class="member-signature"><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html#line-363">FailingSimpleRpcServer</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.Server server,
+<div class="member-signature"><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html#line-369">FailingSimpleRpcServer</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.Server server,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> name,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface> services,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/InetSocketAddress.html" title="class or interface in java.net" class="external-link">InetSocketAddress</a> bindAddress,
@@ -207,7 +207,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="getConnection(java.nio.channels.SocketChannel,long)">
<h3>getConnection</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.SimpleServerRpcConnection</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html#line-383">getConnection</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/channels/SocketChannel.html" title="class or int [...]
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.SimpleServerRpcConnection</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html#line-389">getConnection</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/channels/SocketChannel.html" title="class or int [...]
long time)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html b/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
index 18f7291f640..034a87332a7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
@@ -81,7 +81,7 @@ loadScripts(document, 'script');</script>
<dd><code><a href="TestBlockingIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestBlockingIPC</a></code>, <code><a href="TestNettyIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC</a></code>, <code><a href="TestNettyTlsIPC.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyTlsIPC</a></code></dd>
</dl>
<hr>
-<div class="type-signature"><span class="modifiers">public abstract class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-113">AbstractTestIPC</a></span>
+<div class="type-signature"><span class="modifiers">public abstract class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-114">AbstractTestIPC</a></span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
<div class="block">Some basic ipc tests.</div>
</section>
@@ -123,11 +123,11 @@ loadScripts(document, 'script');</script>
<div class="col-first odd-row-color"><code>private static final org.slf4j.Logger</code></div>
<div class="col-second odd-row-color"><code><a href="#LOG" class="member-name-link">LOG</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer></code></div>
-<div class="col-second even-row-color"><code><a href="#rpcServerImpl" class="member-name-link">rpcServerImpl</a></code></div>
+<div class="col-first even-row-color"><code>private static final io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension</code></div>
+<div class="col-second even-row-color"><code><a href="#OTEL_EXT" class="member-name-link">OTEL_EXT</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule</code></div>
-<div class="col-second odd-row-color"><code><a href="#traceRule" class="member-name-link">traceRule</a></code></div>
+<div class="col-first odd-row-color"><code>private <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer></code></div>
+<div class="col-second odd-row-color"><code><a href="#rpcServerImpl" class="member-name-link">rpcServerImpl</a></code></div>
<div class="col-last odd-row-color"> </div>
</div>
</section>
@@ -137,10 +137,12 @@ loadScripts(document, 'script');</script>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
-<div class="summary-table two-column-summary">
-<div class="table-header col-first">Constructor</div>
+<div class="summary-table three-column-summary">
+<div class="table-header col-first">Modifier</div>
+<div class="table-header col-second">Constructor</div>
<div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">AbstractTestIPC</a>()</code></div>
+<div class="col-first even-row-color"><code>protected </code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.Class)" class="member-name-link">AbstractTestIPC</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl)</code></div>
<div class="col-last even-row-color"> </div>
</div>
</section>
@@ -313,37 +315,38 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="LOG">
<h3>LOG</h3>
-<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type">org.slf4j.Logger</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-115">LOG</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type">org.slf4j.Logger</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-116">LOG</a></span></div>
</section>
</li>
<li>
<section class="detail" id="CELL_BYTES">
<h3>CELL_BYTES</h3>
-<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-117">CELL_BYTES</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-118">CELL_BYTES</a></span></div>
</section>
</li>
<li>
<section class="detail" id="CELL">
<h3>CELL</h3>
-<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type">org.apache.hadoop.hbase.KeyValue</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-118">CELL</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type">org.apache.hadoop.hbase.KeyValue</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-119">CELL</a></span></div>
</section>
</li>
<li>
<section class="detail" id="CONF">
<h3>CONF</h3>
-<div class="member-signature"><span class="modifiers">protected static final</span> <span class="return-type">org.apache.hadoop.conf.Configuration</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-120">CONF</a></span></div>
+<div class="member-signature"><span class="modifiers">protected static final</span> <span class="return-type">org.apache.hadoop.conf.Configuration</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-121">CONF</a></span></div>
</section>
</li>
<li>
-<section class="detail" id="traceRule">
-<h3>traceRule</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-135">traceRule</a></span></div>
+<section class="detail" id="OTEL_EXT">
+<h3>OTEL_EXT</h3>
+<div class="member-signature"><span class="annotations">@RegisterExtension
+</span><span class="modifiers">private static final</span> <span class="return-type">io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-136">OTEL_EXT</a></span></div>
</section>
</li>
<li>
<section class="detail" id="rpcServerImpl">
<h3>rpcServerImpl</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-138">rpcServerImpl</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/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-139">rpcServerImpl</a></span></div>
</section>
</li>
</ul>
@@ -355,9 +358,9 @@ loadScripts(document, 'script');</script>
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="<init>()">
+<section class="detail" id="<init>(java.lang.Class)">
<h3>AbstractTestIPC</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-113">AbstractTestIPC</a></span>()</div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-141">AbstractTestIPC</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl)</ [...]
</section>
</li>
</ul>
@@ -371,7 +374,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcServer(org.apache.hadoop.hbase.Server,java.lang.String,java.util.List,java.net.InetSocketAddress,org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.ipc.RpcScheduler)">
<h3>createRpcServer</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.RpcServer</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-122">createRpcServer</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.Server server,
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.RpcServer</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-123">createRpcServer</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.Server server,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> name,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface> services,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/InetSocketAddress.html" title="class or interface in java.net" class="external-link">InetSocketAddress</a> bindAddress,
@@ -387,7 +390,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcServer(java.lang.String,java.util.List,java.net.InetSocketAddress,org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.ipc.RpcScheduler)">
<h3>createRpcServer</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">org.apache.hadoop.hbase.ipc.RpcServer</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-128">createRpcServer</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>& [...]
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">org.apache.hadoop.hbase.ipc.RpcServer</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-129">createRpcServer</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>& [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface> services,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/InetSocketAddress.html" title="class or interface in java.net" class="external-link">InetSocketAddress</a> bindAddress,
org.apache.hadoop.conf.Configuration conf,
@@ -402,19 +405,21 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcClientNoCodec(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClientNoCodec</h3>
-<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-133">createRpcClientNoCodec</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-134">createRpcClientNoCodec</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
</section>
</li>
<li>
<section class="detail" id="setUpBeforeTest()">
<h3>setUpBeforeTest</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/ipc/AbstractTestIPC.html#line-141">setUpBeforeTest</a></span>()</div>
+<div class="member-signature"><span class="annotations">@BeforeEach
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-145">setUpBeforeTest</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="testNoCodec()">
<h3>testNoCodec</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/ipc/AbstractTestIPC.html#line-149">testNoCodec</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-153">testNoCodec</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<div class="block">Ensure we do not HAVE TO HAVE a codec.</div>
@@ -428,13 +433,14 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="createRpcClient(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClient</h3>
-<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-168">createRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-172">createRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
</section>
</li>
<li>
<section class="detail" id="testCompressCellBlock()">
<h3>testCompressCellBlock</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/ipc/AbstractTestIPC.html#line-175">testCompressCellBlock</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-179">testCompressCellBlock</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<div class="block">It is hard to verify the compression is actually happening under the wraps. Hope that if
@@ -450,7 +456,7 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="createRpcClientRTEDuringConnectionSetup(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClientRTEDuringConnectionSetup</h3>
-<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-209">createRpcClientRTEDuringConnectionSetup</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span>
+<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-213">createRpcClientRTEDuringConnectionSetup</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</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>
@@ -461,7 +467,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testRTEDuringConnectionSetup()">
<h3>testRTEDuringConnectionSetup</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/ipc/AbstractTestIPC.html#line-212">testRTEDuringConnectionSetup</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-216">testRTEDuringConnectionSetup</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>
@@ -472,7 +479,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testRpcScheduler()">
<h3>testRpcScheduler</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/ipc/AbstractTestIPC.html#line-234">testRpcScheduler</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-238">testRpcScheduler</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/InterruptedException.html" title="class or interface in java.lang" class="external-link">InterruptedException</a></span></div>
@@ -488,7 +496,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException,
<li>
<section class="detail" id="testRpcMaxRequestSize()">
<h3>testRpcMaxRequestSize</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/ipc/AbstractTestIPC.html#line-258">testRpcMaxRequestSize</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-262">testRpcMaxRequestSize</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<div class="block">Tests that the rpc scheduler is called when requests arrive.</div>
@@ -502,7 +511,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testRpcServerForNotNullRemoteAddressInCallObject()">
<h3>testRpcServerForNotNullRemoteAddressInCallObject</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/ipc/AbstractTestIPC.html#line-290">testRpcServerForNotNullRemoteAddressInCallObject</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-294">testRpcServerForNotNullRemoteAddressInCallObject</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<div class="block">Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null
@@ -517,7 +527,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testRemoteError()">
<h3>testRemoteError</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/ipc/AbstractTestIPC.html#line-308">testRemoteError</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-312">testRemoteError</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<dl class="notes">
@@ -530,7 +541,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testTimeout()">
<h3>testTimeout</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/ipc/AbstractTestIPC.html#line-328">testTimeout</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-332">testTimeout</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>Throws:</dt>
@@ -541,7 +553,7 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="createTestFailingRpcServer(java.lang.String,java.util.List,java.net.InetSocketAddress,org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.ipc.RpcScheduler)">
<h3>createTestFailingRpcServer</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.RpcServer</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-389">createTestFailingRpcServer</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link [...]
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.RpcServer</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-395">createTestFailingRpcServer</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface> services,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/InetSocketAddress.html" title="class or interface in java.net" class="external-link">InetSocketAddress</a> bindAddress,
org.apache.hadoop.conf.Configuration conf,
@@ -556,7 +568,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testConnectionCloseWithOutstandingRPCs()">
<h3>testConnectionCloseWithOutstandingRPCs</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/ipc/AbstractTestIPC.html#line-400">testConnectionCloseWithOutstandingRPCs</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-406">testConnectionCloseWithOutstandingRPCs</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/InterruptedException.html" title="class or interface in java.lang" class="external-link">InterruptedException</a>,
<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="block">Tests that the connection closing is handled by the client with outstanding RPC calls</div>
@@ -570,7 +583,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testAsyncEcho()">
<h3>testAsyncEcho</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/ipc/AbstractTestIPC.html#line-420">testAsyncEcho</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-424">testAsyncEcho</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>Throws:</dt>
@@ -581,7 +595,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testAsyncRemoteError()">
<h3>testAsyncRemoteError</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/ipc/AbstractTestIPC.html#line-451">testAsyncRemoteError</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-455">testAsyncRemoteError</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>Throws:</dt>
@@ -592,7 +607,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testAsyncTimeout()">
<h3>testAsyncTimeout</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/ipc/AbstractTestIPC.html#line-476">testAsyncTimeout</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-478">testAsyncTimeout</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>Throws:</dt>
@@ -603,34 +619,34 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="waitSpan(org.hamcrest.Matcher)">
<h3>waitSpan</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">io.opentelemetry.sdk.trace.data.SpanData</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-515">waitSpan</a></span><wbr><span class="parameters">(org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData> matcher)</span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">io.opentelemetry.sdk.trace.data.SpanData</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-520">waitSpan</a></span><wbr><span class="parameters">(org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData> matcher)</span></div>
</section>
</li>
<li>
<section class="detail" id="buildIpcSpanName(java.lang.String,java.lang.String)">
<h3>buildIpcSpanName</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-522">buildIpcSpanName</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.c [...]
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-526">buildIpcSpanName</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.c [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> methodName)</span></div>
</section>
</li>
<li>
<section class="detail" id="buildIpcClientSpanMatcher(java.lang.String,java.lang.String)">
<h3>buildIpcClientSpanMatcher</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-526">buildIpcClientSpanMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface [...]
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-530">buildIpcClientSpanMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> methodName)</span></div>
</section>
</li>
<li>
<section class="detail" id="buildIpcServerSpanMatcher(java.lang.String,java.lang.String)">
<h3>buildIpcServerSpanMatcher</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-532">buildIpcServerSpanMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface [...]
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-536">buildIpcServerSpanMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> methodName)</span></div>
</section>
</li>
<li>
<section class="detail" id="buildIpcClientSpanAttributesMatcher(java.lang.String,java.lang.String,java.net.InetSocketAddress)">
<h3>buildIpcClientSpanAttributesMatcher</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-538">buildIpcClientSpanAttributesMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or [...]
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-542">buildIpcClientSpanAttributesMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> methodName,
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/InetSocketAddress.html" title="class or interface in java.net" class="external-link">InetSocketAddress</a> isa)</span></div>
</section>
@@ -638,20 +654,21 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="buildIpcServerSpanAttributesMatcher(java.lang.String,java.lang.String)">
<h3>buildIpcServerSpanAttributesMatcher</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-546">buildIpcServerSpanAttributesMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or [...]
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.hamcrest.Matcher<io.opentelemetry.sdk.trace.data.SpanData></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-550">buildIpcServerSpanAttributesMatcher</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or [...]
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> methodName)</span></div>
</section>
</li>
<li>
<section class="detail" id="assertRemoteSpan()">
<h3>assertRemoteSpan</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/ipc/AbstractTestIPC.html#line-552">assertRemoteSpan</a></span>()</div>
+<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/ipc/AbstractTestIPC.html#line-556">assertRemoteSpan</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="testTracingSuccessIpc()">
<h3>testTracingSuccessIpc</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/ipc/AbstractTestIPC.html#line-558">testTracingSuccessIpc</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-562">testTracingSuccessIpc</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<dl class="notes">
@@ -664,7 +681,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testTracingErrorIpc()">
<h3>testTracingErrorIpc</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/ipc/AbstractTestIPC.html#line-589">testTracingErrorIpc</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-593">testTracingErrorIpc</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>Throws:</dt>
@@ -675,19 +693,20 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="createBadAuthRpcClient(org.apache.hadoop.conf.Configuration)">
<h3>createBadAuthRpcClient</h3>
-<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-619">createBadAuthRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected abstract</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-623">createBadAuthRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
</section>
</li>
<li>
<section class="detail" id="doBadPreableHeaderCall(org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface)">
<h3>doBadPreableHeaderCall</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/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-621">doBadPreableHeaderCall</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.s [...]
+<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/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-625">doBadPreableHeaderCall</a></span><wbr><span class="parameters">(org.apache.hadoop.hbase.s [...]
</section>
</li>
<li>
<section class="detail" id="testBadPreambleHeader()">
<h3>testBadPreambleHeader</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/ipc/AbstractTestIPC.html#line-627">testBadPreambleHeader</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-631">testBadPreambleHeader</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>
@@ -698,7 +717,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testGetConnectionRegistry()">
<h3>testGetConnectionRegistry</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/ipc/AbstractTestIPC.html#line-657">testGetConnectionRegistry</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-661">testGetConnectionRegistry</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<div class="block">Testcase for getting connection registry information through connection preamble header, see
@@ -713,7 +733,8 @@ org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<li>
<section class="detail" id="testGetConnectionRegistryError()">
<h3>testGetConnectionRegistryError</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/ipc/AbstractTestIPC.html#line-687">testGetConnectionRegistryError</a></span>()
+<div class="member-signature"><span class="annotations">@TestTemplate
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html#line-691">testGetConnectionRegistryError</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>,
org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</span></div>
<div class="block">Test server does not support getting connection registry information through connection
diff --git a/testdevapidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html b/testdevapidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
index 783c31eb6cc..304e9c975c4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
@@ -52,7 +52,7 @@ loadScripts(document, 'script');</script>
</ul>
<ul class="sub-nav-list">
<li>Detail: </li>
-<li><a href="#field-detail">Field</a> | </li>
+<li>Field | </li>
<li><a href="#constructor-detail">Constr</a> | </li>
<li><a href="#method-detail">Method</a></li>
</ul>
@@ -79,7 +79,8 @@ loadScripts(document, 'script');</script>
</div>
<section class="class-description" id="class-description">
<hr>
-<div class="type-signature"><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-34">TestBlockingIPC</a></span>
+<div class="type-signature"><span class="annotations">@Tag("org.apache.hadoop.hbase.testclassification.RPCTests") @Tag("org.apache.hadoop.hbase.testclassification.MediumTests")
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-30">TestBlockingIPC</a></span>
<span class="extends-implements">extends <a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></span></div>
</section>
<section class="summary">
@@ -88,18 +89,9 @@ loadScripts(document, 'script');</script>
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
-<div class="caption"><span>Fields</span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><code><a href="#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-</div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.apache.hadoop.hbase.ipc.AbstractTestIPC">Fields inherited from class org.apache.hadoop.hbase.ipc.<a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></h3>
-<code><a href="AbstractTestIPC.html#CONF">CONF</a>, <a href="AbstractTestIPC.html#rpcServerImpl">rpcServerImpl</a>, <a href="AbstractTestIPC.html#traceRule">traceRule</a></code></div>
+<code><a href="AbstractTestIPC.html#CONF">CONF</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
@@ -110,7 +102,7 @@ loadScripts(document, 'script');</script>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">TestBlockingIPC</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.Class)" class="member-name-link">TestBlockingIPC</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl)</code></div>
<div class="col-last even-row-color"> </div>
</div>
</section>
@@ -138,8 +130,8 @@ loadScripts(document, 'script');</script>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected org.apache.hadoop.hbase.ipc.BlockingRpcClient</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#createRpcClientRTEDuringConnectionSetup(org.apache.hadoop.conf.Configuration)" class="member-name-link">createRpcClientRTEDuringConnectionSetup</a><wbr>(org.apache.hadoop.conf.Configuration conf)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>[]></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#data()" class="member-name-link">data</a>()</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html" title="class or interface in java.util.stream" class="external-link">Stream</a><org.junit.jupiter.params.provider.Arguments></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parameters()" class="member-name-link">parameters</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"> </div>
</div>
</div>
@@ -156,29 +148,15 @@ loadScripts(document, 'script');</script>
</section>
<section class="details">
<ul class="details-list">
-<!-- ============ FIELD DETAIL =========== -->
-<li>
-<section class="field-details" id="field-detail">
-<h2>Field Details</h2>
-<ul class="member-list">
-<li>
-<section class="detail" id="CLASS_RULE">
-<h3>CLASS_RULE</h3>
-<div class="member-signature"><span class="modifiers">public static final</span> <span class="return-type"><a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-38">CLASS_RULE</a></span></div>
-</section>
-</li>
-</ul>
-</section>
-</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="<init>()">
+<section class="detail" id="<init>(java.lang.Class)">
<h3>TestBlockingIPC</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-36">TestBlockingIPC</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-35">TestBlockingIPC</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl)</span></div>
</section>
</li>
</ul>
@@ -190,15 +168,15 @@ loadScripts(document, 'script');</script>
<h2>Method Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="data()">
-<h3>data</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>[]></span> <span class="element-name"><a href=". [...]
+<section class="detail" id="parameters()">
+<h3>parameters</h3>
+<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html" title="class or interface in java.util.stream" class="external-link">Stream</a><org.junit.jupiter.params.provider.Arguments></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-39">parameters</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="createRpcClientNoCodec(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClientNoCodec</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.BlockingRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-48">createRpcClientNoCodec</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.BlockingRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-43">createRpcClientNoCodec</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createRpcClientNoCodec(org.apache.hadoop.conf.Configuration)">createRpcClientNoCodec</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
@@ -208,7 +186,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcClient(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClient</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.BlockingRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-58">createRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.BlockingRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-53">createRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createRpcClient(org.apache.hadoop.conf.Configuration)">createRpcClient</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
@@ -218,7 +196,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcClientRTEDuringConnectionSetup(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClientRTEDuringConnectionSetup</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.BlockingRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-63">createRpcClientRTEDuringConnectionSetup</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.BlockingRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-58">createRpcClientRTEDuringConnectionSetup</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</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>
@@ -231,7 +209,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createBadAuthRpcClient(org.apache.hadoop.conf.Configuration)">
<h3>createBadAuthRpcClient</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-75">createBadAuthRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html#line-70">createBadAuthRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createBadAuthRpcClient(org.apache.hadoop.conf.Configuration)">createBadAuthRpcClient</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html b/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
index 0f8202ce6ae..637a1a22afb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
@@ -79,7 +79,8 @@ loadScripts(document, 'script');</script>
</div>
<section class="class-description" id="class-description">
<hr>
-<div class="type-signature"><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-43">TestNettyIPC</a></span>
+<div class="type-signature"><span class="annotations">@Tag("org.apache.hadoop.hbase.testclassification.RPCTests") @Tag("org.apache.hadoop.hbase.testclassification.MediumTests")
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-40">TestNettyIPC</a></span>
<span class="extends-implements">extends <a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></span></div>
</section>
<section class="summary">
@@ -93,22 +94,19 @@ loadScripts(document, 'script');</script>
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><code><a href="#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-first even-row-color"><code>private static org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup</code></div>
+<div class="col-second even-row-color"><code><a href="#EPOLL" class="member-name-link">EPOLL</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private static org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup</code></div>
-<div class="col-second odd-row-color"><code><a href="#EPOLL" class="member-name-link">EPOLL</a></code></div>
+<div class="col-first odd-row-color"><code>private <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second odd-row-color"><code><a href="#eventLoopType" class="member-name-link">eventLoopType</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second even-row-color"><code><a href="#eventLoopType" class="member-name-link">eventLoopType</a></code></div>
+<div class="col-first even-row-color"><code>private static org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup</code></div>
+<div class="col-second even-row-color"><code><a href="#NIO" class="member-name-link">NIO</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private static org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup</code></div>
-<div class="col-second odd-row-color"><code><a href="#NIO" class="member-name-link">NIO</a></code></div>
-<div class="col-last odd-row-color"> </div>
</div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.apache.hadoop.hbase.ipc.AbstractTestIPC">Fields inherited from class org.apache.hadoop.hbase.ipc.<a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></h3>
-<code><a href="AbstractTestIPC.html#CONF">CONF</a>, <a href="AbstractTestIPC.html#rpcServerImpl">rpcServerImpl</a>, <a href="AbstractTestIPC.html#traceRule">traceRule</a></code></div>
+<code><a href="AbstractTestIPC.html#CONF">CONF</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
@@ -119,7 +117,8 @@ loadScripts(document, 'script');</script>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">TestNettyIPC</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.Class,java.lang.String)" class="member-name-link">TestNettyIPC</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> eventLoopType)</code></div>
<div class="col-last even-row-color"> </div>
</div>
</section>
@@ -150,7 +149,7 @@ loadScripts(document, 'script');</script>
<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>private static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#getEventLoopTypes()" class="member-name-link">getEventLoopTypes</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"> </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>[]></code></div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html" title="class or interface in java.util.stream" class="external-link">Stream</a><org.junit.jupiter.params.provider.Arguments></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parameters()" class="member-name-link">parameters</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"> </div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private void</code></div>
@@ -183,27 +182,21 @@ loadScripts(document, 'script');</script>
<h2>Field Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="CLASS_RULE">
-<h3>CLASS_RULE</h3>
-<div class="member-signature"><span class="modifiers">public static final</span> <span class="return-type"><a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-47">CLASS_RULE</a></span></div>
-</section>
-</li>
-<li>
<section class="detail" id="eventLoopType">
<h3>eventLoopType</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-71">eventLoopType</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/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-64">eventLoopType</a></span></div>
</section>
</li>
<li>
<section class="detail" id="NIO">
<h3>NIO</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-74">NIO</a></span></div>
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-71">NIO</a></span></div>
</section>
</li>
<li>
<section class="detail" id="EPOLL">
<h3>EPOLL</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-76">EPOLL</a></span></div>
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-73">EPOLL</a></span></div>
</section>
</li>
</ul>
@@ -215,9 +208,10 @@ loadScripts(document, 'script');</script>
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="<init>()">
+<section class="detail" id="<init>(java.lang.Class,java.lang.String)">
<h3>TestNettyIPC</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-45">TestNettyIPC</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-66">TestNettyIPC</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl,
+ <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a> eventLoopType)</span></div>
</section>
</li>
</ul>
@@ -231,37 +225,39 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="getEventLoopTypes()">
<h3>getEventLoopTypes</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>></span> <span class="element-name"><a href=".. [...]
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>></span> <span class="element-name"><a href=".. [...]
</section>
</li>
<li>
<section class="detail" id="parameters()">
<h3>parameters</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>[]></span> <span class="element-name"><a href=". [...]
+<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html" title="class or interface in java.util.stream" class="external-link">Stream</a><org.junit.jupiter.params.provider.Arguments></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-55">parameters</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setUpBeforeClass()">
<h3>setUpBeforeClass</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-78">setUpBeforeClass</a></span>()</div>
+<div class="member-signature"><span class="annotations">@BeforeAll
+</span><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-75">setUpBeforeClass</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="tearDownAfterClass()">
<h3>tearDownAfterClass</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-86">tearDownAfterClass</a></span>()</div>
+<div class="member-signature"><span class="annotations">@AfterAll
+</span><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-83">tearDownAfterClass</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setConf(org.apache.hadoop.conf.Configuration)">
<h3>setConf</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/ipc/TestNettyIPC.html#line-96">setConf</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<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/ipc/TestNettyIPC.html#line-93">setConf</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
</section>
</li>
<li>
<section class="detail" id="createRpcClientNoCodec(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClientNoCodec</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.NettyRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-112">createRpcClientNoCodec</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.NettyRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-109">createRpcClientNoCodec</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createRpcClientNoCodec(org.apache.hadoop.conf.Configuration)">createRpcClientNoCodec</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
@@ -271,7 +267,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcClient(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClient</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.NettyRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-125">createRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.NettyRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-122">createRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createRpcClient(org.apache.hadoop.conf.Configuration)">createRpcClient</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
@@ -281,7 +277,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createRpcClientRTEDuringConnectionSetup(org.apache.hadoop.conf.Configuration)">
<h3>createRpcClientRTEDuringConnectionSetup</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.NettyRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-131">createRpcClientRTEDuringConnectionSetup</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.NettyRpcClient</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-128">createRpcClientRTEDuringConnectionSetup</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createRpcClientRTEDuringConnectionSetup(org.apache.hadoop.conf.Configuration)">createRpcClientRTEDuringConnectionSetup</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
@@ -291,7 +287,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="createBadAuthRpcClient(org.apache.hadoop.conf.Configuration)">
<h3>createBadAuthRpcClient</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-143">createBadAuthRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type">org.apache.hadoop.hbase.ipc.AbstractRpcClient<?></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html#line-140">createBadAuthRpcClient</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="AbstractTestIPC.html#createBadAuthRpcClient(org.apache.hadoop.conf.Configuration)">createBadAuthRpcClient</a></code> in class <code><a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></code></dd>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html b/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
index 2f581957222..7fecd9ea9ff 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
@@ -79,7 +79,8 @@ loadScripts(document, 'script');</script>
</div>
<section class="class-description" id="class-description">
<hr>
-<div class="type-signature"><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-56">TestNettyTlsIPC</a></span>
+<div class="type-signature"><span class="annotations">@Tag("org.apache.hadoop.hbase.testclassification.RPCTests") @Tag("org.apache.hadoop.hbase.testclassification.MediumTests")
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-55">TestNettyTlsIPC</a></span>
<span class="extends-implements">extends <a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></span></div>
</section>
<section class="summary">
@@ -93,40 +94,37 @@ loadScripts(document, 'script');</script>
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>boolean</code></div>
+<div class="col-first even-row-color"><code>private boolean</code></div>
<div class="col-second even-row-color"><code><a href="#acceptPlainText" class="member-name-link">acceptPlainText</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code><a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
+<div class="col-first odd-row-color"><code>private <a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
<div class="col-second odd-row-color"><code><a href="#caKeyType" class="member-name-link">caKeyType</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code><a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
+<div class="col-first even-row-color"><code>private <a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></code></div>
<div class="col-second even-row-color"><code><a href="#certKeyType" class="member-name-link">certKeyType</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><code><a href="#CLASS_RULE" class="member-name-link">CLASS_RULE</a></code></div>
+<div class="col-first odd-row-color"><code>private boolean</code></div>
+<div class="col-second odd-row-color"><code><a href="#clientTlsEnabled" class="member-name-link">clientTlsEnabled</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>boolean</code></div>
-<div class="col-second even-row-color"><code><a href="#clientTlsEnabled" class="member-name-link">clientTlsEnabled</a></code></div>
+<div class="col-first even-row-color"><code>private static org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig</code></div>
+<div class="col-second even-row-color"><code><a href="#EVENT_LOOP_GROUP_CONFIG" class="member-name-link">EVENT_LOOP_GROUP_CONFIG</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private static org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig</code></div>
-<div class="col-second odd-row-color"><code><a href="#EVENT_LOOP_GROUP_CONFIG" class="member-name-link">EVENT_LOOP_GROUP_CONFIG</a></code></div>
+<div class="col-first odd-row-color"><code>private char[]</code></div>
+<div class="col-second odd-row-color"><code><a href="#keyPassword" class="member-name-link">keyPassword</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>char[]</code></div>
-<div class="col-second even-row-color"><code><a href="#keyPassword" class="member-name-link">keyPassword</a></code></div>
+<div class="col-first even-row-color"><code>private static <a href="../io/crypto/tls/X509TestContextProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContextProvider</a></code></div>
+<div class="col-second even-row-color"><code><a href="#PROVIDER" class="member-name-link">PROVIDER</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private static <a href="../io/crypto/tls/X509TestContextProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContextProvider</a></code></div>
-<div class="col-second odd-row-color"><code><a href="#PROVIDER" class="member-name-link">PROVIDER</a></code></div>
+<div class="col-first odd-row-color"><code>private static final <a href="../HBaseCommonTestingUtil.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtil</a></code></div>
+<div class="col-second odd-row-color"><code><a href="#UTIL" class="member-name-link">UTIL</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>private static final <a href="../HBaseCommonTestingUtil.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtil</a></code></div>
-<div class="col-second even-row-color"><code><a href="#UTIL" class="member-name-link">UTIL</a></code></div>
+<div class="col-first even-row-color"><code>private <a href="../io/crypto/tls/X509TestContext.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContext</a></code></div>
+<div class="col-second even-row-color"><code><a href="#x509TestContext" class="member-name-link">x509TestContext</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private <a href="../io/crypto/tls/X509TestContext.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContext</a></code></div>
-<div class="col-second odd-row-color"><code><a href="#x509TestContext" class="member-name-link">x509TestContext</a></code></div>
-<div class="col-last odd-row-color"> </div>
</div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.apache.hadoop.hbase.ipc.AbstractTestIPC">Fields inherited from class org.apache.hadoop.hbase.ipc.<a href="AbstractTestIPC.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC</a></h3>
-<code><a href="AbstractTestIPC.html#CONF">CONF</a>, <a href="AbstractTestIPC.html#rpcServerImpl">rpcServerImpl</a>, <a href="AbstractTestIPC.html#traceRule">traceRule</a></code></div>
+<code><a href="AbstractTestIPC.html#CONF">CONF</a></code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
@@ -137,7 +135,12 @@ loadScripts(document, 'script');</script>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
-<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E()" class="member-name-link">TestNettyTlsIPC</a>()</code></div>
+<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.Class,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,char%5B%5D,boolean,boolean)" class="member-name-link">TestNettyTlsIPC</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer>&nb [...]
+ <a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a> caKeyType,
+ <a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a> certKeyType,
+ char[] keyPassword,
+ boolean acceptPlainText,
+ boolean clientTlsEnabled)</code></div>
<div class="col-last even-row-color"> </div>
</div>
</section>
@@ -180,8 +183,8 @@ loadScripts(document, 'script');</script>
org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.hbase.ipc.RpcScheduler scheduler)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>[]></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#data()" class="member-name-link">data</a>()</code></div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html" title="class or interface in java.util.stream" class="external-link">Stream</a><org.junit.jupiter.params.provider.Arguments></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parameters()" class="member-name-link">parameters</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"> </div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setUp()" class="member-name-link">setUp</a>()</code></div>
@@ -216,63 +219,57 @@ loadScripts(document, 'script');</script>
<h2>Field Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="CLASS_RULE">
-<h3>CLASS_RULE</h3>
-<div class="member-signature"><span class="modifiers">public static final</span> <span class="return-type"><a href="../HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-60">CLASS_RULE</a></span></div>
-</section>
-</li>
-<li>
<section class="detail" id="UTIL">
<h3>UTIL</h3>
-<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type"><a href="../HBaseCommonTestingUtil.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtil</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-64">UTIL</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span> <span class="return-type"><a href="../HBaseCommonTestingUtil.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtil</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-61">UTIL</a></span></div>
</section>
</li>
<li>
<section class="detail" id="PROVIDER">
<h3>PROVIDER</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type"><a href="../io/crypto/tls/X509TestContextProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContextProvider</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-66">PROVIDER</a></span></div>
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type"><a href="../io/crypto/tls/X509TestContextProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContextProvider</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-63">PROVIDER</a></span></div>
</section>
</li>
<li>
<section class="detail" id="EVENT_LOOP_GROUP_CONFIG">
<h3>EVENT_LOOP_GROUP_CONFIG</h3>
-<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-68">EVENT_LOOP_GROUP_CONFIG</a></span></div>
+<div class="member-signature"><span class="modifiers">private static</span> <span class="return-type">org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-65">EVENT_LOOP_GROUP_CONFIG</a></span></div>
</section>
</li>
<li>
<section class="detail" id="caKeyType">
<h3>caKeyType</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-70">caKeyType</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-67">caKeyType</a></span></div>
</section>
</li>
<li>
<section class="detail" id="certKeyType">
<h3>certKeyType</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-73">certKeyType</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-69">certKeyType</a></span></div>
</section>
</li>
<li>
<section class="detail" id="keyPassword">
<h3>keyPassword</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">char[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-76">keyPassword</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">char[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-71">keyPassword</a></span></div>
</section>
</li>
<li>
<section class="detail" id="acceptPlainText">
<h3>acceptPlainText</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-79">acceptPlainText</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/ipc/TestNettyTlsIPC.html#line-73">acceptPlainText</a></span></div>
</section>
</li>
<li>
<section class="detail" id="clientTlsEnabled">
<h3>clientTlsEnabled</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-82">clientTlsEnabled</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/ipc/TestNettyTlsIPC.html#line-75">clientTlsEnabled</a></span></div>
</section>
</li>
<li>
<section class="detail" id="x509TestContext">
<h3>x509TestContext</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="../io/crypto/tls/X509TestContext.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContext</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-85">x509TestContext</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="../io/crypto/tls/X509TestContext.html" title="class in org.apache.hadoop.hbase.io.crypto.tls">X509TestContext</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-88">x509TestContext</a></span></div>
</section>
</li>
</ul>
@@ -284,9 +281,14 @@ loadScripts(document, 'script');</script>
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="<init>()">
+<section class="detail" id="<init>(java.lang.Class,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,org.apache.hadoop.hbase.io.crypto.tls.X509KeyType,char[],boolean,boolean)">
<h3>TestNettyTlsIPC</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-58">TestNettyTlsIPC</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-77">TestNettyTlsIPC</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html" title="class or interface in java.lang" class="external-link">Class</a><? extends org.apache.hadoop.hbase.ipc.RpcServer> rpcServerImpl,
+ <a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a> caKeyType,
+ <a href="../io/crypto/tls/X509KeyType.html" title="enum class in org.apache.hadoop.hbase.io.crypto.tls">X509KeyType</a> certKeyType,
+ char[] keyPassword,
+ boolean acceptPlainText,
+ boolean clientTlsEnabled)</span></div>
</section>
</li>
</ul>
@@ -298,15 +300,16 @@ loadScripts(document, 'script');</script>
<h2>Method Details</h2>
<ul class="member-list">
<li>
-<section class="detail" id="data()">
-<h3>data</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>[]></span> <span class="element-name"><a href=". [...]
+<section class="detail" id="parameters()">
+<h3>parameters</h3>
+<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html" title="class or interface in java.util.stream" class="external-link">Stream</a><org.junit.jupiter.params.provider.Arguments></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-91">parameters</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="setUpBeforeClass()">
<h3>setUpBeforeClass</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-111">setUpBeforeClass</a></span>()
+<div class="member-signature"><span class="annotations">@BeforeAll
+</span><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-111">setUpBeforeClass</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>Throws:</dt>
@@ -317,7 +320,8 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="tearDownAfterClass()">
<h3>tearDownAfterClass</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-124">tearDownAfterClass</a></span>()
+<div class="member-signature"><span class="annotations">@AfterAll
+</span><span class="modifiers">public static</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-124">tearDownAfterClass</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/InterruptedException.html" title="class or interface in java.lang" class="external-link">InterruptedException</a></span></div>
<dl class="notes">
<dt>Throws:</dt>
@@ -328,7 +332,8 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="setUp()">
<h3>setUp</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/ipc/TestNettyTlsIPC.html#line-131">setUp</a></span>()
+<div class="member-signature"><span class="annotations">@BeforeEach
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-131">setUp</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>Throws:</dt>
@@ -339,7 +344,8 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="tearDown()">
<h3>tearDown</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/ipc/TestNettyTlsIPC.html#line-139">tearDown</a></span>()</div>
+<div class="member-signature"><span class="annotations">@AfterEach
+</span><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html#line-139">tearDown</a></span>()</div>
</section>
</li>
<li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/package-use.html
index 00b36ee2349..f147ca09214 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-use.html
@@ -1435,12 +1435,16 @@ loadScripts(document, 'script');</script>
<div class="col-last odd-row-color">
<div class="block">Common helpers for testing HBase that do not depend on specific server/etc.</div>
</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.ipc">HBaseTestingUtil</a></div>
+<div class="col-first even-row-color"><a href="class-use/HBaseParameterizedTestTemplate.html#org.apache.hadoop.hbase.ipc">HBaseParameterizedTestTemplate</a></div>
<div class="col-last even-row-color">
-<div class="block">Facility for testing HBase.</div>
+<div class="block">The annotation for running JUnit4 like parameterized tests with JUnit5.</div>
</div>
-<div class="col-first odd-row-color"><a href="class-use/TableNameTestRule.html#org.apache.hadoop.hbase.ipc">TableNameTestRule</a></div>
+<div class="col-first odd-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.ipc">HBaseTestingUtil</a></div>
<div class="col-last odd-row-color">
+<div class="block">Facility for testing HBase.</div>
+</div>
+<div class="col-first even-row-color"><a href="class-use/TableNameTestRule.html#org.apache.hadoop.hbase.ipc">TableNameTestRule</a></div>
+<div class="col-last even-row-color">
<div class="block">Returns a <code>TableName</code> based on currently running test method name.</div>
</div>
</div>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html
index 9b5e4e8eeab..7bfeffa53f4 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html
@@ -40,691 +40,695 @@
<span class="source-line-no">027</span><span id="line-27">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.SERVICE;</span>
<span class="source-line-no">028</span><span id="line-28">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newBlockingStub;</span>
<span class="source-line-no">029</span><span id="line-29">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newStub;</span>
-<span class="source-line-no">030</span><span id="line-30">import static org.hamcrest.MatcherAssert.assertThat;</span>
-<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.Matchers.allOf;</span>
-<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.containsString;</span>
-<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.everyItem;</span>
-<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
-<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.hasItem;</span>
-<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.instanceOf;</span>
-<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.startsWith;</span>
-<span class="source-line-no">038</span><span id="line-38">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">039</span><span id="line-39">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">040</span><span id="line-40">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">041</span><span id="line-41">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">042</span><span id="line-42">import static org.junit.Assert.assertThrows;</span>
-<span class="source-line-no">043</span><span id="line-43">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">044</span><span id="line-44">import static org.junit.Assert.fail;</span>
-<span class="source-line-no">045</span><span id="line-45">import static org.mockito.ArgumentMatchers.any;</span>
-<span class="source-line-no">046</span><span id="line-46">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">047</span><span id="line-47">import static org.mockito.Mockito.spy;</span>
-<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.verify;</span>
-<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">050</span><span id="line-50">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
-<span class="source-line-no">051</span><span id="line-51"></span>
-<span class="source-line-no">052</span><span id="line-52">import io.opentelemetry.api.common.AttributeKey;</span>
-<span class="source-line-no">053</span><span id="line-53">import io.opentelemetry.api.trace.SpanKind;</span>
-<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.trace.StatusCode;</span>
-<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule;</span>
-<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.sdk.trace.data.SpanData;</span>
-<span class="source-line-no">057</span><span id="line-57">import java.io.IOException;</span>
-<span class="source-line-no">058</span><span id="line-58">import java.net.InetSocketAddress;</span>
-<span class="source-line-no">059</span><span id="line-59">import java.nio.channels.SocketChannel;</span>
-<span class="source-line-no">060</span><span id="line-60">import java.time.Duration;</span>
-<span class="source-line-no">061</span><span id="line-61">import java.util.ArrayList;</span>
-<span class="source-line-no">062</span><span id="line-62">import java.util.Collections;</span>
-<span class="source-line-no">063</span><span id="line-63">import java.util.List;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.CellScanner;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.HBaseServerBase;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.KeyValue;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.MatcherPredicate;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.Server;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Waiter;</span>
-<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
-<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.security.User;</span>
-<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.io.compress.GzipCodec;</span>
-<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.ipc.RemoteException;</span>
-<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.util.StringUtils;</span>
-<span class="source-line-no">084</span><span id="line-84">import org.hamcrest.Matcher;</span>
-<span class="source-line-no">085</span><span id="line-85">import org.junit.Before;</span>
-<span class="source-line-no">086</span><span id="line-86">import org.junit.Rule;</span>
-<span class="source-line-no">087</span><span id="line-87">import org.junit.Test;</span>
-<span class="source-line-no">088</span><span id="line-88">import org.junit.runners.Parameterized.Parameter;</span>
-<span class="source-line-no">089</span><span id="line-89">import org.slf4j.Logger;</span>
-<span class="source-line-no">090</span><span id="line-90">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
-<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
-<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
-<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
-<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
-<span class="source-line-no">097</span><span id="line-97"></span>
-<span class="source-line-no">098</span><span id="line-98">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
-<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
-<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
-<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
-<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
-<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
-<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
-<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
-<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
-<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
-<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110">/**</span>
-<span class="source-line-no">111</span><span id="line-111"> * Some basic ipc tests.</span>
-<span class="source-line-no">112</span><span id="line-112"> */</span>
-<span class="source-line-no">113</span><span id="line-113">public abstract class AbstractTestIPC {</span>
-<span class="source-line-no">114</span><span id="line-114"></span>
-<span class="source-line-no">115</span><span id="line-115"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
-<span class="source-line-no">118</span><span id="line-118"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> protected RpcServer createRpcServer(Server server, String name,</span>
-<span class="source-line-no">123</span><span id="line-123"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
-<span class="source-line-no">124</span><span id="line-124"> RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
-<span class="source-line-no">129</span><span id="line-129"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">130</span><span id="line-130"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> @Rule</span>
-<span class="source-line-no">136</span><span id="line-136"> public OpenTelemetryRule traceRule = OpenTelemetryRule.create();</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Parameter(0)</span>
-<span class="source-line-no">139</span><span id="line-139"> public Class<? extends RpcServer> rpcServerImpl;</span>
+<span class="source-line-no">030</span><span id="line-30">import static org.awaitility.Awaitility.await;</span>
+<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.MatcherAssert.assertThat;</span>
+<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.allOf;</span>
+<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.containsString;</span>
+<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.everyItem;</span>
+<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
+<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.hasItem;</span>
+<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.instanceOf;</span>
+<span class="source-line-no">038</span><span id="line-38">import static org.hamcrest.Matchers.lessThan;</span>
+<span class="source-line-no">039</span><span id="line-39">import static org.hamcrest.Matchers.startsWith;</span>
+<span class="source-line-no">040</span><span id="line-40">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">041</span><span id="line-41">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">042</span><span id="line-42">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">043</span><span id="line-43">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">044</span><span id="line-44">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">045</span><span id="line-45">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">046</span><span id="line-46">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">047</span><span id="line-47">import static org.mockito.ArgumentMatchers.any;</span>
+<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.spy;</span>
+<span class="source-line-no">050</span><span id="line-50">import static org.mockito.Mockito.verify;</span>
+<span class="source-line-no">051</span><span id="line-51">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">052</span><span id="line-52">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.common.AttributeKey;</span>
+<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.api.trace.SpanKind;</span>
+<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.api.trace.StatusCode;</span>
+<span class="source-line-no">057</span><span id="line-57">import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension;</span>
+<span class="source-line-no">058</span><span id="line-58">import io.opentelemetry.sdk.trace.data.SpanData;</span>
+<span class="source-line-no">059</span><span id="line-59">import java.io.IOException;</span>
+<span class="source-line-no">060</span><span id="line-60">import java.net.InetSocketAddress;</span>
+<span class="source-line-no">061</span><span id="line-61">import java.nio.channels.SocketChannel;</span>
+<span class="source-line-no">062</span><span id="line-62">import java.time.Duration;</span>
+<span class="source-line-no">063</span><span id="line-63">import java.util.ArrayList;</span>
+<span class="source-line-no">064</span><span id="line-64">import java.util.Collections;</span>
+<span class="source-line-no">065</span><span id="line-65">import java.util.List;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.CellScanner;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.ExtendedCell;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.HBaseServerBase;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.KeyValue;</span>
+<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.MatcherPredicate;</span>
+<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
+<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Server;</span>
+<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.Waiter;</span>
+<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
+<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.security.User;</span>
+<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.io.compress.GzipCodec;</span>
+<span class="source-line-no">084</span><span id="line-84">import org.apache.hadoop.ipc.RemoteException;</span>
+<span class="source-line-no">085</span><span id="line-85">import org.apache.hadoop.util.StringUtils;</span>
+<span class="source-line-no">086</span><span id="line-86">import org.hamcrest.Matcher;</span>
+<span class="source-line-no">087</span><span id="line-87">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">088</span><span id="line-88">import org.junit.jupiter.api.TestTemplate;</span>
+<span class="source-line-no">089</span><span id="line-89">import org.junit.jupiter.api.extension.RegisterExtension;</span>
+<span class="source-line-no">090</span><span id="line-90">import org.slf4j.Logger;</span>
+<span class="source-line-no">091</span><span id="line-91">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
+<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
+<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
+<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
+<span class="source-line-no">097</span><span id="line-97">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
+<span class="source-line-no">098</span><span id="line-98"></span>
+<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
+<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
+<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
+<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
+<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
+<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
+<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
+<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
+<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
+<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
+<span class="source-line-no">109</span><span id="line-109">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111">/**</span>
+<span class="source-line-no">112</span><span id="line-112"> * Some basic ipc tests.</span>
+<span class="source-line-no">113</span><span id="line-113"> */</span>
+<span class="source-line-no">114</span><span id="line-114">public abstract class AbstractTestIPC {</span>
+<span class="source-line-no">115</span><span id="line-115"></span>
+<span class="source-line-no">116</span><span id="line-116"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
+<span class="source-line-no">119</span><span id="line-119"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
+<span class="source-line-no">120</span><span id="line-120"></span>
+<span class="source-line-no">121</span><span id="line-121"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">122</span><span id="line-122"></span>
+<span class="source-line-no">123</span><span id="line-123"> protected RpcServer createRpcServer(Server server, String name,</span>
+<span class="source-line-no">124</span><span id="line-124"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
+<span class="source-line-no">125</span><span id="line-125"> RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">126</span><span id="line-126"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">127</span><span id="line-127"> }</span>
+<span class="source-line-no">128</span><span id="line-128"></span>
+<span class="source-line-no">129</span><span id="line-129"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
+<span class="source-line-no">130</span><span id="line-130"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">131</span><span id="line-131"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"></span>
+<span class="source-line-no">134</span><span id="line-134"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> @RegisterExtension</span>
+<span class="source-line-no">137</span><span id="line-137"> private static final OpenTelemetryExtension OTEL_EXT = OpenTelemetryExtension.create();</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139"> private Class<? extends RpcServer> rpcServerImpl;</span>
<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141"> @Before</span>
-<span class="source-line-no">142</span><span id="line-142"> public void setUpBeforeTest() {</span>
-<span class="source-line-no">143</span><span id="line-143"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
-<span class="source-line-no">144</span><span id="line-144"> }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> /**</span>
-<span class="source-line-no">147</span><span id="line-147"> * Ensure we do not HAVE TO HAVE a codec.</span>
-<span class="source-line-no">148</span><span id="line-148"> */</span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testNoCodec() throws IOException, ServiceException {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">153</span><span id="line-153"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">154</span><span id="line-154"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">155</span><span id="line-155"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
-<span class="source-line-no">156</span><span id="line-156"> rpcServer.start();</span>
-<span class="source-line-no">157</span><span id="line-157"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">158</span><span id="line-158"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">159</span><span id="line-159"> String message = "hello";</span>
-<span class="source-line-no">160</span><span id="line-160"> assertEquals(message,</span>
-<span class="source-line-no">161</span><span id="line-161"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">162</span><span id="line-162"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">163</span><span id="line-163"> } finally {</span>
-<span class="source-line-no">164</span><span id="line-164"> rpcServer.stop();</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"> }</span>
-<span class="source-line-no">167</span><span id="line-167"></span>
-<span class="source-line-no">168</span><span id="line-168"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
-<span class="source-line-no">169</span><span id="line-169"></span>
-<span class="source-line-no">170</span><span id="line-170"> /**</span>
-<span class="source-line-no">171</span><span id="line-171"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
-<span class="source-line-no">172</span><span id="line-172"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
-<span class="source-line-no">173</span><span id="line-173"> * confirm that compression is happening down in the client and server).</span>
-<span class="source-line-no">174</span><span id="line-174"> */</span>
-<span class="source-line-no">175</span><span id="line-175"> @Test</span>
-<span class="source-line-no">176</span><span id="line-176"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
-<span class="source-line-no">177</span><span id="line-177"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">178</span><span id="line-178"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
-<span class="source-line-no">179</span><span id="line-179"> List<ExtendedCell> cells = new ArrayList<>();</span>
-<span class="source-line-no">180</span><span id="line-180"> int count = 3;</span>
-<span class="source-line-no">181</span><span id="line-181"> for (int i = 0; i < count; i++) {</span>
-<span class="source-line-no">182</span><span id="line-182"> cells.add(CELL);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">185</span><span id="line-185"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">186</span><span id="line-186"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">187</span><span id="line-187"></span>
-<span class="source-line-no">188</span><span id="line-188"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">189</span><span id="line-189"> rpcServer.start();</span>
-<span class="source-line-no">190</span><span id="line-190"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">191</span><span id="line-191"> HBaseRpcController pcrc =</span>
-<span class="source-line-no">192</span><span id="line-192"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
-<span class="source-line-no">193</span><span id="line-193"> String message = "hello";</span>
-<span class="source-line-no">194</span><span id="line-194"> assertEquals(message,</span>
-<span class="source-line-no">195</span><span id="line-195"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">196</span><span id="line-196"> int index = 0;</span>
-<span class="source-line-no">197</span><span id="line-197"> CellScanner cellScanner = pcrc.cellScanner();</span>
-<span class="source-line-no">198</span><span id="line-198"> assertNotNull(cellScanner);</span>
-<span class="source-line-no">199</span><span id="line-199"> while (cellScanner.advance()) {</span>
-<span class="source-line-no">200</span><span id="line-200"> assertEquals(CELL, cellScanner.current());</span>
-<span class="source-line-no">201</span><span id="line-201"> index++;</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> assertEquals(count, index);</span>
-<span class="source-line-no">204</span><span id="line-204"> } finally {</span>
-<span class="source-line-no">205</span><span id="line-205"> rpcServer.stop();</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"> protected abstract AbstractRpcClient<?></span>
-<span class="source-line-no">210</span><span id="line-210"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> @Test</span>
-<span class="source-line-no">213</span><span id="line-213"> public void testRTEDuringConnectionSetup() throws Exception {</span>
-<span class="source-line-no">214</span><span id="line-214"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">215</span><span id="line-215"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">216</span><span id="line-216"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">217</span><span id="line-217"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">218</span><span id="line-218"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
-<span class="source-line-no">219</span><span id="line-219"> rpcServer.start();</span>
-<span class="source-line-no">220</span><span id="line-220"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">221</span><span id="line-221"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">222</span><span id="line-222"> fail("Expected an exception to have been thrown!");</span>
-<span class="source-line-no">223</span><span id="line-223"> } catch (Exception e) {</span>
-<span class="source-line-no">224</span><span id="line-224"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">225</span><span id="line-225"> assertTrue(e.toString(), StringUtils.stringifyException(e).contains("Injected fault"));</span>
-<span class="source-line-no">226</span><span id="line-226"> } finally {</span>
-<span class="source-line-no">227</span><span id="line-227"> rpcServer.stop();</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> /**</span>
-<span class="source-line-no">232</span><span id="line-232"> * Tests that the rpc scheduler is called when requests arrive.</span>
-<span class="source-line-no">233</span><span id="line-233"> */</span>
-<span class="source-line-no">234</span><span id="line-234"> @Test</span>
-<span class="source-line-no">235</span><span id="line-235"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
-<span class="source-line-no">236</span><span id="line-236"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">237</span><span id="line-237"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">238</span><span id="line-238"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">239</span><span id="line-239"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">240</span><span id="line-240"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
-<span class="source-line-no">241</span><span id="line-241"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
-<span class="source-line-no">242</span><span id="line-242"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">243</span><span id="line-243"> rpcServer.start();</span>
-<span class="source-line-no">244</span><span id="line-244"> verify(scheduler).start();</span>
-<span class="source-line-no">245</span><span id="line-245"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">246</span><span id="line-246"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">247</span><span id="line-247"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">248</span><span id="line-248"> stub.echo(null, param);</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
-<span class="source-line-no">251</span><span id="line-251"> } finally {</span>
-<span class="source-line-no">252</span><span id="line-252"> rpcServer.stop();</span>
-<span class="source-line-no">253</span><span id="line-253"> verify(scheduler).stop();</span>
-<span class="source-line-no">254</span><span id="line-254"> }</span>
-<span class="source-line-no">255</span><span id="line-255"> }</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
-<span class="source-line-no">258</span><span id="line-258"> @Test</span>
-<span class="source-line-no">259</span><span id="line-259"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
-<span class="source-line-no">260</span><span id="line-260"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">261</span><span id="line-261"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
-<span class="source-line-no">262</span><span id="line-262"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">263</span><span id="line-263"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">264</span><span id="line-264"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
-<span class="source-line-no">265</span><span id="line-265"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">266</span><span id="line-266"> rpcServer.start();</span>
-<span class="source-line-no">267</span><span id="line-267"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">268</span><span id="line-268"> StringBuilder message = new StringBuilder(1200);</span>
-<span class="source-line-no">269</span><span id="line-269"> for (int i = 0; i < 200; i++) {</span>
-<span class="source-line-no">270</span><span id="line-270"> message.append("hello.");</span>
-<span class="source-line-no">271</span><span id="line-271"> }</span>
-<span class="source-line-no">272</span><span id="line-272"> // set total RPC size bigger than 100 bytes</span>
-<span class="source-line-no">273</span><span id="line-273"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
-<span class="source-line-no">274</span><span id="line-274"> stub.echo(new HBaseRpcControllerImpl(</span>
-<span class="source-line-no">275</span><span id="line-275"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
-<span class="source-line-no">276</span><span id="line-276"> fail("RPC should have failed because it exceeds max request size");</span>
-<span class="source-line-no">277</span><span id="line-277"> } catch (ServiceException e) {</span>
-<span class="source-line-no">278</span><span id="line-278"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">279</span><span id="line-279"> assertTrue(e.toString(),</span>
-<span class="source-line-no">280</span><span id="line-280"> StringUtils.stringifyException(e).contains("RequestTooBigException"));</span>
-<span class="source-line-no">281</span><span id="line-281"> } finally {</span>
-<span class="source-line-no">282</span><span id="line-282"> rpcServer.stop();</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"></span>
-<span class="source-line-no">286</span><span id="line-286"> /**</span>
-<span class="source-line-no">287</span><span id="line-287"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
-<span class="source-line-no">288</span><span id="line-288"> * remoteAddress set to its Call Object</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> @Test</span>
-<span class="source-line-no">291</span><span id="line-291"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
-<span class="source-line-no">292</span><span id="line-292"> throws IOException, ServiceException {</span>
-<span class="source-line-no">293</span><span id="line-293"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">294</span><span id="line-294"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">295</span><span id="line-295"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">296</span><span id="line-296"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">297</span><span id="line-297"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
-<span class="source-line-no">298</span><span id="line-298"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">299</span><span id="line-299"> rpcServer.start();</span>
-<span class="source-line-no">300</span><span id="line-300"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">301</span><span id="line-301"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
-<span class="source-line-no">302</span><span id="line-302"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
-<span class="source-line-no">303</span><span id="line-303"> } finally {</span>
-<span class="source-line-no">304</span><span id="line-304"> rpcServer.stop();</span>
-<span class="source-line-no">305</span><span id="line-305"> }</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"></span>
-<span class="source-line-no">308</span><span id="line-308"> @Test</span>
-<span class="source-line-no">309</span><span id="line-309"> public void testRemoteError() throws IOException, ServiceException {</span>
-<span class="source-line-no">310</span><span id="line-310"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">311</span><span id="line-311"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">312</span><span id="line-312"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">313</span><span id="line-313"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">314</span><span id="line-314"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">315</span><span id="line-315"> rpcServer.start();</span>
-<span class="source-line-no">316</span><span id="line-316"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">317</span><span id="line-317"> stub.error(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">318</span><span id="line-318"> } catch (ServiceException e) {</span>
-<span class="source-line-no">319</span><span id="line-319"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">320</span><span id="line-320"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">321</span><span id="line-321"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">322</span><span id="line-322"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">323</span><span id="line-323"> } finally {</span>
-<span class="source-line-no">324</span><span id="line-324"> rpcServer.stop();</span>
-<span class="source-line-no">325</span><span id="line-325"> }</span>
-<span class="source-line-no">326</span><span id="line-326"> }</span>
-<span class="source-line-no">327</span><span id="line-327"></span>
-<span class="source-line-no">328</span><span id="line-328"> @Test</span>
-<span class="source-line-no">329</span><span id="line-329"> public void testTimeout() throws IOException {</span>
-<span class="source-line-no">330</span><span id="line-330"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">331</span><span id="line-331"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">332</span><span id="line-332"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">333</span><span id="line-333"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">334</span><span id="line-334"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">335</span><span id="line-335"> rpcServer.start();</span>
-<span class="source-line-no">336</span><span id="line-336"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">337</span><span id="line-337"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">338</span><span id="line-338"> int ms = 1000;</span>
-<span class="source-line-no">339</span><span id="line-339"> int timeout = 100;</span>
-<span class="source-line-no">340</span><span id="line-340"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">341</span><span id="line-341"> pcrc.reset();</span>
-<span class="source-line-no">342</span><span id="line-342"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">343</span><span id="line-343"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">344</span><span id="line-344"> try {</span>
-<span class="source-line-no">345</span><span id="line-345"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build());</span>
-<span class="source-line-no">346</span><span id="line-346"> } catch (ServiceException e) {</span>
-<span class="source-line-no">347</span><span id="line-347"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">348</span><span id="line-348"> // expected</span>
-<span class="source-line-no">349</span><span id="line-349"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">350</span><span id="line-350"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">352</span><span id="line-352"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">353</span><span id="line-353"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">354</span><span id="line-354"> }</span>
-<span class="source-line-no">355</span><span id="line-355"> }</span>
-<span class="source-line-no">356</span><span id="line-356"> } finally {</span>
-<span class="source-line-no">357</span><span id="line-357"> rpcServer.stop();</span>
-<span class="source-line-no">358</span><span id="line-358"> }</span>
-<span class="source-line-no">359</span><span id="line-359"> }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
-<span class="source-line-no">362</span><span id="line-362"></span>
-<span class="source-line-no">363</span><span id="line-363"> FailingSimpleRpcServer(Server server, String name,</span>
-<span class="source-line-no">364</span><span id="line-364"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
-<span class="source-line-no">365</span><span id="line-365"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">366</span><span id="line-366"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
-<span class="source-line-no">367</span><span id="line-367"> }</span>
+<span class="source-line-no">141</span><span id="line-141"> protected AbstractTestIPC(Class<? extends RpcServer> rpcServerImpl) {</span>
+<span class="source-line-no">142</span><span id="line-142"> this.rpcServerImpl = rpcServerImpl;</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"> @BeforeEach</span>
+<span class="source-line-no">146</span><span id="line-146"> public void setUpBeforeTest() {</span>
+<span class="source-line-no">147</span><span id="line-147"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> }</span>
+<span class="source-line-no">149</span><span id="line-149"></span>
+<span class="source-line-no">150</span><span id="line-150"> /**</span>
+<span class="source-line-no">151</span><span id="line-151"> * Ensure we do not HAVE TO HAVE a codec.</span>
+<span class="source-line-no">152</span><span id="line-152"> */</span>
+<span class="source-line-no">153</span><span id="line-153"> @TestTemplate</span>
+<span class="source-line-no">154</span><span id="line-154"> public void testNoCodec() throws IOException, ServiceException {</span>
+<span class="source-line-no">155</span><span id="line-155"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">156</span><span id="line-156"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">157</span><span id="line-157"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">158</span><span id="line-158"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">159</span><span id="line-159"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
+<span class="source-line-no">160</span><span id="line-160"> rpcServer.start();</span>
+<span class="source-line-no">161</span><span id="line-161"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">162</span><span id="line-162"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">163</span><span id="line-163"> String message = "hello";</span>
+<span class="source-line-no">164</span><span id="line-164"> assertEquals(message,</span>
+<span class="source-line-no">165</span><span id="line-165"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">166</span><span id="line-166"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">167</span><span id="line-167"> } finally {</span>
+<span class="source-line-no">168</span><span id="line-168"> rpcServer.stop();</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"> }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> /**</span>
+<span class="source-line-no">175</span><span id="line-175"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
+<span class="source-line-no">176</span><span id="line-176"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
+<span class="source-line-no">177</span><span id="line-177"> * confirm that compression is happening down in the client and server).</span>
+<span class="source-line-no">178</span><span id="line-178"> */</span>
+<span class="source-line-no">179</span><span id="line-179"> @TestTemplate</span>
+<span class="source-line-no">180</span><span id="line-180"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
+<span class="source-line-no">181</span><span id="line-181"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">182</span><span id="line-182"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
+<span class="source-line-no">183</span><span id="line-183"> List<ExtendedCell> cells = new ArrayList<>();</span>
+<span class="source-line-no">184</span><span id="line-184"> int count = 3;</span>
+<span class="source-line-no">185</span><span id="line-185"> for (int i = 0; i < count; i++) {</span>
+<span class="source-line-no">186</span><span id="line-186"> cells.add(CELL);</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">189</span><span id="line-189"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">190</span><span id="line-190"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 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"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">193</span><span id="line-193"> rpcServer.start();</span>
+<span class="source-line-no">194</span><span id="line-194"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">195</span><span id="line-195"> HBaseRpcController pcrc =</span>
+<span class="source-line-no">196</span><span id="line-196"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
+<span class="source-line-no">197</span><span id="line-197"> String message = "hello";</span>
+<span class="source-line-no">198</span><span id="line-198"> assertEquals(message,</span>
+<span class="source-line-no">199</span><span id="line-199"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">200</span><span id="line-200"> int index = 0;</span>
+<span class="source-line-no">201</span><span id="line-201"> CellScanner cellScanner = pcrc.cellScanner();</span>
+<span class="source-line-no">202</span><span id="line-202"> assertNotNull(cellScanner);</span>
+<span class="source-line-no">203</span><span id="line-203"> while (cellScanner.advance()) {</span>
+<span class="source-line-no">204</span><span id="line-204"> assertEquals(CELL, cellScanner.current());</span>
+<span class="source-line-no">205</span><span id="line-205"> index++;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"> assertEquals(count, index);</span>
+<span class="source-line-no">208</span><span id="line-208"> } finally {</span>
+<span class="source-line-no">209</span><span id="line-209"> rpcServer.stop();</span>
+<span class="source-line-no">210</span><span id="line-210"> }</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"> protected abstract AbstractRpcClient<?></span>
+<span class="source-line-no">214</span><span id="line-214"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
+<span class="source-line-no">215</span><span id="line-215"></span>
+<span class="source-line-no">216</span><span id="line-216"> @TestTemplate</span>
+<span class="source-line-no">217</span><span id="line-217"> public void testRTEDuringConnectionSetup() throws Exception {</span>
+<span class="source-line-no">218</span><span id="line-218"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">219</span><span id="line-219"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">220</span><span id="line-220"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">221</span><span id="line-221"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">222</span><span id="line-222"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
+<span class="source-line-no">223</span><span id="line-223"> rpcServer.start();</span>
+<span class="source-line-no">224</span><span id="line-224"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">225</span><span id="line-225"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
+<span class="source-line-no">226</span><span id="line-226"> fail("Expected an exception to have been thrown!");</span>
+<span class="source-line-no">227</span><span id="line-227"> } catch (Exception e) {</span>
+<span class="source-line-no">228</span><span id="line-228"> LOG.info("Caught expected exception: " + e.toString());</span>
+<span class="source-line-no">229</span><span id="line-229"> assertTrue(StringUtils.stringifyException(e).contains("Injected fault"), e.toString());</span>
+<span class="source-line-no">230</span><span id="line-230"> } finally {</span>
+<span class="source-line-no">231</span><span id="line-231"> rpcServer.stop();</span>
+<span class="source-line-no">232</span><span id="line-232"> }</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"> * Tests that the rpc scheduler is called when requests arrive.</span>
+<span class="source-line-no">237</span><span id="line-237"> */</span>
+<span class="source-line-no">238</span><span id="line-238"> @TestTemplate</span>
+<span class="source-line-no">239</span><span id="line-239"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
+<span class="source-line-no">240</span><span id="line-240"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">241</span><span id="line-241"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">242</span><span id="line-242"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">243</span><span id="line-243"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">244</span><span id="line-244"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
+<span class="source-line-no">245</span><span id="line-245"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
+<span class="source-line-no">246</span><span id="line-246"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">247</span><span id="line-247"> rpcServer.start();</span>
+<span class="source-line-no">248</span><span id="line-248"> verify(scheduler).start();</span>
+<span class="source-line-no">249</span><span id="line-249"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">250</span><span id="line-250"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">251</span><span id="line-251"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">252</span><span id="line-252"> stub.echo(null, param);</span>
+<span class="source-line-no">253</span><span id="line-253"> }</span>
+<span class="source-line-no">254</span><span id="line-254"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
+<span class="source-line-no">255</span><span id="line-255"> } finally {</span>
+<span class="source-line-no">256</span><span id="line-256"> rpcServer.stop();</span>
+<span class="source-line-no">257</span><span id="line-257"> verify(scheduler).stop();</span>
+<span class="source-line-no">258</span><span id="line-258"> }</span>
+<span class="source-line-no">259</span><span id="line-259"> }</span>
+<span class="source-line-no">260</span><span id="line-260"></span>
+<span class="source-line-no">261</span><span id="line-261"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
+<span class="source-line-no">262</span><span id="line-262"> @TestTemplate</span>
+<span class="source-line-no">263</span><span id="line-263"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
+<span class="source-line-no">264</span><span id="line-264"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">265</span><span id="line-265"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
+<span class="source-line-no">266</span><span id="line-266"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">267</span><span id="line-267"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">268</span><span id="line-268"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
+<span class="source-line-no">269</span><span id="line-269"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">270</span><span id="line-270"> rpcServer.start();</span>
+<span class="source-line-no">271</span><span id="line-271"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">272</span><span id="line-272"> StringBuilder message = new StringBuilder(1200);</span>
+<span class="source-line-no">273</span><span id="line-273"> for (int i = 0; i < 200; i++) {</span>
+<span class="source-line-no">274</span><span id="line-274"> message.append("hello.");</span>
+<span class="source-line-no">275</span><span id="line-275"> }</span>
+<span class="source-line-no">276</span><span id="line-276"> // set total RPC size bigger than 100 bytes</span>
+<span class="source-line-no">277</span><span id="line-277"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
+<span class="source-line-no">278</span><span id="line-278"> stub.echo(new HBaseRpcControllerImpl(</span>
+<span class="source-line-no">279</span><span id="line-279"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
+<span class="source-line-no">280</span><span id="line-280"> fail("RPC should have failed because it exceeds max request size");</span>
+<span class="source-line-no">281</span><span id="line-281"> } catch (ServiceException e) {</span>
+<span class="source-line-no">282</span><span id="line-282"> LOG.info("Caught expected exception: " + e);</span>
+<span class="source-line-no">283</span><span id="line-283"> assertTrue(StringUtils.stringifyException(e).contains("RequestTooBigException"),</span>
+<span class="source-line-no">284</span><span id="line-284"> e.toString());</span>
+<span class="source-line-no">285</span><span id="line-285"> } finally {</span>
+<span class="source-line-no">286</span><span id="line-286"> rpcServer.stop();</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
+<span class="source-line-no">292</span><span id="line-292"> * remoteAddress set to its Call Object</span>
+<span class="source-line-no">293</span><span id="line-293"> */</span>
+<span class="source-line-no">294</span><span id="line-294"> @TestTemplate</span>
+<span class="source-line-no">295</span><span id="line-295"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
+<span class="source-line-no">296</span><span id="line-296"> throws IOException, ServiceException {</span>
+<span class="source-line-no">297</span><span id="line-297"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">298</span><span id="line-298"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">299</span><span id="line-299"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">300</span><span id="line-300"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">301</span><span id="line-301"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
+<span class="source-line-no">302</span><span id="line-302"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">303</span><span id="line-303"> rpcServer.start();</span>
+<span class="source-line-no">304</span><span id="line-304"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">305</span><span id="line-305"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
+<span class="source-line-no">306</span><span id="line-306"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
+<span class="source-line-no">307</span><span id="line-307"> } finally {</span>
+<span class="source-line-no">308</span><span id="line-308"> rpcServer.stop();</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"> }</span>
+<span class="source-line-no">311</span><span id="line-311"></span>
+<span class="source-line-no">312</span><span id="line-312"> @TestTemplate</span>
+<span class="source-line-no">313</span><span id="line-313"> public void testRemoteError() throws IOException, ServiceException {</span>
+<span class="source-line-no">314</span><span id="line-314"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">315</span><span id="line-315"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">316</span><span id="line-316"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">317</span><span id="line-317"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">318</span><span id="line-318"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">319</span><span id="line-319"> rpcServer.start();</span>
+<span class="source-line-no">320</span><span id="line-320"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">321</span><span id="line-321"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">322</span><span id="line-322"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">323</span><span id="line-323"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">324</span><span id="line-324"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">325</span><span id="line-325"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">326</span><span id="line-326"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">327</span><span id="line-327"> } finally {</span>
+<span class="source-line-no">328</span><span id="line-328"> rpcServer.stop();</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"> }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332"> @TestTemplate</span>
+<span class="source-line-no">333</span><span id="line-333"> public void testTimeout() throws IOException {</span>
+<span class="source-line-no">334</span><span id="line-334"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">335</span><span id="line-335"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">336</span><span id="line-336"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">337</span><span id="line-337"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">338</span><span id="line-338"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">339</span><span id="line-339"> rpcServer.start();</span>
+<span class="source-line-no">340</span><span id="line-340"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">341</span><span id="line-341"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">342</span><span id="line-342"> int ms = 1000;</span>
+<span class="source-line-no">343</span><span id="line-343"> int timeout = 100;</span>
+<span class="source-line-no">344</span><span id="line-344"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">345</span><span id="line-345"> pcrc.reset();</span>
+<span class="source-line-no">346</span><span id="line-346"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">347</span><span id="line-347"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">348</span><span id="line-348"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">349</span><span id="line-349"> () -> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build()));</span>
+<span class="source-line-no">350</span><span id="line-350"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">351</span><span id="line-351"> // expected</span>
+<span class="source-line-no">352</span><span id="line-352"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">353</span><span id="line-353"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">354</span><span id="line-354"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">355</span><span id="line-355"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">356</span><span id="line-356"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">357</span><span id="line-357"> }</span>
+<span class="source-line-no">358</span><span id="line-358"> } finally {</span>
+<span class="source-line-no">359</span><span id="line-359"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">360</span><span id="line-360"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">361</span><span id="line-361"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">362</span><span id="line-362"> rpcServer.stop();</span>
+<span class="source-line-no">363</span><span id="line-363"> }</span>
+<span class="source-line-no">364</span><span id="line-364"> }</span>
+<span class="source-line-no">365</span><span id="line-365"></span>
+<span class="source-line-no">366</span><span id="line-366"> @SuppressWarnings("deprecation")</span>
+<span class="source-line-no">367</span><span id="line-367"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> final class FailingConnection extends SimpleServerRpcConnection {</span>
-<span class="source-line-no">370</span><span id="line-370"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
-<span class="source-line-no">371</span><span id="line-371"> long lastContact) {</span>
-<span class="source-line-no">372</span><span id="line-372"> super(rpcServer, channel, lastContact);</span>
-<span class="source-line-no">373</span><span id="line-373"> }</span>
+<span class="source-line-no">369</span><span id="line-369"> FailingSimpleRpcServer(Server server, String name,</span>
+<span class="source-line-no">370</span><span id="line-370"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
+<span class="source-line-no">371</span><span id="line-371"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">372</span><span id="line-372"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
+<span class="source-line-no">373</span><span id="line-373"> }</span>
<span class="source-line-no">374</span><span id="line-374"></span>
-<span class="source-line-no">375</span><span id="line-375"> @Override</span>
-<span class="source-line-no">376</span><span id="line-376"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
-<span class="source-line-no">377</span><span id="line-377"> // this will throw exception after the connection header is read, and an RPC is sent</span>
-<span class="source-line-no">378</span><span id="line-378"> // from client</span>
-<span class="source-line-no">379</span><span id="line-379"> throw new DoNotRetryIOException("Failing for test");</span>
-<span class="source-line-no">380</span><span id="line-380"> }</span>
-<span class="source-line-no">381</span><span id="line-381"> }</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> @Override</span>
-<span class="source-line-no">384</span><span id="line-384"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
-<span class="source-line-no">385</span><span id="line-385"> return new FailingConnection(this, channel, time);</span>
-<span class="source-line-no">386</span><span id="line-386"> }</span>
-<span class="source-line-no">387</span><span id="line-387"> }</span>
+<span class="source-line-no">375</span><span id="line-375"> final class FailingConnection extends SimpleServerRpcConnection {</span>
+<span class="source-line-no">376</span><span id="line-376"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
+<span class="source-line-no">377</span><span id="line-377"> long lastContact) {</span>
+<span class="source-line-no">378</span><span id="line-378"> super(rpcServer, channel, lastContact);</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"></span>
+<span class="source-line-no">381</span><span id="line-381"> @Override</span>
+<span class="source-line-no">382</span><span id="line-382"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
+<span class="source-line-no">383</span><span id="line-383"> // this will throw exception after the connection header is read, and an RPC is sent</span>
+<span class="source-line-no">384</span><span id="line-384"> // from client</span>
+<span class="source-line-no">385</span><span id="line-385"> throw new DoNotRetryIOException("Failing for test");</span>
+<span class="source-line-no">386</span><span id="line-386"> }</span>
+<span class="source-line-no">387</span><span id="line-387"> }</span>
<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389"> protected RpcServer createTestFailingRpcServer(final String name,</span>
-<span class="source-line-no">390</span><span id="line-390"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
-<span class="source-line-no">391</span><span id="line-391"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">392</span><span id="line-392"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
-<span class="source-line-no">393</span><span id="line-393"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">394</span><span id="line-394"> } else {</span>
-<span class="source-line-no">395</span><span id="line-395"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">396</span><span id="line-396"> }</span>
-<span class="source-line-no">397</span><span id="line-397"> }</span>
-<span class="source-line-no">398</span><span id="line-398"></span>
-<span class="source-line-no">399</span><span id="line-399"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
-<span class="source-line-no">400</span><span id="line-400"> @Test</span>
-<span class="source-line-no">401</span><span id="line-401"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">403</span><span id="line-403"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
-<span class="source-line-no">404</span><span id="line-404"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">405</span><span id="line-405"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">406</span><span id="line-406"></span>
-<span class="source-line-no">407</span><span id="line-407"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">408</span><span id="line-408"> rpcServer.start();</span>
-<span class="source-line-no">409</span><span id="line-409"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">410</span><span id="line-410"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">411</span><span id="line-411"> stub.echo(null, param);</span>
-<span class="source-line-no">412</span><span id="line-412"> fail("RPC should have failed because connection closed");</span>
-<span class="source-line-no">413</span><span id="line-413"> } catch (ServiceException e) {</span>
-<span class="source-line-no">414</span><span id="line-414"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">415</span><span id="line-415"> } finally {</span>
-<span class="source-line-no">416</span><span id="line-416"> rpcServer.stop();</span>
-<span class="source-line-no">417</span><span id="line-417"> }</span>
-<span class="source-line-no">418</span><span id="line-418"> }</span>
-<span class="source-line-no">419</span><span id="line-419"></span>
-<span class="source-line-no">420</span><span id="line-420"> @Test</span>
-<span class="source-line-no">421</span><span id="line-421"> public void testAsyncEcho() throws IOException {</span>
-<span class="source-line-no">422</span><span id="line-422"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">423</span><span id="line-423"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">424</span><span id="line-424"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">425</span><span id="line-425"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">426</span><span id="line-426"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">427</span><span id="line-427"> rpcServer.start();</span>
-<span class="source-line-no">428</span><span id="line-428"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">429</span><span id="line-429"> int num = 10;</span>
-<span class="source-line-no">430</span><span id="line-430"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">431</span><span id="line-431"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">432</span><span id="line-432"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">433</span><span id="line-433"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">434</span><span id="line-434"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">435</span><span id="line-435"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
-<span class="source-line-no">436</span><span id="line-436"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">437</span><span id="line-437"> callbackList.add(done);</span>
-<span class="source-line-no">438</span><span id="line-438"> }</span>
-<span class="source-line-no">439</span><span id="line-439"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">440</span><span id="line-440"> EchoResponseProto resp = callbackList.get(i).get();</span>
-<span class="source-line-no">441</span><span id="line-441"> HBaseRpcController pcrc = pcrcList.get(i);</span>
-<span class="source-line-no">442</span><span id="line-442"> assertEquals("hello-" + i, resp.getMessage());</span>
-<span class="source-line-no">443</span><span id="line-443"> assertFalse(pcrc.failed());</span>
-<span class="source-line-no">444</span><span id="line-444"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">445</span><span id="line-445"> }</span>
-<span class="source-line-no">446</span><span id="line-446"> } finally {</span>
-<span class="source-line-no">447</span><span id="line-447"> rpcServer.stop();</span>
-<span class="source-line-no">448</span><span id="line-448"> }</span>
-<span class="source-line-no">449</span><span id="line-449"> }</span>
-<span class="source-line-no">450</span><span id="line-450"></span>
-<span class="source-line-no">451</span><span id="line-451"> @Test</span>
-<span class="source-line-no">452</span><span id="line-452"> public void testAsyncRemoteError() throws IOException {</span>
-<span class="source-line-no">453</span><span id="line-453"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">454</span><span id="line-454"> AbstractRpcClient<?> client = createRpcClient(clientConf);</span>
-<span class="source-line-no">455</span><span id="line-455"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">456</span><span id="line-456"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">457</span><span id="line-457"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">458</span><span id="line-458"> try {</span>
-<span class="source-line-no">459</span><span id="line-459"> rpcServer.start();</span>
-<span class="source-line-no">460</span><span id="line-460"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">461</span><span id="line-461"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">462</span><span id="line-462"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">463</span><span id="line-463"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
-<span class="source-line-no">464</span><span id="line-464"> assertNull(callback.get());</span>
-<span class="source-line-no">465</span><span id="line-465"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">466</span><span id="line-466"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">467</span><span id="line-467"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">468</span><span id="line-468"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">469</span><span id="line-469"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">470</span><span id="line-470"> } finally {</span>
-<span class="source-line-no">471</span><span id="line-471"> client.close();</span>
-<span class="source-line-no">472</span><span id="line-472"> rpcServer.stop();</span>
-<span class="source-line-no">473</span><span id="line-473"> }</span>
-<span class="source-line-no">474</span><span id="line-474"> }</span>
-<span class="source-line-no">475</span><span id="line-475"></span>
-<span class="source-line-no">476</span><span id="line-476"> @Test</span>
-<span class="source-line-no">477</span><span id="line-477"> public void testAsyncTimeout() throws IOException {</span>
-<span class="source-line-no">478</span><span id="line-478"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">479</span><span id="line-479"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">480</span><span id="line-480"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">481</span><span id="line-481"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">482</span><span id="line-482"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">483</span><span id="line-483"> rpcServer.start();</span>
-<span class="source-line-no">484</span><span id="line-484"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">485</span><span id="line-485"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">486</span><span id="line-486"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">487</span><span id="line-487"> int ms = 1000;</span>
-<span class="source-line-no">488</span><span id="line-488"> int timeout = 100;</span>
-<span class="source-line-no">489</span><span id="line-489"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">490</span><span id="line-490"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">491</span><span id="line-491"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">492</span><span id="line-492"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">493</span><span id="line-493"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">494</span><span id="line-494"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
-<span class="source-line-no">495</span><span id="line-495"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">496</span><span id="line-496"> callbackList.add(callback);</span>
-<span class="source-line-no">497</span><span id="line-497"> }</span>
-<span class="source-line-no">498</span><span id="line-498"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
-<span class="source-line-no">499</span><span id="line-499"> assertNull(callback.get());</span>
-<span class="source-line-no">500</span><span id="line-500"> }</span>
-<span class="source-line-no">501</span><span id="line-501"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">502</span><span id="line-502"> for (HBaseRpcController pcrc : pcrcList) {</span>
-<span class="source-line-no">503</span><span id="line-503"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">504</span><span id="line-504"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">505</span><span id="line-505"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">506</span><span id="line-506"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">507</span><span id="line-507"> }</span>
-<span class="source-line-no">508</span><span id="line-508"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">509</span><span id="line-509"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">510</span><span id="line-510"> } finally {</span>
-<span class="source-line-no">511</span><span id="line-511"> rpcServer.stop();</span>
-<span class="source-line-no">512</span><span id="line-512"> }</span>
-<span class="source-line-no">513</span><span id="line-513"> }</span>
-<span class="source-line-no">514</span><span id="line-514"></span>
-<span class="source-line-no">515</span><span id="line-515"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
-<span class="source-line-no">516</span><span id="line-516"> Waiter.waitFor(CONF, 1000,</span>
-<span class="source-line-no">517</span><span id="line-517"> new MatcherPredicate<>(() -> traceRule.getSpans(), hasItem(matcher)));</span>
-<span class="source-line-no">518</span><span id="line-518"> return traceRule.getSpans().stream().filter(matcher::matches).findFirst()</span>
-<span class="source-line-no">519</span><span id="line-519"> .orElseThrow(AssertionError::new);</span>
-<span class="source-line-no">520</span><span id="line-520"> }</span>
-<span class="source-line-no">521</span><span id="line-521"></span>
-<span class="source-line-no">522</span><span id="line-522"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">523</span><span id="line-523"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">389</span><span id="line-389"> @Override</span>
+<span class="source-line-no">390</span><span id="line-390"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
+<span class="source-line-no">391</span><span id="line-391"> return new FailingConnection(this, channel, time);</span>
+<span class="source-line-no">392</span><span id="line-392"> }</span>
+<span class="source-line-no">393</span><span id="line-393"> }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395"> protected RpcServer createTestFailingRpcServer(final String name,</span>
+<span class="source-line-no">396</span><span id="line-396"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
+<span class="source-line-no">397</span><span id="line-397"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">398</span><span id="line-398"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
+<span class="source-line-no">399</span><span id="line-399"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">400</span><span id="line-400"> } else {</span>
+<span class="source-line-no">401</span><span id="line-401"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">402</span><span id="line-402"> }</span>
+<span class="source-line-no">403</span><span id="line-403"> }</span>
+<span class="source-line-no">404</span><span id="line-404"></span>
+<span class="source-line-no">405</span><span id="line-405"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
+<span class="source-line-no">406</span><span id="line-406"> @TestTemplate</span>
+<span class="source-line-no">407</span><span id="line-407"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">409</span><span id="line-409"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
+<span class="source-line-no">410</span><span id="line-410"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">411</span><span id="line-411"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">412</span><span id="line-412"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">413</span><span id="line-413"> rpcServer.start();</span>
+<span class="source-line-no">414</span><span id="line-414"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">415</span><span id="line-415"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">416</span><span id="line-416"> ServiceException se = assertThrows(ServiceException.class, () -> stub.echo(null, param),</span>
+<span class="source-line-no">417</span><span id="line-417"> "RPC should have failed because connection closed");</span>
+<span class="source-line-no">418</span><span id="line-418"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">419</span><span id="line-419"> } finally {</span>
+<span class="source-line-no">420</span><span id="line-420"> rpcServer.stop();</span>
+<span class="source-line-no">421</span><span id="line-421"> }</span>
+<span class="source-line-no">422</span><span id="line-422"> }</span>
+<span class="source-line-no">423</span><span id="line-423"></span>
+<span class="source-line-no">424</span><span id="line-424"> @TestTemplate</span>
+<span class="source-line-no">425</span><span id="line-425"> public void testAsyncEcho() throws IOException {</span>
+<span class="source-line-no">426</span><span id="line-426"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">427</span><span id="line-427"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">428</span><span id="line-428"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">429</span><span id="line-429"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">430</span><span id="line-430"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">431</span><span id="line-431"> rpcServer.start();</span>
+<span class="source-line-no">432</span><span id="line-432"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">433</span><span id="line-433"> int num = 10;</span>
+<span class="source-line-no">434</span><span id="line-434"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">435</span><span id="line-435"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">436</span><span id="line-436"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">437</span><span id="line-437"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">438</span><span id="line-438"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">439</span><span id="line-439"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
+<span class="source-line-no">440</span><span id="line-440"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">441</span><span id="line-441"> callbackList.add(done);</span>
+<span class="source-line-no">442</span><span id="line-442"> }</span>
+<span class="source-line-no">443</span><span id="line-443"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">444</span><span id="line-444"> EchoResponseProto resp = callbackList.get(i).get();</span>
+<span class="source-line-no">445</span><span id="line-445"> HBaseRpcController pcrc = pcrcList.get(i);</span>
+<span class="source-line-no">446</span><span id="line-446"> assertEquals("hello-" + i, resp.getMessage());</span>
+<span class="source-line-no">447</span><span id="line-447"> assertFalse(pcrc.failed());</span>
+<span class="source-line-no">448</span><span id="line-448"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">449</span><span id="line-449"> }</span>
+<span class="source-line-no">450</span><span id="line-450"> } finally {</span>
+<span class="source-line-no">451</span><span id="line-451"> rpcServer.stop();</span>
+<span class="source-line-no">452</span><span id="line-452"> }</span>
+<span class="source-line-no">453</span><span id="line-453"> }</span>
+<span class="source-line-no">454</span><span id="line-454"></span>
+<span class="source-line-no">455</span><span id="line-455"> @TestTemplate</span>
+<span class="source-line-no">456</span><span id="line-456"> public void testAsyncRemoteError() throws IOException {</span>
+<span class="source-line-no">457</span><span id="line-457"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">458</span><span id="line-458"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">459</span><span id="line-459"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">460</span><span id="line-460"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">461</span><span id="line-461"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">462</span><span id="line-462"> rpcServer.start();</span>
+<span class="source-line-no">463</span><span id="line-463"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">464</span><span id="line-464"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">465</span><span id="line-465"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">466</span><span id="line-466"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
+<span class="source-line-no">467</span><span id="line-467"> assertNull(callback.get());</span>
+<span class="source-line-no">468</span><span id="line-468"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">469</span><span id="line-469"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">470</span><span id="line-470"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">471</span><span id="line-471"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">472</span><span id="line-472"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">473</span><span id="line-473"> } finally {</span>
+<span class="source-line-no">474</span><span id="line-474"> rpcServer.stop();</span>
+<span class="source-line-no">475</span><span id="line-475"> }</span>
+<span class="source-line-no">476</span><span id="line-476"> }</span>
+<span class="source-line-no">477</span><span id="line-477"></span>
+<span class="source-line-no">478</span><span id="line-478"> @TestTemplate</span>
+<span class="source-line-no">479</span><span id="line-479"> public void testAsyncTimeout() throws IOException {</span>
+<span class="source-line-no">480</span><span id="line-480"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">481</span><span id="line-481"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">482</span><span id="line-482"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">483</span><span id="line-483"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">484</span><span id="line-484"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">485</span><span id="line-485"> rpcServer.start();</span>
+<span class="source-line-no">486</span><span id="line-486"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">487</span><span id="line-487"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">488</span><span id="line-488"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">489</span><span id="line-489"> int ms = 1000;</span>
+<span class="source-line-no">490</span><span id="line-490"> int timeout = 100;</span>
+<span class="source-line-no">491</span><span id="line-491"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">492</span><span id="line-492"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">493</span><span id="line-493"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">494</span><span id="line-494"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">495</span><span id="line-495"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">496</span><span id="line-496"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
+<span class="source-line-no">497</span><span id="line-497"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">498</span><span id="line-498"> callbackList.add(callback);</span>
+<span class="source-line-no">499</span><span id="line-499"> }</span>
+<span class="source-line-no">500</span><span id="line-500"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
+<span class="source-line-no">501</span><span id="line-501"> assertNull(callback.get());</span>
+<span class="source-line-no">502</span><span id="line-502"> }</span>
+<span class="source-line-no">503</span><span id="line-503"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">504</span><span id="line-504"> for (HBaseRpcController pcrc : pcrcList) {</span>
+<span class="source-line-no">505</span><span id="line-505"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">506</span><span id="line-506"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">507</span><span id="line-507"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">508</span><span id="line-508"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">509</span><span id="line-509"> }</span>
+<span class="source-line-no">510</span><span id="line-510"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">511</span><span id="line-511"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">512</span><span id="line-512"> } finally {</span>
+<span class="source-line-no">513</span><span id="line-513"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">514</span><span id="line-514"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">515</span><span id="line-515"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">516</span><span id="line-516"> rpcServer.stop();</span>
+<span class="source-line-no">517</span><span id="line-517"> }</span>
+<span class="source-line-no">518</span><span id="line-518"> }</span>
+<span class="source-line-no">519</span><span id="line-519"></span>
+<span class="source-line-no">520</span><span id="line-520"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
+<span class="source-line-no">521</span><span id="line-521"> Waiter.waitFor(CONF, 1000, new MatcherPredicate<>(() -> OTEL_EXT.getSpans(), hasItem(matcher)));</span>
+<span class="source-line-no">522</span><span id="line-522"> return OTEL_EXT.getSpans().stream().filter(matcher::matches).findFirst()</span>
+<span class="source-line-no">523</span><span id="line-523"> .orElseThrow(AssertionError::new);</span>
<span class="source-line-no">524</span><span id="line-524"> }</span>
<span class="source-line-no">525</span><span id="line-525"></span>
-<span class="source-line-no">526</span><span id="line-526"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">527</span><span id="line-527"> final String methodName) {</span>
-<span class="source-line-no">528</span><span id="line-528"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">529</span><span id="line-529"> hasKind(SpanKind.CLIENT));</span>
-<span class="source-line-no">530</span><span id="line-530"> }</span>
-<span class="source-line-no">531</span><span id="line-531"></span>
-<span class="source-line-no">532</span><span id="line-532"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">533</span><span id="line-533"> final String methodName) {</span>
-<span class="source-line-no">534</span><span id="line-534"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">535</span><span id="line-535"> hasKind(SpanKind.SERVER));</span>
-<span class="source-line-no">536</span><span id="line-536"> }</span>
-<span class="source-line-no">537</span><span id="line-537"></span>
-<span class="source-line-no">538</span><span id="line-538"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
-<span class="source-line-no">539</span><span id="line-539"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
-<span class="source-line-no">540</span><span id="line-540"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">541</span><span id="line-541"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
-<span class="source-line-no">542</span><span id="line-542"> containsEntry("net.peer.name", isa.getHostName()),</span>
-<span class="source-line-no">543</span><span id="line-543"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
-<span class="source-line-no">544</span><span id="line-544"> }</span>
-<span class="source-line-no">545</span><span id="line-545"></span>
-<span class="source-line-no">546</span><span id="line-546"> private static Matcher<SpanData></span>
-<span class="source-line-no">547</span><span id="line-547"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">548</span><span id="line-548"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">549</span><span id="line-549"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
-<span class="source-line-no">550</span><span id="line-550"> }</span>
-<span class="source-line-no">551</span><span id="line-551"></span>
-<span class="source-line-no">552</span><span id="line-552"> private void assertRemoteSpan() {</span>
-<span class="source-line-no">553</span><span id="line-553"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
-<span class="source-line-no">554</span><span id="line-554"> assertTrue(data.getParentSpanContext().isRemote());</span>
-<span class="source-line-no">555</span><span id="line-555"> assertEquals(SpanKind.SERVER, data.getKind());</span>
-<span class="source-line-no">556</span><span id="line-556"> }</span>
-<span class="source-line-no">557</span><span id="line-557"></span>
-<span class="source-line-no">558</span><span id="line-558"> @Test</span>
-<span class="source-line-no">559</span><span id="line-559"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
-<span class="source-line-no">560</span><span id="line-560"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">561</span><span id="line-561"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">562</span><span id="line-562"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">563</span><span id="line-563"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">564</span><span id="line-564"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">565</span><span id="line-565"> rpcServer.start();</span>
-<span class="source-line-no">566</span><span id="line-566"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">567</span><span id="line-567"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
-<span class="source-line-no">568</span><span id="line-568"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">569</span><span id="line-569"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">570</span><span id="line-570"> final SpanData pauseClientSpan =</span>
-<span class="source-line-no">571</span><span id="line-571"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">572</span><span id="line-572"> assertThat(pauseClientSpan,</span>
-<span class="source-line-no">573</span><span id="line-573"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
-<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseServerSpan =</span>
-<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseServerSpan,</span>
-<span class="source-line-no">577</span><span id="line-577"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">578</span><span id="line-578"> assertRemoteSpan();</span>
-<span class="source-line-no">579</span><span id="line-579"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">580</span><span id="line-580"> assertThat(traceRule.getSpans(),</span>
-<span class="source-line-no">581</span><span id="line-581"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
-<span class="source-line-no">582</span><span id="line-582"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()),</span>
-<span class="source-line-no">583</span><span id="line-583"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
-<span class="source-line-no">584</span><span id="line-584"> } finally {</span>
-<span class="source-line-no">585</span><span id="line-585"> rpcServer.stop();</span>
-<span class="source-line-no">586</span><span id="line-586"> }</span>
-<span class="source-line-no">587</span><span id="line-587"> }</span>
-<span class="source-line-no">588</span><span id="line-588"></span>
-<span class="source-line-no">589</span><span id="line-589"> @Test</span>
-<span class="source-line-no">590</span><span id="line-590"> public void testTracingErrorIpc() throws IOException {</span>
-<span class="source-line-no">591</span><span id="line-591"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">592</span><span id="line-592"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">593</span><span id="line-593"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">594</span><span id="line-594"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">595</span><span id="line-595"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">596</span><span id="line-596"> rpcServer.start();</span>
-<span class="source-line-no">597</span><span id="line-597"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">598</span><span id="line-598"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">599</span><span id="line-599"> assertThrows(ServiceException.class,</span>
-<span class="source-line-no">600</span><span id="line-600"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
-<span class="source-line-no">601</span><span id="line-601"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">602</span><span id="line-602"> final SpanData errorClientSpan =</span>
-<span class="source-line-no">603</span><span id="line-603"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">604</span><span id="line-604"> assertThat(errorClientSpan,</span>
-<span class="source-line-no">605</span><span id="line-605"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
-<span class="source-line-no">606</span><span id="line-606"> final SpanData errorServerSpan =</span>
-<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">608</span><span id="line-608"> assertThat(errorServerSpan,</span>
-<span class="source-line-no">609</span><span id="line-609"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">610</span><span id="line-610"> assertRemoteSpan();</span>
-<span class="source-line-no">611</span><span id="line-611"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">612</span><span id="line-612"> assertThat(traceRule.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
-<span class="source-line-no">613</span><span id="line-613"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()))));</span>
-<span class="source-line-no">614</span><span id="line-614"> } finally {</span>
-<span class="source-line-no">615</span><span id="line-615"> rpcServer.stop();</span>
-<span class="source-line-no">616</span><span id="line-616"> }</span>
-<span class="source-line-no">617</span><span id="line-617"> }</span>
-<span class="source-line-no">618</span><span id="line-618"></span>
-<span class="source-line-no">619</span><span id="line-619"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
-<span class="source-line-no">620</span><span id="line-620"></span>
-<span class="source-line-no">621</span><span id="line-621"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
-<span class="source-line-no">622</span><span id="line-622"> ServiceException se = assertThrows(ServiceException.class,</span>
-<span class="source-line-no">623</span><span id="line-623"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
-<span class="source-line-no">624</span><span id="line-624"> return ProtobufUtil.handleRemoteException(se);</span>
-<span class="source-line-no">625</span><span id="line-625"> }</span>
-<span class="source-line-no">626</span><span id="line-626"></span>
-<span class="source-line-no">627</span><span id="line-627"> @Test</span>
-<span class="source-line-no">628</span><span id="line-628"> public void testBadPreambleHeader() throws Exception {</span>
-<span class="source-line-no">629</span><span id="line-629"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">630</span><span id="line-630"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">631</span><span id="line-631"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">632</span><span id="line-632"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
-<span class="source-line-no">633</span><span id="line-633"> rpcServer.start();</span>
-<span class="source-line-no">634</span><span id="line-634"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">635</span><span id="line-635"> BadAuthException error = null;</span>
-<span class="source-line-no">636</span><span id="line-636"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
-<span class="source-line-no">637</span><span id="line-637"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
-<span class="source-line-no">638</span><span id="line-638"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">639</span><span id="line-639"> IOException ioe = doBadPreableHeaderCall(stub);</span>
-<span class="source-line-no">640</span><span id="line-640"> if (ioe instanceof BadAuthException) {</span>
-<span class="source-line-no">641</span><span id="line-641"> error = (BadAuthException) ioe;</span>
-<span class="source-line-no">642</span><span id="line-642"> break;</span>
-<span class="source-line-no">643</span><span id="line-643"> }</span>
-<span class="source-line-no">644</span><span id="line-644"> Thread.sleep(100);</span>
-<span class="source-line-no">645</span><span id="line-645"> }</span>
-<span class="source-line-no">646</span><span id="line-646"> assertNotNull("Can not get expected BadAuthException", error);</span>
-<span class="source-line-no">647</span><span id="line-647"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
-<span class="source-line-no">648</span><span id="line-648"> } finally {</span>
-<span class="source-line-no">649</span><span id="line-649"> rpcServer.stop();</span>
-<span class="source-line-no">650</span><span id="line-650"> }</span>
-<span class="source-line-no">651</span><span id="line-651"> }</span>
-<span class="source-line-no">652</span><span id="line-652"></span>
-<span class="source-line-no">653</span><span id="line-653"> /**</span>
-<span class="source-line-no">654</span><span id="line-654"> * Testcase for getting connection registry information through connection preamble header, see</span>
-<span class="source-line-no">655</span><span id="line-655"> * HBASE-25051 for more details.</span>
-<span class="source-line-no">656</span><span id="line-656"> */</span>
-<span class="source-line-no">657</span><span id="line-657"> @Test</span>
-<span class="source-line-no">658</span><span id="line-658"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
-<span class="source-line-no">659</span><span id="line-659"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">660</span><span id="line-660"> String clusterId = "test_cluster_id";</span>
-<span class="source-line-no">661</span><span id="line-661"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
-<span class="source-line-no">662</span><span id="line-662"> when(server.getClusterId()).thenReturn(clusterId);</span>
-<span class="source-line-no">663</span><span id="line-663"> // do not need any services</span>
-<span class="source-line-no">664</span><span id="line-664"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">665</span><span id="line-665"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">666</span><span id="line-666"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">667</span><span id="line-667"> rpcServer.start();</span>
-<span class="source-line-no">668</span><span id="line-668"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">669</span><span id="line-669"> BlockingRpcChannel channel =</span>
-<span class="source-line-no">670</span><span id="line-670"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
-<span class="source-line-no">671</span><span id="line-671"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">672</span><span id="line-672"> ConnectionRegistryService.BlockingInterface stub =</span>
-<span class="source-line-no">673</span><span id="line-673"> ConnectionRegistryService.newBlockingStub(channel);</span>
-<span class="source-line-no">674</span><span id="line-674"> GetConnectionRegistryResponse resp =</span>
-<span class="source-line-no">675</span><span id="line-675"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
-<span class="source-line-no">676</span><span id="line-676"> assertEquals(clusterId, resp.getClusterId());</span>
-<span class="source-line-no">677</span><span id="line-677"> } finally {</span>
-<span class="source-line-no">678</span><span id="line-678"> rpcServer.stop();</span>
-<span class="source-line-no">679</span><span id="line-679"> }</span>
-<span class="source-line-no">680</span><span id="line-680"> }</span>
-<span class="source-line-no">681</span><span id="line-681"></span>
-<span class="source-line-no">682</span><span id="line-682"> /**</span>
-<span class="source-line-no">683</span><span id="line-683"> * Test server does not support getting connection registry information through connection</span>
-<span class="source-line-no">684</span><span id="line-684"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
-<span class="source-line-no">685</span><span id="line-685"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
-<span class="source-line-no">686</span><span id="line-686"> */</span>
-<span class="source-line-no">687</span><span id="line-687"> @Test</span>
-<span class="source-line-no">688</span><span id="line-688"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
-<span class="source-line-no">689</span><span id="line-689"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">690</span><span id="line-690"> // do not need any services</span>
-<span class="source-line-no">691</span><span id="line-691"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">692</span><span id="line-692"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">693</span><span id="line-693"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">694</span><span id="line-694"> rpcServer.start();</span>
-<span class="source-line-no">695</span><span id="line-695"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">696</span><span id="line-696"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
-<span class="source-line-no">697</span><span id="line-697"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">698</span><span id="line-698"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
-<span class="source-line-no">699</span><span id="line-699"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">700</span><span id="line-700"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">701</span><span id="line-701"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
-<span class="source-line-no">702</span><span id="line-702"> // should have failed so no response</span>
-<span class="source-line-no">703</span><span id="line-703"> assertNull(done.get());</span>
-<span class="source-line-no">704</span><span id="line-704"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">705</span><span id="line-705"> // should be a FatalConnectionException</span>
-<span class="source-line-no">706</span><span id="line-706"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
-<span class="source-line-no">707</span><span id="line-707"> assertEquals(FatalConnectionException.class.getName(),</span>
-<span class="source-line-no">708</span><span id="line-708"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
-<span class="source-line-no">709</span><span id="line-709"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
-<span class="source-line-no">710</span><span id="line-710"> } finally {</span>
-<span class="source-line-no">711</span><span id="line-711"> rpcServer.stop();</span>
-<span class="source-line-no">712</span><span id="line-712"> }</span>
-<span class="source-line-no">713</span><span id="line-713"> }</span>
-<span class="source-line-no">714</span><span id="line-714">}</span>
+<span class="source-line-no">526</span><span id="line-526"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">527</span><span id="line-527"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">528</span><span id="line-528"> }</span>
+<span class="source-line-no">529</span><span id="line-529"></span>
+<span class="source-line-no">530</span><span id="line-530"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">531</span><span id="line-531"> final String methodName) {</span>
+<span class="source-line-no">532</span><span id="line-532"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">533</span><span id="line-533"> hasKind(SpanKind.CLIENT));</span>
+<span class="source-line-no">534</span><span id="line-534"> }</span>
+<span class="source-line-no">535</span><span id="line-535"></span>
+<span class="source-line-no">536</span><span id="line-536"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">537</span><span id="line-537"> final String methodName) {</span>
+<span class="source-line-no">538</span><span id="line-538"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">539</span><span id="line-539"> hasKind(SpanKind.SERVER));</span>
+<span class="source-line-no">540</span><span id="line-540"> }</span>
+<span class="source-line-no">541</span><span id="line-541"></span>
+<span class="source-line-no">542</span><span id="line-542"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
+<span class="source-line-no">543</span><span id="line-543"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
+<span class="source-line-no">544</span><span id="line-544"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">545</span><span id="line-545"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
+<span class="source-line-no">546</span><span id="line-546"> containsEntry("net.peer.name", isa.getHostName()),</span>
+<span class="source-line-no">547</span><span id="line-547"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
+<span class="source-line-no">548</span><span id="line-548"> }</span>
+<span class="source-line-no">549</span><span id="line-549"></span>
+<span class="source-line-no">550</span><span id="line-550"> private static Matcher<SpanData></span>
+<span class="source-line-no">551</span><span id="line-551"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">552</span><span id="line-552"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">553</span><span id="line-553"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
+<span class="source-line-no">554</span><span id="line-554"> }</span>
+<span class="source-line-no">555</span><span id="line-555"></span>
+<span class="source-line-no">556</span><span id="line-556"> private void assertRemoteSpan() {</span>
+<span class="source-line-no">557</span><span id="line-557"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
+<span class="source-line-no">558</span><span id="line-558"> assertTrue(data.getParentSpanContext().isRemote());</span>
+<span class="source-line-no">559</span><span id="line-559"> assertEquals(SpanKind.SERVER, data.getKind());</span>
+<span class="source-line-no">560</span><span id="line-560"> }</span>
+<span class="source-line-no">561</span><span id="line-561"></span>
+<span class="source-line-no">562</span><span id="line-562"> @TestTemplate</span>
+<span class="source-line-no">563</span><span id="line-563"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
+<span class="source-line-no">564</span><span id="line-564"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">565</span><span id="line-565"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">566</span><span id="line-566"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">567</span><span id="line-567"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">568</span><span id="line-568"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">569</span><span id="line-569"> rpcServer.start();</span>
+<span class="source-line-no">570</span><span id="line-570"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">571</span><span id="line-571"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
+<span class="source-line-no">572</span><span id="line-572"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">573</span><span id="line-573"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseClientSpan =</span>
+<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseClientSpan,</span>
+<span class="source-line-no">577</span><span id="line-577"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
+<span class="source-line-no">578</span><span id="line-578"> final SpanData pauseServerSpan =</span>
+<span class="source-line-no">579</span><span id="line-579"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">580</span><span id="line-580"> assertThat(pauseServerSpan,</span>
+<span class="source-line-no">581</span><span id="line-581"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">582</span><span id="line-582"> assertRemoteSpan();</span>
+<span class="source-line-no">583</span><span id="line-583"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">584</span><span id="line-584"> assertThat(OTEL_EXT.getSpans(),</span>
+<span class="source-line-no">585</span><span id="line-585"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
+<span class="source-line-no">586</span><span id="line-586"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()),</span>
+<span class="source-line-no">587</span><span id="line-587"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
+<span class="source-line-no">588</span><span id="line-588"> } finally {</span>
+<span class="source-line-no">589</span><span id="line-589"> rpcServer.stop();</span>
+<span class="source-line-no">590</span><span id="line-590"> }</span>
+<span class="source-line-no">591</span><span id="line-591"> }</span>
+<span class="source-line-no">592</span><span id="line-592"></span>
+<span class="source-line-no">593</span><span id="line-593"> @TestTemplate</span>
+<span class="source-line-no">594</span><span id="line-594"> public void testTracingErrorIpc() throws IOException {</span>
+<span class="source-line-no">595</span><span id="line-595"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">596</span><span id="line-596"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">597</span><span id="line-597"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">598</span><span id="line-598"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">599</span><span id="line-599"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">600</span><span id="line-600"> rpcServer.start();</span>
+<span class="source-line-no">601</span><span id="line-601"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">602</span><span id="line-602"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">603</span><span id="line-603"> assertThrows(ServiceException.class,</span>
+<span class="source-line-no">604</span><span id="line-604"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">605</span><span id="line-605"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">606</span><span id="line-606"> final SpanData errorClientSpan =</span>
+<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">608</span><span id="line-608"> assertThat(errorClientSpan,</span>
+<span class="source-line-no">609</span><span id="line-609"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
+<span class="source-line-no">610</span><span id="line-610"> final SpanData errorServerSpan =</span>
+<span class="source-line-no">611</span><span id="line-611"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">612</span><span id="line-612"> assertThat(errorServerSpan,</span>
+<span class="source-line-no">613</span><span id="line-613"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">614</span><span id="line-614"> assertRemoteSpan();</span>
+<span class="source-line-no">615</span><span id="line-615"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">616</span><span id="line-616"> assertThat(OTEL_EXT.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
+<span class="source-line-no">617</span><span id="line-617"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()))));</span>
+<span class="source-line-no">618</span><span id="line-618"> } finally {</span>
+<span class="source-line-no">619</span><span id="line-619"> rpcServer.stop();</span>
+<span class="source-line-no">620</span><span id="line-620"> }</span>
+<span class="source-line-no">621</span><span id="line-621"> }</span>
+<span class="source-line-no">622</span><span id="line-622"></span>
+<span class="source-line-no">623</span><span id="line-623"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
+<span class="source-line-no">624</span><span id="line-624"></span>
+<span class="source-line-no">625</span><span id="line-625"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
+<span class="source-line-no">626</span><span id="line-626"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">627</span><span id="line-627"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
+<span class="source-line-no">628</span><span id="line-628"> return ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">629</span><span id="line-629"> }</span>
+<span class="source-line-no">630</span><span id="line-630"></span>
+<span class="source-line-no">631</span><span id="line-631"> @TestTemplate</span>
+<span class="source-line-no">632</span><span id="line-632"> public void testBadPreambleHeader() throws Exception {</span>
+<span class="source-line-no">633</span><span id="line-633"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">634</span><span id="line-634"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">635</span><span id="line-635"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">636</span><span id="line-636"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
+<span class="source-line-no">637</span><span id="line-637"> rpcServer.start();</span>
+<span class="source-line-no">638</span><span id="line-638"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">639</span><span id="line-639"> BadAuthException error = null;</span>
+<span class="source-line-no">640</span><span id="line-640"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
+<span class="source-line-no">641</span><span id="line-641"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
+<span class="source-line-no">642</span><span id="line-642"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">643</span><span id="line-643"> IOException ioe = doBadPreableHeaderCall(stub);</span>
+<span class="source-line-no">644</span><span id="line-644"> if (ioe instanceof BadAuthException) {</span>
+<span class="source-line-no">645</span><span id="line-645"> error = (BadAuthException) ioe;</span>
+<span class="source-line-no">646</span><span id="line-646"> break;</span>
+<span class="source-line-no">647</span><span id="line-647"> }</span>
+<span class="source-line-no">648</span><span id="line-648"> Thread.sleep(100);</span>
+<span class="source-line-no">649</span><span id="line-649"> }</span>
+<span class="source-line-no">650</span><span id="line-650"> assertNotNull(error, "Can not get expected BadAuthException");</span>
+<span class="source-line-no">651</span><span id="line-651"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
+<span class="source-line-no">652</span><span id="line-652"> } finally {</span>
+<span class="source-line-no">653</span><span id="line-653"> rpcServer.stop();</span>
+<span class="source-line-no">654</span><span id="line-654"> }</span>
+<span class="source-line-no">655</span><span id="line-655"> }</span>
+<span class="source-line-no">656</span><span id="line-656"></span>
+<span class="source-line-no">657</span><span id="line-657"> /**</span>
+<span class="source-line-no">658</span><span id="line-658"> * Testcase for getting connection registry information through connection preamble header, see</span>
+<span class="source-line-no">659</span><span id="line-659"> * HBASE-25051 for more details.</span>
+<span class="source-line-no">660</span><span id="line-660"> */</span>
+<span class="source-line-no">661</span><span id="line-661"> @TestTemplate</span>
+<span class="source-line-no">662</span><span id="line-662"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
+<span class="source-line-no">663</span><span id="line-663"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">664</span><span id="line-664"> String clusterId = "test_cluster_id";</span>
+<span class="source-line-no">665</span><span id="line-665"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
+<span class="source-line-no">666</span><span id="line-666"> when(server.getClusterId()).thenReturn(clusterId);</span>
+<span class="source-line-no">667</span><span id="line-667"> // do not need any services</span>
+<span class="source-line-no">668</span><span id="line-668"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">669</span><span id="line-669"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">670</span><span id="line-670"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">671</span><span id="line-671"> rpcServer.start();</span>
+<span class="source-line-no">672</span><span id="line-672"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">673</span><span id="line-673"> BlockingRpcChannel channel =</span>
+<span class="source-line-no">674</span><span id="line-674"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
+<span class="source-line-no">675</span><span id="line-675"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">676</span><span id="line-676"> ConnectionRegistryService.BlockingInterface stub =</span>
+<span class="source-line-no">677</span><span id="line-677"> ConnectionRegistryService.newBlockingStub(channel);</span>
+<span class="source-line-no">678</span><span id="line-678"> GetConnectionRegistryResponse resp =</span>
+<span class="source-line-no">679</span><span id="line-679"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
+<span class="source-line-no">680</span><span id="line-680"> assertEquals(clusterId, resp.getClusterId());</span>
+<span class="source-line-no">681</span><span id="line-681"> } finally {</span>
+<span class="source-line-no">682</span><span id="line-682"> rpcServer.stop();</span>
+<span class="source-line-no">683</span><span id="line-683"> }</span>
+<span class="source-line-no">684</span><span id="line-684"> }</span>
+<span class="source-line-no">685</span><span id="line-685"></span>
+<span class="source-line-no">686</span><span id="line-686"> /**</span>
+<span class="source-line-no">687</span><span id="line-687"> * Test server does not support getting connection registry information through connection</span>
+<span class="source-line-no">688</span><span id="line-688"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
+<span class="source-line-no">689</span><span id="line-689"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
+<span class="source-line-no">690</span><span id="line-690"> */</span>
+<span class="source-line-no">691</span><span id="line-691"> @TestTemplate</span>
+<span class="source-line-no">692</span><span id="line-692"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
+<span class="source-line-no">693</span><span id="line-693"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">694</span><span id="line-694"> // do not need any services</span>
+<span class="source-line-no">695</span><span id="line-695"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">696</span><span id="line-696"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">697</span><span id="line-697"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">698</span><span id="line-698"> rpcServer.start();</span>
+<span class="source-line-no">699</span><span id="line-699"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">700</span><span id="line-700"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
+<span class="source-line-no">701</span><span id="line-701"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">702</span><span id="line-702"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
+<span class="source-line-no">703</span><span id="line-703"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">704</span><span id="line-704"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">705</span><span id="line-705"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
+<span class="source-line-no">706</span><span id="line-706"> // should have failed so no response</span>
+<span class="source-line-no">707</span><span id="line-707"> assertNull(done.get());</span>
+<span class="source-line-no">708</span><span id="line-708"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">709</span><span id="line-709"> // should be a FatalConnectionException</span>
+<span class="source-line-no">710</span><span id="line-710"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
+<span class="source-line-no">711</span><span id="line-711"> assertEquals(FatalConnectionException.class.getName(),</span>
+<span class="source-line-no">712</span><span id="line-712"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
+<span class="source-line-no">713</span><span id="line-713"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
+<span class="source-line-no">714</span><span id="line-714"> } finally {</span>
+<span class="source-line-no">715</span><span id="line-715"> rpcServer.stop();</span>
+<span class="source-line-no">716</span><span id="line-716"> }</span>
+<span class="source-line-no">717</span><span id="line-717"> }</span>
+<span class="source-line-no">718</span><span id="line-718">}</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html
index eadff7f5228..9117f5eb6f7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.html
@@ -40,691 +40,695 @@
<span class="source-line-no">027</span><span id="line-27">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.SERVICE;</span>
<span class="source-line-no">028</span><span id="line-28">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newBlockingStub;</span>
<span class="source-line-no">029</span><span id="line-29">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newStub;</span>
-<span class="source-line-no">030</span><span id="line-30">import static org.hamcrest.MatcherAssert.assertThat;</span>
-<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.Matchers.allOf;</span>
-<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.containsString;</span>
-<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.everyItem;</span>
-<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
-<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.hasItem;</span>
-<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.instanceOf;</span>
-<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.startsWith;</span>
-<span class="source-line-no">038</span><span id="line-38">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">039</span><span id="line-39">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">040</span><span id="line-40">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">041</span><span id="line-41">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">042</span><span id="line-42">import static org.junit.Assert.assertThrows;</span>
-<span class="source-line-no">043</span><span id="line-43">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">044</span><span id="line-44">import static org.junit.Assert.fail;</span>
-<span class="source-line-no">045</span><span id="line-45">import static org.mockito.ArgumentMatchers.any;</span>
-<span class="source-line-no">046</span><span id="line-46">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">047</span><span id="line-47">import static org.mockito.Mockito.spy;</span>
-<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.verify;</span>
-<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">050</span><span id="line-50">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
-<span class="source-line-no">051</span><span id="line-51"></span>
-<span class="source-line-no">052</span><span id="line-52">import io.opentelemetry.api.common.AttributeKey;</span>
-<span class="source-line-no">053</span><span id="line-53">import io.opentelemetry.api.trace.SpanKind;</span>
-<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.trace.StatusCode;</span>
-<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule;</span>
-<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.sdk.trace.data.SpanData;</span>
-<span class="source-line-no">057</span><span id="line-57">import java.io.IOException;</span>
-<span class="source-line-no">058</span><span id="line-58">import java.net.InetSocketAddress;</span>
-<span class="source-line-no">059</span><span id="line-59">import java.nio.channels.SocketChannel;</span>
-<span class="source-line-no">060</span><span id="line-60">import java.time.Duration;</span>
-<span class="source-line-no">061</span><span id="line-61">import java.util.ArrayList;</span>
-<span class="source-line-no">062</span><span id="line-62">import java.util.Collections;</span>
-<span class="source-line-no">063</span><span id="line-63">import java.util.List;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.CellScanner;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.HBaseServerBase;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.KeyValue;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.MatcherPredicate;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.Server;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Waiter;</span>
-<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
-<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.security.User;</span>
-<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.io.compress.GzipCodec;</span>
-<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.ipc.RemoteException;</span>
-<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.util.StringUtils;</span>
-<span class="source-line-no">084</span><span id="line-84">import org.hamcrest.Matcher;</span>
-<span class="source-line-no">085</span><span id="line-85">import org.junit.Before;</span>
-<span class="source-line-no">086</span><span id="line-86">import org.junit.Rule;</span>
-<span class="source-line-no">087</span><span id="line-87">import org.junit.Test;</span>
-<span class="source-line-no">088</span><span id="line-88">import org.junit.runners.Parameterized.Parameter;</span>
-<span class="source-line-no">089</span><span id="line-89">import org.slf4j.Logger;</span>
-<span class="source-line-no">090</span><span id="line-90">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
-<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
-<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
-<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
-<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
-<span class="source-line-no">097</span><span id="line-97"></span>
-<span class="source-line-no">098</span><span id="line-98">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
-<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
-<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
-<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
-<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
-<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
-<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
-<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
-<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
-<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
-<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110">/**</span>
-<span class="source-line-no">111</span><span id="line-111"> * Some basic ipc tests.</span>
-<span class="source-line-no">112</span><span id="line-112"> */</span>
-<span class="source-line-no">113</span><span id="line-113">public abstract class AbstractTestIPC {</span>
-<span class="source-line-no">114</span><span id="line-114"></span>
-<span class="source-line-no">115</span><span id="line-115"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
-<span class="source-line-no">118</span><span id="line-118"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> protected RpcServer createRpcServer(Server server, String name,</span>
-<span class="source-line-no">123</span><span id="line-123"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
-<span class="source-line-no">124</span><span id="line-124"> RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
-<span class="source-line-no">129</span><span id="line-129"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">130</span><span id="line-130"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> @Rule</span>
-<span class="source-line-no">136</span><span id="line-136"> public OpenTelemetryRule traceRule = OpenTelemetryRule.create();</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Parameter(0)</span>
-<span class="source-line-no">139</span><span id="line-139"> public Class<? extends RpcServer> rpcServerImpl;</span>
+<span class="source-line-no">030</span><span id="line-30">import static org.awaitility.Awaitility.await;</span>
+<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.MatcherAssert.assertThat;</span>
+<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.allOf;</span>
+<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.containsString;</span>
+<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.everyItem;</span>
+<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
+<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.hasItem;</span>
+<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.instanceOf;</span>
+<span class="source-line-no">038</span><span id="line-38">import static org.hamcrest.Matchers.lessThan;</span>
+<span class="source-line-no">039</span><span id="line-39">import static org.hamcrest.Matchers.startsWith;</span>
+<span class="source-line-no">040</span><span id="line-40">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">041</span><span id="line-41">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">042</span><span id="line-42">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">043</span><span id="line-43">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">044</span><span id="line-44">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">045</span><span id="line-45">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">046</span><span id="line-46">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">047</span><span id="line-47">import static org.mockito.ArgumentMatchers.any;</span>
+<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.spy;</span>
+<span class="source-line-no">050</span><span id="line-50">import static org.mockito.Mockito.verify;</span>
+<span class="source-line-no">051</span><span id="line-51">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">052</span><span id="line-52">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.common.AttributeKey;</span>
+<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.api.trace.SpanKind;</span>
+<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.api.trace.StatusCode;</span>
+<span class="source-line-no">057</span><span id="line-57">import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension;</span>
+<span class="source-line-no">058</span><span id="line-58">import io.opentelemetry.sdk.trace.data.SpanData;</span>
+<span class="source-line-no">059</span><span id="line-59">import java.io.IOException;</span>
+<span class="source-line-no">060</span><span id="line-60">import java.net.InetSocketAddress;</span>
+<span class="source-line-no">061</span><span id="line-61">import java.nio.channels.SocketChannel;</span>
+<span class="source-line-no">062</span><span id="line-62">import java.time.Duration;</span>
+<span class="source-line-no">063</span><span id="line-63">import java.util.ArrayList;</span>
+<span class="source-line-no">064</span><span id="line-64">import java.util.Collections;</span>
+<span class="source-line-no">065</span><span id="line-65">import java.util.List;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.CellScanner;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.ExtendedCell;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.HBaseServerBase;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.KeyValue;</span>
+<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.MatcherPredicate;</span>
+<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
+<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Server;</span>
+<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.Waiter;</span>
+<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
+<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.security.User;</span>
+<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.io.compress.GzipCodec;</span>
+<span class="source-line-no">084</span><span id="line-84">import org.apache.hadoop.ipc.RemoteException;</span>
+<span class="source-line-no">085</span><span id="line-85">import org.apache.hadoop.util.StringUtils;</span>
+<span class="source-line-no">086</span><span id="line-86">import org.hamcrest.Matcher;</span>
+<span class="source-line-no">087</span><span id="line-87">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">088</span><span id="line-88">import org.junit.jupiter.api.TestTemplate;</span>
+<span class="source-line-no">089</span><span id="line-89">import org.junit.jupiter.api.extension.RegisterExtension;</span>
+<span class="source-line-no">090</span><span id="line-90">import org.slf4j.Logger;</span>
+<span class="source-line-no">091</span><span id="line-91">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
+<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
+<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
+<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
+<span class="source-line-no">097</span><span id="line-97">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
+<span class="source-line-no">098</span><span id="line-98"></span>
+<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
+<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
+<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
+<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
+<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
+<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
+<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
+<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
+<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
+<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
+<span class="source-line-no">109</span><span id="line-109">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111">/**</span>
+<span class="source-line-no">112</span><span id="line-112"> * Some basic ipc tests.</span>
+<span class="source-line-no">113</span><span id="line-113"> */</span>
+<span class="source-line-no">114</span><span id="line-114">public abstract class AbstractTestIPC {</span>
+<span class="source-line-no">115</span><span id="line-115"></span>
+<span class="source-line-no">116</span><span id="line-116"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
+<span class="source-line-no">119</span><span id="line-119"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
+<span class="source-line-no">120</span><span id="line-120"></span>
+<span class="source-line-no">121</span><span id="line-121"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">122</span><span id="line-122"></span>
+<span class="source-line-no">123</span><span id="line-123"> protected RpcServer createRpcServer(Server server, String name,</span>
+<span class="source-line-no">124</span><span id="line-124"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
+<span class="source-line-no">125</span><span id="line-125"> RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">126</span><span id="line-126"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">127</span><span id="line-127"> }</span>
+<span class="source-line-no">128</span><span id="line-128"></span>
+<span class="source-line-no">129</span><span id="line-129"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
+<span class="source-line-no">130</span><span id="line-130"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">131</span><span id="line-131"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"></span>
+<span class="source-line-no">134</span><span id="line-134"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> @RegisterExtension</span>
+<span class="source-line-no">137</span><span id="line-137"> private static final OpenTelemetryExtension OTEL_EXT = OpenTelemetryExtension.create();</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139"> private Class<? extends RpcServer> rpcServerImpl;</span>
<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141"> @Before</span>
-<span class="source-line-no">142</span><span id="line-142"> public void setUpBeforeTest() {</span>
-<span class="source-line-no">143</span><span id="line-143"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
-<span class="source-line-no">144</span><span id="line-144"> }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> /**</span>
-<span class="source-line-no">147</span><span id="line-147"> * Ensure we do not HAVE TO HAVE a codec.</span>
-<span class="source-line-no">148</span><span id="line-148"> */</span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testNoCodec() throws IOException, ServiceException {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">153</span><span id="line-153"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">154</span><span id="line-154"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">155</span><span id="line-155"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
-<span class="source-line-no">156</span><span id="line-156"> rpcServer.start();</span>
-<span class="source-line-no">157</span><span id="line-157"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">158</span><span id="line-158"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">159</span><span id="line-159"> String message = "hello";</span>
-<span class="source-line-no">160</span><span id="line-160"> assertEquals(message,</span>
-<span class="source-line-no">161</span><span id="line-161"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">162</span><span id="line-162"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">163</span><span id="line-163"> } finally {</span>
-<span class="source-line-no">164</span><span id="line-164"> rpcServer.stop();</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"> }</span>
-<span class="source-line-no">167</span><span id="line-167"></span>
-<span class="source-line-no">168</span><span id="line-168"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
-<span class="source-line-no">169</span><span id="line-169"></span>
-<span class="source-line-no">170</span><span id="line-170"> /**</span>
-<span class="source-line-no">171</span><span id="line-171"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
-<span class="source-line-no">172</span><span id="line-172"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
-<span class="source-line-no">173</span><span id="line-173"> * confirm that compression is happening down in the client and server).</span>
-<span class="source-line-no">174</span><span id="line-174"> */</span>
-<span class="source-line-no">175</span><span id="line-175"> @Test</span>
-<span class="source-line-no">176</span><span id="line-176"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
-<span class="source-line-no">177</span><span id="line-177"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">178</span><span id="line-178"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
-<span class="source-line-no">179</span><span id="line-179"> List<ExtendedCell> cells = new ArrayList<>();</span>
-<span class="source-line-no">180</span><span id="line-180"> int count = 3;</span>
-<span class="source-line-no">181</span><span id="line-181"> for (int i = 0; i < count; i++) {</span>
-<span class="source-line-no">182</span><span id="line-182"> cells.add(CELL);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">185</span><span id="line-185"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">186</span><span id="line-186"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">187</span><span id="line-187"></span>
-<span class="source-line-no">188</span><span id="line-188"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">189</span><span id="line-189"> rpcServer.start();</span>
-<span class="source-line-no">190</span><span id="line-190"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">191</span><span id="line-191"> HBaseRpcController pcrc =</span>
-<span class="source-line-no">192</span><span id="line-192"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
-<span class="source-line-no">193</span><span id="line-193"> String message = "hello";</span>
-<span class="source-line-no">194</span><span id="line-194"> assertEquals(message,</span>
-<span class="source-line-no">195</span><span id="line-195"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">196</span><span id="line-196"> int index = 0;</span>
-<span class="source-line-no">197</span><span id="line-197"> CellScanner cellScanner = pcrc.cellScanner();</span>
-<span class="source-line-no">198</span><span id="line-198"> assertNotNull(cellScanner);</span>
-<span class="source-line-no">199</span><span id="line-199"> while (cellScanner.advance()) {</span>
-<span class="source-line-no">200</span><span id="line-200"> assertEquals(CELL, cellScanner.current());</span>
-<span class="source-line-no">201</span><span id="line-201"> index++;</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> assertEquals(count, index);</span>
-<span class="source-line-no">204</span><span id="line-204"> } finally {</span>
-<span class="source-line-no">205</span><span id="line-205"> rpcServer.stop();</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"> protected abstract AbstractRpcClient<?></span>
-<span class="source-line-no">210</span><span id="line-210"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> @Test</span>
-<span class="source-line-no">213</span><span id="line-213"> public void testRTEDuringConnectionSetup() throws Exception {</span>
-<span class="source-line-no">214</span><span id="line-214"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">215</span><span id="line-215"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">216</span><span id="line-216"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">217</span><span id="line-217"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">218</span><span id="line-218"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
-<span class="source-line-no">219</span><span id="line-219"> rpcServer.start();</span>
-<span class="source-line-no">220</span><span id="line-220"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">221</span><span id="line-221"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">222</span><span id="line-222"> fail("Expected an exception to have been thrown!");</span>
-<span class="source-line-no">223</span><span id="line-223"> } catch (Exception e) {</span>
-<span class="source-line-no">224</span><span id="line-224"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">225</span><span id="line-225"> assertTrue(e.toString(), StringUtils.stringifyException(e).contains("Injected fault"));</span>
-<span class="source-line-no">226</span><span id="line-226"> } finally {</span>
-<span class="source-line-no">227</span><span id="line-227"> rpcServer.stop();</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> /**</span>
-<span class="source-line-no">232</span><span id="line-232"> * Tests that the rpc scheduler is called when requests arrive.</span>
-<span class="source-line-no">233</span><span id="line-233"> */</span>
-<span class="source-line-no">234</span><span id="line-234"> @Test</span>
-<span class="source-line-no">235</span><span id="line-235"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
-<span class="source-line-no">236</span><span id="line-236"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">237</span><span id="line-237"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">238</span><span id="line-238"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">239</span><span id="line-239"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">240</span><span id="line-240"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
-<span class="source-line-no">241</span><span id="line-241"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
-<span class="source-line-no">242</span><span id="line-242"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">243</span><span id="line-243"> rpcServer.start();</span>
-<span class="source-line-no">244</span><span id="line-244"> verify(scheduler).start();</span>
-<span class="source-line-no">245</span><span id="line-245"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">246</span><span id="line-246"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">247</span><span id="line-247"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">248</span><span id="line-248"> stub.echo(null, param);</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
-<span class="source-line-no">251</span><span id="line-251"> } finally {</span>
-<span class="source-line-no">252</span><span id="line-252"> rpcServer.stop();</span>
-<span class="source-line-no">253</span><span id="line-253"> verify(scheduler).stop();</span>
-<span class="source-line-no">254</span><span id="line-254"> }</span>
-<span class="source-line-no">255</span><span id="line-255"> }</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
-<span class="source-line-no">258</span><span id="line-258"> @Test</span>
-<span class="source-line-no">259</span><span id="line-259"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
-<span class="source-line-no">260</span><span id="line-260"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">261</span><span id="line-261"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
-<span class="source-line-no">262</span><span id="line-262"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">263</span><span id="line-263"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">264</span><span id="line-264"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
-<span class="source-line-no">265</span><span id="line-265"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">266</span><span id="line-266"> rpcServer.start();</span>
-<span class="source-line-no">267</span><span id="line-267"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">268</span><span id="line-268"> StringBuilder message = new StringBuilder(1200);</span>
-<span class="source-line-no">269</span><span id="line-269"> for (int i = 0; i < 200; i++) {</span>
-<span class="source-line-no">270</span><span id="line-270"> message.append("hello.");</span>
-<span class="source-line-no">271</span><span id="line-271"> }</span>
-<span class="source-line-no">272</span><span id="line-272"> // set total RPC size bigger than 100 bytes</span>
-<span class="source-line-no">273</span><span id="line-273"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
-<span class="source-line-no">274</span><span id="line-274"> stub.echo(new HBaseRpcControllerImpl(</span>
-<span class="source-line-no">275</span><span id="line-275"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
-<span class="source-line-no">276</span><span id="line-276"> fail("RPC should have failed because it exceeds max request size");</span>
-<span class="source-line-no">277</span><span id="line-277"> } catch (ServiceException e) {</span>
-<span class="source-line-no">278</span><span id="line-278"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">279</span><span id="line-279"> assertTrue(e.toString(),</span>
-<span class="source-line-no">280</span><span id="line-280"> StringUtils.stringifyException(e).contains("RequestTooBigException"));</span>
-<span class="source-line-no">281</span><span id="line-281"> } finally {</span>
-<span class="source-line-no">282</span><span id="line-282"> rpcServer.stop();</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"></span>
-<span class="source-line-no">286</span><span id="line-286"> /**</span>
-<span class="source-line-no">287</span><span id="line-287"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
-<span class="source-line-no">288</span><span id="line-288"> * remoteAddress set to its Call Object</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> @Test</span>
-<span class="source-line-no">291</span><span id="line-291"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
-<span class="source-line-no">292</span><span id="line-292"> throws IOException, ServiceException {</span>
-<span class="source-line-no">293</span><span id="line-293"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">294</span><span id="line-294"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">295</span><span id="line-295"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">296</span><span id="line-296"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">297</span><span id="line-297"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
-<span class="source-line-no">298</span><span id="line-298"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">299</span><span id="line-299"> rpcServer.start();</span>
-<span class="source-line-no">300</span><span id="line-300"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">301</span><span id="line-301"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
-<span class="source-line-no">302</span><span id="line-302"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
-<span class="source-line-no">303</span><span id="line-303"> } finally {</span>
-<span class="source-line-no">304</span><span id="line-304"> rpcServer.stop();</span>
-<span class="source-line-no">305</span><span id="line-305"> }</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"></span>
-<span class="source-line-no">308</span><span id="line-308"> @Test</span>
-<span class="source-line-no">309</span><span id="line-309"> public void testRemoteError() throws IOException, ServiceException {</span>
-<span class="source-line-no">310</span><span id="line-310"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">311</span><span id="line-311"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">312</span><span id="line-312"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">313</span><span id="line-313"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">314</span><span id="line-314"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">315</span><span id="line-315"> rpcServer.start();</span>
-<span class="source-line-no">316</span><span id="line-316"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">317</span><span id="line-317"> stub.error(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">318</span><span id="line-318"> } catch (ServiceException e) {</span>
-<span class="source-line-no">319</span><span id="line-319"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">320</span><span id="line-320"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">321</span><span id="line-321"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">322</span><span id="line-322"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">323</span><span id="line-323"> } finally {</span>
-<span class="source-line-no">324</span><span id="line-324"> rpcServer.stop();</span>
-<span class="source-line-no">325</span><span id="line-325"> }</span>
-<span class="source-line-no">326</span><span id="line-326"> }</span>
-<span class="source-line-no">327</span><span id="line-327"></span>
-<span class="source-line-no">328</span><span id="line-328"> @Test</span>
-<span class="source-line-no">329</span><span id="line-329"> public void testTimeout() throws IOException {</span>
-<span class="source-line-no">330</span><span id="line-330"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">331</span><span id="line-331"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">332</span><span id="line-332"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">333</span><span id="line-333"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">334</span><span id="line-334"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">335</span><span id="line-335"> rpcServer.start();</span>
-<span class="source-line-no">336</span><span id="line-336"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">337</span><span id="line-337"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">338</span><span id="line-338"> int ms = 1000;</span>
-<span class="source-line-no">339</span><span id="line-339"> int timeout = 100;</span>
-<span class="source-line-no">340</span><span id="line-340"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">341</span><span id="line-341"> pcrc.reset();</span>
-<span class="source-line-no">342</span><span id="line-342"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">343</span><span id="line-343"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">344</span><span id="line-344"> try {</span>
-<span class="source-line-no">345</span><span id="line-345"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build());</span>
-<span class="source-line-no">346</span><span id="line-346"> } catch (ServiceException e) {</span>
-<span class="source-line-no">347</span><span id="line-347"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">348</span><span id="line-348"> // expected</span>
-<span class="source-line-no">349</span><span id="line-349"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">350</span><span id="line-350"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">352</span><span id="line-352"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">353</span><span id="line-353"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">354</span><span id="line-354"> }</span>
-<span class="source-line-no">355</span><span id="line-355"> }</span>
-<span class="source-line-no">356</span><span id="line-356"> } finally {</span>
-<span class="source-line-no">357</span><span id="line-357"> rpcServer.stop();</span>
-<span class="source-line-no">358</span><span id="line-358"> }</span>
-<span class="source-line-no">359</span><span id="line-359"> }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
-<span class="source-line-no">362</span><span id="line-362"></span>
-<span class="source-line-no">363</span><span id="line-363"> FailingSimpleRpcServer(Server server, String name,</span>
-<span class="source-line-no">364</span><span id="line-364"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
-<span class="source-line-no">365</span><span id="line-365"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">366</span><span id="line-366"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
-<span class="source-line-no">367</span><span id="line-367"> }</span>
+<span class="source-line-no">141</span><span id="line-141"> protected AbstractTestIPC(Class<? extends RpcServer> rpcServerImpl) {</span>
+<span class="source-line-no">142</span><span id="line-142"> this.rpcServerImpl = rpcServerImpl;</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"> @BeforeEach</span>
+<span class="source-line-no">146</span><span id="line-146"> public void setUpBeforeTest() {</span>
+<span class="source-line-no">147</span><span id="line-147"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> }</span>
+<span class="source-line-no">149</span><span id="line-149"></span>
+<span class="source-line-no">150</span><span id="line-150"> /**</span>
+<span class="source-line-no">151</span><span id="line-151"> * Ensure we do not HAVE TO HAVE a codec.</span>
+<span class="source-line-no">152</span><span id="line-152"> */</span>
+<span class="source-line-no">153</span><span id="line-153"> @TestTemplate</span>
+<span class="source-line-no">154</span><span id="line-154"> public void testNoCodec() throws IOException, ServiceException {</span>
+<span class="source-line-no">155</span><span id="line-155"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">156</span><span id="line-156"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">157</span><span id="line-157"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">158</span><span id="line-158"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">159</span><span id="line-159"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
+<span class="source-line-no">160</span><span id="line-160"> rpcServer.start();</span>
+<span class="source-line-no">161</span><span id="line-161"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">162</span><span id="line-162"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">163</span><span id="line-163"> String message = "hello";</span>
+<span class="source-line-no">164</span><span id="line-164"> assertEquals(message,</span>
+<span class="source-line-no">165</span><span id="line-165"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">166</span><span id="line-166"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">167</span><span id="line-167"> } finally {</span>
+<span class="source-line-no">168</span><span id="line-168"> rpcServer.stop();</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"> }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> /**</span>
+<span class="source-line-no">175</span><span id="line-175"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
+<span class="source-line-no">176</span><span id="line-176"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
+<span class="source-line-no">177</span><span id="line-177"> * confirm that compression is happening down in the client and server).</span>
+<span class="source-line-no">178</span><span id="line-178"> */</span>
+<span class="source-line-no">179</span><span id="line-179"> @TestTemplate</span>
+<span class="source-line-no">180</span><span id="line-180"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
+<span class="source-line-no">181</span><span id="line-181"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">182</span><span id="line-182"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
+<span class="source-line-no">183</span><span id="line-183"> List<ExtendedCell> cells = new ArrayList<>();</span>
+<span class="source-line-no">184</span><span id="line-184"> int count = 3;</span>
+<span class="source-line-no">185</span><span id="line-185"> for (int i = 0; i < count; i++) {</span>
+<span class="source-line-no">186</span><span id="line-186"> cells.add(CELL);</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">189</span><span id="line-189"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">190</span><span id="line-190"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 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"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">193</span><span id="line-193"> rpcServer.start();</span>
+<span class="source-line-no">194</span><span id="line-194"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">195</span><span id="line-195"> HBaseRpcController pcrc =</span>
+<span class="source-line-no">196</span><span id="line-196"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
+<span class="source-line-no">197</span><span id="line-197"> String message = "hello";</span>
+<span class="source-line-no">198</span><span id="line-198"> assertEquals(message,</span>
+<span class="source-line-no">199</span><span id="line-199"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">200</span><span id="line-200"> int index = 0;</span>
+<span class="source-line-no">201</span><span id="line-201"> CellScanner cellScanner = pcrc.cellScanner();</span>
+<span class="source-line-no">202</span><span id="line-202"> assertNotNull(cellScanner);</span>
+<span class="source-line-no">203</span><span id="line-203"> while (cellScanner.advance()) {</span>
+<span class="source-line-no">204</span><span id="line-204"> assertEquals(CELL, cellScanner.current());</span>
+<span class="source-line-no">205</span><span id="line-205"> index++;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"> assertEquals(count, index);</span>
+<span class="source-line-no">208</span><span id="line-208"> } finally {</span>
+<span class="source-line-no">209</span><span id="line-209"> rpcServer.stop();</span>
+<span class="source-line-no">210</span><span id="line-210"> }</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"> protected abstract AbstractRpcClient<?></span>
+<span class="source-line-no">214</span><span id="line-214"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
+<span class="source-line-no">215</span><span id="line-215"></span>
+<span class="source-line-no">216</span><span id="line-216"> @TestTemplate</span>
+<span class="source-line-no">217</span><span id="line-217"> public void testRTEDuringConnectionSetup() throws Exception {</span>
+<span class="source-line-no">218</span><span id="line-218"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">219</span><span id="line-219"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">220</span><span id="line-220"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">221</span><span id="line-221"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">222</span><span id="line-222"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
+<span class="source-line-no">223</span><span id="line-223"> rpcServer.start();</span>
+<span class="source-line-no">224</span><span id="line-224"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">225</span><span id="line-225"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
+<span class="source-line-no">226</span><span id="line-226"> fail("Expected an exception to have been thrown!");</span>
+<span class="source-line-no">227</span><span id="line-227"> } catch (Exception e) {</span>
+<span class="source-line-no">228</span><span id="line-228"> LOG.info("Caught expected exception: " + e.toString());</span>
+<span class="source-line-no">229</span><span id="line-229"> assertTrue(StringUtils.stringifyException(e).contains("Injected fault"), e.toString());</span>
+<span class="source-line-no">230</span><span id="line-230"> } finally {</span>
+<span class="source-line-no">231</span><span id="line-231"> rpcServer.stop();</span>
+<span class="source-line-no">232</span><span id="line-232"> }</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"> * Tests that the rpc scheduler is called when requests arrive.</span>
+<span class="source-line-no">237</span><span id="line-237"> */</span>
+<span class="source-line-no">238</span><span id="line-238"> @TestTemplate</span>
+<span class="source-line-no">239</span><span id="line-239"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
+<span class="source-line-no">240</span><span id="line-240"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">241</span><span id="line-241"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">242</span><span id="line-242"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">243</span><span id="line-243"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">244</span><span id="line-244"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
+<span class="source-line-no">245</span><span id="line-245"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
+<span class="source-line-no">246</span><span id="line-246"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">247</span><span id="line-247"> rpcServer.start();</span>
+<span class="source-line-no">248</span><span id="line-248"> verify(scheduler).start();</span>
+<span class="source-line-no">249</span><span id="line-249"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">250</span><span id="line-250"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">251</span><span id="line-251"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">252</span><span id="line-252"> stub.echo(null, param);</span>
+<span class="source-line-no">253</span><span id="line-253"> }</span>
+<span class="source-line-no">254</span><span id="line-254"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
+<span class="source-line-no">255</span><span id="line-255"> } finally {</span>
+<span class="source-line-no">256</span><span id="line-256"> rpcServer.stop();</span>
+<span class="source-line-no">257</span><span id="line-257"> verify(scheduler).stop();</span>
+<span class="source-line-no">258</span><span id="line-258"> }</span>
+<span class="source-line-no">259</span><span id="line-259"> }</span>
+<span class="source-line-no">260</span><span id="line-260"></span>
+<span class="source-line-no">261</span><span id="line-261"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
+<span class="source-line-no">262</span><span id="line-262"> @TestTemplate</span>
+<span class="source-line-no">263</span><span id="line-263"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
+<span class="source-line-no">264</span><span id="line-264"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">265</span><span id="line-265"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
+<span class="source-line-no">266</span><span id="line-266"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">267</span><span id="line-267"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">268</span><span id="line-268"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
+<span class="source-line-no">269</span><span id="line-269"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">270</span><span id="line-270"> rpcServer.start();</span>
+<span class="source-line-no">271</span><span id="line-271"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">272</span><span id="line-272"> StringBuilder message = new StringBuilder(1200);</span>
+<span class="source-line-no">273</span><span id="line-273"> for (int i = 0; i < 200; i++) {</span>
+<span class="source-line-no">274</span><span id="line-274"> message.append("hello.");</span>
+<span class="source-line-no">275</span><span id="line-275"> }</span>
+<span class="source-line-no">276</span><span id="line-276"> // set total RPC size bigger than 100 bytes</span>
+<span class="source-line-no">277</span><span id="line-277"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
+<span class="source-line-no">278</span><span id="line-278"> stub.echo(new HBaseRpcControllerImpl(</span>
+<span class="source-line-no">279</span><span id="line-279"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
+<span class="source-line-no">280</span><span id="line-280"> fail("RPC should have failed because it exceeds max request size");</span>
+<span class="source-line-no">281</span><span id="line-281"> } catch (ServiceException e) {</span>
+<span class="source-line-no">282</span><span id="line-282"> LOG.info("Caught expected exception: " + e);</span>
+<span class="source-line-no">283</span><span id="line-283"> assertTrue(StringUtils.stringifyException(e).contains("RequestTooBigException"),</span>
+<span class="source-line-no">284</span><span id="line-284"> e.toString());</span>
+<span class="source-line-no">285</span><span id="line-285"> } finally {</span>
+<span class="source-line-no">286</span><span id="line-286"> rpcServer.stop();</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
+<span class="source-line-no">292</span><span id="line-292"> * remoteAddress set to its Call Object</span>
+<span class="source-line-no">293</span><span id="line-293"> */</span>
+<span class="source-line-no">294</span><span id="line-294"> @TestTemplate</span>
+<span class="source-line-no">295</span><span id="line-295"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
+<span class="source-line-no">296</span><span id="line-296"> throws IOException, ServiceException {</span>
+<span class="source-line-no">297</span><span id="line-297"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">298</span><span id="line-298"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">299</span><span id="line-299"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">300</span><span id="line-300"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">301</span><span id="line-301"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
+<span class="source-line-no">302</span><span id="line-302"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">303</span><span id="line-303"> rpcServer.start();</span>
+<span class="source-line-no">304</span><span id="line-304"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">305</span><span id="line-305"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
+<span class="source-line-no">306</span><span id="line-306"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
+<span class="source-line-no">307</span><span id="line-307"> } finally {</span>
+<span class="source-line-no">308</span><span id="line-308"> rpcServer.stop();</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"> }</span>
+<span class="source-line-no">311</span><span id="line-311"></span>
+<span class="source-line-no">312</span><span id="line-312"> @TestTemplate</span>
+<span class="source-line-no">313</span><span id="line-313"> public void testRemoteError() throws IOException, ServiceException {</span>
+<span class="source-line-no">314</span><span id="line-314"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">315</span><span id="line-315"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">316</span><span id="line-316"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">317</span><span id="line-317"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">318</span><span id="line-318"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">319</span><span id="line-319"> rpcServer.start();</span>
+<span class="source-line-no">320</span><span id="line-320"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">321</span><span id="line-321"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">322</span><span id="line-322"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">323</span><span id="line-323"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">324</span><span id="line-324"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">325</span><span id="line-325"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">326</span><span id="line-326"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">327</span><span id="line-327"> } finally {</span>
+<span class="source-line-no">328</span><span id="line-328"> rpcServer.stop();</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"> }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332"> @TestTemplate</span>
+<span class="source-line-no">333</span><span id="line-333"> public void testTimeout() throws IOException {</span>
+<span class="source-line-no">334</span><span id="line-334"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">335</span><span id="line-335"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">336</span><span id="line-336"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">337</span><span id="line-337"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">338</span><span id="line-338"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">339</span><span id="line-339"> rpcServer.start();</span>
+<span class="source-line-no">340</span><span id="line-340"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">341</span><span id="line-341"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">342</span><span id="line-342"> int ms = 1000;</span>
+<span class="source-line-no">343</span><span id="line-343"> int timeout = 100;</span>
+<span class="source-line-no">344</span><span id="line-344"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">345</span><span id="line-345"> pcrc.reset();</span>
+<span class="source-line-no">346</span><span id="line-346"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">347</span><span id="line-347"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">348</span><span id="line-348"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">349</span><span id="line-349"> () -> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build()));</span>
+<span class="source-line-no">350</span><span id="line-350"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">351</span><span id="line-351"> // expected</span>
+<span class="source-line-no">352</span><span id="line-352"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">353</span><span id="line-353"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">354</span><span id="line-354"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">355</span><span id="line-355"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">356</span><span id="line-356"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">357</span><span id="line-357"> }</span>
+<span class="source-line-no">358</span><span id="line-358"> } finally {</span>
+<span class="source-line-no">359</span><span id="line-359"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">360</span><span id="line-360"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">361</span><span id="line-361"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">362</span><span id="line-362"> rpcServer.stop();</span>
+<span class="source-line-no">363</span><span id="line-363"> }</span>
+<span class="source-line-no">364</span><span id="line-364"> }</span>
+<span class="source-line-no">365</span><span id="line-365"></span>
+<span class="source-line-no">366</span><span id="line-366"> @SuppressWarnings("deprecation")</span>
+<span class="source-line-no">367</span><span id="line-367"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> final class FailingConnection extends SimpleServerRpcConnection {</span>
-<span class="source-line-no">370</span><span id="line-370"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
-<span class="source-line-no">371</span><span id="line-371"> long lastContact) {</span>
-<span class="source-line-no">372</span><span id="line-372"> super(rpcServer, channel, lastContact);</span>
-<span class="source-line-no">373</span><span id="line-373"> }</span>
+<span class="source-line-no">369</span><span id="line-369"> FailingSimpleRpcServer(Server server, String name,</span>
+<span class="source-line-no">370</span><span id="line-370"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
+<span class="source-line-no">371</span><span id="line-371"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">372</span><span id="line-372"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
+<span class="source-line-no">373</span><span id="line-373"> }</span>
<span class="source-line-no">374</span><span id="line-374"></span>
-<span class="source-line-no">375</span><span id="line-375"> @Override</span>
-<span class="source-line-no">376</span><span id="line-376"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
-<span class="source-line-no">377</span><span id="line-377"> // this will throw exception after the connection header is read, and an RPC is sent</span>
-<span class="source-line-no">378</span><span id="line-378"> // from client</span>
-<span class="source-line-no">379</span><span id="line-379"> throw new DoNotRetryIOException("Failing for test");</span>
-<span class="source-line-no">380</span><span id="line-380"> }</span>
-<span class="source-line-no">381</span><span id="line-381"> }</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> @Override</span>
-<span class="source-line-no">384</span><span id="line-384"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
-<span class="source-line-no">385</span><span id="line-385"> return new FailingConnection(this, channel, time);</span>
-<span class="source-line-no">386</span><span id="line-386"> }</span>
-<span class="source-line-no">387</span><span id="line-387"> }</span>
+<span class="source-line-no">375</span><span id="line-375"> final class FailingConnection extends SimpleServerRpcConnection {</span>
+<span class="source-line-no">376</span><span id="line-376"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
+<span class="source-line-no">377</span><span id="line-377"> long lastContact) {</span>
+<span class="source-line-no">378</span><span id="line-378"> super(rpcServer, channel, lastContact);</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"></span>
+<span class="source-line-no">381</span><span id="line-381"> @Override</span>
+<span class="source-line-no">382</span><span id="line-382"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
+<span class="source-line-no">383</span><span id="line-383"> // this will throw exception after the connection header is read, and an RPC is sent</span>
+<span class="source-line-no">384</span><span id="line-384"> // from client</span>
+<span class="source-line-no">385</span><span id="line-385"> throw new DoNotRetryIOException("Failing for test");</span>
+<span class="source-line-no">386</span><span id="line-386"> }</span>
+<span class="source-line-no">387</span><span id="line-387"> }</span>
<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389"> protected RpcServer createTestFailingRpcServer(final String name,</span>
-<span class="source-line-no">390</span><span id="line-390"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
-<span class="source-line-no">391</span><span id="line-391"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">392</span><span id="line-392"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
-<span class="source-line-no">393</span><span id="line-393"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">394</span><span id="line-394"> } else {</span>
-<span class="source-line-no">395</span><span id="line-395"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">396</span><span id="line-396"> }</span>
-<span class="source-line-no">397</span><span id="line-397"> }</span>
-<span class="source-line-no">398</span><span id="line-398"></span>
-<span class="source-line-no">399</span><span id="line-399"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
-<span class="source-line-no">400</span><span id="line-400"> @Test</span>
-<span class="source-line-no">401</span><span id="line-401"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">403</span><span id="line-403"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
-<span class="source-line-no">404</span><span id="line-404"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">405</span><span id="line-405"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">406</span><span id="line-406"></span>
-<span class="source-line-no">407</span><span id="line-407"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">408</span><span id="line-408"> rpcServer.start();</span>
-<span class="source-line-no">409</span><span id="line-409"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">410</span><span id="line-410"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">411</span><span id="line-411"> stub.echo(null, param);</span>
-<span class="source-line-no">412</span><span id="line-412"> fail("RPC should have failed because connection closed");</span>
-<span class="source-line-no">413</span><span id="line-413"> } catch (ServiceException e) {</span>
-<span class="source-line-no">414</span><span id="line-414"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">415</span><span id="line-415"> } finally {</span>
-<span class="source-line-no">416</span><span id="line-416"> rpcServer.stop();</span>
-<span class="source-line-no">417</span><span id="line-417"> }</span>
-<span class="source-line-no">418</span><span id="line-418"> }</span>
-<span class="source-line-no">419</span><span id="line-419"></span>
-<span class="source-line-no">420</span><span id="line-420"> @Test</span>
-<span class="source-line-no">421</span><span id="line-421"> public void testAsyncEcho() throws IOException {</span>
-<span class="source-line-no">422</span><span id="line-422"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">423</span><span id="line-423"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">424</span><span id="line-424"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">425</span><span id="line-425"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">426</span><span id="line-426"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">427</span><span id="line-427"> rpcServer.start();</span>
-<span class="source-line-no">428</span><span id="line-428"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">429</span><span id="line-429"> int num = 10;</span>
-<span class="source-line-no">430</span><span id="line-430"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">431</span><span id="line-431"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">432</span><span id="line-432"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">433</span><span id="line-433"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">434</span><span id="line-434"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">435</span><span id="line-435"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
-<span class="source-line-no">436</span><span id="line-436"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">437</span><span id="line-437"> callbackList.add(done);</span>
-<span class="source-line-no">438</span><span id="line-438"> }</span>
-<span class="source-line-no">439</span><span id="line-439"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">440</span><span id="line-440"> EchoResponseProto resp = callbackList.get(i).get();</span>
-<span class="source-line-no">441</span><span id="line-441"> HBaseRpcController pcrc = pcrcList.get(i);</span>
-<span class="source-line-no">442</span><span id="line-442"> assertEquals("hello-" + i, resp.getMessage());</span>
-<span class="source-line-no">443</span><span id="line-443"> assertFalse(pcrc.failed());</span>
-<span class="source-line-no">444</span><span id="line-444"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">445</span><span id="line-445"> }</span>
-<span class="source-line-no">446</span><span id="line-446"> } finally {</span>
-<span class="source-line-no">447</span><span id="line-447"> rpcServer.stop();</span>
-<span class="source-line-no">448</span><span id="line-448"> }</span>
-<span class="source-line-no">449</span><span id="line-449"> }</span>
-<span class="source-line-no">450</span><span id="line-450"></span>
-<span class="source-line-no">451</span><span id="line-451"> @Test</span>
-<span class="source-line-no">452</span><span id="line-452"> public void testAsyncRemoteError() throws IOException {</span>
-<span class="source-line-no">453</span><span id="line-453"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">454</span><span id="line-454"> AbstractRpcClient<?> client = createRpcClient(clientConf);</span>
-<span class="source-line-no">455</span><span id="line-455"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">456</span><span id="line-456"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">457</span><span id="line-457"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">458</span><span id="line-458"> try {</span>
-<span class="source-line-no">459</span><span id="line-459"> rpcServer.start();</span>
-<span class="source-line-no">460</span><span id="line-460"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">461</span><span id="line-461"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">462</span><span id="line-462"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">463</span><span id="line-463"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
-<span class="source-line-no">464</span><span id="line-464"> assertNull(callback.get());</span>
-<span class="source-line-no">465</span><span id="line-465"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">466</span><span id="line-466"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">467</span><span id="line-467"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">468</span><span id="line-468"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">469</span><span id="line-469"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">470</span><span id="line-470"> } finally {</span>
-<span class="source-line-no">471</span><span id="line-471"> client.close();</span>
-<span class="source-line-no">472</span><span id="line-472"> rpcServer.stop();</span>
-<span class="source-line-no">473</span><span id="line-473"> }</span>
-<span class="source-line-no">474</span><span id="line-474"> }</span>
-<span class="source-line-no">475</span><span id="line-475"></span>
-<span class="source-line-no">476</span><span id="line-476"> @Test</span>
-<span class="source-line-no">477</span><span id="line-477"> public void testAsyncTimeout() throws IOException {</span>
-<span class="source-line-no">478</span><span id="line-478"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">479</span><span id="line-479"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">480</span><span id="line-480"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">481</span><span id="line-481"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">482</span><span id="line-482"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">483</span><span id="line-483"> rpcServer.start();</span>
-<span class="source-line-no">484</span><span id="line-484"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">485</span><span id="line-485"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">486</span><span id="line-486"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">487</span><span id="line-487"> int ms = 1000;</span>
-<span class="source-line-no">488</span><span id="line-488"> int timeout = 100;</span>
-<span class="source-line-no">489</span><span id="line-489"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">490</span><span id="line-490"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">491</span><span id="line-491"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">492</span><span id="line-492"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">493</span><span id="line-493"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">494</span><span id="line-494"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
-<span class="source-line-no">495</span><span id="line-495"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">496</span><span id="line-496"> callbackList.add(callback);</span>
-<span class="source-line-no">497</span><span id="line-497"> }</span>
-<span class="source-line-no">498</span><span id="line-498"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
-<span class="source-line-no">499</span><span id="line-499"> assertNull(callback.get());</span>
-<span class="source-line-no">500</span><span id="line-500"> }</span>
-<span class="source-line-no">501</span><span id="line-501"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">502</span><span id="line-502"> for (HBaseRpcController pcrc : pcrcList) {</span>
-<span class="source-line-no">503</span><span id="line-503"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">504</span><span id="line-504"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">505</span><span id="line-505"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">506</span><span id="line-506"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">507</span><span id="line-507"> }</span>
-<span class="source-line-no">508</span><span id="line-508"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">509</span><span id="line-509"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">510</span><span id="line-510"> } finally {</span>
-<span class="source-line-no">511</span><span id="line-511"> rpcServer.stop();</span>
-<span class="source-line-no">512</span><span id="line-512"> }</span>
-<span class="source-line-no">513</span><span id="line-513"> }</span>
-<span class="source-line-no">514</span><span id="line-514"></span>
-<span class="source-line-no">515</span><span id="line-515"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
-<span class="source-line-no">516</span><span id="line-516"> Waiter.waitFor(CONF, 1000,</span>
-<span class="source-line-no">517</span><span id="line-517"> new MatcherPredicate<>(() -> traceRule.getSpans(), hasItem(matcher)));</span>
-<span class="source-line-no">518</span><span id="line-518"> return traceRule.getSpans().stream().filter(matcher::matches).findFirst()</span>
-<span class="source-line-no">519</span><span id="line-519"> .orElseThrow(AssertionError::new);</span>
-<span class="source-line-no">520</span><span id="line-520"> }</span>
-<span class="source-line-no">521</span><span id="line-521"></span>
-<span class="source-line-no">522</span><span id="line-522"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">523</span><span id="line-523"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">389</span><span id="line-389"> @Override</span>
+<span class="source-line-no">390</span><span id="line-390"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
+<span class="source-line-no">391</span><span id="line-391"> return new FailingConnection(this, channel, time);</span>
+<span class="source-line-no">392</span><span id="line-392"> }</span>
+<span class="source-line-no">393</span><span id="line-393"> }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395"> protected RpcServer createTestFailingRpcServer(final String name,</span>
+<span class="source-line-no">396</span><span id="line-396"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
+<span class="source-line-no">397</span><span id="line-397"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">398</span><span id="line-398"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
+<span class="source-line-no">399</span><span id="line-399"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">400</span><span id="line-400"> } else {</span>
+<span class="source-line-no">401</span><span id="line-401"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">402</span><span id="line-402"> }</span>
+<span class="source-line-no">403</span><span id="line-403"> }</span>
+<span class="source-line-no">404</span><span id="line-404"></span>
+<span class="source-line-no">405</span><span id="line-405"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
+<span class="source-line-no">406</span><span id="line-406"> @TestTemplate</span>
+<span class="source-line-no">407</span><span id="line-407"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">409</span><span id="line-409"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
+<span class="source-line-no">410</span><span id="line-410"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">411</span><span id="line-411"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">412</span><span id="line-412"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">413</span><span id="line-413"> rpcServer.start();</span>
+<span class="source-line-no">414</span><span id="line-414"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">415</span><span id="line-415"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">416</span><span id="line-416"> ServiceException se = assertThrows(ServiceException.class, () -> stub.echo(null, param),</span>
+<span class="source-line-no">417</span><span id="line-417"> "RPC should have failed because connection closed");</span>
+<span class="source-line-no">418</span><span id="line-418"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">419</span><span id="line-419"> } finally {</span>
+<span class="source-line-no">420</span><span id="line-420"> rpcServer.stop();</span>
+<span class="source-line-no">421</span><span id="line-421"> }</span>
+<span class="source-line-no">422</span><span id="line-422"> }</span>
+<span class="source-line-no">423</span><span id="line-423"></span>
+<span class="source-line-no">424</span><span id="line-424"> @TestTemplate</span>
+<span class="source-line-no">425</span><span id="line-425"> public void testAsyncEcho() throws IOException {</span>
+<span class="source-line-no">426</span><span id="line-426"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">427</span><span id="line-427"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">428</span><span id="line-428"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">429</span><span id="line-429"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">430</span><span id="line-430"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">431</span><span id="line-431"> rpcServer.start();</span>
+<span class="source-line-no">432</span><span id="line-432"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">433</span><span id="line-433"> int num = 10;</span>
+<span class="source-line-no">434</span><span id="line-434"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">435</span><span id="line-435"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">436</span><span id="line-436"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">437</span><span id="line-437"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">438</span><span id="line-438"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">439</span><span id="line-439"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
+<span class="source-line-no">440</span><span id="line-440"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">441</span><span id="line-441"> callbackList.add(done);</span>
+<span class="source-line-no">442</span><span id="line-442"> }</span>
+<span class="source-line-no">443</span><span id="line-443"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">444</span><span id="line-444"> EchoResponseProto resp = callbackList.get(i).get();</span>
+<span class="source-line-no">445</span><span id="line-445"> HBaseRpcController pcrc = pcrcList.get(i);</span>
+<span class="source-line-no">446</span><span id="line-446"> assertEquals("hello-" + i, resp.getMessage());</span>
+<span class="source-line-no">447</span><span id="line-447"> assertFalse(pcrc.failed());</span>
+<span class="source-line-no">448</span><span id="line-448"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">449</span><span id="line-449"> }</span>
+<span class="source-line-no">450</span><span id="line-450"> } finally {</span>
+<span class="source-line-no">451</span><span id="line-451"> rpcServer.stop();</span>
+<span class="source-line-no">452</span><span id="line-452"> }</span>
+<span class="source-line-no">453</span><span id="line-453"> }</span>
+<span class="source-line-no">454</span><span id="line-454"></span>
+<span class="source-line-no">455</span><span id="line-455"> @TestTemplate</span>
+<span class="source-line-no">456</span><span id="line-456"> public void testAsyncRemoteError() throws IOException {</span>
+<span class="source-line-no">457</span><span id="line-457"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">458</span><span id="line-458"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">459</span><span id="line-459"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">460</span><span id="line-460"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">461</span><span id="line-461"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">462</span><span id="line-462"> rpcServer.start();</span>
+<span class="source-line-no">463</span><span id="line-463"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">464</span><span id="line-464"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">465</span><span id="line-465"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">466</span><span id="line-466"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
+<span class="source-line-no">467</span><span id="line-467"> assertNull(callback.get());</span>
+<span class="source-line-no">468</span><span id="line-468"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">469</span><span id="line-469"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">470</span><span id="line-470"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">471</span><span id="line-471"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">472</span><span id="line-472"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">473</span><span id="line-473"> } finally {</span>
+<span class="source-line-no">474</span><span id="line-474"> rpcServer.stop();</span>
+<span class="source-line-no">475</span><span id="line-475"> }</span>
+<span class="source-line-no">476</span><span id="line-476"> }</span>
+<span class="source-line-no">477</span><span id="line-477"></span>
+<span class="source-line-no">478</span><span id="line-478"> @TestTemplate</span>
+<span class="source-line-no">479</span><span id="line-479"> public void testAsyncTimeout() throws IOException {</span>
+<span class="source-line-no">480</span><span id="line-480"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">481</span><span id="line-481"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">482</span><span id="line-482"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">483</span><span id="line-483"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">484</span><span id="line-484"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">485</span><span id="line-485"> rpcServer.start();</span>
+<span class="source-line-no">486</span><span id="line-486"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">487</span><span id="line-487"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">488</span><span id="line-488"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">489</span><span id="line-489"> int ms = 1000;</span>
+<span class="source-line-no">490</span><span id="line-490"> int timeout = 100;</span>
+<span class="source-line-no">491</span><span id="line-491"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">492</span><span id="line-492"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">493</span><span id="line-493"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">494</span><span id="line-494"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">495</span><span id="line-495"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">496</span><span id="line-496"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
+<span class="source-line-no">497</span><span id="line-497"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">498</span><span id="line-498"> callbackList.add(callback);</span>
+<span class="source-line-no">499</span><span id="line-499"> }</span>
+<span class="source-line-no">500</span><span id="line-500"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
+<span class="source-line-no">501</span><span id="line-501"> assertNull(callback.get());</span>
+<span class="source-line-no">502</span><span id="line-502"> }</span>
+<span class="source-line-no">503</span><span id="line-503"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">504</span><span id="line-504"> for (HBaseRpcController pcrc : pcrcList) {</span>
+<span class="source-line-no">505</span><span id="line-505"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">506</span><span id="line-506"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">507</span><span id="line-507"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">508</span><span id="line-508"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">509</span><span id="line-509"> }</span>
+<span class="source-line-no">510</span><span id="line-510"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">511</span><span id="line-511"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">512</span><span id="line-512"> } finally {</span>
+<span class="source-line-no">513</span><span id="line-513"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">514</span><span id="line-514"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">515</span><span id="line-515"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">516</span><span id="line-516"> rpcServer.stop();</span>
+<span class="source-line-no">517</span><span id="line-517"> }</span>
+<span class="source-line-no">518</span><span id="line-518"> }</span>
+<span class="source-line-no">519</span><span id="line-519"></span>
+<span class="source-line-no">520</span><span id="line-520"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
+<span class="source-line-no">521</span><span id="line-521"> Waiter.waitFor(CONF, 1000, new MatcherPredicate<>(() -> OTEL_EXT.getSpans(), hasItem(matcher)));</span>
+<span class="source-line-no">522</span><span id="line-522"> return OTEL_EXT.getSpans().stream().filter(matcher::matches).findFirst()</span>
+<span class="source-line-no">523</span><span id="line-523"> .orElseThrow(AssertionError::new);</span>
<span class="source-line-no">524</span><span id="line-524"> }</span>
<span class="source-line-no">525</span><span id="line-525"></span>
-<span class="source-line-no">526</span><span id="line-526"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">527</span><span id="line-527"> final String methodName) {</span>
-<span class="source-line-no">528</span><span id="line-528"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">529</span><span id="line-529"> hasKind(SpanKind.CLIENT));</span>
-<span class="source-line-no">530</span><span id="line-530"> }</span>
-<span class="source-line-no">531</span><span id="line-531"></span>
-<span class="source-line-no">532</span><span id="line-532"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">533</span><span id="line-533"> final String methodName) {</span>
-<span class="source-line-no">534</span><span id="line-534"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">535</span><span id="line-535"> hasKind(SpanKind.SERVER));</span>
-<span class="source-line-no">536</span><span id="line-536"> }</span>
-<span class="source-line-no">537</span><span id="line-537"></span>
-<span class="source-line-no">538</span><span id="line-538"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
-<span class="source-line-no">539</span><span id="line-539"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
-<span class="source-line-no">540</span><span id="line-540"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">541</span><span id="line-541"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
-<span class="source-line-no">542</span><span id="line-542"> containsEntry("net.peer.name", isa.getHostName()),</span>
-<span class="source-line-no">543</span><span id="line-543"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
-<span class="source-line-no">544</span><span id="line-544"> }</span>
-<span class="source-line-no">545</span><span id="line-545"></span>
-<span class="source-line-no">546</span><span id="line-546"> private static Matcher<SpanData></span>
-<span class="source-line-no">547</span><span id="line-547"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">548</span><span id="line-548"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">549</span><span id="line-549"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
-<span class="source-line-no">550</span><span id="line-550"> }</span>
-<span class="source-line-no">551</span><span id="line-551"></span>
-<span class="source-line-no">552</span><span id="line-552"> private void assertRemoteSpan() {</span>
-<span class="source-line-no">553</span><span id="line-553"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
-<span class="source-line-no">554</span><span id="line-554"> assertTrue(data.getParentSpanContext().isRemote());</span>
-<span class="source-line-no">555</span><span id="line-555"> assertEquals(SpanKind.SERVER, data.getKind());</span>
-<span class="source-line-no">556</span><span id="line-556"> }</span>
-<span class="source-line-no">557</span><span id="line-557"></span>
-<span class="source-line-no">558</span><span id="line-558"> @Test</span>
-<span class="source-line-no">559</span><span id="line-559"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
-<span class="source-line-no">560</span><span id="line-560"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">561</span><span id="line-561"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">562</span><span id="line-562"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">563</span><span id="line-563"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">564</span><span id="line-564"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">565</span><span id="line-565"> rpcServer.start();</span>
-<span class="source-line-no">566</span><span id="line-566"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">567</span><span id="line-567"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
-<span class="source-line-no">568</span><span id="line-568"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">569</span><span id="line-569"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">570</span><span id="line-570"> final SpanData pauseClientSpan =</span>
-<span class="source-line-no">571</span><span id="line-571"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">572</span><span id="line-572"> assertThat(pauseClientSpan,</span>
-<span class="source-line-no">573</span><span id="line-573"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
-<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseServerSpan =</span>
-<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseServerSpan,</span>
-<span class="source-line-no">577</span><span id="line-577"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">578</span><span id="line-578"> assertRemoteSpan();</span>
-<span class="source-line-no">579</span><span id="line-579"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">580</span><span id="line-580"> assertThat(traceRule.getSpans(),</span>
-<span class="source-line-no">581</span><span id="line-581"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
-<span class="source-line-no">582</span><span id="line-582"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()),</span>
-<span class="source-line-no">583</span><span id="line-583"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
-<span class="source-line-no">584</span><span id="line-584"> } finally {</span>
-<span class="source-line-no">585</span><span id="line-585"> rpcServer.stop();</span>
-<span class="source-line-no">586</span><span id="line-586"> }</span>
-<span class="source-line-no">587</span><span id="line-587"> }</span>
-<span class="source-line-no">588</span><span id="line-588"></span>
-<span class="source-line-no">589</span><span id="line-589"> @Test</span>
-<span class="source-line-no">590</span><span id="line-590"> public void testTracingErrorIpc() throws IOException {</span>
-<span class="source-line-no">591</span><span id="line-591"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">592</span><span id="line-592"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">593</span><span id="line-593"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">594</span><span id="line-594"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">595</span><span id="line-595"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">596</span><span id="line-596"> rpcServer.start();</span>
-<span class="source-line-no">597</span><span id="line-597"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">598</span><span id="line-598"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">599</span><span id="line-599"> assertThrows(ServiceException.class,</span>
-<span class="source-line-no">600</span><span id="line-600"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
-<span class="source-line-no">601</span><span id="line-601"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">602</span><span id="line-602"> final SpanData errorClientSpan =</span>
-<span class="source-line-no">603</span><span id="line-603"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">604</span><span id="line-604"> assertThat(errorClientSpan,</span>
-<span class="source-line-no">605</span><span id="line-605"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
-<span class="source-line-no">606</span><span id="line-606"> final SpanData errorServerSpan =</span>
-<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">608</span><span id="line-608"> assertThat(errorServerSpan,</span>
-<span class="source-line-no">609</span><span id="line-609"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">610</span><span id="line-610"> assertRemoteSpan();</span>
-<span class="source-line-no">611</span><span id="line-611"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">612</span><span id="line-612"> assertThat(traceRule.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
-<span class="source-line-no">613</span><span id="line-613"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()))));</span>
-<span class="source-line-no">614</span><span id="line-614"> } finally {</span>
-<span class="source-line-no">615</span><span id="line-615"> rpcServer.stop();</span>
-<span class="source-line-no">616</span><span id="line-616"> }</span>
-<span class="source-line-no">617</span><span id="line-617"> }</span>
-<span class="source-line-no">618</span><span id="line-618"></span>
-<span class="source-line-no">619</span><span id="line-619"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
-<span class="source-line-no">620</span><span id="line-620"></span>
-<span class="source-line-no">621</span><span id="line-621"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
-<span class="source-line-no">622</span><span id="line-622"> ServiceException se = assertThrows(ServiceException.class,</span>
-<span class="source-line-no">623</span><span id="line-623"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
-<span class="source-line-no">624</span><span id="line-624"> return ProtobufUtil.handleRemoteException(se);</span>
-<span class="source-line-no">625</span><span id="line-625"> }</span>
-<span class="source-line-no">626</span><span id="line-626"></span>
-<span class="source-line-no">627</span><span id="line-627"> @Test</span>
-<span class="source-line-no">628</span><span id="line-628"> public void testBadPreambleHeader() throws Exception {</span>
-<span class="source-line-no">629</span><span id="line-629"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">630</span><span id="line-630"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">631</span><span id="line-631"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">632</span><span id="line-632"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
-<span class="source-line-no">633</span><span id="line-633"> rpcServer.start();</span>
-<span class="source-line-no">634</span><span id="line-634"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">635</span><span id="line-635"> BadAuthException error = null;</span>
-<span class="source-line-no">636</span><span id="line-636"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
-<span class="source-line-no">637</span><span id="line-637"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
-<span class="source-line-no">638</span><span id="line-638"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">639</span><span id="line-639"> IOException ioe = doBadPreableHeaderCall(stub);</span>
-<span class="source-line-no">640</span><span id="line-640"> if (ioe instanceof BadAuthException) {</span>
-<span class="source-line-no">641</span><span id="line-641"> error = (BadAuthException) ioe;</span>
-<span class="source-line-no">642</span><span id="line-642"> break;</span>
-<span class="source-line-no">643</span><span id="line-643"> }</span>
-<span class="source-line-no">644</span><span id="line-644"> Thread.sleep(100);</span>
-<span class="source-line-no">645</span><span id="line-645"> }</span>
-<span class="source-line-no">646</span><span id="line-646"> assertNotNull("Can not get expected BadAuthException", error);</span>
-<span class="source-line-no">647</span><span id="line-647"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
-<span class="source-line-no">648</span><span id="line-648"> } finally {</span>
-<span class="source-line-no">649</span><span id="line-649"> rpcServer.stop();</span>
-<span class="source-line-no">650</span><span id="line-650"> }</span>
-<span class="source-line-no">651</span><span id="line-651"> }</span>
-<span class="source-line-no">652</span><span id="line-652"></span>
-<span class="source-line-no">653</span><span id="line-653"> /**</span>
-<span class="source-line-no">654</span><span id="line-654"> * Testcase for getting connection registry information through connection preamble header, see</span>
-<span class="source-line-no">655</span><span id="line-655"> * HBASE-25051 for more details.</span>
-<span class="source-line-no">656</span><span id="line-656"> */</span>
-<span class="source-line-no">657</span><span id="line-657"> @Test</span>
-<span class="source-line-no">658</span><span id="line-658"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
-<span class="source-line-no">659</span><span id="line-659"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">660</span><span id="line-660"> String clusterId = "test_cluster_id";</span>
-<span class="source-line-no">661</span><span id="line-661"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
-<span class="source-line-no">662</span><span id="line-662"> when(server.getClusterId()).thenReturn(clusterId);</span>
-<span class="source-line-no">663</span><span id="line-663"> // do not need any services</span>
-<span class="source-line-no">664</span><span id="line-664"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">665</span><span id="line-665"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">666</span><span id="line-666"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">667</span><span id="line-667"> rpcServer.start();</span>
-<span class="source-line-no">668</span><span id="line-668"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">669</span><span id="line-669"> BlockingRpcChannel channel =</span>
-<span class="source-line-no">670</span><span id="line-670"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
-<span class="source-line-no">671</span><span id="line-671"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">672</span><span id="line-672"> ConnectionRegistryService.BlockingInterface stub =</span>
-<span class="source-line-no">673</span><span id="line-673"> ConnectionRegistryService.newBlockingStub(channel);</span>
-<span class="source-line-no">674</span><span id="line-674"> GetConnectionRegistryResponse resp =</span>
-<span class="source-line-no">675</span><span id="line-675"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
-<span class="source-line-no">676</span><span id="line-676"> assertEquals(clusterId, resp.getClusterId());</span>
-<span class="source-line-no">677</span><span id="line-677"> } finally {</span>
-<span class="source-line-no">678</span><span id="line-678"> rpcServer.stop();</span>
-<span class="source-line-no">679</span><span id="line-679"> }</span>
-<span class="source-line-no">680</span><span id="line-680"> }</span>
-<span class="source-line-no">681</span><span id="line-681"></span>
-<span class="source-line-no">682</span><span id="line-682"> /**</span>
-<span class="source-line-no">683</span><span id="line-683"> * Test server does not support getting connection registry information through connection</span>
-<span class="source-line-no">684</span><span id="line-684"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
-<span class="source-line-no">685</span><span id="line-685"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
-<span class="source-line-no">686</span><span id="line-686"> */</span>
-<span class="source-line-no">687</span><span id="line-687"> @Test</span>
-<span class="source-line-no">688</span><span id="line-688"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
-<span class="source-line-no">689</span><span id="line-689"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">690</span><span id="line-690"> // do not need any services</span>
-<span class="source-line-no">691</span><span id="line-691"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">692</span><span id="line-692"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">693</span><span id="line-693"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">694</span><span id="line-694"> rpcServer.start();</span>
-<span class="source-line-no">695</span><span id="line-695"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">696</span><span id="line-696"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
-<span class="source-line-no">697</span><span id="line-697"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">698</span><span id="line-698"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
-<span class="source-line-no">699</span><span id="line-699"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">700</span><span id="line-700"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">701</span><span id="line-701"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
-<span class="source-line-no">702</span><span id="line-702"> // should have failed so no response</span>
-<span class="source-line-no">703</span><span id="line-703"> assertNull(done.get());</span>
-<span class="source-line-no">704</span><span id="line-704"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">705</span><span id="line-705"> // should be a FatalConnectionException</span>
-<span class="source-line-no">706</span><span id="line-706"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
-<span class="source-line-no">707</span><span id="line-707"> assertEquals(FatalConnectionException.class.getName(),</span>
-<span class="source-line-no">708</span><span id="line-708"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
-<span class="source-line-no">709</span><span id="line-709"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
-<span class="source-line-no">710</span><span id="line-710"> } finally {</span>
-<span class="source-line-no">711</span><span id="line-711"> rpcServer.stop();</span>
-<span class="source-line-no">712</span><span id="line-712"> }</span>
-<span class="source-line-no">713</span><span id="line-713"> }</span>
-<span class="source-line-no">714</span><span id="line-714">}</span>
+<span class="source-line-no">526</span><span id="line-526"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">527</span><span id="line-527"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">528</span><span id="line-528"> }</span>
+<span class="source-line-no">529</span><span id="line-529"></span>
+<span class="source-line-no">530</span><span id="line-530"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">531</span><span id="line-531"> final String methodName) {</span>
+<span class="source-line-no">532</span><span id="line-532"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">533</span><span id="line-533"> hasKind(SpanKind.CLIENT));</span>
+<span class="source-line-no">534</span><span id="line-534"> }</span>
+<span class="source-line-no">535</span><span id="line-535"></span>
+<span class="source-line-no">536</span><span id="line-536"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">537</span><span id="line-537"> final String methodName) {</span>
+<span class="source-line-no">538</span><span id="line-538"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">539</span><span id="line-539"> hasKind(SpanKind.SERVER));</span>
+<span class="source-line-no">540</span><span id="line-540"> }</span>
+<span class="source-line-no">541</span><span id="line-541"></span>
+<span class="source-line-no">542</span><span id="line-542"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
+<span class="source-line-no">543</span><span id="line-543"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
+<span class="source-line-no">544</span><span id="line-544"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">545</span><span id="line-545"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
+<span class="source-line-no">546</span><span id="line-546"> containsEntry("net.peer.name", isa.getHostName()),</span>
+<span class="source-line-no">547</span><span id="line-547"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
+<span class="source-line-no">548</span><span id="line-548"> }</span>
+<span class="source-line-no">549</span><span id="line-549"></span>
+<span class="source-line-no">550</span><span id="line-550"> private static Matcher<SpanData></span>
+<span class="source-line-no">551</span><span id="line-551"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">552</span><span id="line-552"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">553</span><span id="line-553"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
+<span class="source-line-no">554</span><span id="line-554"> }</span>
+<span class="source-line-no">555</span><span id="line-555"></span>
+<span class="source-line-no">556</span><span id="line-556"> private void assertRemoteSpan() {</span>
+<span class="source-line-no">557</span><span id="line-557"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
+<span class="source-line-no">558</span><span id="line-558"> assertTrue(data.getParentSpanContext().isRemote());</span>
+<span class="source-line-no">559</span><span id="line-559"> assertEquals(SpanKind.SERVER, data.getKind());</span>
+<span class="source-line-no">560</span><span id="line-560"> }</span>
+<span class="source-line-no">561</span><span id="line-561"></span>
+<span class="source-line-no">562</span><span id="line-562"> @TestTemplate</span>
+<span class="source-line-no">563</span><span id="line-563"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
+<span class="source-line-no">564</span><span id="line-564"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">565</span><span id="line-565"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">566</span><span id="line-566"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">567</span><span id="line-567"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">568</span><span id="line-568"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">569</span><span id="line-569"> rpcServer.start();</span>
+<span class="source-line-no">570</span><span id="line-570"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">571</span><span id="line-571"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
+<span class="source-line-no">572</span><span id="line-572"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">573</span><span id="line-573"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseClientSpan =</span>
+<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseClientSpan,</span>
+<span class="source-line-no">577</span><span id="line-577"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
+<span class="source-line-no">578</span><span id="line-578"> final SpanData pauseServerSpan =</span>
+<span class="source-line-no">579</span><span id="line-579"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">580</span><span id="line-580"> assertThat(pauseServerSpan,</span>
+<span class="source-line-no">581</span><span id="line-581"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">582</span><span id="line-582"> assertRemoteSpan();</span>
+<span class="source-line-no">583</span><span id="line-583"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">584</span><span id="line-584"> assertThat(OTEL_EXT.getSpans(),</span>
+<span class="source-line-no">585</span><span id="line-585"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
+<span class="source-line-no">586</span><span id="line-586"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()),</span>
+<span class="source-line-no">587</span><span id="line-587"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
+<span class="source-line-no">588</span><span id="line-588"> } finally {</span>
+<span class="source-line-no">589</span><span id="line-589"> rpcServer.stop();</span>
+<span class="source-line-no">590</span><span id="line-590"> }</span>
+<span class="source-line-no">591</span><span id="line-591"> }</span>
+<span class="source-line-no">592</span><span id="line-592"></span>
+<span class="source-line-no">593</span><span id="line-593"> @TestTemplate</span>
+<span class="source-line-no">594</span><span id="line-594"> public void testTracingErrorIpc() throws IOException {</span>
+<span class="source-line-no">595</span><span id="line-595"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">596</span><span id="line-596"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">597</span><span id="line-597"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">598</span><span id="line-598"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">599</span><span id="line-599"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">600</span><span id="line-600"> rpcServer.start();</span>
+<span class="source-line-no">601</span><span id="line-601"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">602</span><span id="line-602"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">603</span><span id="line-603"> assertThrows(ServiceException.class,</span>
+<span class="source-line-no">604</span><span id="line-604"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">605</span><span id="line-605"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">606</span><span id="line-606"> final SpanData errorClientSpan =</span>
+<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">608</span><span id="line-608"> assertThat(errorClientSpan,</span>
+<span class="source-line-no">609</span><span id="line-609"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
+<span class="source-line-no">610</span><span id="line-610"> final SpanData errorServerSpan =</span>
+<span class="source-line-no">611</span><span id="line-611"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">612</span><span id="line-612"> assertThat(errorServerSpan,</span>
+<span class="source-line-no">613</span><span id="line-613"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">614</span><span id="line-614"> assertRemoteSpan();</span>
+<span class="source-line-no">615</span><span id="line-615"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">616</span><span id="line-616"> assertThat(OTEL_EXT.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
+<span class="source-line-no">617</span><span id="line-617"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()))));</span>
+<span class="source-line-no">618</span><span id="line-618"> } finally {</span>
+<span class="source-line-no">619</span><span id="line-619"> rpcServer.stop();</span>
+<span class="source-line-no">620</span><span id="line-620"> }</span>
+<span class="source-line-no">621</span><span id="line-621"> }</span>
+<span class="source-line-no">622</span><span id="line-622"></span>
+<span class="source-line-no">623</span><span id="line-623"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
+<span class="source-line-no">624</span><span id="line-624"></span>
+<span class="source-line-no">625</span><span id="line-625"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
+<span class="source-line-no">626</span><span id="line-626"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">627</span><span id="line-627"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
+<span class="source-line-no">628</span><span id="line-628"> return ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">629</span><span id="line-629"> }</span>
+<span class="source-line-no">630</span><span id="line-630"></span>
+<span class="source-line-no">631</span><span id="line-631"> @TestTemplate</span>
+<span class="source-line-no">632</span><span id="line-632"> public void testBadPreambleHeader() throws Exception {</span>
+<span class="source-line-no">633</span><span id="line-633"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">634</span><span id="line-634"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">635</span><span id="line-635"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">636</span><span id="line-636"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
+<span class="source-line-no">637</span><span id="line-637"> rpcServer.start();</span>
+<span class="source-line-no">638</span><span id="line-638"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">639</span><span id="line-639"> BadAuthException error = null;</span>
+<span class="source-line-no">640</span><span id="line-640"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
+<span class="source-line-no">641</span><span id="line-641"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
+<span class="source-line-no">642</span><span id="line-642"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">643</span><span id="line-643"> IOException ioe = doBadPreableHeaderCall(stub);</span>
+<span class="source-line-no">644</span><span id="line-644"> if (ioe instanceof BadAuthException) {</span>
+<span class="source-line-no">645</span><span id="line-645"> error = (BadAuthException) ioe;</span>
+<span class="source-line-no">646</span><span id="line-646"> break;</span>
+<span class="source-line-no">647</span><span id="line-647"> }</span>
+<span class="source-line-no">648</span><span id="line-648"> Thread.sleep(100);</span>
+<span class="source-line-no">649</span><span id="line-649"> }</span>
+<span class="source-line-no">650</span><span id="line-650"> assertNotNull(error, "Can not get expected BadAuthException");</span>
+<span class="source-line-no">651</span><span id="line-651"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
+<span class="source-line-no">652</span><span id="line-652"> } finally {</span>
+<span class="source-line-no">653</span><span id="line-653"> rpcServer.stop();</span>
+<span class="source-line-no">654</span><span id="line-654"> }</span>
+<span class="source-line-no">655</span><span id="line-655"> }</span>
+<span class="source-line-no">656</span><span id="line-656"></span>
+<span class="source-line-no">657</span><span id="line-657"> /**</span>
+<span class="source-line-no">658</span><span id="line-658"> * Testcase for getting connection registry information through connection preamble header, see</span>
+<span class="source-line-no">659</span><span id="line-659"> * HBASE-25051 for more details.</span>
+<span class="source-line-no">660</span><span id="line-660"> */</span>
+<span class="source-line-no">661</span><span id="line-661"> @TestTemplate</span>
+<span class="source-line-no">662</span><span id="line-662"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
+<span class="source-line-no">663</span><span id="line-663"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">664</span><span id="line-664"> String clusterId = "test_cluster_id";</span>
+<span class="source-line-no">665</span><span id="line-665"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
+<span class="source-line-no">666</span><span id="line-666"> when(server.getClusterId()).thenReturn(clusterId);</span>
+<span class="source-line-no">667</span><span id="line-667"> // do not need any services</span>
+<span class="source-line-no">668</span><span id="line-668"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">669</span><span id="line-669"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">670</span><span id="line-670"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">671</span><span id="line-671"> rpcServer.start();</span>
+<span class="source-line-no">672</span><span id="line-672"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">673</span><span id="line-673"> BlockingRpcChannel channel =</span>
+<span class="source-line-no">674</span><span id="line-674"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
+<span class="source-line-no">675</span><span id="line-675"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">676</span><span id="line-676"> ConnectionRegistryService.BlockingInterface stub =</span>
+<span class="source-line-no">677</span><span id="line-677"> ConnectionRegistryService.newBlockingStub(channel);</span>
+<span class="source-line-no">678</span><span id="line-678"> GetConnectionRegistryResponse resp =</span>
+<span class="source-line-no">679</span><span id="line-679"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
+<span class="source-line-no">680</span><span id="line-680"> assertEquals(clusterId, resp.getClusterId());</span>
+<span class="source-line-no">681</span><span id="line-681"> } finally {</span>
+<span class="source-line-no">682</span><span id="line-682"> rpcServer.stop();</span>
+<span class="source-line-no">683</span><span id="line-683"> }</span>
+<span class="source-line-no">684</span><span id="line-684"> }</span>
+<span class="source-line-no">685</span><span id="line-685"></span>
+<span class="source-line-no">686</span><span id="line-686"> /**</span>
+<span class="source-line-no">687</span><span id="line-687"> * Test server does not support getting connection registry information through connection</span>
+<span class="source-line-no">688</span><span id="line-688"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
+<span class="source-line-no">689</span><span id="line-689"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
+<span class="source-line-no">690</span><span id="line-690"> */</span>
+<span class="source-line-no">691</span><span id="line-691"> @TestTemplate</span>
+<span class="source-line-no">692</span><span id="line-692"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
+<span class="source-line-no">693</span><span id="line-693"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">694</span><span id="line-694"> // do not need any services</span>
+<span class="source-line-no">695</span><span id="line-695"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">696</span><span id="line-696"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">697</span><span id="line-697"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">698</span><span id="line-698"> rpcServer.start();</span>
+<span class="source-line-no">699</span><span id="line-699"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">700</span><span id="line-700"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
+<span class="source-line-no">701</span><span id="line-701"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">702</span><span id="line-702"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
+<span class="source-line-no">703</span><span id="line-703"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">704</span><span id="line-704"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">705</span><span id="line-705"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
+<span class="source-line-no">706</span><span id="line-706"> // should have failed so no response</span>
+<span class="source-line-no">707</span><span id="line-707"> assertNull(done.get());</span>
+<span class="source-line-no">708</span><span id="line-708"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">709</span><span id="line-709"> // should be a FatalConnectionException</span>
+<span class="source-line-no">710</span><span id="line-710"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
+<span class="source-line-no">711</span><span id="line-711"> assertEquals(FatalConnectionException.class.getName(),</span>
+<span class="source-line-no">712</span><span id="line-712"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
+<span class="source-line-no">713</span><span id="line-713"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
+<span class="source-line-no">714</span><span id="line-714"> } finally {</span>
+<span class="source-line-no">715</span><span id="line-715"> rpcServer.stop();</span>
+<span class="source-line-no">716</span><span id="line-716"> }</span>
+<span class="source-line-no">717</span><span id="line-717"> }</span>
+<span class="source-line-no">718</span><span id="line-718">}</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
index 6e454396038..1cdaeb4e72d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/AbstractTestIPC.html
@@ -40,691 +40,695 @@
<span class="source-line-no">027</span><span id="line-27">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.SERVICE;</span>
<span class="source-line-no">028</span><span id="line-28">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newBlockingStub;</span>
<span class="source-line-no">029</span><span id="line-29">import static org.apache.hadoop.hbase.ipc.TestProtobufRpcServiceImpl.newStub;</span>
-<span class="source-line-no">030</span><span id="line-30">import static org.hamcrest.MatcherAssert.assertThat;</span>
-<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.Matchers.allOf;</span>
-<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.containsString;</span>
-<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.everyItem;</span>
-<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
-<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.hasItem;</span>
-<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.instanceOf;</span>
-<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.startsWith;</span>
-<span class="source-line-no">038</span><span id="line-38">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">039</span><span id="line-39">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">040</span><span id="line-40">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">041</span><span id="line-41">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">042</span><span id="line-42">import static org.junit.Assert.assertThrows;</span>
-<span class="source-line-no">043</span><span id="line-43">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">044</span><span id="line-44">import static org.junit.Assert.fail;</span>
-<span class="source-line-no">045</span><span id="line-45">import static org.mockito.ArgumentMatchers.any;</span>
-<span class="source-line-no">046</span><span id="line-46">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">047</span><span id="line-47">import static org.mockito.Mockito.spy;</span>
-<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.verify;</span>
-<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">050</span><span id="line-50">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
-<span class="source-line-no">051</span><span id="line-51"></span>
-<span class="source-line-no">052</span><span id="line-52">import io.opentelemetry.api.common.AttributeKey;</span>
-<span class="source-line-no">053</span><span id="line-53">import io.opentelemetry.api.trace.SpanKind;</span>
-<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.trace.StatusCode;</span>
-<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule;</span>
-<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.sdk.trace.data.SpanData;</span>
-<span class="source-line-no">057</span><span id="line-57">import java.io.IOException;</span>
-<span class="source-line-no">058</span><span id="line-58">import java.net.InetSocketAddress;</span>
-<span class="source-line-no">059</span><span id="line-59">import java.nio.channels.SocketChannel;</span>
-<span class="source-line-no">060</span><span id="line-60">import java.time.Duration;</span>
-<span class="source-line-no">061</span><span id="line-61">import java.util.ArrayList;</span>
-<span class="source-line-no">062</span><span id="line-62">import java.util.Collections;</span>
-<span class="source-line-no">063</span><span id="line-63">import java.util.List;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.CellScanner;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.HBaseServerBase;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.KeyValue;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.MatcherPredicate;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.Server;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Waiter;</span>
-<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
-<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.security.User;</span>
-<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.io.compress.GzipCodec;</span>
-<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.ipc.RemoteException;</span>
-<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.util.StringUtils;</span>
-<span class="source-line-no">084</span><span id="line-84">import org.hamcrest.Matcher;</span>
-<span class="source-line-no">085</span><span id="line-85">import org.junit.Before;</span>
-<span class="source-line-no">086</span><span id="line-86">import org.junit.Rule;</span>
-<span class="source-line-no">087</span><span id="line-87">import org.junit.Test;</span>
-<span class="source-line-no">088</span><span id="line-88">import org.junit.runners.Parameterized.Parameter;</span>
-<span class="source-line-no">089</span><span id="line-89">import org.slf4j.Logger;</span>
-<span class="source-line-no">090</span><span id="line-90">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
-<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
-<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
-<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
-<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
-<span class="source-line-no">097</span><span id="line-97"></span>
-<span class="source-line-no">098</span><span id="line-98">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
-<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
-<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
-<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
-<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
-<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
-<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
-<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
-<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
-<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
-<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110">/**</span>
-<span class="source-line-no">111</span><span id="line-111"> * Some basic ipc tests.</span>
-<span class="source-line-no">112</span><span id="line-112"> */</span>
-<span class="source-line-no">113</span><span id="line-113">public abstract class AbstractTestIPC {</span>
-<span class="source-line-no">114</span><span id="line-114"></span>
-<span class="source-line-no">115</span><span id="line-115"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
-<span class="source-line-no">118</span><span id="line-118"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
-<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> protected RpcServer createRpcServer(Server server, String name,</span>
-<span class="source-line-no">123</span><span id="line-123"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
-<span class="source-line-no">124</span><span id="line-124"> RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
-<span class="source-line-no">129</span><span id="line-129"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">130</span><span id="line-130"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> @Rule</span>
-<span class="source-line-no">136</span><span id="line-136"> public OpenTelemetryRule traceRule = OpenTelemetryRule.create();</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Parameter(0)</span>
-<span class="source-line-no">139</span><span id="line-139"> public Class<? extends RpcServer> rpcServerImpl;</span>
+<span class="source-line-no">030</span><span id="line-30">import static org.awaitility.Awaitility.await;</span>
+<span class="source-line-no">031</span><span id="line-31">import static org.hamcrest.MatcherAssert.assertThat;</span>
+<span class="source-line-no">032</span><span id="line-32">import static org.hamcrest.Matchers.allOf;</span>
+<span class="source-line-no">033</span><span id="line-33">import static org.hamcrest.Matchers.containsString;</span>
+<span class="source-line-no">034</span><span id="line-34">import static org.hamcrest.Matchers.everyItem;</span>
+<span class="source-line-no">035</span><span id="line-35">import static org.hamcrest.Matchers.greaterThanOrEqualTo;</span>
+<span class="source-line-no">036</span><span id="line-36">import static org.hamcrest.Matchers.hasItem;</span>
+<span class="source-line-no">037</span><span id="line-37">import static org.hamcrest.Matchers.instanceOf;</span>
+<span class="source-line-no">038</span><span id="line-38">import static org.hamcrest.Matchers.lessThan;</span>
+<span class="source-line-no">039</span><span id="line-39">import static org.hamcrest.Matchers.startsWith;</span>
+<span class="source-line-no">040</span><span id="line-40">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">041</span><span id="line-41">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">042</span><span id="line-42">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">043</span><span id="line-43">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">044</span><span id="line-44">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">045</span><span id="line-45">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">046</span><span id="line-46">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">047</span><span id="line-47">import static org.mockito.ArgumentMatchers.any;</span>
+<span class="source-line-no">048</span><span id="line-48">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">049</span><span id="line-49">import static org.mockito.Mockito.spy;</span>
+<span class="source-line-no">050</span><span id="line-50">import static org.mockito.Mockito.verify;</span>
+<span class="source-line-no">051</span><span id="line-51">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">052</span><span id="line-52">import static org.mockito.internal.verification.VerificationModeFactory.times;</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">import io.opentelemetry.api.common.AttributeKey;</span>
+<span class="source-line-no">055</span><span id="line-55">import io.opentelemetry.api.trace.SpanKind;</span>
+<span class="source-line-no">056</span><span id="line-56">import io.opentelemetry.api.trace.StatusCode;</span>
+<span class="source-line-no">057</span><span id="line-57">import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension;</span>
+<span class="source-line-no">058</span><span id="line-58">import io.opentelemetry.sdk.trace.data.SpanData;</span>
+<span class="source-line-no">059</span><span id="line-59">import java.io.IOException;</span>
+<span class="source-line-no">060</span><span id="line-60">import java.net.InetSocketAddress;</span>
+<span class="source-line-no">061</span><span id="line-61">import java.nio.channels.SocketChannel;</span>
+<span class="source-line-no">062</span><span id="line-62">import java.time.Duration;</span>
+<span class="source-line-no">063</span><span id="line-63">import java.util.ArrayList;</span>
+<span class="source-line-no">064</span><span id="line-64">import java.util.Collections;</span>
+<span class="source-line-no">065</span><span id="line-65">import java.util.List;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.CellScanner;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.DoNotRetryIOException;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.ExtendedCell;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.HBaseServerBase;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.KeyValue;</span>
+<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.MatcherPredicate;</span>
+<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
+<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.Server;</span>
+<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.Waiter;</span>
+<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
+<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.security.User;</span>
+<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.io.compress.GzipCodec;</span>
+<span class="source-line-no">084</span><span id="line-84">import org.apache.hadoop.ipc.RemoteException;</span>
+<span class="source-line-no">085</span><span id="line-85">import org.apache.hadoop.util.StringUtils;</span>
+<span class="source-line-no">086</span><span id="line-86">import org.hamcrest.Matcher;</span>
+<span class="source-line-no">087</span><span id="line-87">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">088</span><span id="line-88">import org.junit.jupiter.api.TestTemplate;</span>
+<span class="source-line-no">089</span><span id="line-89">import org.junit.jupiter.api.extension.RegisterExtension;</span>
+<span class="source-line-no">090</span><span id="line-90">import org.slf4j.Logger;</span>
+<span class="source-line-no">091</span><span id="line-91">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93">import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;</span>
+<span class="source-line-no">094</span><span id="line-94">import org.apache.hbase.thirdparty.com.google.common.collect.Lists;</span>
+<span class="source-line-no">095</span><span id="line-95">import org.apache.hbase.thirdparty.com.google.protobuf.BlockingRpcChannel;</span>
+<span class="source-line-no">096</span><span id="line-96">import org.apache.hbase.thirdparty.com.google.protobuf.RpcChannel;</span>
+<span class="source-line-no">097</span><span id="line-97">import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;</span>
+<span class="source-line-no">098</span><span id="line-98"></span>
+<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoRequestProto;</span>
+<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EchoResponseProto;</span>
+<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyRequestProto;</span>
+<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.EmptyResponseProto;</span>
+<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestProtos.PauseRequestProto;</span>
+<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface;</span>
+<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.shaded.ipc.protobuf.generated.TestRpcServiceProtos.TestProtobufRpcProto.Interface;</span>
+<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
+<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.ConnectionRegistryService;</span>
+<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryRequest;</span>
+<span class="source-line-no">109</span><span id="line-109">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegistryProtos.GetConnectionRegistryResponse;</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111">/**</span>
+<span class="source-line-no">112</span><span id="line-112"> * Some basic ipc tests.</span>
+<span class="source-line-no">113</span><span id="line-113"> */</span>
+<span class="source-line-no">114</span><span id="line-114">public abstract class AbstractTestIPC {</span>
+<span class="source-line-no">115</span><span id="line-115"></span>
+<span class="source-line-no">116</span><span id="line-116"> private static final Logger LOG = LoggerFactory.getLogger(AbstractTestIPC.class);</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118"> private static final byte[] CELL_BYTES = Bytes.toBytes("xyz");</span>
+<span class="source-line-no">119</span><span id="line-119"> private static final KeyValue CELL = new KeyValue(CELL_BYTES, CELL_BYTES, CELL_BYTES, CELL_BYTES);</span>
+<span class="source-line-no">120</span><span id="line-120"></span>
+<span class="source-line-no">121</span><span id="line-121"> protected static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">122</span><span id="line-122"></span>
+<span class="source-line-no">123</span><span id="line-123"> protected RpcServer createRpcServer(Server server, String name,</span>
+<span class="source-line-no">124</span><span id="line-124"> List<BlockingServiceAndInterface> services, InetSocketAddress bindAddress, Configuration conf,</span>
+<span class="source-line-no">125</span><span id="line-125"> RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">126</span><span id="line-126"> return RpcServerFactory.createRpcServer(server, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">127</span><span id="line-127"> }</span>
+<span class="source-line-no">128</span><span id="line-128"></span>
+<span class="source-line-no">129</span><span id="line-129"> private RpcServer createRpcServer(String name, List<BlockingServiceAndInterface> services,</span>
+<span class="source-line-no">130</span><span id="line-130"> InetSocketAddress bindAddress, Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">131</span><span id="line-131"> return createRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"></span>
+<span class="source-line-no">134</span><span id="line-134"> protected abstract AbstractRpcClient<?> createRpcClientNoCodec(Configuration conf);</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136"> @RegisterExtension</span>
+<span class="source-line-no">137</span><span id="line-137"> private static final OpenTelemetryExtension OTEL_EXT = OpenTelemetryExtension.create();</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139"> private Class<? extends RpcServer> rpcServerImpl;</span>
<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141"> @Before</span>
-<span class="source-line-no">142</span><span id="line-142"> public void setUpBeforeTest() {</span>
-<span class="source-line-no">143</span><span id="line-143"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
-<span class="source-line-no">144</span><span id="line-144"> }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> /**</span>
-<span class="source-line-no">147</span><span id="line-147"> * Ensure we do not HAVE TO HAVE a codec.</span>
-<span class="source-line-no">148</span><span id="line-148"> */</span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testNoCodec() throws IOException, ServiceException {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">153</span><span id="line-153"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">154</span><span id="line-154"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">155</span><span id="line-155"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
-<span class="source-line-no">156</span><span id="line-156"> rpcServer.start();</span>
-<span class="source-line-no">157</span><span id="line-157"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">158</span><span id="line-158"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">159</span><span id="line-159"> String message = "hello";</span>
-<span class="source-line-no">160</span><span id="line-160"> assertEquals(message,</span>
-<span class="source-line-no">161</span><span id="line-161"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">162</span><span id="line-162"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">163</span><span id="line-163"> } finally {</span>
-<span class="source-line-no">164</span><span id="line-164"> rpcServer.stop();</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"> }</span>
-<span class="source-line-no">167</span><span id="line-167"></span>
-<span class="source-line-no">168</span><span id="line-168"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
-<span class="source-line-no">169</span><span id="line-169"></span>
-<span class="source-line-no">170</span><span id="line-170"> /**</span>
-<span class="source-line-no">171</span><span id="line-171"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
-<span class="source-line-no">172</span><span id="line-172"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
-<span class="source-line-no">173</span><span id="line-173"> * confirm that compression is happening down in the client and server).</span>
-<span class="source-line-no">174</span><span id="line-174"> */</span>
-<span class="source-line-no">175</span><span id="line-175"> @Test</span>
-<span class="source-line-no">176</span><span id="line-176"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
-<span class="source-line-no">177</span><span id="line-177"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">178</span><span id="line-178"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
-<span class="source-line-no">179</span><span id="line-179"> List<ExtendedCell> cells = new ArrayList<>();</span>
-<span class="source-line-no">180</span><span id="line-180"> int count = 3;</span>
-<span class="source-line-no">181</span><span id="line-181"> for (int i = 0; i < count; i++) {</span>
-<span class="source-line-no">182</span><span id="line-182"> cells.add(CELL);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">185</span><span id="line-185"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">186</span><span id="line-186"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">187</span><span id="line-187"></span>
-<span class="source-line-no">188</span><span id="line-188"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">189</span><span id="line-189"> rpcServer.start();</span>
-<span class="source-line-no">190</span><span id="line-190"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">191</span><span id="line-191"> HBaseRpcController pcrc =</span>
-<span class="source-line-no">192</span><span id="line-192"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
-<span class="source-line-no">193</span><span id="line-193"> String message = "hello";</span>
-<span class="source-line-no">194</span><span id="line-194"> assertEquals(message,</span>
-<span class="source-line-no">195</span><span id="line-195"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
-<span class="source-line-no">196</span><span id="line-196"> int index = 0;</span>
-<span class="source-line-no">197</span><span id="line-197"> CellScanner cellScanner = pcrc.cellScanner();</span>
-<span class="source-line-no">198</span><span id="line-198"> assertNotNull(cellScanner);</span>
-<span class="source-line-no">199</span><span id="line-199"> while (cellScanner.advance()) {</span>
-<span class="source-line-no">200</span><span id="line-200"> assertEquals(CELL, cellScanner.current());</span>
-<span class="source-line-no">201</span><span id="line-201"> index++;</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> assertEquals(count, index);</span>
-<span class="source-line-no">204</span><span id="line-204"> } finally {</span>
-<span class="source-line-no">205</span><span id="line-205"> rpcServer.stop();</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"> protected abstract AbstractRpcClient<?></span>
-<span class="source-line-no">210</span><span id="line-210"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> @Test</span>
-<span class="source-line-no">213</span><span id="line-213"> public void testRTEDuringConnectionSetup() throws Exception {</span>
-<span class="source-line-no">214</span><span id="line-214"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">215</span><span id="line-215"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">216</span><span id="line-216"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">217</span><span id="line-217"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">218</span><span id="line-218"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
-<span class="source-line-no">219</span><span id="line-219"> rpcServer.start();</span>
-<span class="source-line-no">220</span><span id="line-220"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">221</span><span id="line-221"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">222</span><span id="line-222"> fail("Expected an exception to have been thrown!");</span>
-<span class="source-line-no">223</span><span id="line-223"> } catch (Exception e) {</span>
-<span class="source-line-no">224</span><span id="line-224"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">225</span><span id="line-225"> assertTrue(e.toString(), StringUtils.stringifyException(e).contains("Injected fault"));</span>
-<span class="source-line-no">226</span><span id="line-226"> } finally {</span>
-<span class="source-line-no">227</span><span id="line-227"> rpcServer.stop();</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> /**</span>
-<span class="source-line-no">232</span><span id="line-232"> * Tests that the rpc scheduler is called when requests arrive.</span>
-<span class="source-line-no">233</span><span id="line-233"> */</span>
-<span class="source-line-no">234</span><span id="line-234"> @Test</span>
-<span class="source-line-no">235</span><span id="line-235"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
-<span class="source-line-no">236</span><span id="line-236"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">237</span><span id="line-237"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">238</span><span id="line-238"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">239</span><span id="line-239"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">240</span><span id="line-240"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
-<span class="source-line-no">241</span><span id="line-241"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
-<span class="source-line-no">242</span><span id="line-242"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">243</span><span id="line-243"> rpcServer.start();</span>
-<span class="source-line-no">244</span><span id="line-244"> verify(scheduler).start();</span>
-<span class="source-line-no">245</span><span id="line-245"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">246</span><span id="line-246"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">247</span><span id="line-247"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">248</span><span id="line-248"> stub.echo(null, param);</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
-<span class="source-line-no">251</span><span id="line-251"> } finally {</span>
-<span class="source-line-no">252</span><span id="line-252"> rpcServer.stop();</span>
-<span class="source-line-no">253</span><span id="line-253"> verify(scheduler).stop();</span>
-<span class="source-line-no">254</span><span id="line-254"> }</span>
-<span class="source-line-no">255</span><span id="line-255"> }</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
-<span class="source-line-no">258</span><span id="line-258"> @Test</span>
-<span class="source-line-no">259</span><span id="line-259"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
-<span class="source-line-no">260</span><span id="line-260"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">261</span><span id="line-261"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
-<span class="source-line-no">262</span><span id="line-262"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">263</span><span id="line-263"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">264</span><span id="line-264"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
-<span class="source-line-no">265</span><span id="line-265"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">266</span><span id="line-266"> rpcServer.start();</span>
-<span class="source-line-no">267</span><span id="line-267"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">268</span><span id="line-268"> StringBuilder message = new StringBuilder(1200);</span>
-<span class="source-line-no">269</span><span id="line-269"> for (int i = 0; i < 200; i++) {</span>
-<span class="source-line-no">270</span><span id="line-270"> message.append("hello.");</span>
-<span class="source-line-no">271</span><span id="line-271"> }</span>
-<span class="source-line-no">272</span><span id="line-272"> // set total RPC size bigger than 100 bytes</span>
-<span class="source-line-no">273</span><span id="line-273"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
-<span class="source-line-no">274</span><span id="line-274"> stub.echo(new HBaseRpcControllerImpl(</span>
-<span class="source-line-no">275</span><span id="line-275"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
-<span class="source-line-no">276</span><span id="line-276"> fail("RPC should have failed because it exceeds max request size");</span>
-<span class="source-line-no">277</span><span id="line-277"> } catch (ServiceException e) {</span>
-<span class="source-line-no">278</span><span id="line-278"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">279</span><span id="line-279"> assertTrue(e.toString(),</span>
-<span class="source-line-no">280</span><span id="line-280"> StringUtils.stringifyException(e).contains("RequestTooBigException"));</span>
-<span class="source-line-no">281</span><span id="line-281"> } finally {</span>
-<span class="source-line-no">282</span><span id="line-282"> rpcServer.stop();</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"></span>
-<span class="source-line-no">286</span><span id="line-286"> /**</span>
-<span class="source-line-no">287</span><span id="line-287"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
-<span class="source-line-no">288</span><span id="line-288"> * remoteAddress set to its Call Object</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> @Test</span>
-<span class="source-line-no">291</span><span id="line-291"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
-<span class="source-line-no">292</span><span id="line-292"> throws IOException, ServiceException {</span>
-<span class="source-line-no">293</span><span id="line-293"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">294</span><span id="line-294"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">295</span><span id="line-295"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">296</span><span id="line-296"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">297</span><span id="line-297"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
-<span class="source-line-no">298</span><span id="line-298"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">299</span><span id="line-299"> rpcServer.start();</span>
-<span class="source-line-no">300</span><span id="line-300"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">301</span><span id="line-301"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
-<span class="source-line-no">302</span><span id="line-302"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
-<span class="source-line-no">303</span><span id="line-303"> } finally {</span>
-<span class="source-line-no">304</span><span id="line-304"> rpcServer.stop();</span>
-<span class="source-line-no">305</span><span id="line-305"> }</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"></span>
-<span class="source-line-no">308</span><span id="line-308"> @Test</span>
-<span class="source-line-no">309</span><span id="line-309"> public void testRemoteError() throws IOException, ServiceException {</span>
-<span class="source-line-no">310</span><span id="line-310"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">311</span><span id="line-311"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">312</span><span id="line-312"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">313</span><span id="line-313"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">314</span><span id="line-314"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">315</span><span id="line-315"> rpcServer.start();</span>
-<span class="source-line-no">316</span><span id="line-316"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">317</span><span id="line-317"> stub.error(null, EmptyRequestProto.getDefaultInstance());</span>
-<span class="source-line-no">318</span><span id="line-318"> } catch (ServiceException e) {</span>
-<span class="source-line-no">319</span><span id="line-319"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">320</span><span id="line-320"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">321</span><span id="line-321"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">322</span><span id="line-322"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">323</span><span id="line-323"> } finally {</span>
-<span class="source-line-no">324</span><span id="line-324"> rpcServer.stop();</span>
-<span class="source-line-no">325</span><span id="line-325"> }</span>
-<span class="source-line-no">326</span><span id="line-326"> }</span>
-<span class="source-line-no">327</span><span id="line-327"></span>
-<span class="source-line-no">328</span><span id="line-328"> @Test</span>
-<span class="source-line-no">329</span><span id="line-329"> public void testTimeout() throws IOException {</span>
-<span class="source-line-no">330</span><span id="line-330"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">331</span><span id="line-331"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">332</span><span id="line-332"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">333</span><span id="line-333"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">334</span><span id="line-334"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">335</span><span id="line-335"> rpcServer.start();</span>
-<span class="source-line-no">336</span><span id="line-336"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">337</span><span id="line-337"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">338</span><span id="line-338"> int ms = 1000;</span>
-<span class="source-line-no">339</span><span id="line-339"> int timeout = 100;</span>
-<span class="source-line-no">340</span><span id="line-340"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">341</span><span id="line-341"> pcrc.reset();</span>
-<span class="source-line-no">342</span><span id="line-342"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">343</span><span id="line-343"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">344</span><span id="line-344"> try {</span>
-<span class="source-line-no">345</span><span id="line-345"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build());</span>
-<span class="source-line-no">346</span><span id="line-346"> } catch (ServiceException e) {</span>
-<span class="source-line-no">347</span><span id="line-347"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">348</span><span id="line-348"> // expected</span>
-<span class="source-line-no">349</span><span id="line-349"> LOG.info("Caught expected exception: " + e);</span>
-<span class="source-line-no">350</span><span id="line-350"> IOException ioe = ProtobufUtil.handleRemoteException(e);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">352</span><span id="line-352"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">353</span><span id="line-353"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">354</span><span id="line-354"> }</span>
-<span class="source-line-no">355</span><span id="line-355"> }</span>
-<span class="source-line-no">356</span><span id="line-356"> } finally {</span>
-<span class="source-line-no">357</span><span id="line-357"> rpcServer.stop();</span>
-<span class="source-line-no">358</span><span id="line-358"> }</span>
-<span class="source-line-no">359</span><span id="line-359"> }</span>
-<span class="source-line-no">360</span><span id="line-360"></span>
-<span class="source-line-no">361</span><span id="line-361"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
-<span class="source-line-no">362</span><span id="line-362"></span>
-<span class="source-line-no">363</span><span id="line-363"> FailingSimpleRpcServer(Server server, String name,</span>
-<span class="source-line-no">364</span><span id="line-364"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
-<span class="source-line-no">365</span><span id="line-365"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">366</span><span id="line-366"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
-<span class="source-line-no">367</span><span id="line-367"> }</span>
+<span class="source-line-no">141</span><span id="line-141"> protected AbstractTestIPC(Class<? extends RpcServer> rpcServerImpl) {</span>
+<span class="source-line-no">142</span><span id="line-142"> this.rpcServerImpl = rpcServerImpl;</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"> @BeforeEach</span>
+<span class="source-line-no">146</span><span id="line-146"> public void setUpBeforeTest() {</span>
+<span class="source-line-no">147</span><span id="line-147"> CONF.setClass(RpcServerFactory.CUSTOM_RPC_SERVER_IMPL_CONF_KEY, rpcServerImpl, RpcServer.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> }</span>
+<span class="source-line-no">149</span><span id="line-149"></span>
+<span class="source-line-no">150</span><span id="line-150"> /**</span>
+<span class="source-line-no">151</span><span id="line-151"> * Ensure we do not HAVE TO HAVE a codec.</span>
+<span class="source-line-no">152</span><span id="line-152"> */</span>
+<span class="source-line-no">153</span><span id="line-153"> @TestTemplate</span>
+<span class="source-line-no">154</span><span id="line-154"> public void testNoCodec() throws IOException, ServiceException {</span>
+<span class="source-line-no">155</span><span id="line-155"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">156</span><span id="line-156"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">157</span><span id="line-157"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">158</span><span id="line-158"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">159</span><span id="line-159"> try (AbstractRpcClient<?> client = createRpcClientNoCodec(clientConf)) {</span>
+<span class="source-line-no">160</span><span id="line-160"> rpcServer.start();</span>
+<span class="source-line-no">161</span><span id="line-161"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">162</span><span id="line-162"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">163</span><span id="line-163"> String message = "hello";</span>
+<span class="source-line-no">164</span><span id="line-164"> assertEquals(message,</span>
+<span class="source-line-no">165</span><span id="line-165"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">166</span><span id="line-166"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">167</span><span id="line-167"> } finally {</span>
+<span class="source-line-no">168</span><span id="line-168"> rpcServer.stop();</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"> }</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> protected abstract AbstractRpcClient<?> createRpcClient(Configuration conf);</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> /**</span>
+<span class="source-line-no">175</span><span id="line-175"> * It is hard to verify the compression is actually happening under the wraps. Hope that if</span>
+<span class="source-line-no">176</span><span id="line-176"> * unsupported, we'll get an exception out of some time (meantime, have to trace it manually to</span>
+<span class="source-line-no">177</span><span id="line-177"> * confirm that compression is happening down in the client and server).</span>
+<span class="source-line-no">178</span><span id="line-178"> */</span>
+<span class="source-line-no">179</span><span id="line-179"> @TestTemplate</span>
+<span class="source-line-no">180</span><span id="line-180"> public void testCompressCellBlock() throws IOException, ServiceException {</span>
+<span class="source-line-no">181</span><span id="line-181"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">182</span><span id="line-182"> clientConf.set("hbase.client.rpc.compressor", GzipCodec.class.getCanonicalName());</span>
+<span class="source-line-no">183</span><span id="line-183"> List<ExtendedCell> cells = new ArrayList<>();</span>
+<span class="source-line-no">184</span><span id="line-184"> int count = 3;</span>
+<span class="source-line-no">185</span><span id="line-185"> for (int i = 0; i < count; i++) {</span>
+<span class="source-line-no">186</span><span id="line-186"> cells.add(CELL);</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">189</span><span id="line-189"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">190</span><span id="line-190"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 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"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">193</span><span id="line-193"> rpcServer.start();</span>
+<span class="source-line-no">194</span><span id="line-194"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">195</span><span id="line-195"> HBaseRpcController pcrc =</span>
+<span class="source-line-no">196</span><span id="line-196"> new HBaseRpcControllerImpl(PrivateCellUtil.createExtendedCellScanner(cells));</span>
+<span class="source-line-no">197</span><span id="line-197"> String message = "hello";</span>
+<span class="source-line-no">198</span><span id="line-198"> assertEquals(message,</span>
+<span class="source-line-no">199</span><span id="line-199"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage(message).build()).getMessage());</span>
+<span class="source-line-no">200</span><span id="line-200"> int index = 0;</span>
+<span class="source-line-no">201</span><span id="line-201"> CellScanner cellScanner = pcrc.cellScanner();</span>
+<span class="source-line-no">202</span><span id="line-202"> assertNotNull(cellScanner);</span>
+<span class="source-line-no">203</span><span id="line-203"> while (cellScanner.advance()) {</span>
+<span class="source-line-no">204</span><span id="line-204"> assertEquals(CELL, cellScanner.current());</span>
+<span class="source-line-no">205</span><span id="line-205"> index++;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"> assertEquals(count, index);</span>
+<span class="source-line-no">208</span><span id="line-208"> } finally {</span>
+<span class="source-line-no">209</span><span id="line-209"> rpcServer.stop();</span>
+<span class="source-line-no">210</span><span id="line-210"> }</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"> protected abstract AbstractRpcClient<?></span>
+<span class="source-line-no">214</span><span id="line-214"> createRpcClientRTEDuringConnectionSetup(Configuration conf) throws IOException;</span>
+<span class="source-line-no">215</span><span id="line-215"></span>
+<span class="source-line-no">216</span><span id="line-216"> @TestTemplate</span>
+<span class="source-line-no">217</span><span id="line-217"> public void testRTEDuringConnectionSetup() throws Exception {</span>
+<span class="source-line-no">218</span><span id="line-218"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">219</span><span id="line-219"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">220</span><span id="line-220"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">221</span><span id="line-221"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">222</span><span id="line-222"> try (AbstractRpcClient<?> client = createRpcClientRTEDuringConnectionSetup(clientConf)) {</span>
+<span class="source-line-no">223</span><span id="line-223"> rpcServer.start();</span>
+<span class="source-line-no">224</span><span id="line-224"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">225</span><span id="line-225"> stub.ping(null, EmptyRequestProto.getDefaultInstance());</span>
+<span class="source-line-no">226</span><span id="line-226"> fail("Expected an exception to have been thrown!");</span>
+<span class="source-line-no">227</span><span id="line-227"> } catch (Exception e) {</span>
+<span class="source-line-no">228</span><span id="line-228"> LOG.info("Caught expected exception: " + e.toString());</span>
+<span class="source-line-no">229</span><span id="line-229"> assertTrue(StringUtils.stringifyException(e).contains("Injected fault"), e.toString());</span>
+<span class="source-line-no">230</span><span id="line-230"> } finally {</span>
+<span class="source-line-no">231</span><span id="line-231"> rpcServer.stop();</span>
+<span class="source-line-no">232</span><span id="line-232"> }</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"> * Tests that the rpc scheduler is called when requests arrive.</span>
+<span class="source-line-no">237</span><span id="line-237"> */</span>
+<span class="source-line-no">238</span><span id="line-238"> @TestTemplate</span>
+<span class="source-line-no">239</span><span id="line-239"> public void testRpcScheduler() throws IOException, ServiceException, InterruptedException {</span>
+<span class="source-line-no">240</span><span id="line-240"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">241</span><span id="line-241"> RpcScheduler scheduler = spy(new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">242</span><span id="line-242"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">243</span><span id="line-243"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">244</span><span id="line-244"> new InetSocketAddress("localhost", 0), CONF, scheduler);</span>
+<span class="source-line-no">245</span><span id="line-245"> verify(scheduler).init(any(RpcScheduler.Context.class));</span>
+<span class="source-line-no">246</span><span id="line-246"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">247</span><span id="line-247"> rpcServer.start();</span>
+<span class="source-line-no">248</span><span id="line-248"> verify(scheduler).start();</span>
+<span class="source-line-no">249</span><span id="line-249"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">250</span><span id="line-250"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">251</span><span id="line-251"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">252</span><span id="line-252"> stub.echo(null, param);</span>
+<span class="source-line-no">253</span><span id="line-253"> }</span>
+<span class="source-line-no">254</span><span id="line-254"> verify(scheduler, times(10)).dispatch(any(CallRunner.class));</span>
+<span class="source-line-no">255</span><span id="line-255"> } finally {</span>
+<span class="source-line-no">256</span><span id="line-256"> rpcServer.stop();</span>
+<span class="source-line-no">257</span><span id="line-257"> verify(scheduler).stop();</span>
+<span class="source-line-no">258</span><span id="line-258"> }</span>
+<span class="source-line-no">259</span><span id="line-259"> }</span>
+<span class="source-line-no">260</span><span id="line-260"></span>
+<span class="source-line-no">261</span><span id="line-261"> /** Tests that the rpc scheduler is called when requests arrive. */</span>
+<span class="source-line-no">262</span><span id="line-262"> @TestTemplate</span>
+<span class="source-line-no">263</span><span id="line-263"> public void testRpcMaxRequestSize() throws IOException, ServiceException {</span>
+<span class="source-line-no">264</span><span id="line-264"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">265</span><span id="line-265"> clientConf.setInt(RpcServer.MAX_REQUEST_SIZE, 1000);</span>
+<span class="source-line-no">266</span><span id="line-266"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">267</span><span id="line-267"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">268</span><span id="line-268"> new InetSocketAddress("localhost", 0), clientConf, new FifoRpcScheduler(clientConf, 1));</span>
+<span class="source-line-no">269</span><span id="line-269"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">270</span><span id="line-270"> rpcServer.start();</span>
+<span class="source-line-no">271</span><span id="line-271"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">272</span><span id="line-272"> StringBuilder message = new StringBuilder(1200);</span>
+<span class="source-line-no">273</span><span id="line-273"> for (int i = 0; i < 200; i++) {</span>
+<span class="source-line-no">274</span><span id="line-274"> message.append("hello.");</span>
+<span class="source-line-no">275</span><span id="line-275"> }</span>
+<span class="source-line-no">276</span><span id="line-276"> // set total RPC size bigger than 100 bytes</span>
+<span class="source-line-no">277</span><span id="line-277"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage(message.toString()).build();</span>
+<span class="source-line-no">278</span><span id="line-278"> stub.echo(new HBaseRpcControllerImpl(</span>
+<span class="source-line-no">279</span><span id="line-279"> PrivateCellUtil.createExtendedCellScanner(ImmutableList.<ExtendedCell> of(CELL))), param);</span>
+<span class="source-line-no">280</span><span id="line-280"> fail("RPC should have failed because it exceeds max request size");</span>
+<span class="source-line-no">281</span><span id="line-281"> } catch (ServiceException e) {</span>
+<span class="source-line-no">282</span><span id="line-282"> LOG.info("Caught expected exception: " + e);</span>
+<span class="source-line-no">283</span><span id="line-283"> assertTrue(StringUtils.stringifyException(e).contains("RequestTooBigException"),</span>
+<span class="source-line-no">284</span><span id="line-284"> e.toString());</span>
+<span class="source-line-no">285</span><span id="line-285"> } finally {</span>
+<span class="source-line-no">286</span><span id="line-286"> rpcServer.stop();</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * Tests that the RpcServer creates & dispatches CallRunner object to scheduler with non-null</span>
+<span class="source-line-no">292</span><span id="line-292"> * remoteAddress set to its Call Object</span>
+<span class="source-line-no">293</span><span id="line-293"> */</span>
+<span class="source-line-no">294</span><span id="line-294"> @TestTemplate</span>
+<span class="source-line-no">295</span><span id="line-295"> public void testRpcServerForNotNullRemoteAddressInCallObject()</span>
+<span class="source-line-no">296</span><span id="line-296"> throws IOException, ServiceException {</span>
+<span class="source-line-no">297</span><span id="line-297"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">298</span><span id="line-298"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">299</span><span id="line-299"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">300</span><span id="line-300"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">301</span><span id="line-301"> InetSocketAddress localAddr = new InetSocketAddress("localhost", 0);</span>
+<span class="source-line-no">302</span><span id="line-302"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">303</span><span id="line-303"> rpcServer.start();</span>
+<span class="source-line-no">304</span><span id="line-304"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">305</span><span id="line-305"> assertEquals(localAddr.getAddress().getHostAddress(),</span>
+<span class="source-line-no">306</span><span id="line-306"> stub.addr(null, EmptyRequestProto.getDefaultInstance()).getAddr());</span>
+<span class="source-line-no">307</span><span id="line-307"> } finally {</span>
+<span class="source-line-no">308</span><span id="line-308"> rpcServer.stop();</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"> }</span>
+<span class="source-line-no">311</span><span id="line-311"></span>
+<span class="source-line-no">312</span><span id="line-312"> @TestTemplate</span>
+<span class="source-line-no">313</span><span id="line-313"> public void testRemoteError() throws IOException, ServiceException {</span>
+<span class="source-line-no">314</span><span id="line-314"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">315</span><span id="line-315"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">316</span><span id="line-316"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">317</span><span id="line-317"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">318</span><span id="line-318"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">319</span><span id="line-319"> rpcServer.start();</span>
+<span class="source-line-no">320</span><span id="line-320"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">321</span><span id="line-321"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">322</span><span id="line-322"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">323</span><span id="line-323"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">324</span><span id="line-324"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">325</span><span id="line-325"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">326</span><span id="line-326"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">327</span><span id="line-327"> } finally {</span>
+<span class="source-line-no">328</span><span id="line-328"> rpcServer.stop();</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"> }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332"> @TestTemplate</span>
+<span class="source-line-no">333</span><span id="line-333"> public void testTimeout() throws IOException {</span>
+<span class="source-line-no">334</span><span id="line-334"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">335</span><span id="line-335"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">336</span><span id="line-336"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">337</span><span id="line-337"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">338</span><span id="line-338"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">339</span><span id="line-339"> rpcServer.start();</span>
+<span class="source-line-no">340</span><span id="line-340"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">341</span><span id="line-341"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">342</span><span id="line-342"> int ms = 1000;</span>
+<span class="source-line-no">343</span><span id="line-343"> int timeout = 100;</span>
+<span class="source-line-no">344</span><span id="line-344"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">345</span><span id="line-345"> pcrc.reset();</span>
+<span class="source-line-no">346</span><span id="line-346"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">347</span><span id="line-347"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">348</span><span id="line-348"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">349</span><span id="line-349"> () -> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build()));</span>
+<span class="source-line-no">350</span><span id="line-350"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">351</span><span id="line-351"> // expected</span>
+<span class="source-line-no">352</span><span id="line-352"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">353</span><span id="line-353"> IOException ioe = ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">354</span><span id="line-354"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">355</span><span id="line-355"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">356</span><span id="line-356"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">357</span><span id="line-357"> }</span>
+<span class="source-line-no">358</span><span id="line-358"> } finally {</span>
+<span class="source-line-no">359</span><span id="line-359"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">360</span><span id="line-360"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">361</span><span id="line-361"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">362</span><span id="line-362"> rpcServer.stop();</span>
+<span class="source-line-no">363</span><span id="line-363"> }</span>
+<span class="source-line-no">364</span><span id="line-364"> }</span>
+<span class="source-line-no">365</span><span id="line-365"></span>
+<span class="source-line-no">366</span><span id="line-366"> @SuppressWarnings("deprecation")</span>
+<span class="source-line-no">367</span><span id="line-367"> private static class FailingSimpleRpcServer extends SimpleRpcServer {</span>
<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> final class FailingConnection extends SimpleServerRpcConnection {</span>
-<span class="source-line-no">370</span><span id="line-370"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
-<span class="source-line-no">371</span><span id="line-371"> long lastContact) {</span>
-<span class="source-line-no">372</span><span id="line-372"> super(rpcServer, channel, lastContact);</span>
-<span class="source-line-no">373</span><span id="line-373"> }</span>
+<span class="source-line-no">369</span><span id="line-369"> FailingSimpleRpcServer(Server server, String name,</span>
+<span class="source-line-no">370</span><span id="line-370"> List<RpcServer.BlockingServiceAndInterface> services, InetSocketAddress bindAddress,</span>
+<span class="source-line-no">371</span><span id="line-371"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">372</span><span id="line-372"> super(server, name, services, bindAddress, conf, scheduler, true);</span>
+<span class="source-line-no">373</span><span id="line-373"> }</span>
<span class="source-line-no">374</span><span id="line-374"></span>
-<span class="source-line-no">375</span><span id="line-375"> @Override</span>
-<span class="source-line-no">376</span><span id="line-376"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
-<span class="source-line-no">377</span><span id="line-377"> // this will throw exception after the connection header is read, and an RPC is sent</span>
-<span class="source-line-no">378</span><span id="line-378"> // from client</span>
-<span class="source-line-no">379</span><span id="line-379"> throw new DoNotRetryIOException("Failing for test");</span>
-<span class="source-line-no">380</span><span id="line-380"> }</span>
-<span class="source-line-no">381</span><span id="line-381"> }</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> @Override</span>
-<span class="source-line-no">384</span><span id="line-384"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
-<span class="source-line-no">385</span><span id="line-385"> return new FailingConnection(this, channel, time);</span>
-<span class="source-line-no">386</span><span id="line-386"> }</span>
-<span class="source-line-no">387</span><span id="line-387"> }</span>
+<span class="source-line-no">375</span><span id="line-375"> final class FailingConnection extends SimpleServerRpcConnection {</span>
+<span class="source-line-no">376</span><span id="line-376"> private FailingConnection(FailingSimpleRpcServer rpcServer, SocketChannel channel,</span>
+<span class="source-line-no">377</span><span id="line-377"> long lastContact) {</span>
+<span class="source-line-no">378</span><span id="line-378"> super(rpcServer, channel, lastContact);</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"></span>
+<span class="source-line-no">381</span><span id="line-381"> @Override</span>
+<span class="source-line-no">382</span><span id="line-382"> public void processRequest(ByteBuff buf) throws IOException, InterruptedException {</span>
+<span class="source-line-no">383</span><span id="line-383"> // this will throw exception after the connection header is read, and an RPC is sent</span>
+<span class="source-line-no">384</span><span id="line-384"> // from client</span>
+<span class="source-line-no">385</span><span id="line-385"> throw new DoNotRetryIOException("Failing for test");</span>
+<span class="source-line-no">386</span><span id="line-386"> }</span>
+<span class="source-line-no">387</span><span id="line-387"> }</span>
<span class="source-line-no">388</span><span id="line-388"></span>
-<span class="source-line-no">389</span><span id="line-389"> protected RpcServer createTestFailingRpcServer(final String name,</span>
-<span class="source-line-no">390</span><span id="line-390"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
-<span class="source-line-no">391</span><span id="line-391"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
-<span class="source-line-no">392</span><span id="line-392"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
-<span class="source-line-no">393</span><span id="line-393"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">394</span><span id="line-394"> } else {</span>
-<span class="source-line-no">395</span><span id="line-395"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
-<span class="source-line-no">396</span><span id="line-396"> }</span>
-<span class="source-line-no">397</span><span id="line-397"> }</span>
-<span class="source-line-no">398</span><span id="line-398"></span>
-<span class="source-line-no">399</span><span id="line-399"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
-<span class="source-line-no">400</span><span id="line-400"> @Test</span>
-<span class="source-line-no">401</span><span id="line-401"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">403</span><span id="line-403"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
-<span class="source-line-no">404</span><span id="line-404"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">405</span><span id="line-405"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">406</span><span id="line-406"></span>
-<span class="source-line-no">407</span><span id="line-407"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">408</span><span id="line-408"> rpcServer.start();</span>
-<span class="source-line-no">409</span><span id="line-409"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">410</span><span id="line-410"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
-<span class="source-line-no">411</span><span id="line-411"> stub.echo(null, param);</span>
-<span class="source-line-no">412</span><span id="line-412"> fail("RPC should have failed because connection closed");</span>
-<span class="source-line-no">413</span><span id="line-413"> } catch (ServiceException e) {</span>
-<span class="source-line-no">414</span><span id="line-414"> LOG.info("Caught expected exception: " + e.toString());</span>
-<span class="source-line-no">415</span><span id="line-415"> } finally {</span>
-<span class="source-line-no">416</span><span id="line-416"> rpcServer.stop();</span>
-<span class="source-line-no">417</span><span id="line-417"> }</span>
-<span class="source-line-no">418</span><span id="line-418"> }</span>
-<span class="source-line-no">419</span><span id="line-419"></span>
-<span class="source-line-no">420</span><span id="line-420"> @Test</span>
-<span class="source-line-no">421</span><span id="line-421"> public void testAsyncEcho() throws IOException {</span>
-<span class="source-line-no">422</span><span id="line-422"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">423</span><span id="line-423"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">424</span><span id="line-424"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">425</span><span id="line-425"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">426</span><span id="line-426"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">427</span><span id="line-427"> rpcServer.start();</span>
-<span class="source-line-no">428</span><span id="line-428"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">429</span><span id="line-429"> int num = 10;</span>
-<span class="source-line-no">430</span><span id="line-430"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">431</span><span id="line-431"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">432</span><span id="line-432"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">433</span><span id="line-433"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">434</span><span id="line-434"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">435</span><span id="line-435"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
-<span class="source-line-no">436</span><span id="line-436"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">437</span><span id="line-437"> callbackList.add(done);</span>
-<span class="source-line-no">438</span><span id="line-438"> }</span>
-<span class="source-line-no">439</span><span id="line-439"> for (int i = 0; i < num; i++) {</span>
-<span class="source-line-no">440</span><span id="line-440"> EchoResponseProto resp = callbackList.get(i).get();</span>
-<span class="source-line-no">441</span><span id="line-441"> HBaseRpcController pcrc = pcrcList.get(i);</span>
-<span class="source-line-no">442</span><span id="line-442"> assertEquals("hello-" + i, resp.getMessage());</span>
-<span class="source-line-no">443</span><span id="line-443"> assertFalse(pcrc.failed());</span>
-<span class="source-line-no">444</span><span id="line-444"> assertNull(pcrc.cellScanner());</span>
-<span class="source-line-no">445</span><span id="line-445"> }</span>
-<span class="source-line-no">446</span><span id="line-446"> } finally {</span>
-<span class="source-line-no">447</span><span id="line-447"> rpcServer.stop();</span>
-<span class="source-line-no">448</span><span id="line-448"> }</span>
-<span class="source-line-no">449</span><span id="line-449"> }</span>
-<span class="source-line-no">450</span><span id="line-450"></span>
-<span class="source-line-no">451</span><span id="line-451"> @Test</span>
-<span class="source-line-no">452</span><span id="line-452"> public void testAsyncRemoteError() throws IOException {</span>
-<span class="source-line-no">453</span><span id="line-453"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">454</span><span id="line-454"> AbstractRpcClient<?> client = createRpcClient(clientConf);</span>
-<span class="source-line-no">455</span><span id="line-455"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">456</span><span id="line-456"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">457</span><span id="line-457"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">458</span><span id="line-458"> try {</span>
-<span class="source-line-no">459</span><span id="line-459"> rpcServer.start();</span>
-<span class="source-line-no">460</span><span id="line-460"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">461</span><span id="line-461"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">462</span><span id="line-462"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">463</span><span id="line-463"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
-<span class="source-line-no">464</span><span id="line-464"> assertNull(callback.get());</span>
-<span class="source-line-no">465</span><span id="line-465"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">466</span><span id="line-466"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">467</span><span id="line-467"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">468</span><span id="line-468"> assertTrue(ioe instanceof DoNotRetryIOException);</span>
-<span class="source-line-no">469</span><span id="line-469"> assertTrue(ioe.getMessage().contains("server error!"));</span>
-<span class="source-line-no">470</span><span id="line-470"> } finally {</span>
-<span class="source-line-no">471</span><span id="line-471"> client.close();</span>
-<span class="source-line-no">472</span><span id="line-472"> rpcServer.stop();</span>
-<span class="source-line-no">473</span><span id="line-473"> }</span>
-<span class="source-line-no">474</span><span id="line-474"> }</span>
-<span class="source-line-no">475</span><span id="line-475"></span>
-<span class="source-line-no">476</span><span id="line-476"> @Test</span>
-<span class="source-line-no">477</span><span id="line-477"> public void testAsyncTimeout() throws IOException {</span>
-<span class="source-line-no">478</span><span id="line-478"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">479</span><span id="line-479"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">480</span><span id="line-480"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">481</span><span id="line-481"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">482</span><span id="line-482"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">483</span><span id="line-483"> rpcServer.start();</span>
-<span class="source-line-no">484</span><span id="line-484"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">485</span><span id="line-485"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
-<span class="source-line-no">486</span><span id="line-486"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
-<span class="source-line-no">487</span><span id="line-487"> int ms = 1000;</span>
-<span class="source-line-no">488</span><span id="line-488"> int timeout = 100;</span>
-<span class="source-line-no">489</span><span id="line-489"> long startTime = System.nanoTime();</span>
-<span class="source-line-no">490</span><span id="line-490"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">491</span><span id="line-491"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">492</span><span id="line-492"> pcrc.setCallTimeout(timeout);</span>
-<span class="source-line-no">493</span><span id="line-493"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">494</span><span id="line-494"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
-<span class="source-line-no">495</span><span id="line-495"> pcrcList.add(pcrc);</span>
-<span class="source-line-no">496</span><span id="line-496"> callbackList.add(callback);</span>
-<span class="source-line-no">497</span><span id="line-497"> }</span>
-<span class="source-line-no">498</span><span id="line-498"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
-<span class="source-line-no">499</span><span id="line-499"> assertNull(callback.get());</span>
-<span class="source-line-no">500</span><span id="line-500"> }</span>
-<span class="source-line-no">501</span><span id="line-501"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
-<span class="source-line-no">502</span><span id="line-502"> for (HBaseRpcController pcrc : pcrcList) {</span>
-<span class="source-line-no">503</span><span id="line-503"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">504</span><span id="line-504"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
-<span class="source-line-no">505</span><span id="line-505"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
-<span class="source-line-no">506</span><span id="line-506"> assertTrue(ioe.getCause() instanceof CallTimeoutException);</span>
-<span class="source-line-no">507</span><span id="line-507"> }</span>
-<span class="source-line-no">508</span><span id="line-508"> // confirm that we got exception before the actual pause.</span>
-<span class="source-line-no">509</span><span id="line-509"> assertTrue(waitTime < ms);</span>
-<span class="source-line-no">510</span><span id="line-510"> } finally {</span>
-<span class="source-line-no">511</span><span id="line-511"> rpcServer.stop();</span>
-<span class="source-line-no">512</span><span id="line-512"> }</span>
-<span class="source-line-no">513</span><span id="line-513"> }</span>
-<span class="source-line-no">514</span><span id="line-514"></span>
-<span class="source-line-no">515</span><span id="line-515"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
-<span class="source-line-no">516</span><span id="line-516"> Waiter.waitFor(CONF, 1000,</span>
-<span class="source-line-no">517</span><span id="line-517"> new MatcherPredicate<>(() -> traceRule.getSpans(), hasItem(matcher)));</span>
-<span class="source-line-no">518</span><span id="line-518"> return traceRule.getSpans().stream().filter(matcher::matches).findFirst()</span>
-<span class="source-line-no">519</span><span id="line-519"> .orElseThrow(AssertionError::new);</span>
-<span class="source-line-no">520</span><span id="line-520"> }</span>
-<span class="source-line-no">521</span><span id="line-521"></span>
-<span class="source-line-no">522</span><span id="line-522"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">523</span><span id="line-523"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">389</span><span id="line-389"> @Override</span>
+<span class="source-line-no">390</span><span id="line-390"> protected SimpleServerRpcConnection getConnection(SocketChannel channel, long time) {</span>
+<span class="source-line-no">391</span><span id="line-391"> return new FailingConnection(this, channel, time);</span>
+<span class="source-line-no">392</span><span id="line-392"> }</span>
+<span class="source-line-no">393</span><span id="line-393"> }</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395"> protected RpcServer createTestFailingRpcServer(final String name,</span>
+<span class="source-line-no">396</span><span id="line-396"> final List<BlockingServiceAndInterface> services, final InetSocketAddress bindAddress,</span>
+<span class="source-line-no">397</span><span id="line-397"> Configuration conf, RpcScheduler scheduler) throws IOException {</span>
+<span class="source-line-no">398</span><span id="line-398"> if (rpcServerImpl.equals(NettyRpcServer.class)) {</span>
+<span class="source-line-no">399</span><span id="line-399"> return new FailingNettyRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">400</span><span id="line-400"> } else {</span>
+<span class="source-line-no">401</span><span id="line-401"> return new FailingSimpleRpcServer(null, name, services, bindAddress, conf, scheduler);</span>
+<span class="source-line-no">402</span><span id="line-402"> }</span>
+<span class="source-line-no">403</span><span id="line-403"> }</span>
+<span class="source-line-no">404</span><span id="line-404"></span>
+<span class="source-line-no">405</span><span id="line-405"> /** Tests that the connection closing is handled by the client with outstanding RPC calls */</span>
+<span class="source-line-no">406</span><span id="line-406"> @TestTemplate</span>
+<span class="source-line-no">407</span><span id="line-407"> public void testConnectionCloseWithOutstandingRPCs() throws InterruptedException, IOException {</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">409</span><span id="line-409"> RpcServer rpcServer = createTestFailingRpcServer("testRpcServer",</span>
+<span class="source-line-no">410</span><span id="line-410"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">411</span><span id="line-411"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">412</span><span id="line-412"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">413</span><span id="line-413"> rpcServer.start();</span>
+<span class="source-line-no">414</span><span id="line-414"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">415</span><span id="line-415"> EchoRequestProto param = EchoRequestProto.newBuilder().setMessage("hello").build();</span>
+<span class="source-line-no">416</span><span id="line-416"> ServiceException se = assertThrows(ServiceException.class, () -> stub.echo(null, param),</span>
+<span class="source-line-no">417</span><span id="line-417"> "RPC should have failed because connection closed");</span>
+<span class="source-line-no">418</span><span id="line-418"> LOG.info("Caught expected exception: " + se);</span>
+<span class="source-line-no">419</span><span id="line-419"> } finally {</span>
+<span class="source-line-no">420</span><span id="line-420"> rpcServer.stop();</span>
+<span class="source-line-no">421</span><span id="line-421"> }</span>
+<span class="source-line-no">422</span><span id="line-422"> }</span>
+<span class="source-line-no">423</span><span id="line-423"></span>
+<span class="source-line-no">424</span><span id="line-424"> @TestTemplate</span>
+<span class="source-line-no">425</span><span id="line-425"> public void testAsyncEcho() throws IOException {</span>
+<span class="source-line-no">426</span><span id="line-426"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">427</span><span id="line-427"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">428</span><span id="line-428"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">429</span><span id="line-429"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">430</span><span id="line-430"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">431</span><span id="line-431"> rpcServer.start();</span>
+<span class="source-line-no">432</span><span id="line-432"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">433</span><span id="line-433"> int num = 10;</span>
+<span class="source-line-no">434</span><span id="line-434"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">435</span><span id="line-435"> List<BlockingRpcCallback<EchoResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">436</span><span id="line-436"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">437</span><span id="line-437"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">438</span><span id="line-438"> BlockingRpcCallback<EchoResponseProto> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">439</span><span id="line-439"> stub.echo(pcrc, EchoRequestProto.newBuilder().setMessage("hello-" + i).build(), done);</span>
+<span class="source-line-no">440</span><span id="line-440"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">441</span><span id="line-441"> callbackList.add(done);</span>
+<span class="source-line-no">442</span><span id="line-442"> }</span>
+<span class="source-line-no">443</span><span id="line-443"> for (int i = 0; i < num; i++) {</span>
+<span class="source-line-no">444</span><span id="line-444"> EchoResponseProto resp = callbackList.get(i).get();</span>
+<span class="source-line-no">445</span><span id="line-445"> HBaseRpcController pcrc = pcrcList.get(i);</span>
+<span class="source-line-no">446</span><span id="line-446"> assertEquals("hello-" + i, resp.getMessage());</span>
+<span class="source-line-no">447</span><span id="line-447"> assertFalse(pcrc.failed());</span>
+<span class="source-line-no">448</span><span id="line-448"> assertNull(pcrc.cellScanner());</span>
+<span class="source-line-no">449</span><span id="line-449"> }</span>
+<span class="source-line-no">450</span><span id="line-450"> } finally {</span>
+<span class="source-line-no">451</span><span id="line-451"> rpcServer.stop();</span>
+<span class="source-line-no">452</span><span id="line-452"> }</span>
+<span class="source-line-no">453</span><span id="line-453"> }</span>
+<span class="source-line-no">454</span><span id="line-454"></span>
+<span class="source-line-no">455</span><span id="line-455"> @TestTemplate</span>
+<span class="source-line-no">456</span><span id="line-456"> public void testAsyncRemoteError() throws IOException {</span>
+<span class="source-line-no">457</span><span id="line-457"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">458</span><span id="line-458"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">459</span><span id="line-459"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">460</span><span id="line-460"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">461</span><span id="line-461"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">462</span><span id="line-462"> rpcServer.start();</span>
+<span class="source-line-no">463</span><span id="line-463"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">464</span><span id="line-464"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">465</span><span id="line-465"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">466</span><span id="line-466"> stub.error(pcrc, EmptyRequestProto.getDefaultInstance(), callback);</span>
+<span class="source-line-no">467</span><span id="line-467"> assertNull(callback.get());</span>
+<span class="source-line-no">468</span><span id="line-468"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">469</span><span id="line-469"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">470</span><span id="line-470"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">471</span><span id="line-471"> assertThat(ioe, instanceOf(DoNotRetryIOException.class));</span>
+<span class="source-line-no">472</span><span id="line-472"> assertThat(ioe.getMessage(), containsString("server error!"));</span>
+<span class="source-line-no">473</span><span id="line-473"> } finally {</span>
+<span class="source-line-no">474</span><span id="line-474"> rpcServer.stop();</span>
+<span class="source-line-no">475</span><span id="line-475"> }</span>
+<span class="source-line-no">476</span><span id="line-476"> }</span>
+<span class="source-line-no">477</span><span id="line-477"></span>
+<span class="source-line-no">478</span><span id="line-478"> @TestTemplate</span>
+<span class="source-line-no">479</span><span id="line-479"> public void testAsyncTimeout() throws IOException {</span>
+<span class="source-line-no">480</span><span id="line-480"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">481</span><span id="line-481"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">482</span><span id="line-482"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">483</span><span id="line-483"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">484</span><span id="line-484"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">485</span><span id="line-485"> rpcServer.start();</span>
+<span class="source-line-no">486</span><span id="line-486"> Interface stub = newStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">487</span><span id="line-487"> List<HBaseRpcController> pcrcList = new ArrayList<>();</span>
+<span class="source-line-no">488</span><span id="line-488"> List<BlockingRpcCallback<EmptyResponseProto>> callbackList = new ArrayList<>();</span>
+<span class="source-line-no">489</span><span id="line-489"> int ms = 1000;</span>
+<span class="source-line-no">490</span><span id="line-490"> int timeout = 100;</span>
+<span class="source-line-no">491</span><span id="line-491"> long startTime = System.nanoTime();</span>
+<span class="source-line-no">492</span><span id="line-492"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">493</span><span id="line-493"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">494</span><span id="line-494"> pcrc.setCallTimeout(timeout);</span>
+<span class="source-line-no">495</span><span id="line-495"> BlockingRpcCallback<EmptyResponseProto> callback = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">496</span><span id="line-496"> stub.pause(pcrc, PauseRequestProto.newBuilder().setMs(ms).build(), callback);</span>
+<span class="source-line-no">497</span><span id="line-497"> pcrcList.add(pcrc);</span>
+<span class="source-line-no">498</span><span id="line-498"> callbackList.add(callback);</span>
+<span class="source-line-no">499</span><span id="line-499"> }</span>
+<span class="source-line-no">500</span><span id="line-500"> for (BlockingRpcCallback<?> callback : callbackList) {</span>
+<span class="source-line-no">501</span><span id="line-501"> assertNull(callback.get());</span>
+<span class="source-line-no">502</span><span id="line-502"> }</span>
+<span class="source-line-no">503</span><span id="line-503"> long waitTime = (System.nanoTime() - startTime) / 1000000;</span>
+<span class="source-line-no">504</span><span id="line-504"> for (HBaseRpcController pcrc : pcrcList) {</span>
+<span class="source-line-no">505</span><span id="line-505"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">506</span><span id="line-506"> LOG.info("Caught expected exception: " + pcrc.getFailed());</span>
+<span class="source-line-no">507</span><span id="line-507"> IOException ioe = ProtobufUtil.handleRemoteException(pcrc.getFailed());</span>
+<span class="source-line-no">508</span><span id="line-508"> assertThat(ioe.getCause(), instanceOf(CallTimeoutException.class));</span>
+<span class="source-line-no">509</span><span id="line-509"> }</span>
+<span class="source-line-no">510</span><span id="line-510"> // confirm that we got exception before the actual pause.</span>
+<span class="source-line-no">511</span><span id="line-511"> assertThat(waitTime, lessThan((long) ms));</span>
+<span class="source-line-no">512</span><span id="line-512"> } finally {</span>
+<span class="source-line-no">513</span><span id="line-513"> // wait until all active calls quit, otherwise it may mess up the tracing spans</span>
+<span class="source-line-no">514</span><span id="line-514"> await().atMost(Duration.ofSeconds(2))</span>
+<span class="source-line-no">515</span><span id="line-515"> .untilAsserted(() -> assertEquals(0, rpcServer.getScheduler().getActiveRpcHandlerCount()));</span>
+<span class="source-line-no">516</span><span id="line-516"> rpcServer.stop();</span>
+<span class="source-line-no">517</span><span id="line-517"> }</span>
+<span class="source-line-no">518</span><span id="line-518"> }</span>
+<span class="source-line-no">519</span><span id="line-519"></span>
+<span class="source-line-no">520</span><span id="line-520"> private SpanData waitSpan(Matcher<SpanData> matcher) {</span>
+<span class="source-line-no">521</span><span id="line-521"> Waiter.waitFor(CONF, 1000, new MatcherPredicate<>(() -> OTEL_EXT.getSpans(), hasItem(matcher)));</span>
+<span class="source-line-no">522</span><span id="line-522"> return OTEL_EXT.getSpans().stream().filter(matcher::matches).findFirst()</span>
+<span class="source-line-no">523</span><span id="line-523"> .orElseThrow(AssertionError::new);</span>
<span class="source-line-no">524</span><span id="line-524"> }</span>
<span class="source-line-no">525</span><span id="line-525"></span>
-<span class="source-line-no">526</span><span id="line-526"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">527</span><span id="line-527"> final String methodName) {</span>
-<span class="source-line-no">528</span><span id="line-528"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">529</span><span id="line-529"> hasKind(SpanKind.CLIENT));</span>
-<span class="source-line-no">530</span><span id="line-530"> }</span>
-<span class="source-line-no">531</span><span id="line-531"></span>
-<span class="source-line-no">532</span><span id="line-532"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
-<span class="source-line-no">533</span><span id="line-533"> final String methodName) {</span>
-<span class="source-line-no">534</span><span id="line-534"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
-<span class="source-line-no">535</span><span id="line-535"> hasKind(SpanKind.SERVER));</span>
-<span class="source-line-no">536</span><span id="line-536"> }</span>
-<span class="source-line-no">537</span><span id="line-537"></span>
-<span class="source-line-no">538</span><span id="line-538"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
-<span class="source-line-no">539</span><span id="line-539"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
-<span class="source-line-no">540</span><span id="line-540"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">541</span><span id="line-541"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
-<span class="source-line-no">542</span><span id="line-542"> containsEntry("net.peer.name", isa.getHostName()),</span>
-<span class="source-line-no">543</span><span id="line-543"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
-<span class="source-line-no">544</span><span id="line-544"> }</span>
-<span class="source-line-no">545</span><span id="line-545"></span>
-<span class="source-line-no">546</span><span id="line-546"> private static Matcher<SpanData></span>
-<span class="source-line-no">547</span><span id="line-547"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
-<span class="source-line-no">548</span><span id="line-548"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
-<span class="source-line-no">549</span><span id="line-549"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
-<span class="source-line-no">550</span><span id="line-550"> }</span>
-<span class="source-line-no">551</span><span id="line-551"></span>
-<span class="source-line-no">552</span><span id="line-552"> private void assertRemoteSpan() {</span>
-<span class="source-line-no">553</span><span id="line-553"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
-<span class="source-line-no">554</span><span id="line-554"> assertTrue(data.getParentSpanContext().isRemote());</span>
-<span class="source-line-no">555</span><span id="line-555"> assertEquals(SpanKind.SERVER, data.getKind());</span>
-<span class="source-line-no">556</span><span id="line-556"> }</span>
-<span class="source-line-no">557</span><span id="line-557"></span>
-<span class="source-line-no">558</span><span id="line-558"> @Test</span>
-<span class="source-line-no">559</span><span id="line-559"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
-<span class="source-line-no">560</span><span id="line-560"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">561</span><span id="line-561"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">562</span><span id="line-562"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">563</span><span id="line-563"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">564</span><span id="line-564"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">565</span><span id="line-565"> rpcServer.start();</span>
-<span class="source-line-no">566</span><span id="line-566"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">567</span><span id="line-567"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
-<span class="source-line-no">568</span><span id="line-568"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">569</span><span id="line-569"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">570</span><span id="line-570"> final SpanData pauseClientSpan =</span>
-<span class="source-line-no">571</span><span id="line-571"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">572</span><span id="line-572"> assertThat(pauseClientSpan,</span>
-<span class="source-line-no">573</span><span id="line-573"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
-<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseServerSpan =</span>
-<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseServerSpan,</span>
-<span class="source-line-no">577</span><span id="line-577"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
-<span class="source-line-no">578</span><span id="line-578"> assertRemoteSpan();</span>
-<span class="source-line-no">579</span><span id="line-579"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">580</span><span id="line-580"> assertThat(traceRule.getSpans(),</span>
-<span class="source-line-no">581</span><span id="line-581"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
-<span class="source-line-no">582</span><span id="line-582"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()),</span>
-<span class="source-line-no">583</span><span id="line-583"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
-<span class="source-line-no">584</span><span id="line-584"> } finally {</span>
-<span class="source-line-no">585</span><span id="line-585"> rpcServer.stop();</span>
-<span class="source-line-no">586</span><span id="line-586"> }</span>
-<span class="source-line-no">587</span><span id="line-587"> }</span>
-<span class="source-line-no">588</span><span id="line-588"></span>
-<span class="source-line-no">589</span><span id="line-589"> @Test</span>
-<span class="source-line-no">590</span><span id="line-590"> public void testTracingErrorIpc() throws IOException {</span>
-<span class="source-line-no">591</span><span id="line-591"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">592</span><span id="line-592"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
-<span class="source-line-no">593</span><span id="line-593"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
-<span class="source-line-no">594</span><span id="line-594"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">595</span><span id="line-595"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">596</span><span id="line-596"> rpcServer.start();</span>
-<span class="source-line-no">597</span><span id="line-597"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">598</span><span id="line-598"> // use the ISA from the running server so that we can get the port selected.</span>
-<span class="source-line-no">599</span><span id="line-599"> assertThrows(ServiceException.class,</span>
-<span class="source-line-no">600</span><span id="line-600"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
-<span class="source-line-no">601</span><span id="line-601"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">602</span><span id="line-602"> final SpanData errorClientSpan =</span>
-<span class="source-line-no">603</span><span id="line-603"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">604</span><span id="line-604"> assertThat(errorClientSpan,</span>
-<span class="source-line-no">605</span><span id="line-605"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
-<span class="source-line-no">606</span><span id="line-606"> final SpanData errorServerSpan =</span>
-<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">608</span><span id="line-608"> assertThat(errorServerSpan,</span>
-<span class="source-line-no">609</span><span id="line-609"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
-<span class="source-line-no">610</span><span id="line-610"> assertRemoteSpan();</span>
-<span class="source-line-no">611</span><span id="line-611"> assertFalse("no spans provided", traceRule.getSpans().isEmpty());</span>
-<span class="source-line-no">612</span><span id="line-612"> assertThat(traceRule.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
-<span class="source-line-no">613</span><span id="line-613"> hasTraceId(traceRule.getSpans().iterator().next().getTraceId()))));</span>
-<span class="source-line-no">614</span><span id="line-614"> } finally {</span>
-<span class="source-line-no">615</span><span id="line-615"> rpcServer.stop();</span>
-<span class="source-line-no">616</span><span id="line-616"> }</span>
-<span class="source-line-no">617</span><span id="line-617"> }</span>
-<span class="source-line-no">618</span><span id="line-618"></span>
-<span class="source-line-no">619</span><span id="line-619"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
-<span class="source-line-no">620</span><span id="line-620"></span>
-<span class="source-line-no">621</span><span id="line-621"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
-<span class="source-line-no">622</span><span id="line-622"> ServiceException se = assertThrows(ServiceException.class,</span>
-<span class="source-line-no">623</span><span id="line-623"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
-<span class="source-line-no">624</span><span id="line-624"> return ProtobufUtil.handleRemoteException(se);</span>
-<span class="source-line-no">625</span><span id="line-625"> }</span>
-<span class="source-line-no">626</span><span id="line-626"></span>
-<span class="source-line-no">627</span><span id="line-627"> @Test</span>
-<span class="source-line-no">628</span><span id="line-628"> public void testBadPreambleHeader() throws Exception {</span>
-<span class="source-line-no">629</span><span id="line-629"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">630</span><span id="line-630"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">631</span><span id="line-631"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">632</span><span id="line-632"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
-<span class="source-line-no">633</span><span id="line-633"> rpcServer.start();</span>
-<span class="source-line-no">634</span><span id="line-634"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
-<span class="source-line-no">635</span><span id="line-635"> BadAuthException error = null;</span>
-<span class="source-line-no">636</span><span id="line-636"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
-<span class="source-line-no">637</span><span id="line-637"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
-<span class="source-line-no">638</span><span id="line-638"> for (int i = 0; i < 10; i++) {</span>
-<span class="source-line-no">639</span><span id="line-639"> IOException ioe = doBadPreableHeaderCall(stub);</span>
-<span class="source-line-no">640</span><span id="line-640"> if (ioe instanceof BadAuthException) {</span>
-<span class="source-line-no">641</span><span id="line-641"> error = (BadAuthException) ioe;</span>
-<span class="source-line-no">642</span><span id="line-642"> break;</span>
-<span class="source-line-no">643</span><span id="line-643"> }</span>
-<span class="source-line-no">644</span><span id="line-644"> Thread.sleep(100);</span>
-<span class="source-line-no">645</span><span id="line-645"> }</span>
-<span class="source-line-no">646</span><span id="line-646"> assertNotNull("Can not get expected BadAuthException", error);</span>
-<span class="source-line-no">647</span><span id="line-647"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
-<span class="source-line-no">648</span><span id="line-648"> } finally {</span>
-<span class="source-line-no">649</span><span id="line-649"> rpcServer.stop();</span>
-<span class="source-line-no">650</span><span id="line-650"> }</span>
-<span class="source-line-no">651</span><span id="line-651"> }</span>
-<span class="source-line-no">652</span><span id="line-652"></span>
-<span class="source-line-no">653</span><span id="line-653"> /**</span>
-<span class="source-line-no">654</span><span id="line-654"> * Testcase for getting connection registry information through connection preamble header, see</span>
-<span class="source-line-no">655</span><span id="line-655"> * HBASE-25051 for more details.</span>
-<span class="source-line-no">656</span><span id="line-656"> */</span>
-<span class="source-line-no">657</span><span id="line-657"> @Test</span>
-<span class="source-line-no">658</span><span id="line-658"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
-<span class="source-line-no">659</span><span id="line-659"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">660</span><span id="line-660"> String clusterId = "test_cluster_id";</span>
-<span class="source-line-no">661</span><span id="line-661"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
-<span class="source-line-no">662</span><span id="line-662"> when(server.getClusterId()).thenReturn(clusterId);</span>
-<span class="source-line-no">663</span><span id="line-663"> // do not need any services</span>
-<span class="source-line-no">664</span><span id="line-664"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">665</span><span id="line-665"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">666</span><span id="line-666"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">667</span><span id="line-667"> rpcServer.start();</span>
-<span class="source-line-no">668</span><span id="line-668"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">669</span><span id="line-669"> BlockingRpcChannel channel =</span>
-<span class="source-line-no">670</span><span id="line-670"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
-<span class="source-line-no">671</span><span id="line-671"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">672</span><span id="line-672"> ConnectionRegistryService.BlockingInterface stub =</span>
-<span class="source-line-no">673</span><span id="line-673"> ConnectionRegistryService.newBlockingStub(channel);</span>
-<span class="source-line-no">674</span><span id="line-674"> GetConnectionRegistryResponse resp =</span>
-<span class="source-line-no">675</span><span id="line-675"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
-<span class="source-line-no">676</span><span id="line-676"> assertEquals(clusterId, resp.getClusterId());</span>
-<span class="source-line-no">677</span><span id="line-677"> } finally {</span>
-<span class="source-line-no">678</span><span id="line-678"> rpcServer.stop();</span>
-<span class="source-line-no">679</span><span id="line-679"> }</span>
-<span class="source-line-no">680</span><span id="line-680"> }</span>
-<span class="source-line-no">681</span><span id="line-681"></span>
-<span class="source-line-no">682</span><span id="line-682"> /**</span>
-<span class="source-line-no">683</span><span id="line-683"> * Test server does not support getting connection registry information through connection</span>
-<span class="source-line-no">684</span><span id="line-684"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
-<span class="source-line-no">685</span><span id="line-685"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
-<span class="source-line-no">686</span><span id="line-686"> */</span>
-<span class="source-line-no">687</span><span id="line-687"> @Test</span>
-<span class="source-line-no">688</span><span id="line-688"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
-<span class="source-line-no">689</span><span id="line-689"> Configuration clientConf = new Configuration(CONF);</span>
-<span class="source-line-no">690</span><span id="line-690"> // do not need any services</span>
-<span class="source-line-no">691</span><span id="line-691"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
-<span class="source-line-no">692</span><span id="line-692"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
-<span class="source-line-no">693</span><span id="line-693"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
-<span class="source-line-no">694</span><span id="line-694"> rpcServer.start();</span>
-<span class="source-line-no">695</span><span id="line-695"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
-<span class="source-line-no">696</span><span id="line-696"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
-<span class="source-line-no">697</span><span id="line-697"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
-<span class="source-line-no">698</span><span id="line-698"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
-<span class="source-line-no">699</span><span id="line-699"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
-<span class="source-line-no">700</span><span id="line-700"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
-<span class="source-line-no">701</span><span id="line-701"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
-<span class="source-line-no">702</span><span id="line-702"> // should have failed so no response</span>
-<span class="source-line-no">703</span><span id="line-703"> assertNull(done.get());</span>
-<span class="source-line-no">704</span><span id="line-704"> assertTrue(pcrc.failed());</span>
-<span class="source-line-no">705</span><span id="line-705"> // should be a FatalConnectionException</span>
-<span class="source-line-no">706</span><span id="line-706"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
-<span class="source-line-no">707</span><span id="line-707"> assertEquals(FatalConnectionException.class.getName(),</span>
-<span class="source-line-no">708</span><span id="line-708"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
-<span class="source-line-no">709</span><span id="line-709"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
-<span class="source-line-no">710</span><span id="line-710"> } finally {</span>
-<span class="source-line-no">711</span><span id="line-711"> rpcServer.stop();</span>
-<span class="source-line-no">712</span><span id="line-712"> }</span>
-<span class="source-line-no">713</span><span id="line-713"> }</span>
-<span class="source-line-no">714</span><span id="line-714">}</span>
+<span class="source-line-no">526</span><span id="line-526"> private static String buildIpcSpanName(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">527</span><span id="line-527"> return packageAndService + "/" + methodName;</span>
+<span class="source-line-no">528</span><span id="line-528"> }</span>
+<span class="source-line-no">529</span><span id="line-529"></span>
+<span class="source-line-no">530</span><span id="line-530"> private static Matcher<SpanData> buildIpcClientSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">531</span><span id="line-531"> final String methodName) {</span>
+<span class="source-line-no">532</span><span id="line-532"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">533</span><span id="line-533"> hasKind(SpanKind.CLIENT));</span>
+<span class="source-line-no">534</span><span id="line-534"> }</span>
+<span class="source-line-no">535</span><span id="line-535"></span>
+<span class="source-line-no">536</span><span id="line-536"> private static Matcher<SpanData> buildIpcServerSpanMatcher(final String packageAndService,</span>
+<span class="source-line-no">537</span><span id="line-537"> final String methodName) {</span>
+<span class="source-line-no">538</span><span id="line-538"> return allOf(hasName(buildIpcSpanName(packageAndService, methodName)),</span>
+<span class="source-line-no">539</span><span id="line-539"> hasKind(SpanKind.SERVER));</span>
+<span class="source-line-no">540</span><span id="line-540"> }</span>
+<span class="source-line-no">541</span><span id="line-541"></span>
+<span class="source-line-no">542</span><span id="line-542"> private static Matcher<SpanData> buildIpcClientSpanAttributesMatcher(</span>
+<span class="source-line-no">543</span><span id="line-543"> final String packageAndService, final String methodName, final InetSocketAddress isa) {</span>
+<span class="source-line-no">544</span><span id="line-544"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">545</span><span id="line-545"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName),</span>
+<span class="source-line-no">546</span><span id="line-546"> containsEntry("net.peer.name", isa.getHostName()),</span>
+<span class="source-line-no">547</span><span id="line-547"> containsEntry(AttributeKey.longKey("net.peer.port"), (long) isa.getPort())));</span>
+<span class="source-line-no">548</span><span id="line-548"> }</span>
+<span class="source-line-no">549</span><span id="line-549"></span>
+<span class="source-line-no">550</span><span id="line-550"> private static Matcher<SpanData></span>
+<span class="source-line-no">551</span><span id="line-551"> buildIpcServerSpanAttributesMatcher(final String packageAndService, final String methodName) {</span>
+<span class="source-line-no">552</span><span id="line-552"> return hasAttributes(allOf(containsEntry("rpc.system", "HBASE_RPC"),</span>
+<span class="source-line-no">553</span><span id="line-553"> containsEntry("rpc.service", packageAndService), containsEntry("rpc.method", methodName)));</span>
+<span class="source-line-no">554</span><span id="line-554"> }</span>
+<span class="source-line-no">555</span><span id="line-555"></span>
+<span class="source-line-no">556</span><span id="line-556"> private void assertRemoteSpan() {</span>
+<span class="source-line-no">557</span><span id="line-557"> SpanData data = waitSpan(hasName("RpcServer.process"));</span>
+<span class="source-line-no">558</span><span id="line-558"> assertTrue(data.getParentSpanContext().isRemote());</span>
+<span class="source-line-no">559</span><span id="line-559"> assertEquals(SpanKind.SERVER, data.getKind());</span>
+<span class="source-line-no">560</span><span id="line-560"> }</span>
+<span class="source-line-no">561</span><span id="line-561"></span>
+<span class="source-line-no">562</span><span id="line-562"> @TestTemplate</span>
+<span class="source-line-no">563</span><span id="line-563"> public void testTracingSuccessIpc() throws IOException, ServiceException {</span>
+<span class="source-line-no">564</span><span id="line-564"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">565</span><span id="line-565"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">566</span><span id="line-566"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">567</span><span id="line-567"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">568</span><span id="line-568"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">569</span><span id="line-569"> rpcServer.start();</span>
+<span class="source-line-no">570</span><span id="line-570"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">571</span><span id="line-571"> stub.pause(null, PauseRequestProto.newBuilder().setMs(100).build());</span>
+<span class="source-line-no">572</span><span id="line-572"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">573</span><span id="line-573"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">574</span><span id="line-574"> final SpanData pauseClientSpan =</span>
+<span class="source-line-no">575</span><span id="line-575"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">576</span><span id="line-576"> assertThat(pauseClientSpan,</span>
+<span class="source-line-no">577</span><span id="line-577"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause", isa));</span>
+<span class="source-line-no">578</span><span id="line-578"> final SpanData pauseServerSpan =</span>
+<span class="source-line-no">579</span><span id="line-579"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">580</span><span id="line-580"> assertThat(pauseServerSpan,</span>
+<span class="source-line-no">581</span><span id="line-581"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "pause"));</span>
+<span class="source-line-no">582</span><span id="line-582"> assertRemoteSpan();</span>
+<span class="source-line-no">583</span><span id="line-583"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">584</span><span id="line-584"> assertThat(OTEL_EXT.getSpans(),</span>
+<span class="source-line-no">585</span><span id="line-585"> everyItem(allOf(hasStatusWithCode(StatusCode.OK),</span>
+<span class="source-line-no">586</span><span id="line-586"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()),</span>
+<span class="source-line-no">587</span><span id="line-587"> hasDuration(greaterThanOrEqualTo(Duration.ofMillis(100L))))));</span>
+<span class="source-line-no">588</span><span id="line-588"> } finally {</span>
+<span class="source-line-no">589</span><span id="line-589"> rpcServer.stop();</span>
+<span class="source-line-no">590</span><span id="line-590"> }</span>
+<span class="source-line-no">591</span><span id="line-591"> }</span>
+<span class="source-line-no">592</span><span id="line-592"></span>
+<span class="source-line-no">593</span><span id="line-593"> @TestTemplate</span>
+<span class="source-line-no">594</span><span id="line-594"> public void testTracingErrorIpc() throws IOException {</span>
+<span class="source-line-no">595</span><span id="line-595"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">596</span><span id="line-596"> RpcServer rpcServer = createRpcServer("testRpcServer",</span>
+<span class="source-line-no">597</span><span id="line-597"> Lists.newArrayList(new RpcServer.BlockingServiceAndInterface(SERVICE, null)),</span>
+<span class="source-line-no">598</span><span id="line-598"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">599</span><span id="line-599"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">600</span><span id="line-600"> rpcServer.start();</span>
+<span class="source-line-no">601</span><span id="line-601"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">602</span><span id="line-602"> // use the ISA from the running server so that we can get the port selected.</span>
+<span class="source-line-no">603</span><span id="line-603"> assertThrows(ServiceException.class,</span>
+<span class="source-line-no">604</span><span id="line-604"> () -> stub.error(null, EmptyRequestProto.getDefaultInstance()));</span>
+<span class="source-line-no">605</span><span id="line-605"> final InetSocketAddress isa = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">606</span><span id="line-606"> final SpanData errorClientSpan =</span>
+<span class="source-line-no">607</span><span id="line-607"> waitSpan(buildIpcClientSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">608</span><span id="line-608"> assertThat(errorClientSpan,</span>
+<span class="source-line-no">609</span><span id="line-609"> buildIpcClientSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error", isa));</span>
+<span class="source-line-no">610</span><span id="line-610"> final SpanData errorServerSpan =</span>
+<span class="source-line-no">611</span><span id="line-611"> waitSpan(buildIpcServerSpanMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">612</span><span id="line-612"> assertThat(errorServerSpan,</span>
+<span class="source-line-no">613</span><span id="line-613"> buildIpcServerSpanAttributesMatcher("hbase.test.pb.TestProtobufRpcProto", "error"));</span>
+<span class="source-line-no">614</span><span id="line-614"> assertRemoteSpan();</span>
+<span class="source-line-no">615</span><span id="line-615"> assertFalse(OTEL_EXT.getSpans().isEmpty(), "no spans provided");</span>
+<span class="source-line-no">616</span><span id="line-616"> assertThat(OTEL_EXT.getSpans(), everyItem(allOf(hasStatusWithCode(StatusCode.ERROR),</span>
+<span class="source-line-no">617</span><span id="line-617"> hasTraceId(OTEL_EXT.getSpans().iterator().next().getTraceId()))));</span>
+<span class="source-line-no">618</span><span id="line-618"> } finally {</span>
+<span class="source-line-no">619</span><span id="line-619"> rpcServer.stop();</span>
+<span class="source-line-no">620</span><span id="line-620"> }</span>
+<span class="source-line-no">621</span><span id="line-621"> }</span>
+<span class="source-line-no">622</span><span id="line-622"></span>
+<span class="source-line-no">623</span><span id="line-623"> protected abstract AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf);</span>
+<span class="source-line-no">624</span><span id="line-624"></span>
+<span class="source-line-no">625</span><span id="line-625"> private IOException doBadPreableHeaderCall(BlockingInterface stub) {</span>
+<span class="source-line-no">626</span><span id="line-626"> ServiceException se = assertThrows(ServiceException.class,</span>
+<span class="source-line-no">627</span><span id="line-627"> () -> stub.echo(null, EchoRequestProto.newBuilder().setMessage("hello").build()));</span>
+<span class="source-line-no">628</span><span id="line-628"> return ProtobufUtil.handleRemoteException(se);</span>
+<span class="source-line-no">629</span><span id="line-629"> }</span>
+<span class="source-line-no">630</span><span id="line-630"></span>
+<span class="source-line-no">631</span><span id="line-631"> @TestTemplate</span>
+<span class="source-line-no">632</span><span id="line-632"> public void testBadPreambleHeader() throws Exception {</span>
+<span class="source-line-no">633</span><span id="line-633"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">634</span><span id="line-634"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">635</span><span id="line-635"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">636</span><span id="line-636"> try (AbstractRpcClient<?> client = createBadAuthRpcClient(clientConf)) {</span>
+<span class="source-line-no">637</span><span id="line-637"> rpcServer.start();</span>
+<span class="source-line-no">638</span><span id="line-638"> BlockingInterface stub = newBlockingStub(client, rpcServer.getListenerAddress());</span>
+<span class="source-line-no">639</span><span id="line-639"> BadAuthException error = null;</span>
+<span class="source-line-no">640</span><span id="line-640"> // for SimpleRpcServer, it is possible that we get a broken pipe before getting the</span>
+<span class="source-line-no">641</span><span id="line-641"> // BadAuthException, so we add some retries here, see HBASE-28417</span>
+<span class="source-line-no">642</span><span id="line-642"> for (int i = 0; i < 10; i++) {</span>
+<span class="source-line-no">643</span><span id="line-643"> IOException ioe = doBadPreableHeaderCall(stub);</span>
+<span class="source-line-no">644</span><span id="line-644"> if (ioe instanceof BadAuthException) {</span>
+<span class="source-line-no">645</span><span id="line-645"> error = (BadAuthException) ioe;</span>
+<span class="source-line-no">646</span><span id="line-646"> break;</span>
+<span class="source-line-no">647</span><span id="line-647"> }</span>
+<span class="source-line-no">648</span><span id="line-648"> Thread.sleep(100);</span>
+<span class="source-line-no">649</span><span id="line-649"> }</span>
+<span class="source-line-no">650</span><span id="line-650"> assertNotNull(error, "Can not get expected BadAuthException");</span>
+<span class="source-line-no">651</span><span id="line-651"> assertThat(error.getMessage(), containsString("authName=unknown"));</span>
+<span class="source-line-no">652</span><span id="line-652"> } finally {</span>
+<span class="source-line-no">653</span><span id="line-653"> rpcServer.stop();</span>
+<span class="source-line-no">654</span><span id="line-654"> }</span>
+<span class="source-line-no">655</span><span id="line-655"> }</span>
+<span class="source-line-no">656</span><span id="line-656"></span>
+<span class="source-line-no">657</span><span id="line-657"> /**</span>
+<span class="source-line-no">658</span><span id="line-658"> * Testcase for getting connection registry information through connection preamble header, see</span>
+<span class="source-line-no">659</span><span id="line-659"> * HBASE-25051 for more details.</span>
+<span class="source-line-no">660</span><span id="line-660"> */</span>
+<span class="source-line-no">661</span><span id="line-661"> @TestTemplate</span>
+<span class="source-line-no">662</span><span id="line-662"> public void testGetConnectionRegistry() throws IOException, ServiceException {</span>
+<span class="source-line-no">663</span><span id="line-663"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">664</span><span id="line-664"> String clusterId = "test_cluster_id";</span>
+<span class="source-line-no">665</span><span id="line-665"> HBaseServerBase<?> server = mock(HBaseServerBase.class);</span>
+<span class="source-line-no">666</span><span id="line-666"> when(server.getClusterId()).thenReturn(clusterId);</span>
+<span class="source-line-no">667</span><span id="line-667"> // do not need any services</span>
+<span class="source-line-no">668</span><span id="line-668"> RpcServer rpcServer = createRpcServer(server, "testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">669</span><span id="line-669"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">670</span><span id="line-670"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">671</span><span id="line-671"> rpcServer.start();</span>
+<span class="source-line-no">672</span><span id="line-672"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">673</span><span id="line-673"> BlockingRpcChannel channel =</span>
+<span class="source-line-no">674</span><span id="line-674"> client.createBlockingRpcChannel(ServerName.valueOf(addr.getHostName(), addr.getPort(),</span>
+<span class="source-line-no">675</span><span id="line-675"> EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">676</span><span id="line-676"> ConnectionRegistryService.BlockingInterface stub =</span>
+<span class="source-line-no">677</span><span id="line-677"> ConnectionRegistryService.newBlockingStub(channel);</span>
+<span class="source-line-no">678</span><span id="line-678"> GetConnectionRegistryResponse resp =</span>
+<span class="source-line-no">679</span><span id="line-679"> stub.getConnectionRegistry(null, GetConnectionRegistryRequest.getDefaultInstance());</span>
+<span class="source-line-no">680</span><span id="line-680"> assertEquals(clusterId, resp.getClusterId());</span>
+<span class="source-line-no">681</span><span id="line-681"> } finally {</span>
+<span class="source-line-no">682</span><span id="line-682"> rpcServer.stop();</span>
+<span class="source-line-no">683</span><span id="line-683"> }</span>
+<span class="source-line-no">684</span><span id="line-684"> }</span>
+<span class="source-line-no">685</span><span id="line-685"></span>
+<span class="source-line-no">686</span><span id="line-686"> /**</span>
+<span class="source-line-no">687</span><span id="line-687"> * Test server does not support getting connection registry information through connection</span>
+<span class="source-line-no">688</span><span id="line-688"> * preamble header, i.e, a new client connecting to an old server. We simulate this by using a</span>
+<span class="source-line-no">689</span><span id="line-689"> * Server without implementing the ConnectionRegistryEndpoint interface.</span>
+<span class="source-line-no">690</span><span id="line-690"> */</span>
+<span class="source-line-no">691</span><span id="line-691"> @TestTemplate</span>
+<span class="source-line-no">692</span><span id="line-692"> public void testGetConnectionRegistryError() throws IOException, ServiceException {</span>
+<span class="source-line-no">693</span><span id="line-693"> Configuration clientConf = new Configuration(CONF);</span>
+<span class="source-line-no">694</span><span id="line-694"> // do not need any services</span>
+<span class="source-line-no">695</span><span id="line-695"> RpcServer rpcServer = createRpcServer("testRpcServer", Collections.emptyList(),</span>
+<span class="source-line-no">696</span><span id="line-696"> new InetSocketAddress("localhost", 0), CONF, new FifoRpcScheduler(CONF, 1));</span>
+<span class="source-line-no">697</span><span id="line-697"> try (AbstractRpcClient<?> client = createRpcClient(clientConf)) {</span>
+<span class="source-line-no">698</span><span id="line-698"> rpcServer.start();</span>
+<span class="source-line-no">699</span><span id="line-699"> InetSocketAddress addr = rpcServer.getListenerAddress();</span>
+<span class="source-line-no">700</span><span id="line-700"> RpcChannel channel = client.createRpcChannel(ServerName.valueOf(addr.getHostName(),</span>
+<span class="source-line-no">701</span><span id="line-701"> addr.getPort(), EnvironmentEdgeManager.currentTime()), User.getCurrent(), 0);</span>
+<span class="source-line-no">702</span><span id="line-702"> ConnectionRegistryService.Interface stub = ConnectionRegistryService.newStub(channel);</span>
+<span class="source-line-no">703</span><span id="line-703"> HBaseRpcController pcrc = new HBaseRpcControllerImpl();</span>
+<span class="source-line-no">704</span><span id="line-704"> BlockingRpcCallback<GetConnectionRegistryResponse> done = new BlockingRpcCallback<>();</span>
+<span class="source-line-no">705</span><span id="line-705"> stub.getConnectionRegistry(pcrc, GetConnectionRegistryRequest.getDefaultInstance(), done);</span>
+<span class="source-line-no">706</span><span id="line-706"> // should have failed so no response</span>
+<span class="source-line-no">707</span><span id="line-707"> assertNull(done.get());</span>
+<span class="source-line-no">708</span><span id="line-708"> assertTrue(pcrc.failed());</span>
+<span class="source-line-no">709</span><span id="line-709"> // should be a FatalConnectionException</span>
+<span class="source-line-no">710</span><span id="line-710"> assertThat(pcrc.getFailed(), instanceOf(RemoteException.class));</span>
+<span class="source-line-no">711</span><span id="line-711"> assertEquals(FatalConnectionException.class.getName(),</span>
+<span class="source-line-no">712</span><span id="line-712"> ((RemoteException) pcrc.getFailed()).getClassName());</span>
+<span class="source-line-no">713</span><span id="line-713"> assertThat(pcrc.getFailed().getMessage(), startsWith("Expected HEADER="));</span>
+<span class="source-line-no">714</span><span id="line-714"> } finally {</span>
+<span class="source-line-no">715</span><span id="line-715"> rpcServer.stop();</span>
+<span class="source-line-no">716</span><span id="line-716"> }</span>
+<span class="source-line-no">717</span><span id="line-717"> }</span>
+<span class="source-line-no">718</span><span id="line-718">}</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
index a277e239b1c..2bcc4dfa63f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestBlockingIPC.html
@@ -31,79 +31,74 @@
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.ipc;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
-<span class="source-line-no">021</span><span id="line-21">import java.util.Arrays;</span>
-<span class="source-line-no">022</span><span id="line-22">import java.util.List;</span>
-<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.codec.Codec;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.junit.ClassRule;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.junit.runner.RunWith;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.junit.runners.Parameterized;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.junit.runners.Parameterized.Parameters;</span>
-<span class="source-line-no">033</span><span id="line-33"></span>
-<span class="source-line-no">034</span><span id="line-34">@RunWith(Parameterized.class)</span>
-<span class="source-line-no">035</span><span id="line-35">@Category({ RPCTests.class, MediumTests.class })</span>
-<span class="source-line-no">036</span><span id="line-36">public class TestBlockingIPC extends AbstractTestIPC {</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38"> @ClassRule</span>
-<span class="source-line-no">039</span><span id="line-39"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">040</span><span id="line-40"> HBaseClassTestRule.forClass(TestBlockingIPC.class);</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42"> @Parameters(name = "{index}: rpcServerImpl={0}")</span>
-<span class="source-line-no">043</span><span id="line-43"> public static List<Object[]> data() {</span>
-<span class="source-line-no">044</span><span id="line-44"> return Arrays.asList(new Object[] { SimpleRpcServer.class },</span>
-<span class="source-line-no">045</span><span id="line-45"> new Object[] { NettyRpcServer.class });</span>
-<span class="source-line-no">046</span><span id="line-46"> }</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48"> @Override</span>
-<span class="source-line-no">049</span><span id="line-49"> protected BlockingRpcClient createRpcClientNoCodec(Configuration conf) {</span>
-<span class="source-line-no">050</span><span id="line-50"> return new BlockingRpcClient(conf) {</span>
-<span class="source-line-no">051</span><span id="line-51"> @Override</span>
-<span class="source-line-no">052</span><span id="line-52"> protected Codec getCodec() {</span>
-<span class="source-line-no">053</span><span id="line-53"> return null;</span>
-<span class="source-line-no">054</span><span id="line-54"> }</span>
-<span class="source-line-no">055</span><span id="line-55"> };</span>
+<span class="source-line-no">021</span><span id="line-21">import java.util.stream.Stream;</span>
+<span class="source-line-no">022</span><span id="line-22">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;</span>
+<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.codec.Codec;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.junit.jupiter.params.provider.Arguments;</span>
+<span class="source-line-no">029</span><span id="line-29"></span>
+<span class="source-line-no">030</span><span id="line-30">@Tag(RPCTests.TAG)</span>
+<span class="source-line-no">031</span><span id="line-31">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">032</span><span id="line-32">@HBaseParameterizedTestTemplate(name = "{index}: rpcServerImpl={0}")</span>
+<span class="source-line-no">033</span><span id="line-33">public class TestBlockingIPC extends AbstractTestIPC {</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35"> public TestBlockingIPC(Class<? extends RpcServer> rpcServerImpl) {</span>
+<span class="source-line-no">036</span><span id="line-36"> super(rpcServerImpl);</span>
+<span class="source-line-no">037</span><span id="line-37"> }</span>
+<span class="source-line-no">038</span><span id="line-38"></span>
+<span class="source-line-no">039</span><span id="line-39"> public static Stream<Arguments> parameters() {</span>
+<span class="source-line-no">040</span><span id="line-40"> return Stream.of(Arguments.of(SimpleRpcServer.class), Arguments.of(NettyRpcServer.class));</span>
+<span class="source-line-no">041</span><span id="line-41"> }</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> @Override</span>
+<span class="source-line-no">044</span><span id="line-44"> protected BlockingRpcClient createRpcClientNoCodec(Configuration conf) {</span>
+<span class="source-line-no">045</span><span id="line-45"> return new BlockingRpcClient(conf) {</span>
+<span class="source-line-no">046</span><span id="line-46"> @Override</span>
+<span class="source-line-no">047</span><span id="line-47"> protected Codec getCodec() {</span>
+<span class="source-line-no">048</span><span id="line-48"> return null;</span>
+<span class="source-line-no">049</span><span id="line-49"> }</span>
+<span class="source-line-no">050</span><span id="line-50"> };</span>
+<span class="source-line-no">051</span><span id="line-51"> }</span>
+<span class="source-line-no">052</span><span id="line-52"></span>
+<span class="source-line-no">053</span><span id="line-53"> @Override</span>
+<span class="source-line-no">054</span><span id="line-54"> protected BlockingRpcClient createRpcClient(Configuration conf) {</span>
+<span class="source-line-no">055</span><span id="line-55"> return new BlockingRpcClient(conf);</span>
<span class="source-line-no">056</span><span id="line-56"> }</span>
<span class="source-line-no">057</span><span id="line-57"></span>
<span class="source-line-no">058</span><span id="line-58"> @Override</span>
-<span class="source-line-no">059</span><span id="line-59"> protected BlockingRpcClient createRpcClient(Configuration conf) {</span>
-<span class="source-line-no">060</span><span id="line-60"> return new BlockingRpcClient(conf);</span>
-<span class="source-line-no">061</span><span id="line-61"> }</span>
+<span class="source-line-no">059</span><span id="line-59"> protected BlockingRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf)</span>
+<span class="source-line-no">060</span><span id="line-60"> throws IOException {</span>
+<span class="source-line-no">061</span><span id="line-61"> return new BlockingRpcClient(conf) {</span>
<span class="source-line-no">062</span><span id="line-62"></span>
-<span class="source-line-no">063</span><span id="line-63"> @Override</span>
-<span class="source-line-no">064</span><span id="line-64"> protected BlockingRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf)</span>
-<span class="source-line-no">065</span><span id="line-65"> throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66"> return new BlockingRpcClient(conf) {</span>
-<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68"> @Override</span>
-<span class="source-line-no">069</span><span id="line-69"> protected boolean isTcpNoDelay() {</span>
-<span class="source-line-no">070</span><span id="line-70"> throw new RuntimeException("Injected fault");</span>
-<span class="source-line-no">071</span><span id="line-71"> }</span>
-<span class="source-line-no">072</span><span id="line-72"> };</span>
-<span class="source-line-no">073</span><span id="line-73"> }</span>
-<span class="source-line-no">074</span><span id="line-74"></span>
-<span class="source-line-no">075</span><span id="line-75"> @Override</span>
-<span class="source-line-no">076</span><span id="line-76"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
-<span class="source-line-no">077</span><span id="line-77"> return new BlockingRpcClient(conf) {</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @Override</span>
-<span class="source-line-no">080</span><span id="line-80"> protected BlockingRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81"> return new BlockingRpcConnection(this, remoteId) {</span>
-<span class="source-line-no">082</span><span id="line-82"> @Override</span>
-<span class="source-line-no">083</span><span id="line-83"> protected byte[] getConnectionHeaderPreamble() {</span>
-<span class="source-line-no">084</span><span id="line-84"> byte[] header = super.getConnectionHeaderPreamble();</span>
-<span class="source-line-no">085</span><span id="line-85"> // set an invalid auth code</span>
-<span class="source-line-no">086</span><span id="line-86"> header[header.length - 1] = -10;</span>
-<span class="source-line-no">087</span><span id="line-87"> return header;</span>
-<span class="source-line-no">088</span><span id="line-88"> }</span>
-<span class="source-line-no">089</span><span id="line-89"> };</span>
-<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"> };</span>
-<span class="source-line-no">092</span><span id="line-92"> }</span>
-<span class="source-line-no">093</span><span id="line-93">}</span>
+<span class="source-line-no">063</span><span id="line-63"> @Override</span>
+<span class="source-line-no">064</span><span id="line-64"> protected boolean isTcpNoDelay() {</span>
+<span class="source-line-no">065</span><span id="line-65"> throw new RuntimeException("Injected fault");</span>
+<span class="source-line-no">066</span><span id="line-66"> }</span>
+<span class="source-line-no">067</span><span id="line-67"> };</span>
+<span class="source-line-no">068</span><span id="line-68"> }</span>
+<span class="source-line-no">069</span><span id="line-69"></span>
+<span class="source-line-no">070</span><span id="line-70"> @Override</span>
+<span class="source-line-no">071</span><span id="line-71"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
+<span class="source-line-no">072</span><span id="line-72"> return new BlockingRpcClient(conf) {</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74"> @Override</span>
+<span class="source-line-no">075</span><span id="line-75"> protected BlockingRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
+<span class="source-line-no">076</span><span id="line-76"> return new BlockingRpcConnection(this, remoteId) {</span>
+<span class="source-line-no">077</span><span id="line-77"> @Override</span>
+<span class="source-line-no">078</span><span id="line-78"> protected byte[] getConnectionHeaderPreamble() {</span>
+<span class="source-line-no">079</span><span id="line-79"> byte[] header = super.getConnectionHeaderPreamble();</span>
+<span class="source-line-no">080</span><span id="line-80"> // set an invalid auth code</span>
+<span class="source-line-no">081</span><span id="line-81"> header[header.length - 1] = -10;</span>
+<span class="source-line-no">082</span><span id="line-82"> return header;</span>
+<span class="source-line-no">083</span><span id="line-83"> }</span>
+<span class="source-line-no">084</span><span id="line-84"> };</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"> };</span>
+<span class="source-line-no">087</span><span id="line-87"> }</span>
+<span class="source-line-no">088</span><span id="line-88">}</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
index 8a884a10565..ee67d77c314 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyIPC.html
@@ -33,137 +33,134 @@
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.util.ArrayList;</span>
<span class="source-line-no">022</span><span id="line-22">import java.util.List;</span>
-<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.codec.Codec;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.util.JVM;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.junit.AfterClass;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.junit.BeforeClass;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.junit.ClassRule;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.junit.runner.RunWith;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.junit.runners.Parameterized;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.junit.runners.Parameterized.Parameter;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.junit.runners.Parameterized.Parameters;</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollSocketChannel;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hbase.thirdparty.io.netty.channel.socket.nio.NioSocketChannel;</span>
-<span class="source-line-no">042</span><span id="line-42"></span>
-<span class="source-line-no">043</span><span id="line-43">@RunWith(Parameterized.class)</span>
-<span class="source-line-no">044</span><span id="line-44">@Category({ RPCTests.class, MediumTests.class })</span>
-<span class="source-line-no">045</span><span id="line-45">public class TestNettyIPC extends AbstractTestIPC {</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47"> @ClassRule</span>
-<span class="source-line-no">048</span><span id="line-48"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">049</span><span id="line-49"> HBaseClassTestRule.forClass(TestNettyIPC.class);</span>
-<span class="source-line-no">050</span><span id="line-50"></span>
-<span class="source-line-no">051</span><span id="line-51"> private static List<String> getEventLoopTypes() {</span>
-<span class="source-line-no">052</span><span id="line-52"> List<String> types = new ArrayList<>();</span>
-<span class="source-line-no">053</span><span id="line-53"> types.add("nio");</span>
-<span class="source-line-no">054</span><span id="line-54"> types.add("perClientNio");</span>
-<span class="source-line-no">055</span><span id="line-55"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
-<span class="source-line-no">056</span><span id="line-56"> types.add("epoll");</span>
-<span class="source-line-no">057</span><span id="line-57"> }</span>
-<span class="source-line-no">058</span><span id="line-58"> return types;</span>
-<span class="source-line-no">059</span><span id="line-59"> }</span>
-<span class="source-line-no">060</span><span id="line-60"></span>
-<span class="source-line-no">061</span><span id="line-61"> @Parameters(name = "{index}: rpcServerImpl={0}, EventLoop={1}")</span>
-<span class="source-line-no">062</span><span id="line-62"> public static List<Object[]> parameters() {</span>
-<span class="source-line-no">063</span><span id="line-63"> List<Object[]> params = new ArrayList<>();</span>
-<span class="source-line-no">064</span><span id="line-64"> for (String eventLoopType : getEventLoopTypes()) {</span>
-<span class="source-line-no">065</span><span id="line-65"> params.add(new Object[] { SimpleRpcServer.class, eventLoopType });</span>
-<span class="source-line-no">066</span><span id="line-66"> params.add(new Object[] { NettyRpcServer.class, eventLoopType });</span>
-<span class="source-line-no">067</span><span id="line-67"> }</span>
-<span class="source-line-no">068</span><span id="line-68"> return params;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.util.stream.Stream;</span>
+<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.codec.Codec;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.util.JVM;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.junit.jupiter.params.provider.Arguments;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollEventLoopGroup;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hbase.thirdparty.io.netty.channel.epoll.EpollSocketChannel;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hbase.thirdparty.io.netty.channel.socket.nio.NioSocketChannel;</span>
+<span class="source-line-no">039</span><span id="line-39"></span>
+<span class="source-line-no">040</span><span id="line-40">@Tag(RPCTests.TAG)</span>
+<span class="source-line-no">041</span><span id="line-41">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">042</span><span id="line-42">@HBaseParameterizedTestTemplate(name = "{index}: rpcServerImpl={0}, EventLoop={1}")</span>
+<span class="source-line-no">043</span><span id="line-43">public class TestNettyIPC extends AbstractTestIPC {</span>
+<span class="source-line-no">044</span><span id="line-44"></span>
+<span class="source-line-no">045</span><span id="line-45"> private static List<String> getEventLoopTypes() {</span>
+<span class="source-line-no">046</span><span id="line-46"> List<String> types = new ArrayList<>();</span>
+<span class="source-line-no">047</span><span id="line-47"> types.add("nio");</span>
+<span class="source-line-no">048</span><span id="line-48"> types.add("perClientNio");</span>
+<span class="source-line-no">049</span><span id="line-49"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
+<span class="source-line-no">050</span><span id="line-50"> types.add("epoll");</span>
+<span class="source-line-no">051</span><span id="line-51"> }</span>
+<span class="source-line-no">052</span><span id="line-52"> return types;</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> public static Stream<Arguments> parameters() {</span>
+<span class="source-line-no">056</span><span id="line-56"> List<Arguments> params = new ArrayList<>();</span>
+<span class="source-line-no">057</span><span id="line-57"> for (String eventLoopType : getEventLoopTypes()) {</span>
+<span class="source-line-no">058</span><span id="line-58"> params.add(Arguments.of(SimpleRpcServer.class, eventLoopType));</span>
+<span class="source-line-no">059</span><span id="line-59"> params.add(Arguments.of(NettyRpcServer.class, eventLoopType));</span>
+<span class="source-line-no">060</span><span id="line-60"> }</span>
+<span class="source-line-no">061</span><span id="line-61"> return params.stream();</span>
+<span class="source-line-no">062</span><span id="line-62"> }</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64"> private String eventLoopType;</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66"> public TestNettyIPC(Class<? extends RpcServer> rpcServerImpl, String eventLoopType) {</span>
+<span class="source-line-no">067</span><span id="line-67"> super(rpcServerImpl);</span>
+<span class="source-line-no">068</span><span id="line-68"> this.eventLoopType = eventLoopType;</span>
<span class="source-line-no">069</span><span id="line-69"> }</span>
<span class="source-line-no">070</span><span id="line-70"></span>
-<span class="source-line-no">071</span><span id="line-71"> @Parameter(1)</span>
-<span class="source-line-no">072</span><span id="line-72"> public String eventLoopType;</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74"> private static NioEventLoopGroup NIO;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> private static EpollEventLoopGroup EPOLL;</span>
-<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> @BeforeClass</span>
-<span class="source-line-no">079</span><span id="line-79"> public static void setUpBeforeClass() {</span>
-<span class="source-line-no">080</span><span id="line-80"> NIO = new NioEventLoopGroup();</span>
-<span class="source-line-no">081</span><span id="line-81"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
-<span class="source-line-no">082</span><span id="line-82"> EPOLL = new EpollEventLoopGroup();</span>
-<span class="source-line-no">083</span><span id="line-83"> }</span>
-<span class="source-line-no">084</span><span id="line-84"> }</span>
-<span class="source-line-no">085</span><span id="line-85"></span>
-<span class="source-line-no">086</span><span id="line-86"> @AfterClass</span>
-<span class="source-line-no">087</span><span id="line-87"> public static void tearDownAfterClass() {</span>
-<span class="source-line-no">088</span><span id="line-88"> if (NIO != null) {</span>
-<span class="source-line-no">089</span><span id="line-89"> NIO.shutdownGracefully();</span>
+<span class="source-line-no">071</span><span id="line-71"> private static NioEventLoopGroup NIO;</span>
+<span class="source-line-no">072</span><span id="line-72"></span>
+<span class="source-line-no">073</span><span id="line-73"> private static EpollEventLoopGroup EPOLL;</span>
+<span class="source-line-no">074</span><span id="line-74"></span>
+<span class="source-line-no">075</span><span id="line-75"> @BeforeAll</span>
+<span class="source-line-no">076</span><span id="line-76"> public static void setUpBeforeClass() {</span>
+<span class="source-line-no">077</span><span id="line-77"> NIO = new NioEventLoopGroup();</span>
+<span class="source-line-no">078</span><span id="line-78"> if (JVM.isLinux() && JVM.isAmd64()) {</span>
+<span class="source-line-no">079</span><span id="line-79"> EPOLL = new EpollEventLoopGroup();</span>
+<span class="source-line-no">080</span><span id="line-80"> }</span>
+<span class="source-line-no">081</span><span id="line-81"> }</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83"> @AfterAll</span>
+<span class="source-line-no">084</span><span id="line-84"> public static void tearDownAfterClass() {</span>
+<span class="source-line-no">085</span><span id="line-85"> if (NIO != null) {</span>
+<span class="source-line-no">086</span><span id="line-86"> NIO.shutdownGracefully();</span>
+<span class="source-line-no">087</span><span id="line-87"> }</span>
+<span class="source-line-no">088</span><span id="line-88"> if (EPOLL != null) {</span>
+<span class="source-line-no">089</span><span id="line-89"> EPOLL.shutdownGracefully();</span>
<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"> if (EPOLL != null) {</span>
-<span class="source-line-no">092</span><span id="line-92"> EPOLL.shutdownGracefully();</span>
-<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"> }</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> private void setConf(Configuration conf) {</span>
-<span class="source-line-no">097</span><span id="line-97"> switch (eventLoopType) {</span>
-<span class="source-line-no">098</span><span id="line-98"> case "nio":</span>
-<span class="source-line-no">099</span><span id="line-99"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, NIO, NioSocketChannel.class);</span>
+<span class="source-line-no">091</span><span id="line-91"> }</span>
+<span class="source-line-no">092</span><span id="line-92"></span>
+<span class="source-line-no">093</span><span id="line-93"> private void setConf(Configuration conf) {</span>
+<span class="source-line-no">094</span><span id="line-94"> switch (eventLoopType) {</span>
+<span class="source-line-no">095</span><span id="line-95"> case "nio":</span>
+<span class="source-line-no">096</span><span id="line-96"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, NIO, NioSocketChannel.class);</span>
+<span class="source-line-no">097</span><span id="line-97"> break;</span>
+<span class="source-line-no">098</span><span id="line-98"> case "epoll":</span>
+<span class="source-line-no">099</span><span id="line-99"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, EPOLL, EpollSocketChannel.class);</span>
<span class="source-line-no">100</span><span id="line-100"> break;</span>
-<span class="source-line-no">101</span><span id="line-101"> case "epoll":</span>
-<span class="source-line-no">102</span><span id="line-102"> NettyRpcClientConfigHelper.setEventLoopConfig(conf, EPOLL, EpollSocketChannel.class);</span>
+<span class="source-line-no">101</span><span id="line-101"> case "perClientNio":</span>
+<span class="source-line-no">102</span><span id="line-102"> NettyRpcClientConfigHelper.createEventLoopPerClient(conf);</span>
<span class="source-line-no">103</span><span id="line-103"> break;</span>
-<span class="source-line-no">104</span><span id="line-104"> case "perClientNio":</span>
-<span class="source-line-no">105</span><span id="line-105"> NettyRpcClientConfigHelper.createEventLoopPerClient(conf);</span>
-<span class="source-line-no">106</span><span id="line-106"> break;</span>
-<span class="source-line-no">107</span><span id="line-107"> default:</span>
-<span class="source-line-no">108</span><span id="line-108"> break;</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> @Override</span>
-<span class="source-line-no">113</span><span id="line-113"> protected NettyRpcClient createRpcClientNoCodec(Configuration conf) {</span>
-<span class="source-line-no">114</span><span id="line-114"> setConf(conf);</span>
-<span class="source-line-no">115</span><span id="line-115"> return new NettyRpcClient(conf) {</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> @Override</span>
-<span class="source-line-no">118</span><span id="line-118"> protected Codec getCodec() {</span>
-<span class="source-line-no">119</span><span id="line-119"> return null;</span>
-<span class="source-line-no">120</span><span id="line-120"> }</span>
+<span class="source-line-no">104</span><span id="line-104"> default:</span>
+<span class="source-line-no">105</span><span id="line-105"> break;</span>
+<span class="source-line-no">106</span><span id="line-106"> }</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"> @Override</span>
+<span class="source-line-no">110</span><span id="line-110"> protected NettyRpcClient createRpcClientNoCodec(Configuration conf) {</span>
+<span class="source-line-no">111</span><span id="line-111"> setConf(conf);</span>
+<span class="source-line-no">112</span><span id="line-112"> return new NettyRpcClient(conf) {</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114"> @Override</span>
+<span class="source-line-no">115</span><span id="line-115"> protected Codec getCodec() {</span>
+<span class="source-line-no">116</span><span id="line-116"> return null;</span>
+<span class="source-line-no">117</span><span id="line-117"> }</span>
+<span class="source-line-no">118</span><span id="line-118"></span>
+<span class="source-line-no">119</span><span id="line-119"> };</span>
+<span class="source-line-no">120</span><span id="line-120"> }</span>
<span class="source-line-no">121</span><span id="line-121"></span>
-<span class="source-line-no">122</span><span id="line-122"> };</span>
-<span class="source-line-no">123</span><span id="line-123"> }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125"> @Override</span>
-<span class="source-line-no">126</span><span id="line-126"> protected NettyRpcClient createRpcClient(Configuration conf) {</span>
-<span class="source-line-no">127</span><span id="line-127"> setConf(conf);</span>
-<span class="source-line-no">128</span><span id="line-128"> return new NettyRpcClient(conf);</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"> @Override</span>
-<span class="source-line-no">132</span><span id="line-132"> protected NettyRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf) {</span>
-<span class="source-line-no">133</span><span id="line-133"> setConf(conf);</span>
-<span class="source-line-no">134</span><span id="line-134"> return new NettyRpcClient(conf) {</span>
-<span class="source-line-no">135</span><span id="line-135"></span>
-<span class="source-line-no">136</span><span id="line-136"> @Override</span>
-<span class="source-line-no">137</span><span id="line-137"> protected boolean isTcpNoDelay() {</span>
-<span class="source-line-no">138</span><span id="line-138"> throw new RuntimeException("Injected fault");</span>
-<span class="source-line-no">139</span><span id="line-139"> }</span>
-<span class="source-line-no">140</span><span id="line-140"> };</span>
-<span class="source-line-no">141</span><span id="line-141"> }</span>
-<span class="source-line-no">142</span><span id="line-142"></span>
-<span class="source-line-no">143</span><span id="line-143"> @Override</span>
-<span class="source-line-no">144</span><span id="line-144"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
-<span class="source-line-no">145</span><span id="line-145"> return new NettyRpcClient(conf) {</span>
-<span class="source-line-no">146</span><span id="line-146"></span>
-<span class="source-line-no">147</span><span id="line-147"> @Override</span>
-<span class="source-line-no">148</span><span id="line-148"> protected NettyRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
-<span class="source-line-no">149</span><span id="line-149"> return new BadAuthNettyRpcConnection(this, remoteId);</span>
-<span class="source-line-no">150</span><span id="line-150"> }</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">}</span>
+<span class="source-line-no">122</span><span id="line-122"> @Override</span>
+<span class="source-line-no">123</span><span id="line-123"> protected NettyRpcClient createRpcClient(Configuration conf) {</span>
+<span class="source-line-no">124</span><span id="line-124"> setConf(conf);</span>
+<span class="source-line-no">125</span><span id="line-125"> return new NettyRpcClient(conf);</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> @Override</span>
+<span class="source-line-no">129</span><span id="line-129"> protected NettyRpcClient createRpcClientRTEDuringConnectionSetup(Configuration conf) {</span>
+<span class="source-line-no">130</span><span id="line-130"> setConf(conf);</span>
+<span class="source-line-no">131</span><span id="line-131"> return new NettyRpcClient(conf) {</span>
+<span class="source-line-no">132</span><span id="line-132"></span>
+<span class="source-line-no">133</span><span id="line-133"> @Override</span>
+<span class="source-line-no">134</span><span id="line-134"> protected boolean isTcpNoDelay() {</span>
+<span class="source-line-no">135</span><span id="line-135"> throw new RuntimeException("Injected fault");</span>
+<span class="source-line-no">136</span><span id="line-136"> }</span>
+<span class="source-line-no">137</span><span id="line-137"> };</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140"> @Override</span>
+<span class="source-line-no">141</span><span id="line-141"> protected AbstractRpcClient<?> createBadAuthRpcClient(Configuration conf) {</span>
+<span class="source-line-no">142</span><span id="line-142"> return new NettyRpcClient(conf) {</span>
+<span class="source-line-no">143</span><span id="line-143"></span>
+<span class="source-line-no">144</span><span id="line-144"> @Override</span>
+<span class="source-line-no">145</span><span id="line-145"> protected NettyRpcConnection createConnection(ConnectionId remoteId) throws IOException {</span>
+<span class="source-line-no">146</span><span id="line-146"> return new BadAuthNettyRpcConnection(this, remoteId);</span>
+<span class="source-line-no">147</span><span id="line-147"> }</span>
+<span class="source-line-no">148</span><span id="line-148"> };</span>
+<span class="source-line-no">149</span><span id="line-149"> }</span>
+<span class="source-line-no">150</span><span id="line-150">}</span>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
index 037a0246857..3c6f7a1a981 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ipc/TestNettyTlsIPC.html
@@ -39,89 +39,89 @@
<span class="source-line-no">026</span><span id="line-26">import java.security.Security;</span>
<span class="source-line-no">027</span><span id="line-27">import java.util.ArrayList;</span>
<span class="source-line-no">028</span><span id="line-28">import java.util.List;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.commons.io.FileUtils;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.stream.Stream;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.commons.io.FileUtils;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.HBaseServerBase;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.Server;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.ConnectionRegistryEndpoint;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.codec.Codec;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.io.crypto.tls.KeyStoreFileType;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.crypto.tls.X509KeyType;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContext;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContextProvider;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.io.crypto.tls.X509Util;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.bouncycastle.jce.provider.BouncyCastleProvider;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.After;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.AfterClass;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.Before;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.junit.BeforeClass;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.junit.ClassRule;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.junit.runner.RunWith;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.junit.runners.Parameterized;</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">@RunWith(Parameterized.class)</span>
-<span class="source-line-no">057</span><span id="line-57">@Category({ RPCTests.class, MediumTests.class })</span>
-<span class="source-line-no">058</span><span id="line-58">public class TestNettyTlsIPC extends AbstractTestIPC {</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60"> @ClassRule</span>
-<span class="source-line-no">061</span><span id="line-61"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">062</span><span id="line-62"> HBaseClassTestRule.forClass(TestNettyTlsIPC.class);</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> private static final HBaseCommonTestingUtil UTIL = new HBaseCommonTestingUtil(CONF);</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66"> private static X509TestContextProvider PROVIDER;</span>
-<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68"> private static NettyEventLoopGroupConfig EVENT_LOOP_GROUP_CONFIG;</span>
-<span class="source-line-no">069</span><span id="line-69"></span>
-<span class="source-line-no">070</span><span id="line-70"> @Parameterized.Parameter(1)</span>
-<span class="source-line-no">071</span><span id="line-71"> public X509KeyType caKeyType;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.HBaseParameterizedTestTemplate;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.HBaseServerBase;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.Server;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.ConnectionRegistryEndpoint;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.codec.Codec;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.crypto.tls.KeyStoreFileType;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.crypto.tls.X509KeyType;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContext;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.io.crypto.tls.X509TestContextProvider;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.io.crypto.tls.X509Util;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.testclassification.RPCTests;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.bouncycastle.jce.provider.BouncyCastleProvider;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.junit.jupiter.api.AfterEach;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.junit.jupiter.params.provider.Arguments;</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">@Tag(RPCTests.TAG)</span>
+<span class="source-line-no">056</span><span id="line-56">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">057</span><span id="line-57">@HBaseParameterizedTestTemplate(name = "{index}: rpcServerImpl={0}, caKeyType={1},"</span>
+<span class="source-line-no">058</span><span id="line-58"> + " certKeyType={2}, keyPassword={3}, acceptPlainText={4}, clientTlsEnabled={5}")</span>
+<span class="source-line-no">059</span><span id="line-59">public class TestNettyTlsIPC extends AbstractTestIPC {</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61"> private static final HBaseCommonTestingUtil UTIL = new HBaseCommonTestingUtil(CONF);</span>
+<span class="source-line-no">062</span><span id="line-62"></span>
+<span class="source-line-no">063</span><span id="line-63"> private static X509TestContextProvider PROVIDER;</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65"> private static NettyEventLoopGroupConfig EVENT_LOOP_GROUP_CONFIG;</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67"> private X509KeyType caKeyType;</span>
+<span class="source-line-no">068</span><span id="line-68"></span>
+<span class="source-line-no">069</span><span id="line-69"> private X509KeyType certKeyType;</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71"> private char[] keyPassword;</span>
<span class="source-line-no">072</span><span id="line-72"></span>
-<span class="source-line-no">073</span><span id="line-73"> @Parameterized.Parameter(2)</span>
-<span class="source-line-no">074</span><span id="line-74"> public X509KeyType certKeyType;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> @Parameterized.Parameter(3)</span>
-<span class="source-line-no">077</span><span id="line-77"> public char[] keyPassword;</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @Parameterized.Parameter(4)</span>
-<span class="source-line-no">080</span><span id="line-80"> public boolean acceptPlainText;</span>
-<span class="source-line-no">081</span><span id="line-81"></span>
-<span class="source-line-no">082</span><span id="line-82"> @Parameterized.Parameter(5)</span>
-<span class="source-line-no">083</span><span id="line-83"> public boolean clientTlsEnabled;</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85"> private X509TestContext x509TestContext;</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> // only netty rpc server supports TLS, so here we will only test NettyRpcServer</span>
-<span class="source-line-no">088</span><span id="line-88"> @Parameterized.Parameters(</span>
-<span class="source-line-no">089</span><span id="line-89"> name = "{index}: rpcServerImpl={0}, caKeyType={1}, certKeyType={2}, keyPassword={3},"</span>
-<span class="source-line-no">090</span><span id="line-90"> + " acceptPlainText={4}, clientTlsEnabled={5}")</span>
-<span class="source-line-no">091</span><span id="line-91"> public static List<Object[]> data() {</span>
-<span class="source-line-no">092</span><span id="line-92"> List<Object[]> params = new ArrayList<>();</span>
+<span class="source-line-no">073</span><span id="line-73"> private boolean acceptPlainText;</span>
+<span class="source-line-no">074</span><span id="line-74"></span>
+<span class="source-line-no">075</span><span id="line-75"> private boolean clientTlsEnabled;</span>
+<span class="source-line-no">076</span><span id="line-76"></span>
+<span class="source-line-no">077</span><span id="line-77"> public TestNettyTlsIPC(Class<? extends RpcServer> rpcServerImpl, X509KeyType caKeyType,</span>
+<span class="source-line-no">078</span><span id="line-78"> X509KeyType certKeyType, char[] keyPassword, boolean acceptPlainText,</span>
+<span class="source-line-no">079</span><span id="line-79"> boolean clientTlsEnabled) {</span>
+<span class="source-line-no">080</span><span id="line-80"> super(rpcServerImpl);</span>
+<span class="source-line-no">081</span><span id="line-81"> this.caKeyType = caKeyType;</span>
+<span class="source-line-no">082</span><span id="line-82"> this.certKeyType = certKeyType;</span>
+<span class="source-line-no">083</span><span id="line-83"> this.keyPassword = keyPassword;</span>
+<span class="source-line-no">084</span><span id="line-84"> this.acceptPlainText = acceptPlainText;</span>
+<span class="source-line-no">085</span><span id="line-85"> this.clientTlsEnabled = clientTlsEnabled;</span>
+<span class="source-line-no">086</span><span id="line-86"> }</span>
+<span class="source-line-no">087</span><span id="line-87"></span>
+<span class="source-line-no">088</span><span id="line-88"> private X509TestContext x509TestContext;</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90"> // only netty rpc server supports TLS, so here we will only test NettyRpcServer</span>
+<span class="source-line-no">091</span><span id="line-91"> public static Stream<Arguments> parameters() {</span>
+<span class="source-line-no">092</span><span id="line-92"> List<Arguments> params = new ArrayList<>();</span>
<span class="source-line-no">093</span><span id="line-93"> for (X509KeyType caKeyType : X509KeyType.values()) {</span>
<span class="source-line-no">094</span><span id="line-94"> for (X509KeyType certKeyType : X509KeyType.values()) {</span>
<span class="source-line-no">095</span><span id="line-95"> for (char[] keyPassword : new char[][] { "".toCharArray(), "pa$$w0rd".toCharArray() }) {</span>
<span class="source-line-no">096</span><span id="line-96"> // do not accept plain text</span>
-<span class="source-line-no">097</span><span id="line-97"> params.add(new Object[] { NettyRpcServer.class, caKeyType, certKeyType, keyPassword,</span>
-<span class="source-line-no">098</span><span id="line-98"> false, true });</span>
+<span class="source-line-no">097</span><span id="line-97"> params.add(</span>
+<span class="source-line-no">098</span><span id="line-98"> Arguments.of(NettyRpcServer.class, caKeyType, certKeyType, keyPassword, false, true));</span>
<span class="source-line-no">099</span><span id="line-99"> // support plain text and client enables tls</span>
<span class="source-line-no">100</span><span id="line-100"> params.add(</span>
-<span class="source-line-no">101</span><span id="line-101"> new Object[] { NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true, true });</span>
+<span class="source-line-no">101</span><span id="line-101"> Arguments.of(NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true, true));</span>
<span class="source-line-no">102</span><span id="line-102"> // support plain text and client disables tls</span>
-<span class="source-line-no">103</span><span id="line-103"> params.add(new Object[] { NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true,</span>
-<span class="source-line-no">104</span><span id="line-104"> false });</span>
+<span class="source-line-no">103</span><span id="line-103"> params.add(</span>
+<span class="source-line-no">104</span><span id="line-104"> Arguments.of(NettyRpcServer.class, caKeyType, certKeyType, keyPassword, true, false));</span>
<span class="source-line-no">105</span><span id="line-105"> }</span>
<span class="source-line-no">106</span><span id="line-106"> }</span>
<span class="source-line-no">107</span><span id="line-107"> }</span>
-<span class="source-line-no">108</span><span id="line-108"> return params;</span>
+<span class="source-line-no">108</span><span id="line-108"> return params.stream();</span>
<span class="source-line-no">109</span><span id="line-109"> }</span>
<span class="source-line-no">110</span><span id="line-110"></span>
-<span class="source-line-no">111</span><span id="line-111"> @BeforeClass</span>
+<span class="source-line-no">111</span><span id="line-111"> @BeforeAll</span>
<span class="source-line-no">112</span><span id="line-112"> public static void setUpBeforeClass() throws IOException {</span>
<span class="source-line-no">113</span><span id="line-113"> Security.addProvider(new BouncyCastleProvider());</span>
<span class="source-line-no">114</span><span id="line-114"> File dir = new File(UTIL.getDataTestDir(TestNettyTlsIPC.class.getSimpleName()).toString())</span>
@@ -134,14 +134,14 @@
<span class="source-line-no">121</span><span id="line-121"> NettyEventLoopGroupConfig.setup(CONF, TestNettyTlsIPC.class.getSimpleName());</span>
<span class="source-line-no">122</span><span id="line-122"> }</span>
<span class="source-line-no">123</span><span id="line-123"></span>
-<span class="source-line-no">124</span><span id="line-124"> @AfterClass</span>
+<span class="source-line-no">124</span><span id="line-124"> @AfterAll</span>
<span class="source-line-no">125</span><span id="line-125"> public static void tearDownAfterClass() throws InterruptedException {</span>
<span class="source-line-no">126</span><span id="line-126"> Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);</span>
<span class="source-line-no">127</span><span id="line-127"> EVENT_LOOP_GROUP_CONFIG.group().shutdownGracefully().sync();</span>
<span class="source-line-no">128</span><span id="line-128"> UTIL.cleanupTestDir();</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"> @Before</span>
+<span class="source-line-no">131</span><span id="line-131"> @BeforeEach</span>
<span class="source-line-no">132</span><span id="line-132"> public void setUp() throws IOException {</span>
<span class="source-line-no">133</span><span id="line-133"> x509TestContext = PROVIDER.get(caKeyType, certKeyType, keyPassword);</span>
<span class="source-line-no">134</span><span id="line-134"> x509TestContext.setConfigurations(KeyStoreFileType.JKS, KeyStoreFileType.JKS);</span>
@@ -149,7 +149,7 @@
<span class="source-line-no">136</span><span id="line-136"> CONF.setBoolean(X509Util.HBASE_CLIENT_NETTY_TLS_ENABLED, clientTlsEnabled);</span>
<span class="source-line-no">137</span><span id="line-137"> }</span>
<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139"> @After</span>
+<span class="source-line-no">139</span><span id="line-139"> @AfterEach</span>
<span class="source-line-no">140</span><span id="line-140"> public void tearDown() {</span>
<span class="source-line-no">141</span><span id="line-141"> x509TestContext.clearConfigurations();</span>
<span class="source-line-no">142</span><span id="line-142"> x509TestContext.getConf().unset(X509Util.TLS_CONFIG_OCSP);</span>