Skip to content

Commit 159cb5f

Browse files
committed
Merge branch 'main' into assertions-refactoring
2 parents dfe3af3 + bfd7390 commit 159cb5f

File tree

16 files changed

+268
-135
lines changed

16 files changed

+268
-135
lines changed

.github/renovate.json5

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66
"packageRules": [
77
{
88
"matchPackageNames": [
9-
"io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha",
10-
"io.opentelemetry.semconv:opentelemetry-semconv",
11-
"io.opentelemetry.semconv:opentelemetry-semconv-incubating",
12-
"io.opentelemetry.proto:opentelemetry-proto"
9+
"io.opentelemetry:**",
10+
"io.opentelemetry.instrumentation:**",
11+
"io.opentelemetry.semconv:**",
12+
"io.opentelemetry.proto:**"
1313
],
1414
// Renovate's default behavior is only to update from unstable -> unstable if it's for the
1515
// major.minor.patch, under the assumption that you would want to update to the stable version
1616
// of that release instead of the unstable version for a future release
17-
// (TODO remove once the artifacts above release stable versions)
1817
"ignoreUnstable": false
1918
},
2019
{
@@ -25,10 +24,6 @@
2524
"matchPackagePrefixes": ["io.micrometer:"],
2625
"groupName": "micrometer packages"
2726
},
28-
{
29-
"matchPackagePrefixes": ["com.gradle.enterprise"],
30-
"groupName": "gradle enterprise packages"
31-
},
3227
{
3328
// prevent 3.0.1u2 -> 3.0.1
3429
"matchPackageNames": ["com.google.code.findbugs:annotations"],

.github/workflows/build.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ jobs:
3030
cache-read-only: ${{ github.event_name == 'pull_request' }}
3131
- name: Gradle build and test
3232
run: ./gradlew build -x test
33-
env:
34-
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
3533

3634
test:
3735
name: test (${{ matrix.test-java-version }})
@@ -71,8 +69,6 @@ jobs:
7169
-PtestJavaVersion=${{ matrix.test-java-version }}
7270
-Porg.gradle.java.installations.paths=${{ steps.setup-test-java.outputs.path }}
7371
-Porg.gradle.java.installations.auto-download=false
74-
env:
75-
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
7672
7773
integration-test:
7874
runs-on: ubuntu-latest
@@ -89,10 +85,9 @@ jobs:
8985
uses: gradle/actions/setup-gradle@v4
9086
with:
9187
cache-read-only: ${{ github.event_name == 'pull_request' }}
88+
9289
- name: Integration test
9390
run: ./gradlew integrationTest
94-
env:
95-
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
9691

9792
- name: Save integration test results
9893
uses: actions/upload-artifact@v4

RELEASING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ as the last step, which publishes a snapshot build to
1212

1313
## Release cadence
1414

15-
This repository roughly targets monthly minor releases from the `main` branch on the Friday after
15+
This repository roughly targets monthly minor releases from the `main` branch on the Tuesday after
1616
the second Monday of the month (roughly a couple of days after the monthly minor release of
17-
[opentelemetry-java-instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation)).
17+
[opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)).
1818

1919
## Preparing a new major or minor release
2020

buildSrc/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ dependencies {
1515
implementation("com.diffplug.spotless:spotless-plugin-gradle:6.25.0")
1616
implementation("net.ltgt.gradle:gradle-errorprone-plugin:4.1.0")
1717
implementation("net.ltgt.gradle:gradle-nullaway-plugin:2.1.0")
18-
implementation("com.gradle.enterprise:com.gradle.enterprise.gradle.plugin:3.18.2")
1918
}
2019

2120
spotless {

buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,6 @@ tasks {
7171
showCauses = true
7272
showStackTraces = true
7373
}
74-
75-
develocity.testRetry {
76-
// You can see tests that were retried by this mechanism in the collected test reports and build scans.
77-
if (System.getenv().containsKey("CI") || rootProject.hasProperty("retryTests")) {
78-
maxRetries.set(5)
79-
}
80-
}
8174
}
8275

8376
withType<Javadoc>().configureEach {

dependencyManagement/build.gradle.kts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ data class DependencySet(val group: String, val version: String, val modules: Li
77
val dependencyVersions = hashMapOf<String, String>()
88
rootProject.extra["versions"] = dependencyVersions
99

10-
val otelInstrumentationVersion = "2.10.0-alpha"
11-
1210
val DEPENDENCY_BOMS = listOf(
1311
"com.fasterxml.jackson:jackson-bom:2.18.2",
1412
"com.google.guava:guava-bom:33.3.1-jre",
1513
"com.linecorp.armeria:armeria-bom:1.31.2",
1614
"org.junit:junit-bom:5.11.3",
1715
"io.grpc:grpc-bom:1.68.2",
18-
"io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:${otelInstrumentationVersion}",
16+
"io.opentelemetry:opentelemetry-bom-alpha:1.44.1-alpha",
1917
"org.testcontainers:testcontainers-bom:1.20.4"
2018
)
2119

@@ -78,12 +76,6 @@ javaPlatform {
7876

7977
dependencies {
8078
for (bom in DEPENDENCY_BOMS) {
81-
// this is needed until io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha
82-
// is updated to contain the latest version of opentelemetry-semconv
83-
if (bom.equals("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:${otelInstrumentationVersion}")) {
84-
api(platform(bom))
85-
continue
86-
}
8779
api(enforcedPlatform(bom))
8880
val split = bom.split(':')
8981
dependencyVersions[split[0]] = split[2]

jmx-scraper/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ dependencies {
2222
runtimeOnly("io.opentelemetry:opentelemetry-exporter-otlp")
2323
runtimeOnly("io.opentelemetry:opentelemetry-exporter-logging")
2424

25-
implementation("io.opentelemetry.instrumentation:opentelemetry-jmx-metrics")
25+
implementation("io.opentelemetry.instrumentation:opentelemetry-jmx-metrics:2.10.0-alpha")
2626

2727
testImplementation("org.junit-pioneer:junit-pioneer")
2828
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.maven;
7+
8+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
9+
import io.opentelemetry.sdk.resources.Resource;
10+
import java.lang.reflect.InvocationTargetException;
11+
import java.lang.reflect.Method;
12+
13+
/** Utility class to use the {@link AutoConfiguredOpenTelemetrySdk}. */
14+
public class AutoConfigureUtil2 {
15+
16+
private AutoConfigureUtil2() {}
17+
18+
/**
19+
* Returns the {@link Resource} that was autoconfigured.
20+
*
21+
* <p>Inspired by {@link
22+
* io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil#getConfig(AutoConfiguredOpenTelemetrySdk)}
23+
*/
24+
public static Resource getResource(
25+
AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) {
26+
try {
27+
Method method = AutoConfiguredOpenTelemetrySdk.class.getDeclaredMethod("getResource");
28+
method.setAccessible(true);
29+
return (Resource) method.invoke(autoConfiguredOpenTelemetrySdk);
30+
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
31+
throw new IllegalStateException(
32+
"Error calling getResource on AutoConfiguredOpenTelemetrySdk", e);
33+
}
34+
}
35+
}

maven-extension/src/main/java/io/opentelemetry/maven/OpenTelemetrySdkService.java

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,24 @@
55

66
package io.opentelemetry.maven;
77

8+
import com.google.common.annotations.VisibleForTesting;
89
import io.opentelemetry.api.OpenTelemetry;
910
import io.opentelemetry.api.trace.Tracer;
1011
import io.opentelemetry.context.propagation.ContextPropagators;
1112
import io.opentelemetry.maven.semconv.MavenOtelSemanticAttributes;
1213
import io.opentelemetry.sdk.OpenTelemetrySdk;
1314
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
15+
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
16+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
17+
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
1418
import io.opentelemetry.sdk.common.CompletableResultCode;
19+
import io.opentelemetry.sdk.resources.Resource;
1520
import java.io.Closeable;
21+
import java.util.Collections;
1622
import java.util.HashMap;
17-
import java.util.Locale;
1823
import java.util.Map;
24+
import java.util.Optional;
1925
import java.util.concurrent.TimeUnit;
20-
import javax.annotation.Nullable;
2126
import javax.annotation.PreDestroy;
2227
import javax.inject.Named;
2328
import javax.inject.Singleton;
@@ -36,6 +41,10 @@ public final class OpenTelemetrySdkService implements Closeable {
3641

3742
private final OpenTelemetrySdk openTelemetrySdk;
3843

44+
@VisibleForTesting final Resource resource;
45+
46+
private final ConfigProperties configProperties;
47+
3948
private final Tracer tracer;
4049

4150
private final boolean mojosInstrumentationEnabled;
@@ -47,32 +56,68 @@ public OpenTelemetrySdkService() {
4756
"OpenTelemetry: Initialize OpenTelemetrySdkService v{}...",
4857
MavenOtelSemanticAttributes.TELEMETRY_DISTRO_VERSION_VALUE);
4958

50-
// Change default of "otel.[traces,metrics,logs].exporter" from "otlp" to "none"
51-
// The impacts are
52-
// * If no otel exporter settings are passed, then the Maven extension will not export
53-
// rather than exporting on OTLP GRPC to http://localhost:4317
54-
// * If OTEL_EXPORTER_OTLP_ENDPOINT is defined but OTEL_[TRACES,METRICS,LOGS]_EXPORTER,
55-
// is not, then don't export
56-
Map<String, String> properties = new HashMap<>();
57-
properties.put("otel.traces.exporter", "none");
58-
properties.put("otel.metrics.exporter", "none");
59-
properties.put("otel.logs.exporter", "none");
60-
6159
AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk =
6260
AutoConfiguredOpenTelemetrySdk.builder()
6361
.setServiceClassLoader(getClass().getClassLoader())
64-
.addPropertiesSupplier(() -> properties)
62+
.addPropertiesCustomizer(
63+
OpenTelemetrySdkService::requireExplicitConfigOfTheOtlpExporter)
6564
.disableShutdownHook()
6665
.build();
6766

6867
this.openTelemetrySdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk();
68+
this.configProperties =
69+
Optional.ofNullable(AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk))
70+
.orElseGet(() -> DefaultConfigProperties.createFromMap(Collections.emptyMap()));
71+
72+
this.resource = AutoConfigureUtil2.getResource(autoConfiguredOpenTelemetrySdk);
73+
// Display resource attributes in debug logs for troubleshooting when traces are not found in
74+
// the observability backend, helping understand `service.name`, `service.namespace`, etc.
75+
logger.debug("OpenTelemetry: OpenTelemetrySdkService initialized, resource:{}", resource);
6976

70-
Boolean mojoSpansEnabled = getBooleanConfig("otel.instrumentation.maven.mojo.enabled");
71-
this.mojosInstrumentationEnabled = mojoSpansEnabled == null || mojoSpansEnabled;
77+
this.mojosInstrumentationEnabled =
78+
configProperties.getBoolean("otel.instrumentation.maven.mojo.enabled", true);
7279

7380
this.tracer = openTelemetrySdk.getTracer("io.opentelemetry.contrib.maven", VERSION);
7481
}
7582

83+
/**
84+
* The OTel SDK by default sends data to the OTLP gRPC endpoint localhost:4317 if no exporter and
85+
* no OTLP exporter endpoint are defined. This is not suited for a build tool for which we want
86+
* the OTel SDK to be disabled by default.
87+
*
88+
* <p>Change the OTel SDL behavior: if none of the exporter and the OTLP exporter endpoint are
89+
* defined, explicitly disable the exporter setting "{@code
90+
* otel.[traces,metrics,logs].exporter=none}"
91+
*
92+
* @return The properties to be returned by {@link
93+
* io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder#addPropertiesCustomizer(java.util.function.Function)}
94+
*/
95+
static Map<String, String> requireExplicitConfigOfTheOtlpExporter(
96+
ConfigProperties configProperties) {
97+
98+
Map<String, String> properties = new HashMap<>();
99+
if (configProperties.getString("otel.exporter.otlp.endpoint") != null) {
100+
logger.debug("OpenTelemetry: OTLP exporter endpoint is explicitly configured");
101+
return properties;
102+
}
103+
String[] signalTypes = {"traces", "metrics", "logs"};
104+
for (String signalType : signalTypes) {
105+
boolean isExporterImplicitlyConfiguredToOtlp =
106+
configProperties.getString("otel." + signalType + ".exporter") == null;
107+
boolean isOtlpExporterEndpointSpecified =
108+
configProperties.getString("otel.exporter.otlp." + signalType + ".endpoint") != null;
109+
110+
if (isExporterImplicitlyConfiguredToOtlp && !isOtlpExporterEndpointSpecified) {
111+
logger.debug(
112+
"OpenTelemetry: Disabling default OTLP exporter endpoint for signal {} exporter",
113+
signalType);
114+
properties.put("otel." + signalType + ".exporter", "none");
115+
}
116+
}
117+
118+
return properties;
119+
}
120+
76121
@PreDestroy
77122
@Override
78123
public synchronized void close() {
@@ -97,6 +142,10 @@ public Tracer getTracer() {
97142
return this.tracer;
98143
}
99144

145+
public ConfigProperties getConfigProperties() {
146+
return configProperties;
147+
}
148+
100149
/** Returns the {@link ContextPropagators} for this {@link OpenTelemetry}. */
101150
public ContextPropagators getPropagators() {
102151
return this.openTelemetrySdk.getPropagators();
@@ -105,17 +154,4 @@ public ContextPropagators getPropagators() {
105154
public boolean isMojosInstrumentationEnabled() {
106155
return mojosInstrumentationEnabled;
107156
}
108-
109-
@Nullable
110-
private static Boolean getBooleanConfig(String name) {
111-
String value = System.getProperty(name);
112-
if (value != null) {
113-
return Boolean.parseBoolean(value);
114-
}
115-
value = System.getenv(name.toUpperCase(Locale.ROOT).replace('.', '_'));
116-
if (value != null) {
117-
return Boolean.parseBoolean(value);
118-
}
119-
return null;
120-
}
121157
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.maven;
7+
8+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
9+
import java.lang.reflect.Method;
10+
import org.junit.jupiter.api.Test;
11+
12+
class AutoConfigureUtil2Test {
13+
14+
/**
15+
* Verify the reflection call works with the current version of AutoConfiguredOpenTelemetrySdk.
16+
*
17+
* @throws NoSuchMethodException if the method does not exist
18+
*/
19+
@Test
20+
void test_getResource() throws NoSuchMethodException {
21+
Method method = AutoConfiguredOpenTelemetrySdk.class.getDeclaredMethod("getResource");
22+
method.setAccessible(true);
23+
}
24+
}

0 commit comments

Comments
 (0)