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 b98b8b50 [auto] Generated docs from Apache Ozone master 
5fdf2d2d0bd0ac0edb1fd1f1bb1d382e17e0584c
b98b8b50 is described below

commit b98b8b50e87fad0d78777561942a936382fad735
Author: Github Actions <[email protected]>
AuthorDate: Thu Oct 16 12:47:09 2025 +0000

    [auto] Generated docs from Apache Ozone master 
5fdf2d2d0bd0ac0edb1fd1f1bb1d382e17e0584c
---
 docs/edge/design.html                              |   10 +
 docs/edge/design/distributed-tracing-flow.png      |  Bin 0 -> 589655 bytes
 .../design/distributed-tracing-opentelemetry.html  | 1063 ++++++++++++++++++++
 docs/edge/design/distributed-tracing-sample.png    |  Bin 0 -> 292240 bytes
 docs/edge/design/index.xml                         |    9 +-
 docs/edge/en/sitemap.xml                           |    5 +-
 docs/edge/index.xml                                |    7 +
 docs/edge/interface/ofs.html                       |    2 +-
 docs/edge/sitemap.xml                              |    2 +-
 docs/edge/zh/interface/ofs.html                    |    2 +-
 10 files changed, 1095 insertions(+), 5 deletions(-)

diff --git a/docs/edge/design.html b/docs/edge/design.html
index 3fd16d63..17ceffe8 100644
--- a/docs/edge/design.html
+++ b/docs/edge/design.html
@@ -593,6 +593,16 @@ s=d.getElementsByTagName('script')[0];
                         </thead>
                         <tbody>
                         
+                        <tr>
+                            <td>2025-09-19</td>
+                            <td>
+                                <a 
href="https://issues.apache.org/jira/browse/HDDS-13679";>HDDS-13679</a>
+                            </td>
+                            <td><a 
href="./design/distributed-tracing-opentelemetry.html">Distributed Tracing 
using OpenTelemetry for Ozone</a></td>
+                            <td>Use of OpenTelemetry for distributed tracing 
in Ozone.</td>
+                            <td>draft</td>
+                        </tr>
+                        
                         <tr>
                             <td>2025-08-27</td>
                             <td>
