Skip to content

Commit 3806d93

Browse files
Support IPv6 values for DD_AGENT_HOST and DD_TRACE_AGENT_URL (#7984)
* initial implementation for support ipv6 addresses in dd_agent_host rebasing * fix: Fix test using getAgentUrl() instead of agentUrl * updating unit tests rebasing * cleanup * fixing bug with parsing host with brackets --------- Co-authored-by: Bruce Bujon <[email protected]>
1 parent ae1aa30 commit 3806d93

File tree

2 files changed

+62
-32
lines changed

2 files changed

+62
-32
lines changed

communication/src/test/groovy/datadog/communication/ddagent/SharedCommunicationsObjectsSpecification.groovy

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import datadog.trace.test.util.DDSpecification
66
import okhttp3.HttpUrl
77
import okhttp3.OkHttpClient
88

9+
import static datadog.trace.api.config.TracerConfig.AGENT_HOST
10+
911
class SharedCommunicationsObjectsSpecification extends DDSpecification {
1012
SharedCommunicationObjects sco = new SharedCommunicationObjects()
1113

@@ -90,4 +92,36 @@ class SharedCommunicationsObjectsSpecification extends DDSpecification {
9092
sco.monitoring.is(monitoring)
9193
sco.featuresDiscovery.is(agentFeaturesDiscovery)
9294
}
95+
96+
void 'supports ipv6 agent host w/o brackets'() {
97+
given:
98+
injectSysConfig(AGENT_HOST, "2600:1f18:19c0:bd07:d55b::17")
99+
Config config = Mock()
100+
101+
when:
102+
sco.createRemaining(config)
103+
104+
then:
105+
1 * config.getAgentUrl() >> 'http://[2600:1f18:19c0:bd07:d55b::17]:8126'
106+
1 * config.agentNamedPipe >> null
107+
1 * config.agentTimeout >> 1
108+
1 * config.agentUnixDomainSocket >> null
109+
sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/'
110+
}
111+
112+
void 'supports ipv6 agent host w/ brackets'() {
113+
given:
114+
injectSysConfig(AGENT_HOST, "[2600:1f18:19c0:bd07:d55b::17]")
115+
Config config = Mock()
116+
117+
when:
118+
sco.createRemaining(config)
119+
120+
then:
121+
1 * config.getAgentUrl() >> 'http://[2600:1f18:19c0:bd07:d55b::17]:8126'
122+
1 * config.agentNamedPipe >> null
123+
1 * config.agentTimeout >> 1
124+
1 * config.agentUnixDomainSocket >> null
125+
sco.agentUrl as String == 'http://[2600:1f18:19c0:bd07:d55b::17]:8126/'
126+
}
93127
}

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
694694

695695
if (agentHostFromEnvironment == null) {
696696
agentHost = DEFAULT_AGENT_HOST;
697+
} else if (agentHostFromEnvironment.charAt(0) == '[') {
698+
agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length() - 1);
697699
} else {
698700
agentHost = agentHostFromEnvironment;
699701
}
@@ -704,8 +706,12 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
704706
agentPort = agentPortFromEnvironment;
705707
}
706708

707-
if (rebuildAgentUrl) {
708-
agentUrl = "http://" + agentHost + ":" + agentPort;
709+
if (rebuildAgentUrl) { // check if agenthost contains ':'
710+
if (agentHost.indexOf(':') != -1) { // Checking to see whether host address is IPv6 vs IPv4
711+
agentUrl = "http://[" + agentHost + "]:" + agentPort;
712+
} else {
713+
agentUrl = "http://" + agentHost + ":" + agentPort;
714+
}
709715
} else {
710716
agentUrl = agentUrlFromEnvironment;
711717
}
@@ -1229,8 +1235,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
12291235
}
12301236
telemetryMetricsInterval = telemetryInterval;
12311237

1232-
telemetryMetricsEnabled =
1233-
configProvider.getBoolean(GeneralConfig.TELEMETRY_METRICS_ENABLED, true);
1238+
telemetryMetricsEnabled = configProvider.getBoolean(TELEMETRY_METRICS_ENABLED, true);
12341239

12351240
isTelemetryLogCollectionEnabled =
12361241
instrumenterConfig.isTelemetryEnabled()
@@ -1724,17 +1729,14 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
17241729
apiKey = tmpApiKey;
17251730

17261731
boolean longRunningEnabled =
1727-
configProvider.getBoolean(
1728-
TracerConfig.TRACE_LONG_RUNNING_ENABLED,
1729-
ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_ENABLED);
1732+
configProvider.getBoolean(TRACE_LONG_RUNNING_ENABLED, DEFAULT_TRACE_LONG_RUNNING_ENABLED);
17301733
long longRunningTraceInitialFlushInterval =
17311734
configProvider.getLong(
1732-
TracerConfig.TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL,
1735+
TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL,
17331736
DEFAULT_TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL);
17341737
long longRunningTraceFlushInterval =
17351738
configProvider.getLong(
1736-
TracerConfig.TRACE_LONG_RUNNING_FLUSH_INTERVAL,
1737-
ConfigDefaults.DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL);
1739+
TRACE_LONG_RUNNING_FLUSH_INTERVAL, DEFAULT_TRACE_LONG_RUNNING_FLUSH_INTERVAL);
17381740

