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

jojochuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 3814834113 HDDS-15917. Add client connectivity troubleshooting 
runbook. (#498)
3814834113 is described below

commit 3814834113671e1c3dd02f4720ef6900405d5dca
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Tue Jul 21 12:46:15 2026 -0600

    HDDS-15917. Add client connectivity troubleshooting runbook. (#498)
    
    Generated-by: Cursor <[email protected]>, Composer 2.5
---
 .../01-installation/02-kubernetes.md               |  4 ++
 .../02-configuration/99-appendix.md                |  2 +-
 docs/06-troubleshooting/18-client-connectivity.md  | 69 ++++++++++++++++++++++
 docs/06-troubleshooting/README.mdx                 |  2 -
 docusaurus.config.js                               |  4 +-
 5 files changed, 75 insertions(+), 6 deletions(-)

diff --git a/docs/02-quick-start/01-installation/02-kubernetes.md 
b/docs/02-quick-start/01-installation/02-kubernetes.md
index d57508b9dd..cdf350e82d 100644
--- a/docs/02-quick-start/01-installation/02-kubernetes.md
+++ b/docs/02-quick-start/01-installation/02-kubernetes.md
@@ -130,3 +130,7 @@ Now you can access any of the services. By default the 
services are not publishe
 kubectl port-forward s3g-0 9878:9878
 kubectl port-forward scm-0 9876:9876
 ```
+
+:::note Client connectivity
+If metadata operations work but client-to-Datanode data traffic fails, or 
Datanode pods restart often, set `hdds.datanode.use.datanode.hostname=true` on 
clients and Datanodes. See [Troubleshooting client 
connectivity](../../troubleshooting/client-connectivity).
+:::
diff --git a/docs/05-administrator-guide/02-configuration/99-appendix.md 
b/docs/05-administrator-guide/02-configuration/99-appendix.md
index 5e0d51bbdb..35779bcc61 100644
--- a/docs/05-administrator-guide/02-configuration/99-appendix.md
+++ b/docs/05-administrator-guide/02-configuration/99-appendix.md
@@ -181,7 +181,7 @@ This page provides a comprehensive overview of the 
configuration keys available
 | `hdds.datanode.slow.op.warning.threshold` | 500ms | `OZONE`, `DATANODE`, 
`PERFORMANCE` | Thresholds for printing slow-operation audit logs. |
 | `hdds.datanode.storage.utilization.critical.threshold` | 0.95 | `OZONE`, 
`SCM`, `MANAGEMENT` | If a datanode overall storage utilization exceeds more 
than this value, the datanode will be marked out of space. |
 | `hdds.datanode.storage.utilization.warning.threshold` | 0.75 | `OZONE`, 
`SCM`, `MANAGEMENT` | If a datanode overall storage utilization exceeds more 
than this value, a warning will be logged while processing the nodeReport in 
SCM. |
-| `hdds.datanode.use.datanode.hostname` | false | `OZONE`, `DATANODE` | 
Whether Datanodes should use Datanode hostnames when connecting to other 
Datanodes for data transfer. |
+| `hdds.datanode.use.datanode.hostname` | false | `OZONE`, `DATANODE` | 
Whether Datanodes should use Datanode hostnames when connecting to other 
Datanodes for data transfer. See [Troubleshooting client 
connectivity](../../troubleshooting/client-connectivity). |
 | `hdds.datanode.volume.choosing.policy` | 
org.apache.hadoop.ozone.container.common.volume.CapacityVolumeChoosingPolicy | 
`OZONE`, `CONTAINER`, `STORAGE`, `MANAGEMENT` | The class name of the policy 
for choosing volumes in the list of directories. Defaults to 
org.apache.hadoop.ozone.container.common.volume.CapacityVolumeChoosingPolicy. 
This volume choosing policy randomly chooses two volumes with remaining space 
and then picks the one with lower utilization. |
 | `hdds.datanode.volume.min.free.space` | -1 | `OZONE`, `CONTAINER`, 
`STORAGE`, `MANAGEMENT` | Minimum free space (bytes) applied together with 
min.free.space.percent (reported to SCM in heartbeat as freeSpaceToSpare) and 
min.free.space.hard.limit.percent (local write enforcement). The effective 
value for each tier is max(this bytes, capacity * ratio). |
 | `hdds.datanode.volume.min.free.space.hard.limit.percent` | 0.015 | `OZONE`, 
`CONTAINER`, `STORAGE`, `MANAGEMENT` | Minimum fraction of volume capacity 
reserved for local enforcement: writes fail when available space would drop 
below max(this ratio * capacity, `hdds.datanode.volume.min.free.space`). Should 
be &lt;= min.free.space.percent so SCM can plan for a larger headroom than the 
DN enforces locally. |
diff --git a/docs/06-troubleshooting/18-client-connectivity.md 
b/docs/06-troubleshooting/18-client-connectivity.md
new file mode 100644
index 0000000000..11f7d104ed
--- /dev/null
+++ b/docs/06-troubleshooting/18-client-connectivity.md
@@ -0,0 +1,69 @@
+---
+sidebar_label: Client connectivity
+---
+
+# Troubleshooting client connectivity
+
+Use this page when **Ozone clients cannot connect to Datanodes** for data 
transfer, even though metadata operations through the Ozone Manager still work.
+
+## When to use this page
+
+- **Kubernetes** — Datanode pods were restarted; data reads or writes fail, or 
pipelines misbehave after restarts.
+- **Port-forward or remote clients** — You reach OM or S3 from outside the 
cluster network; metadata works but client-to-Datanode data traffic fails.
+- **Multi-homed servers** — Datanodes have more than one network; clients 
cannot reach the Datanode **IP** SCM registered.
+
+## Symptoms
+
+- **Metadata operations succeed** (for example `ozone sh key info`, listing 
keys, or S3 object metadata), but **data operations fail** (reads, writes, or 
other client-to-Datanode traffic).
+- Logs mention `UNAVAILABLE`, `Connection refused`, or a Datanode **IP** that 
is not reachable from the client host.
+- After Kubernetes pod restarts, write throughput drops or never recovers.
+
+## Why hostname mode helps
+
+With the default (`hdds.datanode.use.datanode.hostname=false`), the client 
opens gRPC to the **IP address stored in SCM** for each Datanode. That value is 
used directly; the client does not look it up in DNS again at connect time. If 
the IP is stale or not routable from your client, data operations fail even 
when hostnames would work.
+
+With `hdds.datanode.use.datanode.hostname=true`, the client connects using the 
**hostname** from SCM, and the JVM resolves that name when opening the channel.
+
+## Fix
+
+**Step 1.** Add this to **Ozone clients** and **every Datanode** 
(`ozone-site.xml`):
+
+```xml
+<property>
+  <name>hdds.datanode.use.datanode.hostname</name>
+  <value>true</value>
+</property>
+```
+
+**Step 2.** Ensure Datanode **hostnames** resolve on the network where data is 
read and written:
+
+- **Kubernetes:** use stable pod DNS (StatefulSet with a headless Service).
+- **Multi-homed:** set `hdds.datanode.hostname` to the storage FQDN if needed. 
Make sure DNS or `/etc/hosts` on clients resolves that name on the **data** 
network.
+
+**Step 3.** Restart clients and Datanodes (or roll pods) so the new setting is 
loaded.
+
+:::note Ozone version
+For **reads**, this setting is fully honored from **Ozone 2.1** onward. On 
older releases, run read workloads inside the cluster network or upgrade. See 
[HDDS-13124](https://issues.apache.org/jira/browse/HDDS-13124).
+:::
+
+## Verify
+
+Run from the **same host and network** as your application:
+
+```bash
+ozone sh key info <volume>/<bucket>/test.txt
+ozone sh key cat <volume>/<bucket>/test.txt
+```
+
+The first command checks metadata (OM). The second checks data read 
(Datanode). On Kubernetes, repeat after restarting a Datanode pod.
+
+## Still stuck?
+
+- From the client host, check that the Datanode hostname shown in SCM or Recon 
resolves (`getent hosts <hostname>`).
+- **Multi-homed only:** if SCM shows the wrong IP, review 
`hdds.datanode.dns.interface` in the [configuration 
appendix](../administrator-guide/configuration/appendix).
+- If **OM or SCM** RPC fails (not Datanode data ports), that is a separate 
issue. See [Client 
Failover](../administrator-guide/configuration/high-availability/client-failover).
+
+## See also
+
+- [HDDS-5916](https://issues.apache.org/jira/browse/HDDS-5916) — Kubernetes 
pipeline issues after pod IP changes
+- [HDDS-13124](https://issues.apache.org/jira/browse/HDDS-13124) — read path 
and hostname configuration
diff --git a/docs/06-troubleshooting/README.mdx 
b/docs/06-troubleshooting/README.mdx
index d89e8722c9..88bbd41582 100644
--- a/docs/06-troubleshooting/README.mdx
+++ b/docs/06-troubleshooting/README.mdx
@@ -1,7 +1,5 @@
 # Troubleshooting
 
-**TODO:** Allow inclusion of the troubleshooting folder by updating the 
excludes list in `docusaurus.config.js`.
-
 import DocCardList from '@theme/DocCardList';
 
 This section contains guides to help troubleshoot common issues in an Ozone 
deployment.
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 3c98447fd6..5c4739f8f5 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -240,10 +240,8 @@ const config = {
           sidebarPath: undefined,
           editUrl:
             'https://github.com/apache/ozone-site/tree/master',
-          // TODO: The following sections are currently hidden. Ensure that a 
section contains a few pages
-          //  of publishable quality before enabling visibility for that 
section.
+          // TODO: Ensure remaining sections contain publishable pages before 
enabling.
           exclude: [
-            '**/06-troubleshooting/**',
           ]
         },
         blog: {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to