You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by gi...@apache.org on 2025/07/11 12:47:00 UTC
(ozone-site) branch asf-site updated: [auto] Generated docs from Apache Ozone master 8d1a0adf7c228ff4df0aa678cd851f3b3c46c687
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/ozone-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new dcf729d3 [auto] Generated docs from Apache Ozone master 8d1a0adf7c228ff4df0aa678cd851f3b3c46c687
dcf729d3 is described below
commit dcf729d383a7b59deb293bd598bcda384529b3b6
Author: Github Actions <no...@github.com>
AuthorDate: Fri Jul 11 12:46:55 2025 +0000
[auto] Generated docs from Apache Ozone master 8d1a0adf7c228ff4df0aa678cd851f3b3c46c687
---
docs/edge/concept.html | 6 +
docs/edge/concept/comparison.html | 6 +
docs/edge/concept/containers.html | 6 +
docs/edge/concept/datanodes.html | 6 +
docs/edge/concept/networkports.html | 6 +
docs/edge/concept/overview.html | 6 +
docs/edge/concept/ozonemanager.html | 6 +
docs/edge/concept/ozones3gateway.html | 6 +
docs/edge/concept/recon.html | 6 +
docs/edge/concept/storagecontainermanager.html | 6 +
docs/edge/concept/volumesbucketskeys.html | 6 +
docs/edge/design.html | 6 +
docs/edge/design/configless.html | 6 +
docs/edge/design/container-reconciliation.html | 6 +
docs/edge/design/decommissioning.html | 6 +
docs/edge/design/dn-merge-rocksdb.html | 6 +
docs/edge/design/dn-min-space-configuration.html | 6 +
docs/edge/design/dn-usedspace-calculation.html | 6 +
docs/edge/design/ec.html | 6 +
docs/edge/design/full-volume-handling.html | 6 +
docs/edge/design/gdpr.html | 6 +
docs/edge/design/httpfs.html | 6 +
docs/edge/design/locks.html | 6 +
docs/edge/design/multiraft.html | 6 +
docs/edge/design/namespace-support.html | 6 +
docs/edge/design/nfs.html | 6 +
docs/edge/design/nonrolling-upgrade.html | 6 +
docs/edge/design/ofs.html | 6 +
docs/edge/design/omha.html | 6 +
docs/edge/design/omprepare.html | 6 +
.../design/overwrite-key-only-if-unchanged.html | 6 +
docs/edge/design/ozone-enhancement-proposals.html | 6 +
docs/edge/design/recon1.html | 6 +
docs/edge/design/recon2.html | 6 +
docs/edge/design/s3-performance.html | 6 +
docs/edge/design/s3gateway.html | 6 +
docs/edge/design/scmha.html | 6 +
docs/edge/design/secure-s3.html | 6 +
docs/edge/design/storage-class.html | 6 +
docs/edge/design/symmetric-token-signatures.html | 6 +
docs/edge/design/tde.html | 6 +
docs/edge/design/token.html | 6 +
docs/edge/design/topology.html | 6 +
docs/edge/design/trash.html | 6 +
docs/edge/design/typesafeconfig.html | 6 +
docs/edge/design/upgrade-dev-primer.html | 6 +
docs/edge/design/volume-management.html | 6 +
docs/edge/en/sitemap.xml | 5 +-
docs/edge/feature.html | 31 +-
docs/edge/feature/decommission.html | 6 +
docs/edge/feature/dn-merge-rocksdb.html | 6 +
docs/edge/feature/erasurecoding.html | 6 +
docs/edge/feature/faircallqueue.html | 8 +-
docs/edge/feature/index.xml | 7 +
.../securings3.html => feature/maintenance.html} | 112 ++---
docs/edge/feature/multi-raft-support.html | 6 +
docs/edge/feature/nonrolling-upgrade.html | 6 +
docs/edge/feature/observability.html | 6 +
docs/edge/feature/om-ha.html | 6 +
docs/edge/feature/prefixfso.html | 6 +
docs/edge/feature/quota.html | 6 +
docs/edge/feature/recon.html | 6 +
docs/edge/feature/reconfigurability.html | 6 +
.../feature/s3-multi-tenancy-access-control.html | 6 +
docs/edge/feature/s3-multi-tenancy-setup.html | 6 +
docs/edge/feature/s3-multi-tenancy.html | 6 +
docs/edge/feature/s3-tenant-commands.html | 6 +
docs/edge/feature/scm-ha.html | 6 +
docs/edge/feature/snapshot.html | 6 +
docs/edge/feature/streaming-write-pipeline.html | 6 +
docs/edge/feature/topology.html | 6 +
docs/edge/feature/trash.html | 6 +
docs/edge/index.html | 6 +
docs/edge/index.xml | 7 +
docs/edge/integration.html | 6 +
docs/edge/integration/distcp.html | 6 +
docs/edge/integration/hive.html | 6 +
docs/edge/integration/impala.html | 6 +
docs/edge/interface.html | 6 +
docs/edge/interface/cli.html | 6 +
docs/edge/interface/csi.html | 6 +
docs/edge/interface/cyberduckozones3.html | 6 +
docs/edge/interface/httpfs.html | 6 +
docs/edge/interface/javaapi.html | 6 +
docs/edge/interface/native-cpp.html | 6 +
docs/edge/interface/o3fs.html | 6 +
docs/edge/interface/ofs.html | 458 ++++++++++++++++-----
docs/edge/interface/python.html | 6 +
docs/edge/interface/reconapi.html | 6 +
docs/edge/interface/s3.html | 6 +
docs/edge/recipe.html | 6 +
docs/edge/recipe/boto3tutorial.html | 6 +
docs/edge/recipe/botoclient.html | 6 +
docs/edge/recipe/prometheus.html | 6 +
docs/edge/recipe/pyarrowtutorial.html | 6 +
docs/edge/recipe/pythonrequestsozonehttpfs.html | 6 +
docs/edge/recipe/sparkozonefsk8s.html | 6 +
docs/edge/security.html | 6 +
docs/edge/security/gdpr.html | 6 +
docs/edge/security/protect-in-transit-traffic.html | 6 +
docs/edge/security/secureozone.html | 6 +
docs/edge/security/securingdatanodes.html | 6 +
docs/edge/security/securingozonehttp.html | 6 +
docs/edge/security/securings3.html | 6 +
docs/edge/security/securingtde.html | 6 +
docs/edge/security/securityacls.html | 6 +
docs/edge/security/securitywithranger.html | 6 +
docs/edge/sitemap.xml | 2 +-
docs/edge/start.html | 6 +
docs/edge/start/fromsource.html | 6 +
docs/edge/start/kubernetes.html | 6 +
docs/edge/start/minikube.html | 6 +
docs/edge/start/onprem.html | 6 +
docs/edge/start/runningviadocker.html | 6 +
docs/edge/start/startfromdockerhub.html | 6 +
docs/edge/tools.html | 6 +
docs/edge/tools/admin.html | 6 +
docs/edge/tools/auditparser.html | 6 +
docs/edge/tools/containerlogparser.html | 6 +
docs/edge/tools/debug.html | 6 +
docs/edge/tools/genconf.html | 6 +
docs/edge/tools/logsinozone.html | 6 +
docs/edge/tools/testtools.html | 6 +
docs/edge/troubleshooting.html | 6 +
.../om-ha-snapshot-installation.html | 6 +
docs/edge/zh/interface/ofs.html | 2 +-
126 files changed, 1144 insertions(+), 190 deletions(-)
diff --git a/docs/edge/concept.html b/docs/edge/concept.html
index 1e0c0bd2..10f6d43a 100644
--- a/docs/edge/concept.html
+++ b/docs/edge/concept.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/comparison.html b/docs/edge/concept/comparison.html
index bec60c84..b5056e0a 100644
--- a/docs/edge/concept/comparison.html
+++ b/docs/edge/concept/comparison.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/containers.html b/docs/edge/concept/containers.html
index f659be66..ec17ae12 100644
--- a/docs/edge/concept/containers.html
+++ b/docs/edge/concept/containers.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/datanodes.html b/docs/edge/concept/datanodes.html
index 68275b47..2131eaa7 100644
--- a/docs/edge/concept/datanodes.html
+++ b/docs/edge/concept/datanodes.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/networkports.html b/docs/edge/concept/networkports.html
index 929ad341..719be78d 100644
--- a/docs/edge/concept/networkports.html
+++ b/docs/edge/concept/networkports.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/overview.html b/docs/edge/concept/overview.html
index 6b58510a..ff88b314 100644
--- a/docs/edge/concept/overview.html
+++ b/docs/edge/concept/overview.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/ozonemanager.html b/docs/edge/concept/ozonemanager.html
index 38a18d00..865bac4c 100644
--- a/docs/edge/concept/ozonemanager.html
+++ b/docs/edge/concept/ozonemanager.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/ozones3gateway.html b/docs/edge/concept/ozones3gateway.html
index 12e10cd3..ed65647e 100644
--- a/docs/edge/concept/ozones3gateway.html
+++ b/docs/edge/concept/ozones3gateway.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/recon.html b/docs/edge/concept/recon.html
index 70a15755..ee5470d7 100644
--- a/docs/edge/concept/recon.html
+++ b/docs/edge/concept/recon.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/storagecontainermanager.html b/docs/edge/concept/storagecontainermanager.html
index 4926ee97..97efaa66 100644
--- a/docs/edge/concept/storagecontainermanager.html
+++ b/docs/edge/concept/storagecontainermanager.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/concept/volumesbucketskeys.html b/docs/edge/concept/volumesbucketskeys.html
index f1f47b11..5af6bd98 100644
--- a/docs/edge/concept/volumesbucketskeys.html
+++ b/docs/edge/concept/volumesbucketskeys.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design.html b/docs/edge/design.html
index b73a8f82..4a2315bc 100644
--- a/docs/edge/design.html
+++ b/docs/edge/design.html
@@ -300,6 +300,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/configless.html b/docs/edge/design/configless.html
index 451b8b17..b152c3a9 100644
--- a/docs/edge/design/configless.html
+++ b/docs/edge/design/configless.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/container-reconciliation.html b/docs/edge/design/container-reconciliation.html
index a08ba660..11e3a5fc 100644
--- a/docs/edge/design/container-reconciliation.html
+++ b/docs/edge/design/container-reconciliation.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/decommissioning.html b/docs/edge/design/decommissioning.html
index 266d9ea7..53c1ad49 100644
--- a/docs/edge/design/decommissioning.html
+++ b/docs/edge/design/decommissioning.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/dn-merge-rocksdb.html b/docs/edge/design/dn-merge-rocksdb.html
index 1b60aff2..efc121cf 100644
--- a/docs/edge/design/dn-merge-rocksdb.html
+++ b/docs/edge/design/dn-merge-rocksdb.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/dn-min-space-configuration.html b/docs/edge/design/dn-min-space-configuration.html
index 39eb8dd6..18ca24d9 100644
--- a/docs/edge/design/dn-min-space-configuration.html
+++ b/docs/edge/design/dn-min-space-configuration.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/dn-usedspace-calculation.html b/docs/edge/design/dn-usedspace-calculation.html
index 0f9eda7f..f44031d1 100644
--- a/docs/edge/design/dn-usedspace-calculation.html
+++ b/docs/edge/design/dn-usedspace-calculation.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/ec.html b/docs/edge/design/ec.html
index 03e32346..26d39f87 100644
--- a/docs/edge/design/ec.html
+++ b/docs/edge/design/ec.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/full-volume-handling.html b/docs/edge/design/full-volume-handling.html
index 18ed2105..23de2c5f 100644
--- a/docs/edge/design/full-volume-handling.html
+++ b/docs/edge/design/full-volume-handling.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/gdpr.html b/docs/edge/design/gdpr.html
index 4e487b71..73cfdb60 100644
--- a/docs/edge/design/gdpr.html
+++ b/docs/edge/design/gdpr.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/httpfs.html b/docs/edge/design/httpfs.html
index 25dc885e..645fa545 100644
--- a/docs/edge/design/httpfs.html
+++ b/docs/edge/design/httpfs.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/locks.html b/docs/edge/design/locks.html
index 25149b3a..687e7952 100644
--- a/docs/edge/design/locks.html
+++ b/docs/edge/design/locks.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/multiraft.html b/docs/edge/design/multiraft.html
index 413a68f4..e77bbc00 100644
--- a/docs/edge/design/multiraft.html
+++ b/docs/edge/design/multiraft.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/namespace-support.html b/docs/edge/design/namespace-support.html
index be94d939..bb4659a6 100644
--- a/docs/edge/design/namespace-support.html
+++ b/docs/edge/design/namespace-support.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/nfs.html b/docs/edge/design/nfs.html
index 07208187..aaf20001 100644
--- a/docs/edge/design/nfs.html
+++ b/docs/edge/design/nfs.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/nonrolling-upgrade.html b/docs/edge/design/nonrolling-upgrade.html
index 50a32d65..8b9cb988 100644
--- a/docs/edge/design/nonrolling-upgrade.html
+++ b/docs/edge/design/nonrolling-upgrade.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/ofs.html b/docs/edge/design/ofs.html
index 05fb492d..e3271a92 100644
--- a/docs/edge/design/ofs.html
+++ b/docs/edge/design/ofs.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/omha.html b/docs/edge/design/omha.html
index 759c9b6f..f4a9e0ab 100644
--- a/docs/edge/design/omha.html
+++ b/docs/edge/design/omha.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/omprepare.html b/docs/edge/design/omprepare.html
index c0fd8653..4b19fcb9 100644
--- a/docs/edge/design/omprepare.html
+++ b/docs/edge/design/omprepare.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/overwrite-key-only-if-unchanged.html b/docs/edge/design/overwrite-key-only-if-unchanged.html
index a71cc634..a0ee6631 100644
--- a/docs/edge/design/overwrite-key-only-if-unchanged.html
+++ b/docs/edge/design/overwrite-key-only-if-unchanged.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/ozone-enhancement-proposals.html b/docs/edge/design/ozone-enhancement-proposals.html
index dc81e72f..b6c07c43 100644
--- a/docs/edge/design/ozone-enhancement-proposals.html
+++ b/docs/edge/design/ozone-enhancement-proposals.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/recon1.html b/docs/edge/design/recon1.html
index 4c1f853c..b3ffaf81 100644
--- a/docs/edge/design/recon1.html
+++ b/docs/edge/design/recon1.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/recon2.html b/docs/edge/design/recon2.html
index 31e6f16c..dc74794e 100644
--- a/docs/edge/design/recon2.html
+++ b/docs/edge/design/recon2.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/s3-performance.html b/docs/edge/design/s3-performance.html
index 48c7e100..416eb8a8 100644
--- a/docs/edge/design/s3-performance.html
+++ b/docs/edge/design/s3-performance.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/s3gateway.html b/docs/edge/design/s3gateway.html
index 23e8d93e..55e10c08 100644
--- a/docs/edge/design/s3gateway.html
+++ b/docs/edge/design/s3gateway.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/scmha.html b/docs/edge/design/scmha.html
index cba75d1a..0e8ee3f2 100644
--- a/docs/edge/design/scmha.html
+++ b/docs/edge/design/scmha.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/secure-s3.html b/docs/edge/design/secure-s3.html
index 88410633..7e27ab6f 100644
--- a/docs/edge/design/secure-s3.html
+++ b/docs/edge/design/secure-s3.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/storage-class.html b/docs/edge/design/storage-class.html
index 44e5a194..2816d8c9 100644
--- a/docs/edge/design/storage-class.html
+++ b/docs/edge/design/storage-class.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/symmetric-token-signatures.html b/docs/edge/design/symmetric-token-signatures.html
index 27765958..a9fd7ddc 100644
--- a/docs/edge/design/symmetric-token-signatures.html
+++ b/docs/edge/design/symmetric-token-signatures.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/tde.html b/docs/edge/design/tde.html
index a4f8f9d4..94dd5979 100644
--- a/docs/edge/design/tde.html
+++ b/docs/edge/design/tde.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/token.html b/docs/edge/design/token.html
index e9435cdd..f059c701 100644
--- a/docs/edge/design/token.html
+++ b/docs/edge/design/token.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/topology.html b/docs/edge/design/topology.html
index 58654ca8..afb8f311 100644
--- a/docs/edge/design/topology.html
+++ b/docs/edge/design/topology.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/trash.html b/docs/edge/design/trash.html
index f9396497..e249310b 100644
--- a/docs/edge/design/trash.html
+++ b/docs/edge/design/trash.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/typesafeconfig.html b/docs/edge/design/typesafeconfig.html
index a3ad5845..ae39ee33 100644
--- a/docs/edge/design/typesafeconfig.html
+++ b/docs/edge/design/typesafeconfig.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/upgrade-dev-primer.html b/docs/edge/design/upgrade-dev-primer.html
index 4769b5e1..164fa02a 100644
--- a/docs/edge/design/upgrade-dev-primer.html
+++ b/docs/edge/design/upgrade-dev-primer.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/design/volume-management.html b/docs/edge/design/volume-management.html
index 649ca2bd..8c188a5a 100644
--- a/docs/edge/design/volume-management.html
+++ b/docs/edge/design/volume-management.html
@@ -298,6 +298,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/en/sitemap.xml b/docs/edge/en/sitemap.xml
index c9edd492..73bd339f 100644
--- a/docs/edge/en/sitemap.xml
+++ b/docs/edge/en/sitemap.xml
@@ -42,7 +42,7 @@
/>
</url><url>
<loc>/interface/ofs.html</loc>
- <lastmod>2025-07-09T22:31:24-07:00</lastmod>
+ <lastmod>2025-07-10T19:02:05-07:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@@ -856,6 +856,9 @@
</url><url>
<loc>/interface/swaggerreconapi.html</loc>
<lastmod>2023-11-15T14:55:19+05:30</lastmod>
+ </url><url>
+ <loc>/feature/maintenance.html</loc>
+ <lastmod>2025-07-10T18:43:40-07:00</lastmod>
</url><url>
<loc>/feature/multi-raft-support.html</loc>
<lastmod>2025-07-03T11:46:58-07:00</lastmod>
diff --git a/docs/edge/feature.html b/docs/edge/feature.html
index 65e632bd..515b08a9 100644
--- a/docs/edge/feature.html
+++ b/docs/edge/feature.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
@@ -959,6 +965,25 @@ There is no implementation for gRPC yet.</p></p>
<div class="row">
+ <div class="col-sm-6">
+ <div class="card">
+ <div class="card-body">
+ <h2 class="card-title">
+
+ Maintenance Mode
+ </h2>
+ <p class="card-text">Maintenance mode for Datanodes.</p>
+ <a href="./feature/maintenance.html"
+ class=" btn btn-primary btn-lg">Maintenance Mode</a>
+ </div>
+ </div>
+ </div>
+
+
+
+
+
+
<div class="col-sm-6">
<div class="card">
<div class="card-body">
@@ -974,10 +999,14 @@ There is no implementation for gRPC yet.</p></p>
</div>
+ </div>
+
+ <div class="row">
+
<div class="col-sm-6">
<div class="card">
<div class="card-body">
@@ -993,8 +1022,6 @@ There is no implementation for gRPC yet.</p></p>
</div>
- </div>
-
</div>
diff --git a/docs/edge/feature/decommission.html b/docs/edge/feature/decommission.html
index aeb26cf1..ad3537b0 100644
--- a/docs/edge/feature/decommission.html
+++ b/docs/edge/feature/decommission.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/dn-merge-rocksdb.html b/docs/edge/feature/dn-merge-rocksdb.html
index a2d4a3ff..7efbea96 100644
--- a/docs/edge/feature/dn-merge-rocksdb.html
+++ b/docs/edge/feature/dn-merge-rocksdb.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/erasurecoding.html b/docs/edge/feature/erasurecoding.html
index 2895e24d..a52ccad8 100644
--- a/docs/edge/feature/erasurecoding.html
+++ b/docs/edge/feature/erasurecoding.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/faircallqueue.html b/docs/edge/feature/faircallqueue.html
index c07bf5ea..0545b15c 100644
--- a/docs/edge/feature/faircallqueue.html
+++ b/docs/edge/feature/faircallqueue.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
@@ -641,7 +647,7 @@ Furthermore, this port will have to be part of every configuration name.</p>
</span></span></code></pre></div>
- <a class="btn btn-success btn-lg" href="../feature/multi-raft-support.html">Next >></a>
+ <a class="btn btn-success btn-lg" href="../feature/maintenance.html">Next >></a>
</div>
diff --git a/docs/edge/feature/index.xml b/docs/edge/feature/index.xml
index 21a4c325..0ee969ed 100644
--- a/docs/edge/feature/index.xml
+++ b/docs/edge/feature/index.xml
@@ -140,6 +140,13 @@
<guid>/feature/faircallqueue.html</guid>
<description><!---
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements. See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License. You may obtain a copy of the License at

 http: [...]
