Skip to content

Commit d657d8a

Browse files
authored
Upstream update and shadow plugin configuration (#794)
* Bumping versions and fixing symbols * Merging services * Using resolvable configuration * Renaming upstream distro name & version provider
1 parent 8744178 commit d657d8a

File tree

5 files changed

+52
-33
lines changed

5 files changed

+52
-33
lines changed

agent/build.gradle.kts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
import com.github.jk1.license.filter.LicenseBundleNormalizer
2-
import com.github.jk1.license.render.InventoryMarkdownReportRenderer
3-
import java.nio.file.Files
4-
import java.util.*
5-
import java.util.stream.Collectors
6-
71
plugins {
82
id("elastic-otel.agent-packaging-conventions")
93
id("elastic-otel.sign-and-publish-conventions")
@@ -28,8 +22,8 @@ dependencies {
2822

2923
licenseReport {
3024
configurations = arrayOf(
31-
project.configurations.bootstrapLibs.name,
32-
project.configurations.javaagentLibs.name
25+
project.configurations.bootstrapLibsClasspath.name,
26+
project.configurations.javaagentLibsClasspath.name
3327
// No need to include the upstreamAgent, because it already has all dependent licenses packaged
3428
// Those will be preserved in our JAR
3529
)

buildSrc/src/main/kotlin/elastic-otel.agent-packaging-conventions.gradle.kts

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowCopyAction
12
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
23
import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext
34
import org.apache.tools.zip.ZipEntry
@@ -20,12 +21,30 @@ plugins {
2021
// this configuration collects libs that will be placed in the bootstrap classloader
2122
val bootstrapLibs: Configuration by configurations.creating {
2223
isCanBeConsumed = false
24+
isCanBeResolved = false
2325
}
2426
val javaagentLibs: Configuration by configurations.creating {
2527
isCanBeConsumed = false
28+
isCanBeResolved = false
2629
}
2730
val upstreamAgent: Configuration by configurations.creating {
2831
isCanBeConsumed = false
32+
isCanBeResolved = false
33+
}
34+
val bootstrapLibsClasspath: Configuration by configurations.creating {
35+
extendsFrom(bootstrapLibs)
36+
isCanBeConsumed = false
37+
isCanBeResolved = true
38+
}
39+
val javaagentLibsClasspath: Configuration by configurations.creating {
40+
extendsFrom(javaagentLibs)
41+
isCanBeConsumed = false
42+
isCanBeResolved = true
43+
}
44+
val upstreamAgentClasspath: Configuration by configurations.creating {
45+
extendsFrom(upstreamAgent)
46+
isCanBeConsumed = false
47+
isCanBeResolved = true
2948
}
3049

3150
dependencies {
@@ -70,14 +89,15 @@ tasks {
7089

7190
// 1. all distro specific javaagent libs are relocated
7291
val relocateJavaagentLibs = register<ShadowJar>("relocateJavaagentLibs") {
73-
configurations = listOf(javaagentLibs)
92+
configurations = listOf(javaagentLibsClasspath)
7493

75-
duplicatesStrategy = DuplicatesStrategy.FAIL
94+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
95+
failOnDuplicateEntries = true
7696

7797
archiveFileName.set("javaagentLibs-relocated.jar")
7898

7999
mergeServiceFiles()
80-
exclude("**/module-info.class")
100+
exclude("**/module-info.class", "META-INF/LICENSE*", "META-INF/NOTICE*")
81101
relocatePackages(this)
82102

83103
// exclude known bootstrap dependencies - they can't appear in the inst/ directory
@@ -116,7 +136,7 @@ tasks {
116136
// This transformer injects a new Field into the Opentelemetry SdkSpan class to be used
117137
// as efficient storage for co.elastic.otel.common.SpanValues
118138
// Check the FieldBackedSpanValueStorageProvider for details
119-
val injectSpanValueFieldTransformer = object: com.github.jengelman.gradle.plugins.shadow.transformers.Transformer {
139+
val injectSpanValueFieldTransformer = object: com.github.jengelman.gradle.plugins.shadow.transformers.ResourceTransformer {
120140

121141
@Internal
122142
val SDK_SPAN_CLASS_FILE = "inst/io/opentelemetry/sdk/trace/SdkSpan.classdata"
@@ -131,15 +151,15 @@ tasks {
131151
}
132152

133153
override fun canTransformResource(element: FileTreeElement): Boolean {
134-
return element.name.equals(SDK_SPAN_CLASS_FILE)
154+
return element.path == SDK_SPAN_CLASS_FILE
135155
}
136156

137157
override fun transform(context: TransformerContext) {
138158
if(bytecode != null) {
139159
throw IllegalStateException("Multiple SdkSpan classes detected")
140160
}
141161

142-
val inputStream = context.getIs()
162+
val inputStream = context.inputStream
143163
val reader = ClassReader(inputStream)
144164
val writer = ClassWriter(reader, 0)
145165
val visitor = object : ClassVisitor(Opcodes.ASM9, writer) {
@@ -168,33 +188,38 @@ tasks {
168188
}
169189

170190
val entry = ZipEntry(SDK_SPAN_CLASS_FILE)
171-
entry.time = TransformerContext.getEntryTimestamp(preserveFileTimestamps, entry.time)
191+
entry.time = getEntryTimestamp(preserveFileTimestamps, entry.time)
172192
os.putNextEntry(entry)
173193
os.write(bytecode)
174194
}
175195

196+
private fun getEntryTimestamp(preserveFileTimestamps: Boolean, entryTime: Long): Long {
197+
return if (preserveFileTimestamps) entryTime else ShadowCopyAction.CONSTANT_TIME_FOR_ZIP_ENTRIES
198+
}
176199
}
177200

178201
// 3. the relocated and isolated javaagent libs are merged together with the bootstrap libs (which undergo relocation
179202
// in this task) and the upstream javaagent jar; duplicates are removed
180203
shadowJar {
181-
182-
dependsOn(isolateJavaagentLibs)
183-
configurations = listOf(bootstrapLibs, upstreamAgent)
204+
configurations = listOf(bootstrapLibsClasspath, upstreamAgentClasspath)
184205

185206
// exclude slf4j-simple from the shadow jar as we use log4j2-slf4j with internal-logging instead
186207
exclude("inst/io/opentelemetry/javaagent/slf4j/simple/**")
187208

188-
from(isolateJavaagentLibs.get().outputs)
209+
from(isolateJavaagentLibs)
189210

190211
archiveClassifier.set("")
191212

192-
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
213+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
214+
failOnDuplicateEntries = true
193215

194-
mergeServiceFiles {
195-
include("inst/META-INF/services/*")
216+
mergeServiceFiles{
217+
include("inst/META-INF/services/**")
218+
path = "inst/META-INF/services"
219+
}
220+
filesNotMatching("inst/META-INF/services/**") {
221+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
196222
}
197-
exclude("**/module-info.class")
198223
relocatePackages(this)
199224
transform(injectSpanValueFieldTransformer)
200225

custom/src/main/java/co/elastic/otel/ElasticAutoConfigurationCustomizerProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private static void resourceProviders(
142142

143143
// disable upstream distro name & version provider
144144
disabledResourceProviders.add(
145-
"io.opentelemetry.javaagent.tooling.DistroVersionResourceProvider");
145+
"io.opentelemetry.javaagent.tooling.resources.DistroResourceProvider");
146146
config.put(DISABLED_RESOURCE_PROVIDERS, String.join(",", disabledResourceProviders));
147147
}
148148

custom/src/test/java/co/elastic/otel/ElasticAutoConfigurationCustomizerProviderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void defaultConfiguration() {
4646
.describedAs("upstream distro version resource provider must be disabled")
4747
.containsEntry(
4848
"otel.java.disabled.resource.providers",
49-
"io.opentelemetry.javaagent.tooling.DistroVersionResourceProvider");
49+
"io.opentelemetry.javaagent.tooling.resources.DistroResourceProvider");
5050

5151
assertThat(config)
5252
.describedAs("runtime experimental metrics must be enabled")
@@ -66,7 +66,7 @@ void disableCustomResourceProvider() {
6666
v ->
6767
assertThat(v.split(","))
6868
.containsExactly(
69-
"io.opentelemetry.javaagent.tooling.DistroVersionResourceProvider",
69+
"io.opentelemetry.javaagent.tooling.resources.DistroResourceProvider",
7070
"my.disabled.provider.Provider"));
7171
}
7272

gradle/libs.versions.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
shadow = "8.3.9"
2+
shadow = "9.1.0"
33
jib = "3.4.5"
44
spotless = "7.2.1"
55
junit = "5.13.4"
@@ -11,18 +11,18 @@ opentelemetryProto = "1.3.2-alpha"
1111

1212
# otel agent, we rely on the '*-alpha' and get the non-alpha dependencies transitively
1313
# updated from upstream agent with gradle/update-upstream.sh
14-
opentelemetryJavaagentAlpha = "2.19.0-alpha"
14+
opentelemetryJavaagentAlpha = "2.20.0-alpha"
1515

1616
# otel contrib
1717
# updated from upstream agent with gradle/update-upstream.sh
18-
opentelemetryContribAlpha = "1.48.0-alpha"
18+
opentelemetryContribAlpha = "1.49.0-alpha"
1919

2020
# otel semconv
2121
# updated from upstream agent with gradle/update-upstream.sh
2222
# While the semconv stable/incubating artifacts are provided as transitive dependencies, keeping
2323
# an explicit version here allows to easily override to a not-yet-released version.
24-
opentelemetrySemconv = "1.34.0"
25-
opentelemetrySemconvAlpha = "1.34.0-alpha"
24+
opentelemetrySemconv = "1.37.0"
25+
opentelemetrySemconvAlpha = "1.37.0-alpha"
2626

2727
[libraries]
2828

@@ -78,8 +78,8 @@ ant = "org.apache.ant:ant:1.10.15"
7878
asm = "org.ow2.asm:asm:9.8"
7979

8080
slf4j-api = "org.slf4j:slf4j-api:2.0.17"
81-
log4j2-slf4j = { group= "org.apache.logging.log4j", name="log4j-slf4j2-impl", version.ref="log4j2"}
82-
log4j2-core = { group= "org.apache.logging.log4j", name="log4j-core", version.ref="log4j2"}
81+
log4j2-slf4j = { group = "org.apache.logging.log4j", name = "log4j-slf4j2-impl", version.ref = "log4j2" }
82+
log4j2-core = { group = "org.apache.logging.log4j", name = "log4j-core", version.ref = "log4j2" }
8383

8484
# Instrumented libraries
8585
openaiClient = "com.openai:openai-java:2.20.1"

0 commit comments

Comments
 (0)