diff --git a/docs/edge/design/distributed-tracing-flow.png 
b/docs/edge/design/distributed-tracing-flow.png
new file mode 100644
index 00000000..812169a6
Binary files /dev/null and b/docs/edge/design/distributed-tracing-flow.png 
differ
diff --git a/docs/edge/design/distributed-tracing-opentelemetry.html 
b/docs/edge/design/distributed-tracing-opentelemetry.html
new file mode 100644
index 00000000..b8fa7e83
--- /dev/null
+++ b/docs/edge/design/distributed-tracing-opentelemetry.html
@@ -0,0 +1,1063 @@
+
+
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    
+    <meta name="description" content="Apache Ozone Documentation">
+
+    <title>Documentation for Apache Ozone</title>
+
+    
+    <link href="../css/bootstrap.min.css" rel="stylesheet">
+
+    
+    <link href="../css/ozonedoc.css" rel="stylesheet">
+
+    
+    
+    <link href="../swagger-resources/swagger-ui.css" rel="stylesheet">
+
+    
+    <script>
+      var _paq = window._paq = window._paq || [];
+      
+
+       
+      _paq.push(['disableCookies']);
+      
+
+      _paq.push(['trackPageView']);
+      _paq.push(['enableLinkTracking']);
+      (function() {
+        var u="//analytics.apache.org/";
+        _paq.push(['setTrackerUrl', u+'matomo.php']);
+        _paq.push(['setSiteId', '34']);
+        var d=document, g=d.createElement('script'),
+s=d.getElementsByTagName('script')[0];
+        g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
+      })();
+    </script>
+    
+
+  </head>
+
+
+  <body>
+
+<nav class="navbar navbar-inverse navbar-fixed-top">
+  <div class="container-fluid">
+    <div class="navbar-header">
+      <button type="button" class="navbar-toggle collapsed" 
data-toggle="collapse" data-target="#sidebar" aria-expanded="false" 
aria-controls="navbar">
+        <span class="sr-only">Toggle navigation</span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      <a href="../index.html" class="navbar-left ozone-logo">
+        <img src="../ozone-logo-small.png"/>
+      </a>
+      <a class="navbar-brand hidden-xs" href="../index.html">
+        Apache Ozone/HDDS Documentation
+      </a>
+      <a class="navbar-brand visible-xs-inline" href="#">Apache Ozone</a>
+    </div>
+    <div id="navbar" class="navbar-collapse collapse">
+      <ul class="nav navbar-nav navbar-right">
+        <li><a href="https://github.com/apache/ozone";>Source</a></li>
+        <li><a href="https://ozone.apache.org";>Apache Ozone</a></li>
+        <li><a href="https://apache.org";>ASF</a></li>
+      </ul>
+    </div>
+  </div>
+</nav>
+
+    <div class="container-fluid">
+      <div class="row">
+        
+<div class="col-sm-2 col-md-2 sidebar" id="sidebar">
+  <ul class="nav nav-sidebar">
+    
+    
+        
+            <li class="">
+                
+                   <a href="../index.html">
+                
+
+                    
+                    <span>An Introduction to Apache Ozone</span>
+                </a>
+            </li>
+        
+    
+        
+            <li class="">
+                <a href="../start.html">
+                    
+                    <span>Getting Started</span>
+                </a>
+                <ul class="nav">
+                    
+                        <li class="">
+                           
+                           <a 
href="../start/productiondeployment.html">Production Deployment</a>
+                           
+                        </li>
+                    
+                </ul>
+            </li>
+        
+    
+        
+            <li class="">
+                <a href="../concept.html">
+                    
+                    <span>Architecture</span>
+                </a>
+                <ul class="nav">
+                    
+                        <li class="">
+                           
+                           <a href="../concept/overview.html">Overview</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                               <a href="../concept/ozonemanager.html">
+                                 
+                                 <span>Ozone Manager</span>
+                               </a>
+                               <ul class="nav">
+                               
+                                  <li class="">
+                                     <a 
href="../concept/volumesbucketskeys.html">Volumes, Buckets, and Keys</a>
+                                  </li>
+                               
+                               </ul>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../concept/storagecontainermanager.html">Storage Container Manager</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/containers.html">Containers</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/datanodes.html">Datanodes</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/ozones3gateway.html">Ozone S3 
Gateway</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/recon.html">Recon</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/networkports.html">Network 
Ports</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/comparison.html">Comparison 
with Other Storage Technologies</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../concept/rocksdb.html">RocksDB in Apache 
Ozone</a>
+                           
+                        </li>
+                    
+                </ul>
+            </li>
+        
+    
+        
+            <li class="">
+                <a href="../feature.html">
+                    
+                    <span>Features</span>
+                </a>
+                <ul class="nav">
+                    
+                        <li class="">
+                           
+                           <a 
href="../feature/decommission.html">Decommissioning</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/om-ha.html">OM High 
Availability</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/erasurecoding.html">Ozone 
Erasure Coding</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                               <a href="../feature/snapshot.html">
+                                 
+                                 <span>Ozone Snapshot</span>
+                               </a>
+                               <ul class="nav">
+                               
+                                  <li class="">
+                                     <a 
href="../feature/snapshot-configuration-properties.html">Snapshot Configuration 
Properties</a>
+                                  </li>
+                               
+                               </ul>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/scm-ha.html">SCM High 
Availability</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../feature/streaming-write-pipeline.html">Streaming Write Pipeline</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/dn-merge-rocksdb.html">Merge 
Container RocksDB in DN</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/prefixfso.html">Prefix based 
File System Optimization</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/topology.html">Topology 
awareness</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/quota.html">Quota in Ozone</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/recon.html">Recon Server</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../feature/observability.html">Observability</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../feature/nonrolling-upgrade.html">Non-Rolling Upgrades and 
Downgrades</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                               <a href="../feature/s3-multi-tenancy.html">
+                                 
+                                 <span>S3 Multi-Tenancy</span>
+                               </a>
+                               <ul class="nav">
+                               
+                                  <li class="">
+                                     <a 
href="../feature/s3-multi-tenancy-setup.html">Setup</a>
+                                  </li>
+                               
+                                  <li class="">
+                                     <a 
href="../feature/s3-tenant-commands.html">Tenant commands</a>
+                                  </li>
+                               
+                                  <li class="">
+                                     <a 
href="../feature/s3-multi-tenancy-access-control.html">Access Control</a>
+                                  </li>
+                               
+                               </ul>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../feature/reconfigurability.html">Reconfigurability</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../feature/containerbalancer.html">Container Balancer</a>
+                           
+                        </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>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../feature/trash.html">Trash</a>
+                           
+                        </li>
+                    
+                </ul>
+            </li>
+        
+    
+        
+            <li class="">
+                <a href="../integration.html">
+                    
+                    <span>Application Integrations</span>
+                </a>
+                <ul class="nav">
+                    
+                        <li class="">
+                           
+                           <a href="../integration/distcp.html">Hadoop 
DistCp</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../integration/hive.html">Hive</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../integration/impala.html">Impala</a>
+                           
+                        </li>
+                    
+                </ul>
+            </li>
+        
+    
+        
+            <li class="">
+                <a href="../interface.html">
+                    
+                    <span>Client Interfaces</span>
+                </a>
+                <ul class="nav">
+                    
+                        <li class="">
+                           
+                           <a href="../interface/ofs.html">Ofs (Hadoop 
compatible)</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/o3fs.html">O3fs (Hadoop 
compatible)</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                               <a href="../interface/s3.html">
+                                 
+                                 <span>S3 Protocol</span>
+                               </a>
+                               <ul class="nav">
+                               
+                                  <li class="">
+                                     <a 
href="../interface/cyberduckozones3.html">Accessing Ozone S3 via CyberDuck</a>
+                                  </li>
+                               
+                               </ul>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/cli.html">Command Line 
Interface</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/reconapi.html">Recon API</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/javaapi.html">Java API</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/python.html">Accessing Apache 
Ozone from Python</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/csi.html">CSI Protocol</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/httpfs.html">HttpFS 
Gateway</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../interface/native-cpp.html">Native 
C/C&#43;&#43; Client Access to Ozone</a>
+                           
+                        </li>
+                    
+                </ul>
+            </li>
+        
+    
+        
+            <li class="">
+                <a href="../security.html">
+                    
+                    <span>Security</span>
+                </a>
+                <ul class="nav">
+                    
+                        <li class="">
+                           
+                           <a href="../security/secureozone.html">Securing 
Ozone</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../security/securingtde.html">Transparent 
Data Encryption</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../security/gdpr.html">GDPR in Ozone</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../security/securingdatanodes.html">Securing Datanodes</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../security/securingozonehttp.html">Securing HTTP</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../security/securings3.html">Securing 
S3</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a href="../security/securityacls.html">Ozone 
ACLs</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../security/protect-in-transit-traffic.html">Protect In-Transit 
Traffic</a>
+                           
+                        </li>
+                    
+                        <li class="">
+                           
+                           <a 
href="../security/securitywithranger.html">Apache Ranger</a>
+                           
+                        </li>
+                    
+                </ul>
+            </li>
+        
+    
+        
+            <li class="">
+                
+                   <a href="../tools.html">
+                
+
+                    
+                    <span>Tools</span>
+                </a>
+            </li>
+        
+    
+        
+            <li class="">
+                
+                   <a href="../recipe.html">
+                
+
+                    
+                    <span>Recipes</span>
+                </a>
+            </li>
+        
+    
+        
+            <li class="">
+                
+                   <a href="../troubleshooting.html">
+                
+
+                    
+                    <span>Troubleshooting</span>
+                </a>
+            </li>
+        
+    
+    <li><a href="../design.html"><span><b>Design docs</b></span></a></li>
+    <li class="visible-xs"><a href="#">References</a>
+    <ul class="nav">
+        <li><a href="https://github.com/apache/ozone";><span class="glyphicon 
glyphicon-new-window" aria-hidden="true"></span> Source</a></li>
+        <li><a href="https://ozone.apache.org";><span class="glyphicon 
glyphicon-new-window" aria-hidden="true"></span> Apache Ozone</a></li>
+        <li><a href="https://apache.org";><span class="glyphicon 
glyphicon-new-window" aria-hidden="true"></span> ASF</a></li>
+    </ul></li>
+  </ul>
+
+</div>
+
+        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 
main-content">
+            <div class="col-md-9">
+                <h1><a 
href="https://issues.apache.org/jira/browse/HDDS-13679";>[HDDS-13679]</a> 
Distributed Tracing using OpenTelemetry for Ozone (draft) </h1>
+                <div><i>Authors: </i><div 
class="pull-right">2025-09-19</div></div>
+                <p>&nbsp</p>
+
+                <div class="panel panel-success">
+                    <div class="panel-heading">Summary</div>
+                    <div class="panel-body">
+                        Use of OpenTelemetry for distributed tracing in Ozone.
+                    </div>
+                </div>
+
+              <!--
+  Licensed 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://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. See accompanying LICENSE file.
+-->
+<h1 id="distributed-tracing-with-opentelemetry">Distributed Tracing with 
OpenTelemetry</h1>
+<h1 id="1-introduction">1. Introduction</h1>
+<p>Ozone currently utilizes OpenTracing with Jaeger for distributed
+tracing. However, the OpenTracing project is deprecated and no longer
+actively supported. This document proposes migrating from OpenTracing to
+OpenTelemetry, which is a standardized and actively maintained project
+supporting various tracing tools, including Jaeger.</p>
+<p>The primary scope of this document is to detail the integration of
+OpenTelemetry for traces within the Ozone ecosystem.</p>
+<h1 id="2-opentelemetry-integration">2. OpenTelemetry Integration</h1>
+<p>This section outlines key OpenTelemetry concepts and their application
+within Ozone.</p>
+<h2 id="21-opentelemetry-concepts">2.1. OpenTelemetry Concepts</h2>
+<h3 id="211-context">2.1.1. Context</h3>
+<p>Context in OpenTelemetry keeps span and other information in the
+context. Context is set to thread-local using 
<code>context.makeCurrent()</code>. And
+the same can be retrieved using <code>context.current()</code>.</p>
+<p><strong>Context Creation:</strong></p>
+<ul>
+<li>Creating a span with noParent().</li>
+<li>Importing a trace from an external request.</li>
+<li>Manually creating a Context with parameters:</li>
+</ul>
+<pre tabindex="0"><code>// Manual trace context creation
+Context rootContext = Context.root();
+Context newContextFromRoot = rootContext.with(myKey, &#34;anotherValue&#34;);
+</code></pre><p><strong>Inter-thread Transfer:</strong> Context can be 
transferred between threads by
+explicitly setting the context in the target thread using
+context.makeCurrent().</p>
+<p><strong>Inter-process Transfer</strong>: Context needs to be retrieved and 
set to
+headers for HTTP or message body in gRpc to transfer. Further details are
+provided in <strong><a 
href="../design/distributed-tracing-opentelemetry.html#216-trace-propagation">Trace
 Propagation</a></strong>.</p>
+<h3 id="212-span">2.1.2. Span</h3>
+<p>An OpenTelemetry span represents a single, logical unit of work within a
+distributed system. It captures essential details of an operation.</p>
+<ul>
+<li>Name</li>
+<li>Parent span ID (absent for root spans)</li>
+<li>Start and End Timestamps</li>
+<li>Span Context</li>
+<li>Attributes</li>
+<li>Span Events</li>
+<li>Span Links</li>
+<li>Span Status</li>
+</ul>
+<p>A span is initiated with <code>startSpan()</code> and concluded with 
<code>end()</code>. Spans are
+organized hierarchically within a context, allowing for the creation of
+child spans. For a span to be active and allow the creation of child
+spans, it must be set to the current context using 
<code>span.makeCurrent()</code>.</p>
+<p><strong>Example Span Structure:</strong></p>
+<table>
+  <thead>
+      <tr>
+          <th>Field</th>
+          <th>Description</th>
+      </tr>
+  </thead>
+  <tbody>
+      <tr>
+          <td>name</td>
+          <td>The name of the operation.</td>
+      </tr>
+      <tr>
+          <td>context</td>
+          <td>Contains trace_id and span_id.</td>
+      </tr>
+      <tr>
+          <td>parent_id</td>
+          <td>The ID of the parent span, or null for a root span.</td>
+      </tr>
+      <tr>
+          <td>start_time</td>
+          <td>Timestamp when the span began.</td>
+      </tr>
+      <tr>
+          <td>end_time</td>
+          <td>Timestamp when the span ended.</td>
+      </tr>
+      <tr>
+          <td>attributes</td>
+          <td>Key-value pairs providing additional details about the span.</td>
+      </tr>
+      <tr>
+          <td>events</td>
+          <td>An array of events that occurred during the span&rsquo;s 
lifetime. Each event has a name, timestamp, and optional attributes.</td>
+      </tr>
+  </tbody>
+</table>
+<p>Upon completion (<code>end()</code>), span information is transmitted to the
+OpenTelemetry Collector. This transmission occurs in batches for
+performance optimization.</p>
+<p><strong>Sample:</strong></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-json" data-lang="json"><span style="display:flex;"><span>{
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;name&#34;</span>: <span 
style="color:#e6db74">&#34;hello&#34;</span>,
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;context&#34;</span>: {
+</span></span><span style="display:flex;"><span>    <span 
style="color:#f92672">&#34;trace_id&#34;</span>: <span 
style="color:#e6db74">&#34;5b8aa5a2d2c872e8321cf37308d69df2&#34;</span>,
+</span></span><span style="display:flex;"><span>    <span 
style="color:#f92672">&#34;span_id&#34;</span>: <span 
style="color:#e6db74">&#34;051581bf3cb55c13&#34;</span>
+</span></span><span style="display:flex;"><span>  },
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;parent_id&#34;</span>: <span 
style="color:#66d9ef">null</span>,
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;start_time&#34;</span>: <span 
style="color:#e6db74">&#34;2022-04-29T18:52:58.114201Z&#34;</span>,
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;end_time&#34;</span>: <span 
style="color:#e6db74">&#34;2022-04-29T18:52:58.114687Z&#34;</span>,
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;attributes&#34;</span>: {
+</span></span><span style="display:flex;"><span>    <span 
style="color:#f92672">&#34;http.route&#34;</span>: <span 
style="color:#e6db74">&#34;some_route1&#34;</span>
+</span></span><span style="display:flex;"><span>  },
+</span></span><span style="display:flex;"><span>  <span 
style="color:#f92672">&#34;events&#34;</span>: [
+</span></span><span style="display:flex;"><span>    {
+</span></span><span style="display:flex;"><span>      <span 
style="color:#f92672">&#34;name&#34;</span>: <span 
style="color:#e6db74">&#34;Guten Tag!&#34;</span>,
+</span></span><span style="display:flex;"><span>      <span 
style="color:#f92672">&#34;timestamp&#34;</span>: <span 
style="color:#e6db74">&#34;2022-04-29T18:52:58.114561Z&#34;</span>,
+</span></span><span style="display:flex;"><span>      <span 
style="color:#f92672">&#34;attributes&#34;</span>: {
+</span></span><span style="display:flex;"><span>        <span 
style="color:#f92672">&#34;event_attributes&#34;</span>: <span 
style="color:#ae81ff">1</span>
+</span></span><span style="display:flex;"><span>      }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>  ]
+</span></span><span style="display:flex;"><span>}
+</span></span></code></pre></div><h3 id="213-scope">2.1.3. Scope</h3>
+<p>Scope in OpenTelemetry defines which span is considered &ldquo;active&rdquo;
+within a given thread or execution context.</p>
+<ul>
+<li>
+<p><code>context.makeCurrent()</code> returns a Scope object, setting the 
context as thread-local. This context can be retrieved via 
<code>Context.current()</code>.</p>
+</li>
+<li>
+<p><code>span.makeCurrent() </code>returns a Scope object, setting the span 
within the context. This span can be retrieved via 
<code>Span.current()</code>.</p>
+</li>
+</ul>
+<p>It is crucial to close the <code>Scope</code> object to release associated 
memory from the context or thread-local storage.</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-java" data-lang="java"><span style="display:flex;"><span><span 
style="color:#66d9ef">try</span> (Scope scope <span 
style="color:#f92672">=</span> context.<span 
style="color:#a6e22e">makeCurrent</span>()) {
+</span></span><span style="display:flex;"><span>    Span span; <span 
style="color:#75715e">// = get the space from context</span>
+</span></span><span style="display:flex;"><span>    <span 
style="color:#66d9ef">try</span> (Scope spanScope <span 
style="color:#f92672">=</span> span.<span 
style="color:#a6e22e">makeCurrent</span>()) {
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}
+</span></span></code></pre></div><h3 id="214-attributes">2.1.4. Attributes</h3>
+<p>An OpenTelemetry span can include various attributes, which are
+key-value pairs that provide additional information about the operation
+being traced. Attributes enhance the observability of spans by adding
+context and detail that are crucial for debugging and performance
+analysis. They can represent anything from HTTP method and URL to
+database query parameters and user IDs.</p>
+<p><strong>Key Characteristics of Attributes:</strong></p>
+<ul>
+<li>
+<p><strong>Key-Value Pairs:</strong> Attributes are always stored as key-value 
pairs. Keys are typically strings,
+and values can be strings, booleans, numbers, or arrays of these types.</p>
+</li>
+<li>
+<p><strong>Semantic Conventions:</strong> OpenTelemetry defines a set of 
semantic conventions for common attributes (e.g., http.method,
+db.statement, error.type). Adhering to these conventions ensures consistency 
and improves compatibility with various tracing backends.</p>
+</li>
+<li>
+<p><strong>Immutability:</strong> Once set on a span, attributes are generally 
immutable. While new attributes can be added,
+existing ones are not typically modified.</p>
+</li>
+</ul>
+<p><strong>Usage:</strong></p>
+<p>Attributes are typically added to a span during its creation or at any
+point before it ends.</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-java" data-lang="java"><span style="display:flex;"><span>Span 
span <span style="color:#f92672">=</span> tracer.<span 
style="color:#a6e22e">spanBuilder</span>(<span 
style="color:#e6db74">&#34;myOperation&#34;</span>).<span 
style="color:#a6e22e">startSpan</span>();
+</span></span><span style="display:flex;"><span><span 
style="color:#66d9ef">try</span> (Scope scope <span 
style="color:#f92672">=</span> span.<span 
style="color:#a6e22e">makeCurrent</span>()) {
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">setAttribute</span>(<span 
style="color:#e6db74">&#34;http.method&#34;</span>, <span 
style="color:#e6db74">&#34;GET&#34;</span>);
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">setAttribute</span>(<span 
style="color:#e6db74">&#34;http.url&#34;</span>, <span 
style="color:#e6db74">&#34;/api/v1/data&#34;</span>);
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">setAttribute</span>(<span 
style="color:#e6db74">&#34;user.id&#34;</span>, <span 
style="color:#e6db74">&#34;12345&#34;</span>);
+</span></span><span style="display:flex;"><span>    <span 
style="color:#75715e">// ... application logic ...</span>
+</span></span><span style="display:flex;"><span>} <span 
style="color:#66d9ef">finally</span> {
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">end</span>();
+</span></span><span style="display:flex;"><span>}
+</span></span></code></pre></div><p>Attributes are essential for filtering, 
querying, and analyzing traces
+in a tracing visualization tool like Jaeger, allowing developers to
+quickly pinpoint issues or understand the behavior of their distributed
+applications.</p>
+<h3 id="215-events">2.1.5. Events</h3>
+<p>Events are timestamped messages that provide a more granular view of
+what happened within a span&rsquo;s lifetime. They can be used to mark
+significant moments, record errors, or capture specific data points
+during an operation.</p>
+<p><strong>Key Characteristics of Events:</strong></p>
+<ul>
+<li>
+<p><strong>Timestamped:</strong> Every event is associated with a specific 
timestamp, indicating when it occurred within the span.</p>
+</li>
+<li>
+<p><strong>Name:</strong> Each event has a descriptive name that summarizes 
what happened (e.g., &ldquo;Cache hit,&rdquo; &ldquo;Database query 
started,&rdquo; &ldquo;Error&rdquo;).</p>
+</li>
+<li>
+<p><strong>Attributes (Optional):</strong> Events can also include key-value 
attributes to provide additional context, similar to span attributes.</p>
+</li>
+</ul>
+<p><strong>Usage:</strong></p>
+<p>Events are added to a span at the exact point in the code where the
+notable occurrence happens.</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-java" data-lang="java"><span style="display:flex;"><span>Span 
span <span style="color:#f92672">=</span> tracer.<span 
style="color:#a6e22e">spanBuilder</span>(<span 
style="color:#e6db74">&#34;myOperation&#34;</span>).<span 
style="color:#a6e22e">startSpan</span>();
+</span></span><span style="display:flex;"><span><span 
style="color:#66d9ef">try</span> (Scope scope <span 
style="color:#f92672">=</span> span.<span 
style="color:#a6e22e">makeCurrent</span>()) {
+</span></span><span style="display:flex;"><span>    <span 
style="color:#75715e">// ... application logic ...</span>
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">addEvent</span>(<span 
style="color:#e6db74">&#34;Processing started&#34;</span>);
+</span></span><span style="display:flex;"><span>    <span 
style="color:#75715e">// ... more application logic ...</span>
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">addEvent</span>(<span 
style="color:#e6db74">&#34;Intermediate data generated&#34;</span>, 
Attributes.<span style="color:#a6e22e">of</span>(<span 
style="color:#e6db74">&#34;data.size&#34;</span>, 1024L));
+</span></span><span style="display:flex;"><span>    <span 
style="color:#75715e">// ... further application logic ...</span>
+</span></span><span style="display:flex;"><span>} <span 
style="color:#66d9ef">finally</span> {
+</span></span><span style="display:flex;"><span>    span.<span 
style="color:#a6e22e">end</span>();
+</span></span><span style="display:flex;"><span>}
+</span></span></code></pre></div><p>Events are particularly useful for 
understanding the sequence of
+operations within a span, especially when debugging complex workflows or
+analyzing performance characteristics at a micro-level.</p>
+<h3 id="216-trace-propagation">2.1.6. Trace Propagation</h3>
+<p>Trace propagation facilitates the transfer of trace context information
+within and across service boundaries.</p>
+<p><strong>Between Threads (within a single process):</strong></p>
+<ul>
+<li>
+<p><strong>Manual Transfer:</strong> The Context object can be manually 
transferred to a new thread, and makeCurrent() can be called on that thread.</p>
+</li>
+<li>
+<p><strong>Context Wrapping for Executor Services:</strong> 
Context.taskWrapping() can be used to wrap an ExecutorService,
+automatically propagating context to tasks executed by the service.</p>
+</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-java" data-lang="java"><span 
style="display:flex;"><span>ExecutorService wrappedExecutor <span 
style="color:#f92672">=</span>
+</span></span><span style="display:flex;"><span>Context.<span 
style="color:#a6e22e">taskWrapping</span>(Executors.<span 
style="color:#a6e22e">newFixedThreadPool</span>(1));
+</span></span></code></pre></div><p><strong>Across a Network (between 
different services):</strong></p>
+<ul>
+<li>
+<p><strong>W3CTraceContextPropagator:</strong> This standard mechanism encodes 
trace information (Trace ID, Span ID, etc.)
+for transmission over a network, typically using HTTP headers. This can be 
used to write to StringBuilder or other output.</p>
+</li>
+<li>
+<p><strong>gRPC Integration for Ozone:</strong> For gRPC communications in 
Ozone, trace context can be encoded into a string and embedded within a
+Proto field (e.g., &ldquo;traceId&rdquo;). The receiving server can then 
decode this string back into a <code>Context</code> object to continue the
+trace using <code>W3CTraceContextPropagator</code>.</p>
+</li>
+</ul>
+<h3 id="217-trace-failure-handling">2.1.7. Trace Failure Handling</h3>
+<p>Failures within a traced operation can be recorded within the span by
+setting its status. The <code>SpanStatus</code> enum provides predefined 
states like
+<code>OK</code>, <code>ERROR</code>, and <code>UNSET</code>. Setting the 
status explicitly marks the span&rsquo;s
+outcome, which is critical for quick identification of issues in tracing
+UIs. <code>UNSET</code> status is treated as success.</p>
+<p>Normally below can be done to report failure:</p>
+<ol>
+<li>
+<p><strong>Adding Events:</strong> <code>span.addEvent(&quot;Failure has 
occurred&quot; + ex.getMessage)</code> can be used to log a specific failure
+event with a descriptive message. This is timestamped information when failure 
occurred.</p>
+</li>
+<li>
+<p><strong>Setting Status:</strong> 
<code>span.setStatus(StatusCode.ERROR)</code> explicitly marks the span as 
having encountered an error.</p>
+</li>
+</ol>
+<p><strong>Alternative</strong>, <code>span.setStatus(StatusCode.ERROR, 
&quot;error message&quot;)</code> can be used but it will lack the 
timestamp.</p>
+<p>Correctly setting the span status helps in filtering and aggregating error 
traces, providing a clear overview
+of system health and facilitating debugging efforts.</p>
+<h2 id="22-integration-with-ozone">2.2. Integration with Ozone</h2>
+<p>
+
+<img src="distributed-tracing-flow.png" alt='distributed-tracing-flow.png'  
class="img-responsive" /></p>
+<p>The OpenTelemetry SDK is integrated with Ozone Manager, 
leveraging<code>Context</code>, <code>Span</code>, and <code>Scope</code> 
concepts,
+and configured to send traces to a Collector.</p>
+<p>Ozone utilizes OTLP (OpenTelemetry Protocol) to transmit traces to a 
Collector, which can be an OpenTelemetry Collector,
+Jaeger, or any other collector supporting OpenTelemetry standards.</p>
+<p>For Ozone, data can be <strong>exported directly to the Jaeger 
collector</strong>, as no processing is required.
+But the above approach can help in exporting to different vendors in multiple 
formats for visualization and other purposes.</p>
+<p>The following environment variables are used for Collector 
configuration:</p>
+<ul>
+<li>OTEL_EXPORTER_OTLP_ENDPOINT: Specifies the endpoint of the OTLP receiver. 
Default: http://localhost:4317.</li>
+<li>OTEL_TRACES_SAMPLER_ARG: Configures the trace sampler argument. Default: 
1.0 (all traces are reported).</li>
+</ul>
+<h2 id="23-how-opentelemetry-tracing-works">2.3. How OpenTelemetry Tracing 
Works</h2>
+<p>Tracing in OpenTelemetry involves a hierarchy of spans. A parent span
+(e.g., span1) can contain one or more child spans (e.g., span2). Upon
+completion, each span sends its details to the configured Collector
+endpoint. This process is batched by the SDK for performance.</p>
+<p>Scenarios:</p>
+<ul>
+<li><strong>Single-Node (Parent-Child):</strong></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-java" data-lang="java"><span 
style="display:flex;"><span>span1.<span style="color:#a6e22e">start</span>()
+</span></span><span style="display:flex;"><span>    span2.<span 
style="color:#a6e22e">start</span>()
+</span></span><span style="display:flex;"><span>      <span 
style="color:#75715e">// application code</span>
+</span></span><span style="display:flex;"><span>    span2.<span 
style="color:#a6e22e">end</span>() <span 
style="color:#960050;background-color:#1e0010">→</span> Sends span information 
to <span style="color:#a6e22e">Collector</span> (1)
+</span></span><span style="display:flex;"><span>span1.<span 
style="color:#a6e22e">end</span>() <span 
style="color:#960050;background-color:#1e0010">→</span> Sends span information 
to <span style="color:#a6e22e">Collector</span> (2)
+</span></span></code></pre></div><ul>
+<li><strong>Two-Node (Parent-Child with gRPC):</strong></li>
+</ul>
+<blockquote>
+<p><strong>Node 1:</strong></p>
+<pre tabindex="0"><code> span1.start()
+   Generate trace context as String
+   Add to gRPC Message and send message, then wait
+</code></pre><blockquote>
+<p><strong>Node 2:</strong></p>
+<pre tabindex="0"><code>Receive gRPC message and retrieve trace context as 
String
+Convert to Context object and create span2 as child
+
+span2.start()
+       // application code
+span2.end() → Sends span information to Collector (1)
+</code></pre></blockquote>
+<p><strong>Node 1:</strong></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-java" data-lang="java"><span 
style="display:flex;"><span>span1.<span style="color:#a6e22e">end</span>() 
<span style="color:#960050;background-color:#1e0010">→</span> Sends span 
information to <span style="color:#a6e22e">Collector</span> (2)
+</span></span></code></pre></div></blockquote>
+<h1 id="3-tracing-hierarchy">3. Tracing Hierarchy</h1>
+<p>The current tracing implementation in Ozone initiates traces for:</p>
+<ul>
+<li>Every remote call from the Ozone client and shell.</li>
+<li>Ozone Manager&rsquo;s <code>get blocks</code> calls to SCM.</li>
+<li>Remote calls from the Ozone client to DataNode for put block.</li>
+</ul>
+<p>This approach often results in disjoint traces or limited hierarchical
+representation, which does not provide a comprehensive view of
+end-to-end operational flows.</p>
+<h2 id="31-goal-for-enhanced-call-hierarchy">3.1. Goal for Enhanced Call 
Hierarchy</h2>
+<p>The objective is to unify disjoint remote calls into a single, cohesive
+parent trace, providing a complete flow representation. Specific goals
+include:</p>
+<ul>
+<li>Combining all disjoint remote calls from the client into a single parent 
trace (e.g., for file create, write, and commit operations).</li>
+<li>Including communication with SCM during file creation or allocation 
flows.</li>
+<li>Integrating DataNode write operations into the same end-to-end trace.</li>
+</ul>
+<p><strong>Example End-to-End Trace Flow:</strong></p>
+<ol>
+<li>Application starts &ldquo;create key&rdquo; operation
+<ol>
+<li>Ozone client &ldquo;create key&rdquo;
+<ol>
+<li>Ozone Manager receives &ldquo;create key&rdquo;
+<ul>
+<li>Executed on all 3 Ozone Managers</li>
+</ul>
+</li>
+</ol>
+</li>
+<li>Ozone client &ldquo;put block for write&rdquo;
+<ul>
+<li>DataNode &ldquo;put block&rdquo;</li>
+</ul>
+</li>
+<li>Ozone Client &ldquo;commit key&rdquo;
+<ol>
+<li>Ozone Manager receives &ldquo;commit key&rdquo;
+<ul>
+<li>Executed on all 3 Ozone Managers</li>
+</ul>
+</li>
+</ol>
+</li>
+</ol>
+</li>
+<li>Finishes &ldquo;create key&rdquo; operation</li>
+</ol>
+<p>
+
+<img src="distributed-tracing-sample.png" alt='distributed-tracing-sample.png' 
 class="img-responsive" /></p>
+<h2 id="32-integration-of-more-flows">3.2. Integration of More Flows</h2>
+<p>For comprehensive performance analysis and debugging, tracing can be
+extended to various additional flows:</p>
+<ul>
+<li><strong>DataNode Heartbeat to SCM:</strong> Trace recording should only 
occur when the DataNode initiates the trace context.</li>
+<li><strong>Recon:</strong> Trace all requests from the Recon UI to Ozone 
components, such as the Recon Server.</li>
+<li><strong>Internal Services (e.g., OM connecting to SCM):</strong> These 
calls, initiated under a timer thread, should also be traced.</li>
+</ul>
+<p>For internal Ozone calls, the trace should be initiated by the caller as a 
<code>Client</code> span, not a <code>Server</code> span,
+as these are not remote calls crossing service boundaries but rather 
operations controlled within Ozone components.</p>
+<h2 id="33-use-case">3.3. Use Case</h2>
+<p>This enhanced tracing capability can be integrated with applications such 
as HBase, Iceberg, and Impala, which support OpenTelemetry.
+This enables detailed visualization of time taken at each step of an 
operation, facilitating the identification of performance bottlenecks.</p>
+<h1 id="4-opentelemetry-span-kind">4. OpenTelemetry Span Kind</h1>
+<p>When a span is created, it is assigned a <code>SpanKind</code> to provide 
context to
+the tracing backend regarding how the trace should be assembled.</p>
+<ul>
+<li><strong>Client:</strong> Represents a synchronous outgoing remote call 
(e.g., an outgoing HTTP request or database query).</li>
+<li><strong>Server:</strong> Represents a synchronous incoming remote call 
(e.g., an incoming HTTP request or remote procedure call).</li>
+<li><strong>Internal:</strong> Represents operations that do not cross a 
process boundary (e.g., instrumenting a function call within the same 
service).</li>
+<li><strong>Producer:</strong> Represents the creation of a job that may be 
processed asynchronously later (e.g., enqueueing a message into a message 
queue).</li>
+<li><strong>Consumer:</strong> Represents the processing of a job initiated by 
a producer.</li>
+</ul>
+<h1 id="5-opentracing-control-level">5. OpenTracing Control Level</h1>
+<p>Tracing of call flows can be categorized to enable fine-grained control:</p>
+<ul>
+<li><strong>External Request Tracing:</strong> Traces initiated by external 
remote servers, such as those originating from the Ozone Client or the Recon 
UI.</li>
+<li><strong>Internal Requests:</strong> Traces within Ozone components (e.g., 
OM to SCM), often initiated as part of a timer task.</li>
+</ul>
+<p>A control flag is necessary to selectively enable tracing for external, 
internal, or other future categorizations, thereby managing the tracing 
overhead within Ozone services.</p>
+<h1 id="5-dynamic-tracing-configuration">5. Dynamic Tracing Configuration</h1>
+<p>The following configuration property will control tracing:</p>
+<ul>
+<li>Ozone.tracing.enabled (default: false)</li>
+</ul>
+<p>Existing environment variables for OpenTelemetry configuration are:</p>
+<ul>
+<li>OTEL_EXPORTER_OTLP_ENDPOINT: Specifies the OTLP receiver endpoint 
(default: http://localhost:4317/).</li>
+<li>OTEL_TRACES_SAMPLER_ARG: Sampler argument for traces (default: 1.0, 
meaning every trace is reported).</li>
+</ul>
+<p>Since environment variables cannot be updated dynamically, dedicated 
configuration properties will be provided for dynamic control:</p>
+<ul>
+<li>ozone.tracing.endpoint</li>
+<li>ozone.tracing.sampler</li>
+</ul>
+<p>These <code>ozone.tracing</code> configurations can be dynamically updated 
for Ozone Manager (OM), Storage Container Manager (SCM), and DataNode (DN) via 
the Ozone CLI.</p>
+<p><strong>Note:</strong> Dynamic updates are not feasible for the Ozone 
client as it is part of application code.</p>
+<h1 id="6-tracing-support-for-client">6. Tracing Support for Client</h1>
+<p>The Ozone client needs the flexibility to either initiate a new span or 
continue an existing application-level trace by creating a child span.
+A specific scenario arises when the Ozone client should only trace if 
it&rsquo;s explicitly enabled to continue an application&rsquo;s existing 
trace.</p>
+<ul>
+<li><strong>Application with Active Trace:</strong>
+<ul>
+<li>The Ozone client checks for an active span from the application&rsquo;s 
context.</li>
+<li>If an active span is found, the Ozone client continues that trace as a 
child span, using the application&rsquo;s existing trace context.</li>
+</ul>
+</li>
+<li><strong>Application Without Active Trace:</strong>
+<ul>
+<li>If the application has not initiated a trace, the Ozone client will not 
create a new trace independently when <code>ozone.tracing.enabled</code> is 
false.</li>
+</ul>
+</li>
+</ul>
+<p>Typically, <code>ozone.tracing.enabled</code> is <code>false</code>, 
indicating that no tracing should occur by default. However, for Ozone clients, 
dynamically
+updating this configuration based on the application&rsquo;s implementation is 
often not feasible.</p>
+<p>To address this, the Ozone client will leverage the application&rsquo;s 
tracer to continue tracing as a child span.
+This specific behavior will be controlled by an additional flag:</p>
+<ul>
+<li><code>ozone.tracing.client.application-aware</code> (default: true)</li>
+</ul>
+<p>When Ozone.client.tracing.provider.application.enabled is true, the Ozone 
client will utilize tracers provided by the application context.
+This allows the Ozone client to trace even if the ozone.tracing.enabled 
configuration is false, provided the application has configured and enabled its 
own tracing.</p>
+<p><strong>Mechanism for Client-Side Trace Continuation:</strong></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-java" data-lang="java"><span style="display:flex;"><span><span 
style="color:#75715e">// In a deep part of the code, get the current active 
span from the Context</span>
+</span></span><span style="display:flex;"><span>Span currentSpan <span 
style="color:#f92672">=</span> Span.<span 
style="color:#a6e22e">current</span>();
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#75715e">// 
Get the tracer that created this span</span>
+</span></span><span style="display:flex;"><span>Tracer tracer <span 
style="color:#f92672">=</span> currentSpan.<span 
style="color:#a6e22e">getTracer</span>();
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#75715e">// 
Using this tracer, a child span can be created and traced</span>
+</span></span><span style="display:flex;"><span><span style="color:#75715e">// 
Example:</span>
+</span></span><span style="display:flex;"><span>tracer.<span 
style="color:#a6e22e">spanBuilder</span>(<span 
style="color:#e6db74">&#34;OzoneClientOperation&#34;</span>).<span 
style="color:#a6e22e">setParent</span>(currentSpan.<span 
style="color:#a6e22e">getSpanContext</span>()).<span 
style="color:#a6e22e">startSpan</span>();
+</span></span></code></pre></div><h3 id="references">References</h3>
+<ul>
+<li><a href="https://opentelemetry.io/";>OpenTelemetry</a></li>
+</ul>
+
+            </div>
+
+        </div>
+      </div>
+    </div>
+
+
+
+<footer class="footer">
+  <div class="container">
+    <span class="small text-muted">
+      Version: 2.1.0-SNAPSHOT, Last Modified: October 16, 2025 <a 
class="hide-child link primary-color" 
href="https://github.com/apache/ozone/commit/5fdf2d2d0bd0ac0edb1fd1f1bb1d382e17e0584c";>5fdf2d2d0b</a>
+    </span>
+  </div>
+</footer>
+
+
+
+<script src="../js/jquery-3.5.1.min.js"></script>
+<script src="../js/ozonedoc.js"></script>
+<script src="../js/bootstrap.min.js"></script>
+
+
+  </body>
+</html>
diff --git a/docs/edge/design/distributed-tracing-sample.png 
b/docs/edge/design/distributed-tracing-sample.png
new file mode 100644
index 00000000..c364270a
Binary files /dev/null and b/docs/edge/design/distributed-tracing-sample.png 
differ
diff --git a/docs/edge/design/index.xml b/docs/edge/design/index.xml
index ba28b6de..6811b792 100644
--- a/docs/edge/design/index.xml
+++ b/docs/edge/design/index.xml
@@ -6,8 +6,15 @@
     <description>Recent content in Designs on Ozone</description>
     <generator>Hugo</generator>
     <language>en</language>
-    <lastBuildDate>Mon, 22 Sep 2025 10:13:03 -0700</lastBuildDate>
+    <lastBuildDate>Thu, 16 Oct 2025 09:06:36 +0530</lastBuildDate>
     <atom:link href="/design/index.xml" rel="self" type="application/rss+xml" 
/>
+    <item>
+      <title>Distributed Tracing using OpenTelemetry for Ozone</title>
+      <link>/design/distributed-tracing-opentelemetry.html</link>
+      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate>
+      <guid>/design/distributed-tracing-opentelemetry.html</guid>
+      <description>Use of OpenTelemetry for distributed tracing in 
Ozone.</description>
+    </item>
     <item>
       <title>Listener Ozone Manager</title>
       <link>/design/listener-om.html</link>
diff --git a/docs/edge/en/sitemap.xml b/docs/edge/en/sitemap.xml
index bcb34eb4..41bd857c 100644
--- a/docs/edge/en/sitemap.xml
+++ b/docs/edge/en/sitemap.xml
@@ -711,7 +711,10 @@
                 />
   </url><url>
     <loc>/design.html</loc>
-    <lastmod>2025-09-22T10:13:03-07:00</lastmod>
+    <lastmod>2025-10-16T09:06:36+05:30</lastmod>
+  </url><url>
+    <loc>/design/distributed-tracing-opentelemetry.html</loc>
+    <lastmod>2025-10-16T09:06:36+05:30</lastmod>
   </url><url>
     <loc>/design/listener-om.html</loc>
     <lastmod>2025-09-03T11:34:46-07:00</lastmod>
diff --git a/docs/edge/index.xml b/docs/edge/index.xml
index 390c329c..795d7f7f 100644
--- a/docs/edge/index.xml
+++ b/docs/edge/index.xml
@@ -490,6 +490,13 @@
       <guid>/start/fromsource.html</guid>
       <description>&lt;!---&#xA;  Licensed to the Apache Software Foundation 
(ASF) under one or more&#xA;  contributor license agreements.  See the NOTICE 
file distributed with&#xA;  this work for additional information regarding 
copyright ownership.&#xA;  The ASF licenses this file to You under the Apache 
License, Version 2.0&#xA;  (the &#34;License&#34;); you may not use this file 
except in compliance with&#xA;  the License.  You may obtain a copy of the 
License at&#xA;&#xA;      http: [...]
     </item>
+    <item>
+      <title>Distributed Tracing using OpenTelemetry for Ozone</title>
+      <link>/design/distributed-tracing-opentelemetry.html</link>
+      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate>
+      <guid>/design/distributed-tracing-opentelemetry.html</guid>
+      <description>Use of OpenTelemetry for distributed tracing in 
Ozone.</description>
+    </item>
     <item>
       <title>Listener Ozone Manager</title>
       <link>/design/listener-om.html</link>
diff --git a/docs/edge/interface/ofs.html b/docs/edge/interface/ofs.html
index 33f55251..061d3182 100644
--- a/docs/edge/interface/ofs.html
+++ b/docs/edge/interface/ofs.html
@@ -670,7 +670,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-o3fshahahugoshortcode116s5hbhb">Differences from <a 
href="../interface/o3fs.html">o3fs</a></h2>
+<h2 id="differences-from-o3fshahahugoshortcode117s5hbhb">Differences from <a 
href="../interface/o3fs.html">o3fs</a></h2>
 <h3 id="creating-files">Creating files</h3>
 <p>OFS doesn&rsquo;t allow creating keys(files) directly under root or volumes.
 Users will receive an error message when they try to do that:</p>
diff --git a/docs/edge/sitemap.xml b/docs/edge/sitemap.xml
index f4dcdcef..83cb1794 100644
--- a/docs/edge/sitemap.xml
+++ b/docs/edge/sitemap.xml
@@ -4,7 +4,7 @@
   <sitemap>
     <loc>/en/sitemap.xml</loc>
     
-      <lastmod>2025-10-15T16:16:50+05:30</lastmod>
+      <lastmod>2025-10-16T09:06:36+05:30</lastmod>
     
   </sitemap>
   
diff --git a/docs/edge/zh/interface/ofs.html b/docs/edge/zh/interface/ofs.html
index 6f9a5c47..86c81507 100644
--- a/docs/edge/zh/interface/ofs.html
+++ b/docs/edge/zh/interface/ofs.html
@@ -484,7 +484,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="与-o3fshahahugoshortcode115s5hbhb-的区别">与 <a 
href="../../zh/interface/o3fs.html">o3fs</a> 的区别</h2>
+<h2 id="与-o3fshahahugoshortcode116s5hbhb-的区别">与 <a 
href="../../zh/interface/o3fs.html">o3fs</a> 的区别</h2>
 <h3 id="创建文件">创建文件</h3>
 <p>OFS 不允许直接在根目录或卷下创建键(文件)。
 当用户尝试这样做时,他们将收到一个错误消息:</p>


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

Reply via email to