</item>
+ <item>
+ <title>Maintenance Mode</title>
+ <link>/feature/maintenance.html</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+ <guid>/feature/maintenance.html</guid>
+ <description>Maintenance mode for Datanodes.</description>
+ </item>
<item>
<title>Multi-Raft Support in Ozone</title>
<link>/feature/multi-raft-support.html</link>
diff --git a/docs/edge/security/securings3.html b/docs/edge/feature/maintenance.html
similarity index 75%
copy from docs/edge/security/securings3.html
copy to docs/edge/feature/maintenance.html
index c990ea3d..a310dbd9 100644
--- a/docs/edge/security/securings3.html
+++ b/docs/edge/feature/maintenance.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="active">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
@@ -467,7 +473,7 @@ s=d.getElementsByTagName('script')[0];
</li>
- <li class="active">
+ <li class="">
<a href="../security/securings3.html">Securing S3</a>
@@ -550,8 +556,8 @@ s=d.getElementsByTagName('script')[0];
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../index.html">Home</a></li>
- <li class="breadcrumb-item" aria-current="page"><a href="../security.html">Security</a></li>
- <li class="breadcrumb-item active" aria-current="page">Securing S3</li>
+ <li class="breadcrumb-item" aria-current="page"><a href="../feature.html">Features</a></li>
+ <li class="breadcrumb-item active" aria-current="page">Maintenance Mode</li>
</ol>
</nav>
@@ -561,16 +567,11 @@ s=d.getElementsByTagName('script')[0];
-
-
- <a href="../zh/security/securings3.html"><span class="label label-success">中文</span></a>
-
-
</div>
<div class="col-md-9">
- <h1>Securing S3</h1>
+ <h1>Maintenance Mode</h1>
<!---
Licensed to the Apache Software Foundation (ASF) under one or more
@@ -588,75 +589,46 @@ s=d.getElementsByTagName('script')[0];
See the License for the specific language governing permissions and
limitations under the License.
-->
-<p>To access an S3 bucket, users need AWS access key ID and AWS secret. Both of
-these are generated by going to AWS website. When you use Ozone’s S3
-protocol, you need the same AWS access key and secret.</p>
-<p>Under Ozone, the clients can download the access key directly from Ozone.
-The user needs to <code>kinit</code> first and once they have authenticated via kerberos
-they can download the S3 access key ID and AWS secret. Just like AWS S3,
-both of these are secrets that needs to be protected by the client since it
-gives full access to the S3 buckets.</p>
-<h2 id="obtain-secrets">Obtain Secrets</h2>
-<ul>
-<li>S3 clients can get the secret access id and user secret from OzoneManager.</li>
-</ul>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ozone s3 getsecret
+<h1 id="datanode-maintenance-mode">DataNode Maintenance Mode</h1>
+<p>Maintenance mode is a feature in Apache Ozone that allows you to temporarily take a DataNode offline for maintenance operations (e.g., hardware upgrades, software updates) without triggering immediate data replication. Unlike decommissioning, which aims to permanently remove a DataNode and its data from the cluster, maintenance mode is designed for temporary outages.</p>
+<p>While in maintenance mode, a DataNode does not accept new writes but may still serve reads, assuming containers are healthy and online. Existing data on the DataNode will remain in place, and replication of its data will only be triggered if the DataNode remains in maintenance mode beyond a configurable timeout period. This allows for planned downtime without unnecessary data movement, reducing network overhead and cluster load.</p>
+<p>The DataNode transitions through the following operational states during maintenance:</p>
+<ol>
+<li><strong>IN_SERVICE</strong>: The DataNode is fully operational and participating in data writes and reads.</li>
+<li><strong>ENTERING_MAINTENANCE</strong>: The DataNode is transitioning into maintenance mode. New writes will be avoided.</li>
+<li><strong>IN_MAINTENANCE</strong>: The DataNode is in maintenance mode. Data will not be written to it. If the DataNode remains in this state beyond the configured maintenance window, its data will start to be replicated to other DataNodes to ensure data durability.</li>
+</ol>
+<h2 id="command-line-usage">Command Line Usage</h2>
+<p>To place a DataNode into maintenance mode, use the <code>ozone admin datanode maintenance</code> command. You can specify a duration for the maintenance period. If no duration is specified, a default duration will be used (this can be configured).</p>
+<p>To check the current state of the datanodes, including their operational state, you can execute the following command:</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>ozone admin datanode list
+</span></span></code></pre></div><p>To start maintenance mode for one or more DataNodes:</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>ozone admin datanode maintenance <span style="color:#f92672">[</span>-hV<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-id<span style="color:#f92672">=</span><scmServiceId><span style="color:#f92672">]</span> <span style="color:#f92672">[</span>--sc [...]
</span></span></code></pre></div><ul>
-<li>Or by sending request to /secret S3 REST endpoint.</li>
-</ul>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X PUT --negotiate -u : https://localhost:9879/secret
-</span></span></code></pre></div><p>This command will talk to ozone, validate the user via Kerberos and generate
-the AWS credentials. The values will be printed out on the screen. You can
-set these values up in your <em>.aws</em> file for automatic access while working
-against Ozone S3 buckets.</p>
-<div class="alert alert-danger" role="alert">
- Please note: These S3 credentials are like your Kerberos passwords
- that give complete access to your buckets.
-</div>
-<ul>
-<li>Now you can proceed to setup these secrets in aws configs:</li>
-</ul>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>aws configure set default.s3.signature_version s3v4
-</span></span><span style="display:flex;"><span>aws configure set aws_access_key_id <span style="color:#e6db74">${</span>accessId<span style="color:#e6db74">}</span>
-</span></span><span style="display:flex;"><span>aws configure set aws_secret_access_key <span style="color:#e6db74">${</span>secret<span style="color:#e6db74">}</span>
-</span></span><span style="display:flex;"><span>aws configure set region us-west-1
-</span></span></code></pre></div><p>Please refer to AWS S3 documentation on how to use S3 via command line or via
-S3 API.</p>
-<h2 id="revoking-secrets-via-rest-api">Revoking Secrets via REST API</h2>
-<p>To invalidate/revoke the secret, use <code>ozone s3 revokesecret</code> command.
-Alternatively, you can use the REST API endpoint to revoke the secret.
-Ozone now provides a REST API endpoint that allows administrators to revoke S3 access secrets. This operation invalidates a secret, ensuring it can no longer be used for authentication.</p>
-<h3 id="endpoint-details">Endpoint Details</h3>
-<ul>
-<li><strong>URL:</strong> <code>http://localhost:9879/secret</code></li>
-<li><strong>HTTP Method:</strong> <code>DELETE</code></li>
+<li><code><hosts></code>: A space-separated list of hostnames or IP addresses of the DataNodes to put into maintenance mode.</li>
+<li><code>--end=<hours></code>: Optional. Automatically end maintenance after the given hours. By default, maintenance must be ended manually.</li>
+<li><code>--force</code>: Optional. Forcefully try to put the datanode(s) into maintenance mode.</li>
</ul>
-<h3 id="authentication">Authentication</h3>
-<p>The API leverages SPNEGO (Kerberos) authentication. The following curl options are used:</p>
+<p>To take a DataNode out of maintenance mode and return it to <code>IN_SERVICE</code> state, you can use the <code>recommission</code> command:</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>ozone admin datanode recommission <span style="color:#f92672">[</span>-hV<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-id<span style="color:#f92672">=</span><scmServiceId><span style="color:#f92672">]</span> <span style="color:#f92672">[</span>--s [...]
+</span></span></code></pre></div><h2 id="configuration-properties">Configuration Properties</h2>
+<p>The following properties, typically set in <code>ozone-site.xml</code>, are relevant to maintenance mode:</p>
<ul>
-<li><code>--negotiate</code> enables SPNEGO.</li>
-<li><code>-u :</code> uses the current Kerberos ticket (an empty username is provided).</li>
+<li><code>hdds.scm.replication.maintenance.replica.minimum</code>: The minimum number of container replicas which must be available for a node to enter maintenance. Default value is <code>2</code>. If putting a node into maintenance reduces the available replicas for any container below this level, the node will remain in the <code>ENTERING_MAINTENANCE</code> state until a new replica is created.</li>
+<li><code>hdds.scm.replication.maintenance.remaining.redundancy</code>: The number of redundant containers in a group which must be available for a node to enter maintenance. Default value is <code>1</code>. If putting a node into maintenance reduces the redundancy below this value, the node will remain in the <code>ENTERING_MAINTENANCE</code> state until a new replica is created. For Ratis containers, the default value of 1 ensures at least two replicas are online, meaning 1 more can be [...]
</ul>
-<h3 id="example-1-revoke-secret-for-the-current-user">Example 1: Revoke Secret for the Current User</h3>
-<p>This command revokes the secret for the currently authenticated user:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X DELETE --negotiate -u : -v http://localhost:9879/secret
-</span></span></code></pre></div><h3 id="example-2-revoke-secret-by-username">Example 2: Revoke Secret by Username</h3>
-<p>This command revokes the secret for a specific user by appending the username as a query parameter. Replace <code>testuser</code> with the desired username:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -X DELETE --negotiate -u : -v <span style="color:#e6db74">"http://localhost:9879/secret?username=testuser"</span>
-</span></span></code></pre></div><h3 id="response">Response</h3>
+<h2 id="metrics">Metrics</h2>
+<p>The following SCM metrics are relevant to DataNode maintenance mode:</p>
<ul>
-<li><strong>Success:</strong> Returns HTTP <code>200 OK</code> along with a confirmation message in JSON format.</li>
-<li><strong>Failure:</strong> Returns an appropriate HTTP error status and message if there are issues (e.g., authentication failures).</li>
+<li><code>DecommissioningMaintenanceNodesTotal</code>: This metric reports the total number of DataNodes that are currently in either decommissioning or maintenance mode.</li>
+<li><code>RecommissionNodesTotal</code>: This metric reports the total number of DataNodes that are currently being recommissioned (i.e., returning to <code>IN_SERVICE</code> state from either decommissioning or maintenance mode).</li>
</ul>
-<h3 id="testing-and-verification">Testing and Verification</h3>
-<p>For a working example of these operations, refer to the <a href="https://raw.githubusercontent.com/apache/ozone/refs/heads/master/hadoop-ozone/dist/src/main/smoketest/s3/secretrevoke.robot">Secret Revoke Robot Test</a>. This test demonstrates both the default secret revocation and the revocation by username.</p>
-<blockquote>
-<p><strong>Note:</strong> Ensure your Kerberos authentication is correctly configured, as secret revocation is a privileged operation.</p>
-</blockquote>
+<h2 id="reference">Reference</h2>
+<p>For information on permanently removing a DataNode from the cluster, refer to the <a href="../feature/decommission.html">Decommissioning</a> user documentation.</p>
- <a class="btn btn-success btn-lg" href="../security/securityacls.html">Next >></a>
+ <a class="btn btn-success btn-lg" href="../feature/multi-raft-support.html">Next >></a>
</div>
@@ -672,7 +644,7 @@ Ozone now provides a REST API endpoint that allows administrators to revoke S3 a
<footer class="footer">
<div class="container">
<span class="small text-muted">
- Version: 2.1.0-SNAPSHOT, Last Modified: April 3, 2025 <a class="hide-child link primary-color" href="https://github.com/apache/ozone/commit/ed0111582f913ea9d67de0c8bea6445b8a653759">ed0111582f</a>
+ Version: 2.1.0-SNAPSHOT, Last Modified: July 10, 2025 <a class="hide-child link primary-color" href="https://github.com/apache/ozone/commit/1159d9b7b4521f39cda716079fbaf4acb9c2d730">1159d9b7b4</a>
</span>
</div>
</footer>
diff --git a/docs/edge/feature/multi-raft-support.html b/docs/edge/feature/multi-raft-support.html
index 818db8c1..80018519 100644
--- a/docs/edge/feature/multi-raft-support.html
+++ b/docs/edge/feature/multi-raft-support.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="active">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/nonrolling-upgrade.html b/docs/edge/feature/nonrolling-upgrade.html
index 9ccb83e9..1fbf7ee9 100644
--- a/docs/edge/feature/nonrolling-upgrade.html
+++ b/docs/edge/feature/nonrolling-upgrade.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/observability.html b/docs/edge/feature/observability.html
index f34b091a..6f1a8d9b 100644
--- a/docs/edge/feature/observability.html
+++ b/docs/edge/feature/observability.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/om-ha.html b/docs/edge/feature/om-ha.html
index 391ca624..6176fa8a 100644
--- a/docs/edge/feature/om-ha.html
+++ b/docs/edge/feature/om-ha.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/prefixfso.html b/docs/edge/feature/prefixfso.html
index ae55798a..40b51084 100644
--- a/docs/edge/feature/prefixfso.html
+++ b/docs/edge/feature/prefixfso.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/quota.html b/docs/edge/feature/quota.html
index 9c4ec801..80f9557c 100644
--- a/docs/edge/feature/quota.html
+++ b/docs/edge/feature/quota.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/recon.html b/docs/edge/feature/recon.html
index 915655a5..384a0c44 100644
--- a/docs/edge/feature/recon.html
+++ b/docs/edge/feature/recon.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/reconfigurability.html b/docs/edge/feature/reconfigurability.html
index 63ef41c9..9e0cc5e8 100644
--- a/docs/edge/feature/reconfigurability.html
+++ b/docs/edge/feature/reconfigurability.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/s3-multi-tenancy-access-control.html b/docs/edge/feature/s3-multi-tenancy-access-control.html
index 4714e23b..2ce4e66e 100644
--- a/docs/edge/feature/s3-multi-tenancy-access-control.html
+++ b/docs/edge/feature/s3-multi-tenancy-access-control.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/s3-multi-tenancy-setup.html b/docs/edge/feature/s3-multi-tenancy-setup.html
index 3a0f7af9..b0cfd3a0 100644
--- a/docs/edge/feature/s3-multi-tenancy-setup.html
+++ b/docs/edge/feature/s3-multi-tenancy-setup.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/s3-multi-tenancy.html b/docs/edge/feature/s3-multi-tenancy.html
index 3f989ba7..a3a648e8 100644
--- a/docs/edge/feature/s3-multi-tenancy.html
+++ b/docs/edge/feature/s3-multi-tenancy.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/s3-tenant-commands.html b/docs/edge/feature/s3-tenant-commands.html
index 0c1914b3..08d27adb 100644
--- a/docs/edge/feature/s3-tenant-commands.html
+++ b/docs/edge/feature/s3-tenant-commands.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/scm-ha.html b/docs/edge/feature/scm-ha.html
index 4f57c295..6caa4957 100644
--- a/docs/edge/feature/scm-ha.html
+++ b/docs/edge/feature/scm-ha.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/snapshot.html b/docs/edge/feature/snapshot.html
index ed4aed6c..e2da84f0 100644
--- a/docs/edge/feature/snapshot.html
+++ b/docs/edge/feature/snapshot.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/streaming-write-pipeline.html b/docs/edge/feature/streaming-write-pipeline.html
index ea25d3d8..c3519dc8 100644
--- a/docs/edge/feature/streaming-write-pipeline.html
+++ b/docs/edge/feature/streaming-write-pipeline.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/topology.html b/docs/edge/feature/topology.html
index b4f4a1f6..9d1bb999 100644
--- a/docs/edge/feature/topology.html
+++ b/docs/edge/feature/topology.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/feature/trash.html b/docs/edge/feature/trash.html
index 3b67e3a7..00fc0495 100644
--- a/docs/edge/feature/trash.html
+++ b/docs/edge/feature/trash.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/index.html b/docs/edge/index.html
index 089eac2e..b458fa20 100644
--- a/docs/edge/index.html
+++ b/docs/edge/index.html
@@ -302,6 +302,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/index.xml b/docs/edge/index.xml
index ad4fe66f..2ae33b8f 100644
--- a/docs/edge/index.xml
+++ b/docs/edge/index.xml
@@ -735,6 +735,13 @@
<guid>/interface/swaggerreconapi.html</guid>
<description><!---
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements. See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License. You may obtain a copy of the License at

 http: [...]
</item>
+ <item>
+ <title>Maintenance Mode</title>
+ <link>/feature/maintenance.html</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+ <guid>/feature/maintenance.html</guid>
+ <description>Maintenance mode for Datanodes.</description>
+ </item>
<item>
<title>Multi-Raft Support in Ozone</title>
<link>/feature/multi-raft-support.html</link>
diff --git a/docs/edge/integration.html b/docs/edge/integration.html
index d928f04c..6aff861f 100644
--- a/docs/edge/integration.html
+++ b/docs/edge/integration.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/integration/distcp.html b/docs/edge/integration/distcp.html
index 9aa66531..7fe8e4f2 100644
--- a/docs/edge/integration/distcp.html
+++ b/docs/edge/integration/distcp.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/integration/hive.html b/docs/edge/integration/hive.html
index 0ce800f9..a73338e7 100644
--- a/docs/edge/integration/hive.html
+++ b/docs/edge/integration/hive.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/integration/impala.html b/docs/edge/integration/impala.html
index 6e259d1e..da51ef82 100644
--- a/docs/edge/integration/impala.html
+++ b/docs/edge/integration/impala.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface.html b/docs/edge/interface.html
index 3e1d8b07..75a666fa 100644
--- a/docs/edge/interface.html
+++ b/docs/edge/interface.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/cli.html b/docs/edge/interface/cli.html
index d272f399..f68f8ad9 100644
--- a/docs/edge/interface/cli.html
+++ b/docs/edge/interface/cli.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/csi.html b/docs/edge/interface/csi.html
index f305120b..babbb8e8 100644
--- a/docs/edge/interface/csi.html
+++ b/docs/edge/interface/csi.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/cyberduckozones3.html b/docs/edge/interface/cyberduckozones3.html
index dbcaffe9..c73b4ad3 100644
--- a/docs/edge/interface/cyberduckozones3.html
+++ b/docs/edge/interface/cyberduckozones3.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/httpfs.html b/docs/edge/interface/httpfs.html
index b8fe7e66..4ca47b8d 100644
--- a/docs/edge/interface/httpfs.html
+++ b/docs/edge/interface/httpfs.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/javaapi.html b/docs/edge/interface/javaapi.html
index 76189971..17149a1d 100644
--- a/docs/edge/interface/javaapi.html
+++ b/docs/edge/interface/javaapi.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/native-cpp.html b/docs/edge/interface/native-cpp.html
index 473f8d3c..4ea46aec 100644
--- a/docs/edge/interface/native-cpp.html
+++ b/docs/edge/interface/native-cpp.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/o3fs.html b/docs/edge/interface/o3fs.html
index 09d20872..2a29647f 100644
--- a/docs/edge/interface/o3fs.html
+++ b/docs/edge/interface/o3fs.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/ofs.html b/docs/edge/interface/ofs.html
index 02ade570..7cc529ec 100644
--- a/docs/edge/interface/ofs.html
+++ b/docs/edge/interface/ofs.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
@@ -636,7 +642,7 @@ For example:</p>
<p>Or use the put command to write a file to the bucket.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hdfs dfs -put /etc/hosts /volume1/bucket1/test</span></span></code></pre></div>
<p>For more usage, see: <a href="https://issues.apache.org/jira/secure/attachment/12987636/Design%20ofs%20v1.pdf">https://issues.apache.org/jira/secure/attachment/12987636/Design%20ofs%20v1.pdf</a></p>
-<h2 id="differences-from-o3fshahahugoshortcode108s5hbhb">Differences from <a href="../interface/o3fs.html">o3fs</a></h2>
+<h2 id="differences-from-o3fshahahugoshortcode109s5hbhb">Differences from <a href="../interface/o3fs.html">o3fs</a></h2>
<h3 id="creating-files">Creating files</h3>
<p>OFS doesn’t allow creating keys(files) directly under root or volumes.
Users will receive an error message when they try to do that:</p>
@@ -730,452 +736,676 @@ cluster.</p>
<p>This feature wouldn’t degrade server performance as the loop is on the client.
Think it as a client is issuing multiple requests to the server to get all the
information.</p>
-<h2 id="operation-support">Operation Support</h2>
-<p>lists the support status of Ofs operations</p>
-<h3 id="supported">Supported</h3>
+<h2 id="migrating-from-hdfs">Migrating from HDFS</h2>
+<p>This guide helps you migrate applications from HDFS to Ozone by detailing the API-level compatibility of the Ozone File System (Ofs).</p>
+<p>To ensure a smooth transition, you should first verify that your existing applications will work with Ofs. You can check for potential incompatibilities by identifying the HDFS APIs your applications use.</p>
+<ul>
+<li><strong>For Cluster Administrators</strong>: Analyze the NameNode audit logs on your source HDFS cluster to identify the operations performed by your applications.</li>
+<li><strong>For Application Developers</strong>: Review your application’s source code to identify which <code>FileSystem</code> or <code>DistributedFileSystem</code> APIs are being called.</li>
+</ul>
+<p>Once you have a list of APIs, compare it against the tables below to identify any unsupported operations.</p>
+<h3 id="supported-filesystem-apis">Supported FileSystem APIs</h3>
+<p>The following standard <code>FileSystem</code> APIs are supported by Ofs.</p>
<table>
<thead>
<tr>
<th>Operation</th>
+ <th>NameNode audit log</th>
<th>Description</th>
<th>Support</th>
</tr>
</thead>
<tbody>
<tr>
+ <td><code>access</code></td>
+ <td><code>checkAccess</code></td>
+ <td>Checks if the user can access a path.</td>
+ <td>Supported</td>
+ </tr>
+ <tr>
+ <td><code>create</code></td>
<td><code>create</code></td>
<td>Creates a new file.</td>
<td>Supported</td>
</tr>
<tr>
+ <td><code>open</code></td>
<td><code>open</code></td>
<td>Opens a file for reading.</td>
<td>Supported</td>
</tr>
<tr>
+ <td><code>rename</code></td>
<td><code>rename</code></td>
<td>Renames a file or directory.</td>
<td>Supported [1]</td>
</tr>
<tr>
+ <td><code>delete</code></td>
<td><code>delete</code></td>
<td>Deletes a file or directory.</td>
<td>Supported [2]</td>
</tr>
<tr>
+ <td><code>listStatus</code></td>
<td><code>listStatus</code></td>
<td>Lists the status of files in a directory.</td>
<td>Supported [3]</td>
</tr>
<tr>
+ <td><code>mkdirs</code></td>
<td><code>mkdirs</code></td>
<td>Creates a directory and its parents.</td>
<td>Supported</td>
</tr>
<tr>
<td><code>getFileStatus</code></td>
+ <td><code>getfileinfo</code></td>
<td>Gets the status of a file.</td>
<td>Supported</td>
</tr>
<tr>
+ <td><code>setTimes</code></td>
<td><code>setTimes</code></td>
<td>Sets the modification and access times.</td>
<td>Supported</td>
</tr>
<tr>
<td><code>getLinkTarget</code></td>
+ <td><code>getfileinfo</code></td>
<td>Gets the target of a symbolic link.</td>
<td>Supported [4]</td>
</tr>
<tr>
<td><code>getFileChecksum</code></td>
+ <td><code>open</code></td>
<td>Gets the checksum of a file.</td>
<td>Supported</td>
</tr>
<tr>
<td><code>setSafeMode</code></td>
+ <td><code>safemode_leave</code>, <code>safemode_enter</code>, <code>safemode_get</code>, <code>safemode_force_exit</code></td>
<td>Enters or leaves safe mode.</td>
<td>Supported</td>
</tr>
<tr>
+ <td><code>recoverLease</code></td>
<td><code>recoverLease</code></td>
<td>Recovers a file lease.</td>
<td>Supported</td>
</tr>
<tr>
+ <td><code>isFileClosed</code></td>
<td><code>isFileClosed</code></td>
<td>Checks if a file is closed.</td>
<td>Supported</td>
</tr>
<tr>
+ <td><code>createSnapshot</code></td>
<td><code>createSnapshot</code></td>
<td>Creates a snapshot.</td>
<td>Supported [5]</td>
</tr>
<tr>
+ <td><code>deleteSnapshot</code></td>
<td><code>deleteSnapshot</code></td>
<td>Deletes a snapshot.</td>
<td>Supported [5]</td>
</tr>
<tr>
+ <td><code>renameSnapshot</code></td>
<td><code>renameSnapshot</code></td>
<td>Renames a snapshot.</td>
<td>Supported [5]</td>
</tr>
<tr>
<td><code>getSnapshotDiffReport</code></td>
+ <td><code>computeSnapshotDiff</code></td>
<td>Gets a snapshot diff report.</td>
<td>Supported [5]</td>
</tr>
<tr>
- <td><code>copyFromLocalFile</code></td>
- <td>Copies a file from the local filesystem.</td>
+ <td><code>getContentSummary</code></td>
+ <td><code>contentSummary</code></td>
+ <td>Gets the content summary of a path.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>exists</code></td>
- <td>Checks if a path exists.</td>
+ <td><code>getDelegationToken</code></td>
+ <td><code>getDelegationToken</code></td>
+ <td>Gets a delegation token.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getContentSummary</code></td>
- <td>Gets the content summary of a path.</td>
+ <td><code>globStatus</code></td>
+ <td><code>listStatus</code></td>
+ <td>Finds files matching a pattern.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getDefaultBlockSize</code></td>
- <td>Gets the default block size.</td>
+ <td><code>copyFromLocalFile</code></td>
+ <td><code>getfileinfo</code></td>
+ <td>Copies a file from the local filesystem.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getDefaultReplication</code></td>
- <td>Gets the default replication factor.</td>
+ <td><code>exists</code></td>
+ <td><code>getfileinfo</code></td>
+ <td>Checks if a path exists.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getDelegationToken</code></td>
- <td>Gets a delegation token.</td>
+ <td><code>getFileBlockLocations</code></td>
+ <td><code>open</code></td>
+ <td>Gets file block locations.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getFileBlockLocations</code></td>
- <td>Gets file block locations.</td>
+ <td><code>getTrashRoot</code></td>
+ <td><code>listSnapshottableDirectory</code>, <code>getEZForPath</code></td>
+ <td>Gets the trash root for a path.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getHomeDirectory</code></td>
- <td>Gets the user’s home directory.</td>
+ <td><code>getTrashRoots</code></td>
+ <td><code>listStatus</code>, <code>listEncryptionZones</code></td>
+ <td>Gets all trash roots.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getServerDefaults</code></td>
- <td>Gets the server default values.</td>
+ <td><code>isDirectory</code></td>
+ <td><code>getfileinfo</code></td>
+ <td>Checks if a path is a directory.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getTrashRoot</code></td>
- <td>Gets the trash root for a path.</td>
+ <td><code>isFile</code></td>
+ <td><code>getfileinfo</code></td>
+ <td>Checks if a path is a file.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getTrashRoots</code></td>
- <td>Gets all trash roots.</td>
+ <td><code>listFiles</code></td>
+ <td><code>listStatus</code></td>
+ <td>Returns a remote iterator for files.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>getWorkingDirectory</code></td>
- <td>Gets the current working directory.</td>
+ <td><code>listLocatedStatus</code></td>
+ <td><code>listStatus</code></td>
+ <td>Returns a remote iterator for located file statuses.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>globStatus</code></td>
- <td>Finds files matching a pattern.</td>
+ <td><code>listStatusIterator</code></td>
+ <td><code>listStatus</code></td>
+ <td>Returns a remote iterator for file statuses.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>hasPathCapability</code></td>
- <td>Queries for a path capability.</td>
+ <td><code>getDefaultBlockSize</code></td>
+ <td>N/A</td>
+ <td>Gets the default block size.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>isDirectory</code></td>
- <td>Checks if a path is a directory.</td>
+ <td><code>getDefaultReplication</code></td>
+ <td>N/A</td>
+ <td>Gets the default replication factor.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>isFile</code></td>
- <td>Checks if a path is a file.</td>
+ <td><code>getHomeDirectory</code></td>
+ <td>N/A</td>
+ <td>Gets the user’s home directory.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>listFiles</code></td>
- <td>Returns a remote iterator for files.</td>
+ <td><code>getServerDefaults</code></td>
+ <td>N/A</td>
+ <td>Gets the server default values.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>listLocatedStatus</code></td>
- <td>Returns a remote iterator for located file statuses.</td>
+ <td><code>getWorkingDirectory</code></td>
+ <td>N/A</td>
+ <td>Gets the current working directory.</td>
<td>Supported</td>
</tr>
<tr>
- <td><code>listStatusIterator</code></td>
- <td>Returns a remote iterator for file statuses.</td>
+ <td><code>hasPathCapability</code></td>
+ <td>N/A</td>
+ <td>Queries for a path capability.</td>
<td>Supported</td>
</tr>
<tr>
<td><code>setWorkingDirectory</code></td>
+ <td>N/A</td>
<td>Sets the current working directory.</td>
<td>Supported</td>
</tr>
<tr>
<td><code>supportsSymlinks</code></td>
+ <td>N/A</td>
<td>Checks if symbolic links are supported.</td>
<td>Supported</td>
</tr>
</tbody>
</table>
-<h3 id="unsupported">Unsupported</h3>
+<p><em>Note: An audit log of N/A means the API is client-side only and does not access the NameNode.</em></p>
+<h3 id="unsupported-filesystem-apis">Unsupported FileSystem APIs</h3>
+<p>The following standard <code>FileSystem</code> APIs are not supported by Ofs.</p>
<table>
<thead>
<tr>
<th>Operation</th>
+ <th>NameNode audit log</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
+ <td><code>append</code></td>
<td><code>append</code></td>
<td>Appends to an existing file.</td>
</tr>
<tr>
+ <td><code>setPermission</code></td>
<td><code>setPermission</code></td>
<td>Sets the permission of a file.</td>
</tr>
<tr>
+ <td><code>setOwner</code></td>
<td><code>setOwner</code></td>
<td>Sets the owner of a file.</td>
</tr>
<tr>
<td><code>setReplication</code></td>
- <td>Sets the replication factor of a file.</td>
+ <td><code>setReplication</code></td>
+ <td>Sets the replication factor.</td>
</tr>
<tr>
+ <td><code>createSymlink</code></td>
<td><code>createSymlink</code></td>
<td>Creates a symbolic link.</td>
</tr>
<tr>
<td><code>resolveLink</code></td>
+ <td><code>getfileinfo</code></td>
<td>Resolves a symbolic link.</td>
</tr>
<tr>
+ <td><code>setXAttr</code></td>
<td><code>setXAttr</code></td>
<td>Sets an extended attribute.</td>
</tr>
<tr>
<td><code>getXAttr</code></td>
+ <td><code>getXAttrs</code></td>
<td>Gets an extended attribute.</td>
</tr>
<tr>
+ <td><code>getXAttrs</code></td>
+ <td><code>getXAttrs</code></td>
+ <td>Gets extended attributes.</td>
+ </tr>
+ <tr>
+ <td><code>listXAttrs</code></td>
<td><code>listXAttrs</code></td>
<td>Lists extended attributes.</td>
</tr>
<tr>
+ <td><code>removeXAttr</code></td>
<td><code>removeXAttr</code></td>
<td>Removes an extended attribute.</td>
</tr>
<tr>
+ <td><code>setAcl</code></td>
<td><code>setAcl</code></td>
<td>Sets an ACL.</td>
</tr>
<tr>
+ <td><code>getAclStatus</code></td>
<td><code>getAclStatus</code></td>
<td>Gets an ACL status.</td>
</tr>
<tr>
+ <td><code>modifyAclEntries</code></td>
<td><code>modifyAclEntries</code></td>
<td>Modifies ACL entries.</td>
</tr>
<tr>
+ <td><code>removeAclEntries</code></td>
<td><code>removeAclEntries</code></td>
<td>Removes ACL entries.</td>
</tr>
<tr>
+ <td><code>removeDefaultAcl</code></td>
<td><code>removeDefaultAcl</code></td>
<td>Removes the default ACL.</td>
</tr>
<tr>
+ <td><code>removeAcl</code></td>
<td><code>removeAcl</code></td>
<td>Removes an ACL.</td>
</tr>
<tr>
+ <td><code>truncate</code></td>
<td><code>truncate</code></td>
<td>Truncates a file.</td>
</tr>
<tr>
+ <td><code>concat</code></td>
<td><code>concat</code></td>
<td>Concatenates files.</td>
</tr>
+ <tr>
+ <td><code>listCorruptFileBlocks</code></td>
+ <td><code>listCorruptFileBlocks</code></td>
+ <td>List corrupted file blocks</td>
+ </tr>
+ <tr>
+ <td><code>msync</code></td>
+ <td>N/A</td>
+ <td>Does not have a corresponding HDFS audit log.</td>
+ </tr>
</tbody>
</table>
-<p><strong>Footnotes:</strong></p>
-<p>[1] Renaming across buckets is not supported. For File System Optimized (FSO) buckets, rename is an atomic metadata operation. For legacy buckets, renaming a directory is non-atomic, as it is implemented by renaming each file and subdirectory individually.</p>
-<p>[2] Deleting the root of the filesystem is not allowed. Recursive volume deletion is not supported.</p>
-<p>[3] Recursive listing at the root or volume level is not supported.</p>
-<p>[4] OFS supports ’linked buckets’, where one bucket acts as a link to another. General-purpose symbolic links for files or directories are not supported.</p>
-<p>[5] Snapshots are only supported at the bucket level.</p>
-<h3 id="unsupported-hdfs-specific-operations">Unsupported HDFS-Specific Operations</h3>
-<p>The following operations are specific to HDFS and are not supported by Ofs.</p>
+<h3 id="unsupported-hdfs-specific-apis">Unsupported HDFS-Specific APIs</h3>
+<p>The following APIs are specific to HDFS’s <code>DistributedFileSystem</code> implementation and are not part of the generic <code>org.apache.hadoop.fs.FileSystem</code> API. Therefore, they are not supported by Ofs. However, see the footnotes below for equivalent APIs.</p>
<table>
<thead>
<tr>
<th>Operation</th>
+ <th>NameNode audit log</th>
<th>Description</th>
<th>Support</th>
</tr>
</thead>
<tbody>
<tr>
- <td><code>setStoragePolicy</code></td>
- <td>Sets a storage policy on a file or directory.</td>
- <td>Unsupported</td>
+ <td><code>getErasureCodingPolicy</code></td>
+ <td><code>getErasureCodingPolicy</code></td>
+ <td>Gets the erasure coding policy of a file/dir.</td>
+ <td>Unsupported [6]</td>
</tr>
<tr>
- <td><code>getStoragePolicy</code></td>
- <td>Gets the storage policy of a file or directory.</td>
+ <td><code>setErasureCodingPolicy</code></td>
+ <td><code>setErasureCodingPolicy</code></td>
+ <td>Sets an erasure coding policy on a directory.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>unsetErasureCodingPolicy</code></td>
+ <td><code>unsetErasureCodingPolicy</code></td>
+ <td>Unsets an erasure coding policy on a directory.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>addErasureCodingPolicies</code></td>
+ <td><code>addErasureCodingPolicies</code></td>
+ <td>Adds erasure coding policies.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getErasureCodingPolicies</code></td>
+ <td><code>getErasureCodingPolicies</code></td>
+ <td>Gets the available erasure coding policies.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>removeErasureCodingPolicy</code></td>
+ <td><code>removeErasureCodingPolicy</code></td>
+ <td>Removes an erasure coding policy.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>enableErasureCodingPolicy</code></td>
+ <td><code>enableErasureCodingPolicy</code></td>
+ <td>Enables an erasure coding policy.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>disableErasureCodingPolicy</code></td>
+ <td><code>disableErasureCodingPolicy</code></td>
+ <td>Disables an erasure coding policy.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getErasureCodingCodecs</code></td>
+ <td><code>getErasureCodingCodecs</code></td>
+ <td>Lists all erasure coding codecs.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getECTopologyResultForPolicies</code></td>
+ <td><code>getECTopologyResultForPolicies</code></td>
+ <td>Get erasure coding topology result for policies.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getSnapshotListing</code></td>
+ <td><code>ListSnapshot</code></td>
+ <td>List all snapshots of a snapshottable directory.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>allowSnapshot</code></td>
+ <td><code>allowSnapshot</code></td>
+ <td>Allows snapshots to be taken on a directory.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>disallowSnapshot</code></td>
+ <td><code>disallowSnapshot</code></td>
+ <td>Disallows snapshots to be taken on a directory.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>provisionSnapshotTrash</code></td>
+ <td><code>getfileinfo</code>, <code>mkdirs</code>, <code>setPermission</code></td>
+ <td>Provision trash for a snapshottable directory.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>createEncryptionZone</code></td>
+ <td><code>createEncryptionZone</code></td>
+ <td>Creates an encryption zone.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getEZForPath</code></td>
+ <td><code>getEZForPath</code></td>
+ <td>Gets the encryption zone for a path.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>listEncryptionZones</code></td>
+ <td><code>listEncryptionZones</code></td>
+ <td>Lists all encryption zones.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>reencryptEncryptionZone</code></td>
+ <td><code>reencryptEncryptionZone</code></td>
+ <td>Reencrypt an encryption zone.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>listReencryptionStatus</code></td>
+ <td><code>listReencryptionStatus</code></td>
+ <td>List reencryption status.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getFileEncryptionInfo</code></td>
+ <td><code>getfileinfo</code></td>
+ <td>Get file encryption info.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>provisionEZTrash</code></td>
+ <td><code>getEZForPath</code>, <code>getfileinfo</code>, <code>mkdirs</code>, <code>setPermission</code></td>
+ <td>Provision trash for an encryption zone.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>setQuota</code></td>
+ <td><code>clearQuota</code> or <code>clearSpaceQuota</code> or <code>setQuota</code> or <code>setSpaceQuota</code></td>
+ <td>Sets the quota usage for a path.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>getQuotaUsage</code></td>
+ <td><code>quotaUsage</code></td>
+ <td>Gets the quota usage for a path.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>setQuotaByStorageType</code></td>
+ <td><code>setSpaceQuota</code></td>
+ <td>Sets quota by storage type for a path.</td>
+ <td>Unsupported [6]</td>
+ </tr>
+ <tr>
+ <td><code>unsetStoragePolicy</code></td>
+ <td><code>unsetStoragePolicy</code></td>
+ <td>Unsets a storage policy on a file or directory.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>getErasureCodingPolicy</code></td>
- <td>Gets the erasure coding policy of a file or directory.</td>
+ <td><code>setStoragePolicy</code></td>
+ <td><code>setStoragePolicy</code></td>
+ <td>Sets a storage policy on a file or directory.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>setErasureCodingPolicy</code></td>
- <td>Sets an erasure coding policy on a directory.</td>
+ <td><code>getStoragePolicy</code></td>
+ <td><code>getStoragePolicy</code></td>
+ <td>Gets the storage policy of a file or directory.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>unsetErasureCodingPolicy</code></td>
- <td>Unsets an erasure coding policy on a directory.</td>
+ <td><code>satisfyStoragePolicy</code></td>
+ <td><code>satisfyStoragePolicy</code></td>
+ <td>Satisfies the storage policy of a file.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>addCachePool</code></td>
<td><code>addCachePool</code></td>
<td>Adds a cache pool.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>modifyCachePool</code></td>
<td><code>modifyCachePool</code></td>
<td>Modifies a cache pool.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>removeCachePool</code></td>
<td><code>removeCachePool</code></td>
<td>Removes a cache pool.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>listCachePools</code></td>
<td><code>listCachePools</code></td>
<td>Lists all cache pools.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>addCacheDirective</code></td>
<td><code>addCacheDirective</code></td>
<td>Adds a cache directive.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>modifyCacheDirective</code></td>
<td><code>modifyCacheDirective</code></td>
<td>Modifies a cache directive.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>removeCacheDirective</code></td>
<td><code>removeCacheDirective</code></td>
<td>Removes a cache directive.</td>
<td>Unsupported</td>
</tr>
<tr>
+ <td><code>listCacheDirectives</code></td>
<td><code>listCacheDirectives</code></td>
<td>Lists cache directives.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>allowSnapshot</code></td>
- <td>Allows snapshots to be taken on a directory.</td>
- <td>Unsupported</td>
- </tr>
- <tr>
- <td><code>disallowSnapshot</code></td>
- <td>Disallows snapshots to be taken on a directory.</td>
- <td>Unsupported</td>
- </tr>
- <tr>
- <td><code>addErasureCodingPolicies</code></td>
- <td>Adds erasure coding policies.</td>
+ <td><code>getSlowDatanodeStats</code></td>
+ <td><code>datanodeReport</code></td>
+ <td>Get slow datanode stats.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>getErasureCodingPolicies</code></td>
- <td>Gets the available erasure coding policies.</td>
+ <td><code>saveNamespace</code></td>
+ <td><code>saveNamespace</code></td>
+ <td>Save the namespace.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>removeErasureCodingPolicy</code></td>
- <td>Removes an erasure coding policy.</td>
+ <td><code>restoreFailedStorage</code></td>
+ <td><code>checkRestoreFailedStorage</code>, <code>enableRestoreFailedStorage</code>, <code>disableRestoreFailedStorage</code></td>
+ <td>Restore failed storage.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>enableErasureCodingPolicy</code></td>
- <td>Enables an erasure coding policy.</td>
+ <td><code>refreshNodes</code></td>
+ <td><code>refreshNodes</code></td>
+ <td>Refresh nodes.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>disableErasureCodingPolicy</code></td>
- <td>Disables an erasure coding policy.</td>
+ <td><code>setBalancerBandwidth</code></td>
+ <td><code>setBalancerBandwidth</code></td>
+ <td>Set balancer bandwidth.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>getEZForPath</code></td>
- <td>Gets the encryption zone for a path.</td>
+ <td><code>metaSave</code></td>
+ <td><code>metaSave</code></td>
+ <td>Meta save.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>listErasureCodingPolicies</code></td>
- <td>Lists all erasure coding policies.</td>
+ <td><code>rollingUpgrade</code></td>
+ <td><code>queryRollingUpgrade</code>, <code>startRollingUpgrade</code>, <code>finalizeRollingUpgrade</code></td>
+ <td>Rolling upgrade.</td>
<td>Unsupported</td>
</tr>
<tr>
- <td><code>listErasureCodingCodecs</code></td>
- <td>Lists all erasure coding codecs.</td>
- <td>Unsupported</td>
+ <td><code>finalizeUpgrade</code></td>
+ <td><code>finalizeUpgrade</code></td>
+ <td>Finalize upgrade.</td>
+ <td>Unsupported [7]</td>
</tr>
<tr>
- <td><code>getQuotaUsage</code></td>
- <td>Gets the quota usage for a path.</td>
- <td>Unsupported</td>
- </tr>
- <tr>
- <td><code>setQuotaByStorageType</code></td>
- <td>Sets the quota by storage type for a path.</td>
- <td>Unsupported</td>
- </tr>
- <tr>
- <td><code>getQuotaByStorageType</code></td>
- <td>Gets the quota by storage type for a path.</td>
- <td>Unsupported</td>
- </tr>
- <tr>
- <td><code>msync</code></td>
- <td>Flushes out the data in client’s user buffer.</td>
- <td>Unsupported</td>
- </tr>
- <tr>
- <td><code>satisfyStoragePolicy</code></td>
- <td>Satisfies the storage policy of a file.</td>
- <td>Unsupported</td>
+ <td><code>listOpenFiles</code></td>
+ <td><code>listOpenFiles</code></td>
+ <td>List open files.</td>
+ <td>Unsupported [7]</td>
</tr>
</tbody>
</table>
+<p><strong>Footnotes:</strong></p>
+<p>[1] Renaming files or directories across different buckets is not supported. Within a File System Optimized (FSO) bucket, rename is an atomic metadata operation. For legacy buckets, renaming a directory is a non-atomic operation that renames each file and subdirectory individually.</p>
+<p>[2] Deleting the filesystem root is not allowed. Recursively deleting a volume is also not supported.</p>
+<p>[3] Recursive listing is not supported at the root or volume level.</p>
+<p>[4] Ofs supports “linked buckets,” where one bucket serves as a reference to another. However, general-purpose symbolic links for files or directories are not supported.</p>
+<p>[5] Snapshots are supported at the bucket level only.</p>
+<p>[6] For operations related to encryption zones, erasure coding, snapshots, and quotas, use the corresponding Ozone bucket-level APIs instead.</p>
+<p>[7] Replace with <code>OzoneManagerProtocol.finalizeUpgrade()</code> and <code>OzoneManagerProtocol.listOpenFiles()</code>.</p>
+<p><em>The following audit logs are typically produced by HDFS internal services and are not relevant for application migration: <code>slowDataNodesReport</code>, <code>getDatanodeStorageReport</code>, <code>rollEditLog</code>, <code>renewDelegationToken</code>, <code>cancelDelegationToken</code>, <code>gcDeletedSnapshot</code>.</em>
+<em>The following audit logs are produced by the HDFS output stream: <code>getAdditionalBlock</code>, <code>getAdditionalDatanode</code>, <code>abandonBlock</code>, <code>completeFile</code>, <code>fsync</code>.</em>
+<em>The <code>getPreferredBlockSize</code> audit log is used in testing only.</em></p>
@@ -1195,7 +1425,7 @@ information.</p>
<footer class="footer">
<div class="container">
<span class="small text-muted">
- Version: 2.1.0-SNAPSHOT, Last Modified: July 9, 2025 <a class="hide-child link primary-color" href="https://github.com/apache/ozone/commit/1ad1b2d58ad49f08b2202f6106853a97c1eefb41">1ad1b2d58a</a>
+ Version: 2.1.0-SNAPSHOT, Last Modified: July 10, 2025 <a class="hide-child link primary-color" href="https://github.com/apache/ozone/commit/f7eb0104d3873001920ee8a1bc33304ab2a6e9ef">f7eb0104d3</a>
</span>
</div>
</footer>
diff --git a/docs/edge/interface/python.html b/docs/edge/interface/python.html
index 10c91026..835baba1 100644
--- a/docs/edge/interface/python.html
+++ b/docs/edge/interface/python.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/reconapi.html b/docs/edge/interface/reconapi.html
index eab07780..d46b9568 100644
--- a/docs/edge/interface/reconapi.html
+++ b/docs/edge/interface/reconapi.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/interface/s3.html b/docs/edge/interface/s3.html
index 344258f1..e7fcca84 100644
--- a/docs/edge/interface/s3.html
+++ b/docs/edge/interface/s3.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe.html b/docs/edge/recipe.html
index bb6158aa..a83dbc21 100644
--- a/docs/edge/recipe.html
+++ b/docs/edge/recipe.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe/boto3tutorial.html b/docs/edge/recipe/boto3tutorial.html
index 16e9e657..65748f0a 100644
--- a/docs/edge/recipe/boto3tutorial.html
+++ b/docs/edge/recipe/boto3tutorial.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe/botoclient.html b/docs/edge/recipe/botoclient.html
index 583347fd..1268c5f9 100644
--- a/docs/edge/recipe/botoclient.html
+++ b/docs/edge/recipe/botoclient.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe/prometheus.html b/docs/edge/recipe/prometheus.html
index fb615ffa..8d54eae7 100644
--- a/docs/edge/recipe/prometheus.html
+++ b/docs/edge/recipe/prometheus.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe/pyarrowtutorial.html b/docs/edge/recipe/pyarrowtutorial.html
index 707c41ea..3791728e 100644
--- a/docs/edge/recipe/pyarrowtutorial.html
+++ b/docs/edge/recipe/pyarrowtutorial.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe/pythonrequestsozonehttpfs.html b/docs/edge/recipe/pythonrequestsozonehttpfs.html
index f0e274df..12ff6102 100644
--- a/docs/edge/recipe/pythonrequestsozonehttpfs.html
+++ b/docs/edge/recipe/pythonrequestsozonehttpfs.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/recipe/sparkozonefsk8s.html b/docs/edge/recipe/sparkozonefsk8s.html
index df17915c..1f432229 100644
--- a/docs/edge/recipe/sparkozonefsk8s.html
+++ b/docs/edge/recipe/sparkozonefsk8s.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security.html b/docs/edge/security.html
index 175de8f0..7c579741 100644
--- a/docs/edge/security.html
+++ b/docs/edge/security.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/gdpr.html b/docs/edge/security/gdpr.html
index ca5765f6..2854ae68 100644
--- a/docs/edge/security/gdpr.html
+++ b/docs/edge/security/gdpr.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/protect-in-transit-traffic.html b/docs/edge/security/protect-in-transit-traffic.html
index 60303df5..ef154e25 100644
--- a/docs/edge/security/protect-in-transit-traffic.html
+++ b/docs/edge/security/protect-in-transit-traffic.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/secureozone.html b/docs/edge/security/secureozone.html
index e81fb571..f933e82d 100644
--- a/docs/edge/security/secureozone.html
+++ b/docs/edge/security/secureozone.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/securingdatanodes.html b/docs/edge/security/securingdatanodes.html
index adf1d91c..acd74052 100644
--- a/docs/edge/security/securingdatanodes.html
+++ b/docs/edge/security/securingdatanodes.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/securingozonehttp.html b/docs/edge/security/securingozonehttp.html
index 885494de..871e2238 100644
--- a/docs/edge/security/securingozonehttp.html
+++ b/docs/edge/security/securingozonehttp.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/securings3.html b/docs/edge/security/securings3.html
index c990ea3d..9a4f7294 100644
--- a/docs/edge/security/securings3.html
+++ b/docs/edge/security/securings3.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/securingtde.html b/docs/edge/security/securingtde.html
index af5e69a6..fc5c278a 100644
--- a/docs/edge/security/securingtde.html
+++ b/docs/edge/security/securingtde.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/securityacls.html b/docs/edge/security/securityacls.html
index 4aa9ac64..c9caaf2b 100644
--- a/docs/edge/security/securityacls.html
+++ b/docs/edge/security/securityacls.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/security/securitywithranger.html b/docs/edge/security/securitywithranger.html
index 1e43b89d..ffec4b1d 100644
--- a/docs/edge/security/securitywithranger.html
+++ b/docs/edge/security/securitywithranger.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/sitemap.xml b/docs/edge/sitemap.xml
index d9da6543..de24b281 100644
--- a/docs/edge/sitemap.xml
+++ b/docs/edge/sitemap.xml
@@ -4,7 +4,7 @@
<sitemap>
<loc>/en/sitemap.xml</loc>
- <lastmod>2025-07-09T22:31:24-07:00</lastmod>
+ <lastmod>2025-07-10T19:02:05-07:00</lastmod>
</sitemap>
diff --git a/docs/edge/start.html b/docs/edge/start.html
index 6921291a..c3390a20 100644
--- a/docs/edge/start.html
+++ b/docs/edge/start.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/start/fromsource.html b/docs/edge/start/fromsource.html
index 19ff6b79..f229f044 100644
--- a/docs/edge/start/fromsource.html
+++ b/docs/edge/start/fromsource.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/start/kubernetes.html b/docs/edge/start/kubernetes.html
index 619e6850..f3339011 100644
--- a/docs/edge/start/kubernetes.html
+++ b/docs/edge/start/kubernetes.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/start/minikube.html b/docs/edge/start/minikube.html
index d62cf173..1bd87103 100644
--- a/docs/edge/start/minikube.html
+++ b/docs/edge/start/minikube.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/start/onprem.html b/docs/edge/start/onprem.html
index 4dad7293..f3edf55e 100644
--- a/docs/edge/start/onprem.html
+++ b/docs/edge/start/onprem.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/start/runningviadocker.html b/docs/edge/start/runningviadocker.html
index 67424edd..4c4ed42e 100644
--- a/docs/edge/start/runningviadocker.html
+++ b/docs/edge/start/runningviadocker.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/start/startfromdockerhub.html b/docs/edge/start/startfromdockerhub.html
index 0b960487..3878ee0f 100644
--- a/docs/edge/start/startfromdockerhub.html
+++ b/docs/edge/start/startfromdockerhub.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools.html b/docs/edge/tools.html
index 047adb82..6831ab76 100644
--- a/docs/edge/tools.html
+++ b/docs/edge/tools.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/admin.html b/docs/edge/tools/admin.html
index f429f29c..e6f7fcf9 100644
--- a/docs/edge/tools/admin.html
+++ b/docs/edge/tools/admin.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/auditparser.html b/docs/edge/tools/auditparser.html
index ae41dbcc..b47d8f69 100644
--- a/docs/edge/tools/auditparser.html
+++ b/docs/edge/tools/auditparser.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/containerlogparser.html b/docs/edge/tools/containerlogparser.html
index 9232de2b..684a66a0 100644
--- a/docs/edge/tools/containerlogparser.html
+++ b/docs/edge/tools/containerlogparser.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/debug.html b/docs/edge/tools/debug.html
index 977adab8..626499a2 100644
--- a/docs/edge/tools/debug.html
+++ b/docs/edge/tools/debug.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/genconf.html b/docs/edge/tools/genconf.html
index e1a3db6f..e839eed4 100644
--- a/docs/edge/tools/genconf.html
+++ b/docs/edge/tools/genconf.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/logsinozone.html b/docs/edge/tools/logsinozone.html
index f680fe71..5d414cf6 100644
--- a/docs/edge/tools/logsinozone.html
+++ b/docs/edge/tools/logsinozone.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/tools/testtools.html b/docs/edge/tools/testtools.html
index 9610088d..e7c7e318 100644
--- a/docs/edge/tools/testtools.html
+++ b/docs/edge/tools/testtools.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/troubleshooting.html b/docs/edge/troubleshooting.html
index 54e4a9e1..f3585a4a 100644
--- a/docs/edge/troubleshooting.html
+++ b/docs/edge/troubleshooting.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="./feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="./feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/troubleshooting/om-ha-snapshot-installation.html b/docs/edge/troubleshooting/om-ha-snapshot-installation.html
index 26eebdef..ad93968d 100644
--- a/docs/edge/troubleshooting/om-ha-snapshot-installation.html
+++ b/docs/edge/troubleshooting/om-ha-snapshot-installation.html
@@ -301,6 +301,12 @@ s=d.getElementsByTagName('script')[0];
</li>
+ <li class="">
+
+ <a href="../feature/maintenance.html">Maintenance Mode</a>
+
+ </li>
+
<li class="">
<a href="../feature/multi-raft-support.html">Multi-Raft Support in Ozone</a>
diff --git a/docs/edge/zh/interface/ofs.html b/docs/edge/zh/interface/ofs.html
index 8e21ef44..d5270a50 100644
--- a/docs/edge/zh/interface/ofs.html
+++ b/docs/edge/zh/interface/ofs.html
@@ -478,7 +478,7 @@ ofs://omservice/tmp/key1
<p>或者使用 put 命令向桶中写入一个文件</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hdfs dfs -put /etc/hosts /volume1/bucket1/test</span></span></code></pre></div>
<p>有关更多用法,请参见: <a href="https://issues.apache.org/jira/secure/attachment/12987636/Design%20ofs%20v1.pdf">https://issues.apache.org/jira/secure/attachment/12987636/Design%20ofs%20v1.pdf</a></p>
-<h2 id="与-o3fshahahugoshortcode107s5hbhb-的区别">与 <a href="../../zh/interface/o3fs.html">o3fs</a> 的区别</h2>
+<h2 id="与-o3fshahahugoshortcode108s5hbhb-的区别">与 <a href="../../zh/interface/o3fs.html">o3fs</a> 的区别</h2>
<h3 id="创建文件">创建文件</h3>
<p>OFS 不允许直接在根目录或卷下创建键(文件)。
当用户尝试这样做时,他们将收到一个错误消息:</p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org