From 3ed8b4f7c117e9662f14770b4b466fd4fcbc90b1 Mon Sep 17 00:00:00 2001 From: sravani-revuri Date: Thu, 2 Apr 2026 12:42:21 +0530 Subject: [PATCH 1/6] HDDS-14961. Move Tracing environment variables to Ozone configuration properties. --- .../apache/hadoop/hdds/scm/ScmConfigKeys.java | 13 ++- .../hadoop/hdds/tracing/SpanSampler.java | 2 +- .../hadoop/hdds/tracing/TracingUtil.java | 80 ++++++++++--------- .../src/main/resources/ozone-default.xml | 26 +++++- .../hadoop/hdds/tracing/TestTracingUtil.java | 10 +-- 5 files changed, 83 insertions(+), 48 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java index 69a4d0411f2b..15eabec238a4 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java @@ -469,8 +469,17 @@ public final class ScmConfigKeys { public static final String OZONE_SCM_NETWORK_TOPOLOGY_SCHEMA_FILE_DEFAULT = "network-topology-default.xml"; - public static final String HDDS_TRACING_ENABLED = "hdds.tracing.enabled"; - public static final boolean HDDS_TRACING_ENABLED_DEFAULT = false; + public static final String OZONE_TRACING_ENABLED = "ozone.tracing.enabled"; + public static final boolean OZONE_TRACING_ENABLED_DEFAULT = false; + + public static final String OZONE_TRACING_ENDPOINT = "ozone.tracing.endpoint"; + public static final String OZONE_TRACING_ENDPOINT_DEFAULT = "http://localhost:4317"; + + public static final String OZONE_TRACING_SAMPLER = "ozone.tracing.sampler"; + public static final double OZONE_TRACING_SAMPLER_DEFAULT = 1.0; + + public static final String OZONE_TRACING_SPAN_SAMPLING = "ozone.tracing.span.sampling"; + public static final String OZONE_TRACING_SPAN_SAMPLING_DEFAULT = ""; public static final String OZONE_SCM_RATIS_PORT_KEY = "ozone.scm.ratis.port"; diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/SpanSampler.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/SpanSampler.java index 317573a5e19f..8f40ba5b5ed1 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/SpanSampler.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/SpanSampler.java @@ -59,7 +59,7 @@ public SamplingResult shouldSample( // check if we have a valid parent span if (!parentSpan.getSpanContext().isValid()) { // Root span: always delegate to trace-level sampler - // This ensures OTEL_TRACES_SAMPLER_ARG is respected + // This ensures ozone.tracing.sampler is respected return rootSampler.shouldSample(parentContext, traceId, spanName, spanKind, attributes, parentLinks); } diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java index 0f8aa4561f12..9525a01fb0d8 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java @@ -49,12 +49,6 @@ public final class TracingUtil { private static final Logger LOG = LoggerFactory.getLogger(TracingUtil.class); private static final String NULL_SPAN_AS_STRING = ""; - private static final String OTEL_EXPORTER_OTLP_ENDPOINT = "OTEL_EXPORTER_OTLP_ENDPOINT"; - private static final String OTEL_EXPORTER_OTLP_ENDPOINT_DEFAULT = "http://localhost:4317"; - private static final String OTEL_TRACES_SAMPLER_ARG = "OTEL_TRACES_SAMPLER_ARG"; - private static final double OTEL_TRACES_SAMPLER_RATIO_DEFAULT = 1.0; - private static final String OTEL_SPAN_SAMPLING_ARG = "OTEL_SPAN_SAMPLING_ARG"; - private static final String OTEL_TRACES_SAMPLER_CONFIG_DEFAULT = ""; private static volatile boolean isInit = false; private static Tracer tracer = OpenTelemetry.noop().getTracer("noop"); @@ -72,7 +66,7 @@ public static void initTracing( } try { - initialize(serviceName); + initialize(serviceName, conf); isInit = true; LOG.info("Initialized tracing service: {}", serviceName); } catch (Exception e) { @@ -80,38 +74,15 @@ public static void initTracing( } } - private static void initialize(String serviceName) { - String otelEndPoint = System.getenv(OTEL_EXPORTER_OTLP_ENDPOINT); - if (otelEndPoint == null || otelEndPoint.isEmpty()) { - otelEndPoint = OTEL_EXPORTER_OTLP_ENDPOINT_DEFAULT; - } + private static void initialize(String serviceName, ConfigurationSource conf) { + String otelEndPoint = resolveTracingEndpoint(conf); - double samplerRatio = OTEL_TRACES_SAMPLER_RATIO_DEFAULT; - try { - String sampleStrRatio = System.getenv(OTEL_TRACES_SAMPLER_ARG); - if (sampleStrRatio != null && !sampleStrRatio.isEmpty()) { - samplerRatio = Double.parseDouble(System.getenv(OTEL_TRACES_SAMPLER_ARG)); - LOG.info("Sampling Trace Config = '{}'", samplerRatio); - } - } catch (NumberFormatException ex) { - // log and use the default value. - LOG.warn("Invalid value for {}: '{}'. Falling back to default: {}", - OTEL_TRACES_SAMPLER_ARG, System.getenv(OTEL_TRACES_SAMPLER_ARG), OTEL_TRACES_SAMPLER_RATIO_DEFAULT, ex); - } + double samplerRatio = resolveTraceSamplerRatio(conf); + LOG.info("Sampling Trace Config = '{}'", samplerRatio); + + String spanSamplingConfig = resolveSpanSamplingConfig(conf); + LOG.info("Sampling Span Config = '{}'", spanSamplingConfig); - String spanSamplingConfig = OTEL_TRACES_SAMPLER_CONFIG_DEFAULT; - try { - String spanStrConfig = System.getenv(OTEL_SPAN_SAMPLING_ARG); - if (spanStrConfig != null && !spanStrConfig.isEmpty()) { - spanSamplingConfig = spanStrConfig; - } - LOG.info("Sampling Span Config = '{}'", spanSamplingConfig); - } catch (Exception ex) { - // Log and use the default value. - LOG.warn("Failed to process {}. Falling back to default configuration: {}", - OTEL_SPAN_SAMPLING_ARG, OTEL_TRACES_SAMPLER_CONFIG_DEFAULT, ex); - } - // Pass the config to parseSpanSamplingConfig to get spans to be sampled. Map spanMap = parseSpanSamplingConfig(spanSamplingConfig); Resource resource = Resource.create(Attributes.of(AttributeKey.stringKey("service.name"), serviceName)); @@ -142,6 +113,36 @@ private static void initialize(String serviceName) { tracer = openTelemetry.getTracer(serviceName); } + private static String resolveTracingEndpoint(ConfigurationSource conf) { + String fromConf = conf.getTrimmed(ScmConfigKeys.OZONE_TRACING_ENDPOINT); + if (fromConf != null && !fromConf.isEmpty()) { + return fromConf; + } + return ScmConfigKeys.OZONE_TRACING_ENDPOINT_DEFAULT; + } + + private static double resolveTraceSamplerRatio(ConfigurationSource conf) { + String fromConf = conf.getTrimmed(ScmConfigKeys.OZONE_TRACING_SAMPLER); + if (fromConf != null && !fromConf.isEmpty()) { + try { + return Double.parseDouble(fromConf); + } catch (NumberFormatException ex) { + LOG.warn("Invalid value for {}: '{}'. Falling back to default: {}", + ScmConfigKeys.OZONE_TRACING_SAMPLER, fromConf, + ScmConfigKeys.OZONE_TRACING_SAMPLER_DEFAULT, ex); + } + } + return ScmConfigKeys.OZONE_TRACING_SAMPLER_DEFAULT; + } + + private static String resolveSpanSamplingConfig(ConfigurationSource conf) { + String fromConf = conf.getTrimmed(ScmConfigKeys.OZONE_TRACING_SPAN_SAMPLING); + if (fromConf != null && !fromConf.isEmpty()) { + return fromConf; + } + return ScmConfigKeys.OZONE_TRACING_SPAN_SAMPLING_DEFAULT; + } + /** * Export the active tracing span as a string. * @@ -201,11 +202,12 @@ public static T createProxy( new TraceAllMethod<>(delegate, itf.getSimpleName()))); } + public static boolean isTracingEnabled( ConfigurationSource conf) { return conf.getBoolean( - ScmConfigKeys.HDDS_TRACING_ENABLED, - ScmConfigKeys.HDDS_TRACING_ENABLED_DEFAULT); + ScmConfigKeys.OZONE_TRACING_ENABLED, + ScmConfigKeys.OZONE_TRACING_ENABLED_DEFAULT); } /** diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml b/hadoop-hdds/common/src/main/resources/ozone-default.xml index 6c4bd26ebe88..a9159252de12 100644 --- a/hadoop-hdds/common/src/main/resources/ozone-default.xml +++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml @@ -3574,13 +3574,37 @@ - hdds.tracing.enabled + ozone.tracing.enabled false OZONE, HDDS If enabled, tracing information is sent to tracing server. + + ozone.tracing.endpoint + http://localhost:4317 + OZONE, HDDS + + OTLP gRPC receiver endpoint. + + + + ozone.tracing.sampler + 1.0 + OZONE, HDDS + + Trace sampling ratio for root spans (0.0 to 1.0). + + + + ozone.tracing.span.sampling + + OZONE, HDDS + + Optional per-span sampling: comma-separated spanName:rate entries. + + ozone.recon.task.thread.count 1 diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java index 7b73b30ab7f1..a81b7baa4898 100644 --- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java @@ -56,11 +56,11 @@ public void testInitTracing() { } } - private static MutableConfigurationSource tracingEnabled() { - MutableConfigurationSource config = new InMemoryConfigurationForTesting(); - config.setBoolean(ScmConfigKeys.HDDS_TRACING_ENABLED, true); - return config; - } +private static MutableConfigurationSource tracingEnabled() { + MutableConfigurationSource config = new InMemoryConfigurationForTesting(); + config.setBoolean(ScmConfigKeys.OZONE_TRACING_ENABLED, true); + return config; +} /** * Test for checking if span was not created when a regular method From ca0e0649a92c06599314cf7dc575b6849e0cd02b Mon Sep 17 00:00:00 2001 From: sravani-revuri Date: Thu, 2 Apr 2026 12:54:00 +0530 Subject: [PATCH 2/6] fixed checkstyle --- .../org/apache/hadoop/hdds/tracing/TracingUtil.java | 1 - .../apache/hadoop/hdds/tracing/TestTracingUtil.java | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java index 9525a01fb0d8..d8a398804da3 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java @@ -202,7 +202,6 @@ public static T createProxy( new TraceAllMethod<>(delegate, itf.getSimpleName()))); } - public static boolean isTracingEnabled( ConfigurationSource conf) { return conf.getBoolean( diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java index a81b7baa4898..105d370b1006 100644 --- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java @@ -56,11 +56,11 @@ public void testInitTracing() { } } -private static MutableConfigurationSource tracingEnabled() { - MutableConfigurationSource config = new InMemoryConfigurationForTesting(); - config.setBoolean(ScmConfigKeys.OZONE_TRACING_ENABLED, true); - return config; -} + private static MutableConfigurationSource tracingEnabled() { + MutableConfigurationSource config = new InMemoryConfigurationForTesting(); + config.setBoolean(ScmConfigKeys.OZONE_TRACING_ENABLED, true); + return config; + } /** * Test for checking if span was not created when a regular method From 924abdebe8b3aadd6206ccc0694deb11484b10d8 Mon Sep 17 00:00:00 2001 From: sravani-revuri Date: Fri, 3 Apr 2026 20:35:25 +0530 Subject: [PATCH 3/6] added TracingConfig and env-var logic --- .../hadoop/hdds/conf/OzoneConfiguration.java | 2 + .../apache/hadoop/hdds/scm/ScmConfigKeys.java | 12 -- .../hadoop/hdds/tracing/TracingConfig.java | 134 ++++++++++++++++++ .../hadoop/hdds/tracing/TracingUtil.java | 48 +------ .../src/main/resources/ozone-default.xml | 32 ----- .../hadoop/hdds/tracing/TestTracingUtil.java | 3 +- 6 files changed, 144 insertions(+), 87 deletions(-) create mode 100644 hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java index 384aded25b59..0fabba6df3bf 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java @@ -413,6 +413,8 @@ private static void addDeprecatedKeys() { HddsConfigKeys.HDDS_METRICS_PERCENTILES_INTERVALS_KEY), new DeprecationDelta("hdds.recon.heartbeat.interval", HddsConfigKeys.HDDS_RECON_HEARTBEAT_INTERVAL), + new DeprecationDelta("hdds.tracing.enabled", + "ozone.tracing.enabled"), }); } diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java index 15eabec238a4..2c44fa881c41 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/ScmConfigKeys.java @@ -469,18 +469,6 @@ public final class ScmConfigKeys { public static final String OZONE_SCM_NETWORK_TOPOLOGY_SCHEMA_FILE_DEFAULT = "network-topology-default.xml"; - public static final String OZONE_TRACING_ENABLED = "ozone.tracing.enabled"; - public static final boolean OZONE_TRACING_ENABLED_DEFAULT = false; - - public static final String OZONE_TRACING_ENDPOINT = "ozone.tracing.endpoint"; - public static final String OZONE_TRACING_ENDPOINT_DEFAULT = "http://localhost:4317"; - - public static final String OZONE_TRACING_SAMPLER = "ozone.tracing.sampler"; - public static final double OZONE_TRACING_SAMPLER_DEFAULT = 1.0; - - public static final String OZONE_TRACING_SPAN_SAMPLING = "ozone.tracing.span.sampling"; - public static final String OZONE_TRACING_SPAN_SAMPLING_DEFAULT = ""; - public static final String OZONE_SCM_RATIS_PORT_KEY = "ozone.scm.ratis.port"; public static final int OZONE_SCM_RATIS_PORT_DEFAULT diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java new file mode 100644 index 000000000000..23a0d47d865c --- /dev/null +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java @@ -0,0 +1,134 @@ +/* + * 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://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. + */ + +package org.apache.hadoop.hdds.tracing; + +import org.apache.hadoop.hdds.conf.Config; +import org.apache.hadoop.hdds.conf.ConfigGroup; +import org.apache.hadoop.hdds.conf.ConfigTag; +import org.apache.hadoop.hdds.conf.ConfigType; +import org.apache.hadoop.hdds.conf.ConfigurationSource; +import org.apache.hadoop.hdds.conf.ReconfigurableConfig; + +/** + * OpenTelemetry tracing configuration for Ozone services. + * Priority is given as such: + * 1. Explicit configuration keys + * 2. Environment variables + * 3. Default values defined in this class + */ +@ConfigGroup(prefix = "ozone.tracing") +public class TracingConfig extends ReconfigurableConfig { + + private static final String OTEL_EXPORTER_OTLP_ENDPOINT = "OTEL_EXPORTER_OTLP_ENDPOINT"; + private static final String OTEL_TRACES_SAMPLER_ARG = "OTEL_TRACES_SAMPLER_ARG"; + private static final String OTEL_SPAN_SAMPLING_ARG = "OTEL_SPAN_SAMPLING_ARG"; + + @Config( + key = "ozone.tracing.enabled", + defaultValue = "false", + type = ConfigType.BOOLEAN, + tags = { ConfigTag.OZONE, ConfigTag.HDDS }, + description = "If true, tracing is initialized and spans may be exported (subject to sampling)." + ) + private boolean tracingEnabled; + + @Config( + key = "ozone.tracing.endpoint", + defaultValue = "http://localhost:4317", + type = ConfigType.STRING, + tags = { ConfigTag.OZONE, ConfigTag.HDDS }, + description = "OTLP gRPC receiver endpoint URL." + ) + private String tracingEndpoint; + + @Config( + key = "ozone.tracing.sampler", + defaultValue = "1.0", + type = ConfigType.DOUBLE, + tags = { ConfigTag.OZONE, ConfigTag.HDDS }, + description = "Root trace sampling ratio (0.0 to 1.0)." + ) + private double traceSamplerRatio; + + @Config( + key = "ozone.tracing.span.sampling", + defaultValue = "", + type = ConfigType.STRING, + tags = { ConfigTag.OZONE, ConfigTag.HDDS }, + description = "Optional per-span sampling: comma-separated spanName:rate entries." + ) + private String spanSampling; + + public boolean isTracingEnabled() { + return tracingEnabled; + } + + /** + * Checks if configuration value is set for endpoint. + * Checks environment variable if config is default value. + * Returns default value if environment variable is not set + */ + public String getTracingEndpoint(ConfigurationSource conf) { + String configEndpoint = conf.get("ozone.tracing.endpoint"); + if (configEndpoint != null && !configEndpoint.equals("http://localhost:4317")) { + return configEndpoint.trim(); + } + String envEndpoint = System.getenv(OTEL_EXPORTER_OTLP_ENDPOINT); + if (envEndpoint != null && !envEndpoint.equals("http://localhost:4317")) { + return envEndpoint.trim(); + } + return tracingEndpoint; + } + + /** + * Checks if configuration value is set for trace ratio. + * Checks environment variable if config is default value. + * Returns default value if environment variable is not set + */ + public double getTraceSamplerRatio(ConfigurationSource conf) { + String configTraceRatio = conf.get("ozone.tracing.sampler"); + //if config value is set to something other than default and null then return it + if (configTraceRatio != null && !configTraceRatio.equals("1.0")) { + return Double.parseDouble(configTraceRatio.trim()); + } + String envTraceRatio = System.getenv(OTEL_TRACES_SAMPLER_ARG); + //if environment variable is set ot something other than default and null then return it + if (envTraceRatio != null && !envTraceRatio.equals("1.0")) { + return Double.parseDouble(envTraceRatio.trim()); + } + return traceSamplerRatio; + } + + /** + * Checks if configuration value is set for span ratio. + * Checks environment variable if config is default value. + * Returns default value if environment variable is not set + */ + public String getSpanSampling(ConfigurationSource conf) { + String configSpanRatio = conf.get("ozone.tracing.span.sampling"); + if (configSpanRatio != null && !configSpanRatio.isEmpty()) { + return configSpanRatio.trim(); + } + String envSpanRatio = System.getenv(OTEL_SPAN_SAMPLING_ARG); + if (envSpanRatio != null && !envSpanRatio.isEmpty()) { + return envSpanRatio; + } + return spanSampling; + } + +} diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java index d8a398804da3..8058c9840aed 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java @@ -37,7 +37,6 @@ import java.util.HashMap; import java.util.Map; import org.apache.hadoop.hdds.conf.ConfigurationSource; -import org.apache.hadoop.hdds.scm.ScmConfigKeys; import org.apache.ratis.util.function.CheckedRunnable; import org.apache.ratis.util.function.CheckedSupplier; import org.slf4j.Logger; @@ -75,12 +74,12 @@ public static void initTracing( } private static void initialize(String serviceName, ConfigurationSource conf) { - String otelEndPoint = resolveTracingEndpoint(conf); - - double samplerRatio = resolveTraceSamplerRatio(conf); + //Fetch and log the right tracing parameters based on config, environment variable and default value priority. + TracingConfig tracingConfig = conf.getObject(TracingConfig.class); + String otelEndPoint = tracingConfig.getTracingEndpoint(conf); + double samplerRatio = tracingConfig.getTraceSamplerRatio(conf); LOG.info("Sampling Trace Config = '{}'", samplerRatio); - - String spanSamplingConfig = resolveSpanSamplingConfig(conf); + String spanSamplingConfig = tracingConfig.getSpanSampling(conf); LOG.info("Sampling Span Config = '{}'", spanSamplingConfig); Map spanMap = parseSpanSamplingConfig(spanSamplingConfig); @@ -113,36 +112,6 @@ private static void initialize(String serviceName, ConfigurationSource conf) { tracer = openTelemetry.getTracer(serviceName); } - private static String resolveTracingEndpoint(ConfigurationSource conf) { - String fromConf = conf.getTrimmed(ScmConfigKeys.OZONE_TRACING_ENDPOINT); - if (fromConf != null && !fromConf.isEmpty()) { - return fromConf; - } - return ScmConfigKeys.OZONE_TRACING_ENDPOINT_DEFAULT; - } - - private static double resolveTraceSamplerRatio(ConfigurationSource conf) { - String fromConf = conf.getTrimmed(ScmConfigKeys.OZONE_TRACING_SAMPLER); - if (fromConf != null && !fromConf.isEmpty()) { - try { - return Double.parseDouble(fromConf); - } catch (NumberFormatException ex) { - LOG.warn("Invalid value for {}: '{}'. Falling back to default: {}", - ScmConfigKeys.OZONE_TRACING_SAMPLER, fromConf, - ScmConfigKeys.OZONE_TRACING_SAMPLER_DEFAULT, ex); - } - } - return ScmConfigKeys.OZONE_TRACING_SAMPLER_DEFAULT; - } - - private static String resolveSpanSamplingConfig(ConfigurationSource conf) { - String fromConf = conf.getTrimmed(ScmConfigKeys.OZONE_TRACING_SPAN_SAMPLING); - if (fromConf != null && !fromConf.isEmpty()) { - return fromConf; - } - return ScmConfigKeys.OZONE_TRACING_SPAN_SAMPLING_DEFAULT; - } - /** * Export the active tracing span as a string. * @@ -202,11 +171,8 @@ public static T createProxy( new TraceAllMethod<>(delegate, itf.getSimpleName()))); } - public static boolean isTracingEnabled( - ConfigurationSource conf) { - return conf.getBoolean( - ScmConfigKeys.OZONE_TRACING_ENABLED, - ScmConfigKeys.OZONE_TRACING_ENABLED_DEFAULT); + public static boolean isTracingEnabled(ConfigurationSource conf) { + return conf.getObject(TracingConfig.class).isTracingEnabled(); } /** diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml b/hadoop-hdds/common/src/main/resources/ozone-default.xml index a9159252de12..3ef2f2914e98 100644 --- a/hadoop-hdds/common/src/main/resources/ozone-default.xml +++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml @@ -3573,38 +3573,6 @@ If enabled, SCM DB Snapshot is taken by Recon. - - ozone.tracing.enabled - false - OZONE, HDDS - - If enabled, tracing information is sent to tracing server. - - - - ozone.tracing.endpoint - http://localhost:4317 - OZONE, HDDS - - OTLP gRPC receiver endpoint. - - - - ozone.tracing.sampler - 1.0 - OZONE, HDDS - - Trace sampling ratio for root spans (0.0 to 1.0). - - - - ozone.tracing.span.sampling - - OZONE, HDDS - - Optional per-span sampling: comma-separated spanName:rate entries. - - ozone.recon.task.thread.count 1 diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java index 105d370b1006..d0e58d76665c 100644 --- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java +++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/tracing/TestTracingUtil.java @@ -28,7 +28,6 @@ import java.io.IOException; import org.apache.hadoop.hdds.conf.InMemoryConfigurationForTesting; import org.apache.hadoop.hdds.conf.MutableConfigurationSource; -import org.apache.hadoop.hdds.scm.ScmConfigKeys; import org.apache.hadoop.hdds.tracing.TestTraceAllMethod.Service; import org.apache.hadoop.hdds.tracing.TestTraceAllMethod.ServiceImpl; import org.junit.jupiter.api.Test; @@ -58,7 +57,7 @@ public void testInitTracing() { private static MutableConfigurationSource tracingEnabled() { MutableConfigurationSource config = new InMemoryConfigurationForTesting(); - config.setBoolean(ScmConfigKeys.OZONE_TRACING_ENABLED, true); + config.setBoolean("ozone.tracing.enabled", true); return config; } From 4f723a44ff090a865ef78598ad8c27d1f14ad3ad Mon Sep 17 00:00:00 2001 From: sravani-revuri Date: Fri, 3 Apr 2026 22:11:14 +0530 Subject: [PATCH 4/6] included changes from patch --- .../hadoop/hdds/tracing/TracingConfig.java | 80 ++++++++----------- .../hadoop/hdds/tracing/TracingUtil.java | 6 +- 2 files changed, 38 insertions(+), 48 deletions(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java index 23a0d47d865c..451c80b5e7fa 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java @@ -17,11 +17,12 @@ package org.apache.hadoop.hdds.tracing; +import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.conf.Config; import org.apache.hadoop.hdds.conf.ConfigGroup; import org.apache.hadoop.hdds.conf.ConfigTag; import org.apache.hadoop.hdds.conf.ConfigType; -import org.apache.hadoop.hdds.conf.ConfigurationSource; +import org.apache.hadoop.hdds.conf.PostConstruct; import org.apache.hadoop.hdds.conf.ReconfigurableConfig; /** @@ -49,7 +50,7 @@ public class TracingConfig extends ReconfigurableConfig { @Config( key = "ozone.tracing.endpoint", - defaultValue = "http://localhost:4317", + defaultValue = "", type = ConfigType.STRING, tags = { ConfigTag.OZONE, ConfigTag.HDDS }, description = "OTLP gRPC receiver endpoint URL." @@ -58,7 +59,7 @@ public class TracingConfig extends ReconfigurableConfig { @Config( key = "ozone.tracing.sampler", - defaultValue = "1.0", + defaultValue = "-1", type = ConfigType.DOUBLE, tags = { ConfigTag.OZONE, ConfigTag.HDDS }, description = "Root trace sampling ratio (0.0 to 1.0)." @@ -78,56 +79,45 @@ public boolean isTracingEnabled() { return tracingEnabled; } - /** - * Checks if configuration value is set for endpoint. - * Checks environment variable if config is default value. - * Returns default value if environment variable is not set - */ - public String getTracingEndpoint(ConfigurationSource conf) { - String configEndpoint = conf.get("ozone.tracing.endpoint"); - if (configEndpoint != null && !configEndpoint.equals("http://localhost:4317")) { - return configEndpoint.trim(); + @PostConstruct + public void validate() { + if (tracingEndpoint.isEmpty()) { + tracingEndpoint = System.getenv(OTEL_EXPORTER_OTLP_ENDPOINT); } - String envEndpoint = System.getenv(OTEL_EXPORTER_OTLP_ENDPOINT); - if (envEndpoint != null && !envEndpoint.equals("http://localhost:4317")) { - return envEndpoint.trim(); + if (StringUtils.isBlank(tracingEndpoint)) { + tracingEndpoint = "http://localhost:4317"; } - return tracingEndpoint; - } - /** - * Checks if configuration value is set for trace ratio. - * Checks environment variable if config is default value. - * Returns default value if environment variable is not set - */ - public double getTraceSamplerRatio(ConfigurationSource conf) { - String configTraceRatio = conf.get("ozone.tracing.sampler"); - //if config value is set to something other than default and null then return it - if (configTraceRatio != null && !configTraceRatio.equals("1.0")) { - return Double.parseDouble(configTraceRatio.trim()); + if (traceSamplerRatio < 0) { + String envTraceRatio = System.getenv(OTEL_TRACES_SAMPLER_ARG); + if (envTraceRatio != null) { + try { + traceSamplerRatio = Double.parseDouble(envTraceRatio.trim()); + } catch (NumberFormatException ignored) { + } + } } - String envTraceRatio = System.getenv(OTEL_TRACES_SAMPLER_ARG); - //if environment variable is set ot something other than default and null then return it - if (envTraceRatio != null && !envTraceRatio.equals("1.0")) { - return Double.parseDouble(envTraceRatio.trim()); + if (traceSamplerRatio < 0 || traceSamplerRatio > 1) { + traceSamplerRatio = 1.0; } + + if (spanSampling.isEmpty()) { + String envSampling = System.getenv(OTEL_SPAN_SAMPLING_ARG); + if (!StringUtils.isBlank(envSampling)) { + spanSampling = envSampling; + } + } + } + + public String getTracingEndpoint() { + return tracingEndpoint; + } + + public double getTraceSamplerRatio() { return traceSamplerRatio; } - /** - * Checks if configuration value is set for span ratio. - * Checks environment variable if config is default value. - * Returns default value if environment variable is not set - */ - public String getSpanSampling(ConfigurationSource conf) { - String configSpanRatio = conf.get("ozone.tracing.span.sampling"); - if (configSpanRatio != null && !configSpanRatio.isEmpty()) { - return configSpanRatio.trim(); - } - String envSpanRatio = System.getenv(OTEL_SPAN_SAMPLING_ARG); - if (envSpanRatio != null && !envSpanRatio.isEmpty()) { - return envSpanRatio; - } + public String getSpanSampling() { return spanSampling; } diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java index 8058c9840aed..7fc421c80a9b 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingUtil.java @@ -76,10 +76,10 @@ public static void initTracing( private static void initialize(String serviceName, ConfigurationSource conf) { //Fetch and log the right tracing parameters based on config, environment variable and default value priority. TracingConfig tracingConfig = conf.getObject(TracingConfig.class); - String otelEndPoint = tracingConfig.getTracingEndpoint(conf); - double samplerRatio = tracingConfig.getTraceSamplerRatio(conf); + String otelEndPoint = tracingConfig.getTracingEndpoint(); + double samplerRatio = tracingConfig.getTraceSamplerRatio(); LOG.info("Sampling Trace Config = '{}'", samplerRatio); - String spanSamplingConfig = tracingConfig.getSpanSampling(conf); + String spanSamplingConfig = tracingConfig.getSpanSampling(); LOG.info("Sampling Span Config = '{}'", spanSamplingConfig); Map spanMap = parseSpanSamplingConfig(spanSamplingConfig); From 5e73d5f4c09cb1d0afabd4c704ac5065bfedd795 Mon Sep 17 00:00:00 2001 From: sravani-revuri Date: Fri, 3 Apr 2026 22:17:35 +0530 Subject: [PATCH 5/6] small change --- .../main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java index 451c80b5e7fa..0cc052283292 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java @@ -80,7 +80,7 @@ public boolean isTracingEnabled() { } @PostConstruct - public void validate() { + void validate() { if (tracingEndpoint.isEmpty()) { tracingEndpoint = System.getenv(OTEL_EXPORTER_OTLP_ENDPOINT); } From 18b0e4977f792d48793fde98ec850946ae8b2eb3 Mon Sep 17 00:00:00 2001 From: sravani-revuri Date: Sat, 4 Apr 2026 10:38:12 +0530 Subject: [PATCH 6/6] fixed issue failing test --- .../main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java index 0cc052283292..451c80b5e7fa 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/tracing/TracingConfig.java @@ -80,7 +80,7 @@ public boolean isTracingEnabled() { } @PostConstruct - void validate() { + public void validate() { if (tracingEndpoint.isEmpty()) { tracingEndpoint = System.getenv(OTEL_EXPORTER_OTLP_ENDPOINT); }