17391741
if (longRunningEnabled
17401742
&& (longRunningTraceInitialFlushInterval < 10
@@ -1761,16 +1763,14 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
17611763

17621764
this.sparkTaskHistogramEnabled =
17631765
configProvider.getBoolean(
1764-
SPARK_TASK_HISTOGRAM_ENABLED, ConfigDefaults.DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED);
1766+
SPARK_TASK_HISTOGRAM_ENABLED, DEFAULT_SPARK_TASK_HISTOGRAM_ENABLED);
17651767

17661768
this.sparkAppNameAsService =
1767-
configProvider.getBoolean(
1768-
SPARK_APP_NAME_AS_SERVICE, ConfigDefaults.DEFAULT_SPARK_APP_NAME_AS_SERVICE);
1769+
configProvider.getBoolean(SPARK_APP_NAME_AS_SERVICE, DEFAULT_SPARK_APP_NAME_AS_SERVICE);
17691770

17701771
this.jaxRsExceptionAsErrorsEnabled =
17711772
configProvider.getBoolean(
1772-
JAX_RS_EXCEPTION_AS_ERROR_ENABLED,
1773-
ConfigDefaults.DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED);
1773+
JAX_RS_EXCEPTION_AS_ERROR_ENABLED, DEFAULT_JAX_RS_EXCEPTION_AS_ERROR_ENABLED);
17741774

17751775
axisPromoteResourceName = configProvider.getBoolean(AXIS_PROMOTE_RESOURCE_NAME, false);
17761776

@@ -1780,7 +1780,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
17801780

17811781
this.tracePostProcessingTimeout =
17821782
configProvider.getLong(
1783-
TRACE_POST_PROCESSING_TIMEOUT, ConfigDefaults.DEFAULT_TRACE_POST_PROCESSING_TIMEOUT);
1783+
TRACE_POST_PROCESSING_TIMEOUT, DEFAULT_TRACE_POST_PROCESSING_TIMEOUT);
17841784

17851785
if (isLlmObsEnabled()) {
17861786
log.debug("Attempting to enable LLM Observability");
@@ -1821,31 +1821,28 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
18211821

18221822
this.telemetryDebugRequestsEnabled =
18231823
configProvider.getBoolean(
1824-
GeneralConfig.TELEMETRY_DEBUG_REQUESTS_ENABLED,
1825-
ConfigDefaults.DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED);
1824+
TELEMETRY_DEBUG_REQUESTS_ENABLED, DEFAULT_TELEMETRY_DEBUG_REQUESTS_ENABLED);
18261825

18271826
this.agentlessLogSubmissionEnabled =
1828-
configProvider.getBoolean(GeneralConfig.AGENTLESS_LOG_SUBMISSION_ENABLED, false);
1827+
configProvider.getBoolean(AGENTLESS_LOG_SUBMISSION_ENABLED, false);
18291828
this.agentlessLogSubmissionQueueSize =
1830-
configProvider.getInteger(GeneralConfig.AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE, 1024);
1829+
configProvider.getInteger(AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE, 1024);
18311830
this.agentlessLogSubmissionLevel =
1832-
configProvider.getString(GeneralConfig.AGENTLESS_LOG_SUBMISSION_LEVEL, "INFO");
1833-
this.agentlessLogSubmissionUrl =
1834-
configProvider.getString(GeneralConfig.AGENTLESS_LOG_SUBMISSION_URL);
1831+
configProvider.getString(AGENTLESS_LOG_SUBMISSION_LEVEL, "INFO");
1832+
this.agentlessLogSubmissionUrl = configProvider.getString(AGENTLESS_LOG_SUBMISSION_URL);
18351833
this.agentlessLogSubmissionProduct = isCiVisibilityEnabled() ? "citest" : "apm";
18361834

18371835
this.cloudPayloadTaggingServices =
18381836
configProvider.getSet(
1839-
TracerConfig.TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES,
1840-
ConfigDefaults.DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES);
1837+
TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES, DEFAULT_TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES);
18411838
this.cloudRequestPayloadTagging =
1842-
configProvider.getList(TracerConfig.TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, null);
1839+
configProvider.getList(TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING, null);
18431840
this.cloudResponsePayloadTagging =
1844-
configProvider.getList(TracerConfig.TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING, null);
1841+
configProvider.getList(TRACE_CLOUD_RESPONSE_PAYLOAD_TAGGING, null);
18451842
this.cloudPayloadTaggingMaxDepth =
1846-
configProvider.getInteger(TracerConfig.TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH, 10);
1843+
configProvider.getInteger(TRACE_CLOUD_PAYLOAD_TAGGING_MAX_DEPTH, 10);
18471844
this.cloudPayloadTaggingMaxTags =
1848-
configProvider.getInteger(TracerConfig.TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS, 758);
1845+
configProvider.getInteger(TRACE_CLOUD_PAYLOAD_TAGGING_MAX_TAGS, 758);
18491846

18501847
this.dependecyResolutionPeriodMillis =
18511848
configProvider.getLong(
@@ -1854,8 +1851,7 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
18541851

18551852
timelineEventsEnabled =
18561853
configProvider.getBoolean(
1857-
ProfilingConfig.PROFILING_TIMELINE_EVENTS_ENABLED,
1858-
ProfilingConfig.PROFILING_TIMELINE_EVENTS_ENABLED_DEFAULT);
1854+
PROFILING_TIMELINE_EVENTS_ENABLED, PROFILING_TIMELINE_EVENTS_ENABLED_DEFAULT);
18591855

18601856
if (appSecScaEnabled != null
18611857
&& appSecScaEnabled
@@ -3834,7 +3830,7 @@ public boolean isTraceAnalyticsIntegrationEnabled(
38343830
}
38353831

38363832
public boolean isSamplingMechanismValidationDisabled() {
3837-
return configProvider.getBoolean(TracerConfig.SAMPLING_MECHANISM_VALIDATION_DISABLED, false);
3833+
return configProvider.getBoolean(SAMPLING_MECHANISM_VALIDATION_DISABLED, false);
38383834
}
38393835

38403836
public <T extends Enum<T>> T getEnumValue(

0 commit comments

Comments
 (0)