Skip to content

Commit 0a9f16b

Browse files
otelbot[bot]laurit
andauthored
Update the OpenTelemetry SDK version to 1.61.0 (open-telemetry#17817)
Co-authored-by: otelbot <197425009+otelbot@users.noreply.github.com> Co-authored-by: Lauri Tulmin <ltulmin@splunk.com>
1 parent 0e10a9b commit 0a9f16b

File tree

11 files changed

+141
-40
lines changed

11 files changed

+141
-40
lines changed

.github/config/lychee.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ exclude = [
2020
'^http://code.google.com/p/concurrentlinkedhashmap$',
2121
'^https://softwareengineering.stackexchange.com/questions/29727.*',
2222
'^https://central.sonatype.com/service/rest/repository/browse/maven-snapshots/io/opentelemetry/$',
23+
# url in zipkin pom files points to a non-existent location
24+
'^https://github.com/openzipkin/zipkin-reporter-java/zipkin-reporter$',
25+
'^https://github.com/openzipkin/zipkin-reporter-java/zipkin-sender-okhttp3$',
2326
# flaky links
2427
'^http://www.slf4j.org.*',
2528
'^https://logback.qos.ch/.*',

dependencyManagement/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
data class DependencySet(val group: String, val version: String, val modules: List<String>)
66

77
// this line is managed by .github/scripts/update-sdk-version.sh
8-
val otelSdkVersion = "1.60.1"
8+
val otelSdkVersion = "1.61.0"
99
val otelContribVersion = "1.55.0-alpha"
1010
val otelSdkAlphaVersion = otelSdkVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1")
1111

examples/distro/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ subprojects {
2727
ext {
2828
versions = [
2929
// this line is managed by .github/scripts/update-sdk-version.sh
30-
opentelemetrySdk : "1.60.1",
30+
opentelemetrySdk : "1.61.0",
3131

3232
// these lines are managed by .github/scripts/update-version.sh
3333
opentelemetryJavaagent : "2.27.0-SNAPSHOT",

examples/extension/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ version = "1.0"
2424

2525
val versions = mapOf(
2626
// this line is managed by .github/scripts/update-sdk-version.sh
27-
"opentelemetrySdk" to "1.60.1",
27+
"opentelemetrySdk" to "1.61.0",
2828

2929
// these lines are managed by .github/scripts/update-version.sh
3030
"opentelemetryJavaagent" to "2.27.0-SNAPSHOT",

instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/internal/ResourceDeclarativeConfigTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ void endToEnd() {
4646

4747
boolean java8 = "1.8".equals(System.getProperty("java.specification.version"));
4848
OpenTelemetrySdk openTelemetrySdk =
49-
DeclarativeConfiguration.parseAndCreate(new ByteArrayInputStream(yaml.getBytes(UTF_8)));
49+
DeclarativeConfiguration.parseAndCreate(new ByteArrayInputStream(yaml.getBytes(UTF_8)))
50+
.getSdk();
5051
assertThat(openTelemetrySdk.getSdkTracerProvider())
5152
.extracting("sharedState.resource", as(InstanceOfAssertFactories.type(Resource.class)))
5253
.satisfies(

instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
4242
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider;
4343
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
44+
import java.util.ArrayList;
4445
import java.util.List;
4546
import java.util.Optional;
4647
import java.util.function.Function;
@@ -166,7 +167,7 @@ public OpenTelemetry openTelemetry(
166167
OpenTelemetryConfigurationModel model, ApplicationContext applicationContext) {
167168
OpenTelemetrySdkComponentLoader componentLoader =
168169
new OpenTelemetrySdkComponentLoader(applicationContext);
169-
OpenTelemetrySdk sdk = DeclarativeConfiguration.create(model, componentLoader);
170+
OpenTelemetrySdk sdk = DeclarativeConfiguration.create(model, componentLoader).getSdk();
170171
Runtime.getRuntime().addShutdownHook(new Thread(sdk::close));
171172
logStart();
172173
return new SpringOpenTelemetrySdk(sdk, SpringConfigProvider.create(model, componentLoader));
@@ -270,7 +271,7 @@ public OpenTelemetrySdkComponentLoader(ApplicationContext applicationContext) {
270271

271272
@Override
272273
public <T> Iterable<T> load(Class<T> spiClass) {
273-
List<T> spi = spiHelper.load(spiClass);
274+
List<T> spi = new ArrayList<>(spiHelper.load(spiClass));
274275
List<T> beans =
275276
applicationContext.getBeanProvider(spiClass).orderedStream().collect(toList());
276277
spi.addAll(beans);

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentStarterImpl.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ private void installTransformers() {
123123
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/10921
124124
InetAddressClassFileTransformer transformer = new InetAddressClassFileTransformer();
125125
instrumentation.addTransformer(transformer, true);
126+
// transforms Thread getContextClassLoader and setContextClassLoader calls in
127+
// io.opentelemetry.sdk.metrics.internal.state.CallbackRegistration to use doPrivileged so that
128+
// security manager wouldn't deny these calls
129+
instrumentation.addTransformer(new CallbackRegistrationClassFileTransformer(), true);
126130
}
127131

128132
@SuppressWarnings("SystemOut")
@@ -245,4 +249,73 @@ public void visitMethodInsn(
245249
return hookInserted ? cw.toByteArray() : null;
246250
}
247251
}
252+
253+
private static class CallbackRegistrationClassFileTransformer implements ClassFileTransformer {
254+
@Override
255+
public byte[] transform(
256+
ClassLoader loader,
257+
String className,
258+
Class<?> classBeingRedefined,
259+
ProtectionDomain protectionDomain,
260+
byte[] classfileBuffer) {
261+
if (loader != getClass().getClassLoader()
262+
|| !"io/opentelemetry/sdk/metrics/internal/state/CallbackRegistration"
263+
.equals(className)) {
264+
return null;
265+
}
266+
ClassReader cr = new ClassReader(classfileBuffer);
267+
ClassWriter cw = new ClassWriter(cr, 0);
268+
ClassVisitor cv =
269+
new ClassVisitor(AsmApi.VERSION, cw) {
270+
@Override
271+
public MethodVisitor visitMethod(
272+
int access, String name, String descriptor, String signature, String[] exceptions) {
273+
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
274+
if (!"invokeCallback".equals(name) && !"<init>".equals(name)) {
275+
return mv;
276+
}
277+
return new MethodVisitor(api, mv) {
278+
@Override
279+
public void visitMethodInsn(
280+
int opcode,
281+
String ownerClassName,
282+
String methodName,
283+
String descriptor,
284+
boolean isInterface) {
285+
if ("getContextClassLoader".equals(methodName)
286+
&& Type.getInternalName(Thread.class).equals(ownerClassName)) {
287+
super.visitMethodInsn(
288+
Opcodes.INVOKESTATIC,
289+
Type.getInternalName(Utils.class),
290+
"getContextClassLoader",
291+
"("
292+
+ Type.getDescriptor(Thread.class)
293+
+ ")"
294+
+ Type.getDescriptor(ClassLoader.class),
295+
false);
296+
} else if ("setContextClassLoader".equals(methodName)
297+
&& Type.getInternalName(Thread.class).equals(ownerClassName)) {
298+
super.visitMethodInsn(
299+
Opcodes.INVOKESTATIC,
300+
Type.getInternalName(Utils.class),
301+
"setContextClassLoader",
302+
"("
303+
+ Type.getDescriptor(Thread.class)
304+
+ Type.getDescriptor(ClassLoader.class)
305+
+ ")V",
306+
false);
307+
} else {
308+
super.visitMethodInsn(
309+
opcode, ownerClassName, methodName, descriptor, isInterface);
310+
}
311+
}
312+
};
313+
}
314+
};
315+
316+
cr.accept(cv, 0);
317+
318+
return cw.toByteArray();
319+
}
320+
}
248321
}

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/Utils.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.opentelemetry.javaagent.bootstrap.AgentClassLoader;
1111
import io.opentelemetry.javaagent.bootstrap.AgentClassLoader.BootstrapClassLoaderProxy;
1212
import io.opentelemetry.javaagent.bootstrap.AgentInitializer;
13+
import java.security.PrivilegedAction;
1314
import net.bytebuddy.description.method.MethodDescription;
1415
import net.bytebuddy.description.type.TypeDefinition;
1516

@@ -54,5 +55,25 @@ public static MethodDescription getMethodDefinition(TypeDefinition type, String
5455
return type.getDeclaredMethods().filter(named(methodName)).getOnly();
5556
}
5657

58+
// used from generated bytecode in AgentStarterImpl.CallbackRegistrationClassFileTransformer
59+
public static ClassLoader getContextClassLoader(Thread thread) {
60+
return doPrivileged((PrivilegedAction<ClassLoader>) thread::getContextClassLoader);
61+
}
62+
63+
// used from generated bytecode in AgentStarterImpl.CallbackRegistrationClassFileTransformer
64+
public static void setContextClassLoader(Thread thread, ClassLoader classLoader) {
65+
doPrivileged(
66+
(PrivilegedAction<Void>)
67+
() -> {
68+
thread.setContextClassLoader(classLoader);
69+
return null;
70+
});
71+
}
72+
73+
@SuppressWarnings("removal") // AccessController is deprecated for removal
74+
private static <T> T doPrivileged(PrivilegedAction<T> action) {
75+
return java.security.AccessController.doPrivileged(action);
76+
}
77+
5778
private Utils() {}
5879
}

0 commit comments

Comments
 (0)