You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We currently handle this repository as one big coherent piece, governed by one set of common conventions living in buildSrc folder. One downside of this is discussed in #4112: it is hard to have a Gradle convention in buildSrc which uses gradle plugin developed as part of this repo.
But if we take the idea of #3974 to its logical conclusion then we realise that this repo actually contains at least two separate pieces (leaving benchmarks and example aside for the moment).
One piece is a "core": bare-bone agent, which does not actually contain anything but is still able to load extensions. Or, putting the other way, extensions API and everything that is needed to make that extensions work. This piece, among other things, include muzzle and muzzle gradle plugins and some, but not all, conventions from buildSrc. E.g. io.opentelemetry.instrumentation.javaagent-instrumentation.gradle.kts is NOT part of the core.
Another piece is all extensions that we provide OOTB, e.g. content of instrumentation folder. It applies and uses muzzle gradle plugins and io.opentelemetry.instrumentation.javaagent-instrumentation.gradle.kts.
Probably it makes sense to look at javaagent module as yet another, final piece, that brings it all together.
This solves the problem of #4112. First, it makes both public APIs more explicit. One for external users, e.g. instrumentation-api module. Another for internal users, e.g. muzzle. Second, it allows to express stability and support guarantees: for any given major version core version X works with extensions built against core version Y < X. This allows to upgrade agent jar without recompiling all extensions. Third, it will still allow synchronised releases: we release core version X, then release extensions version X.
All of the above does NOT mean that I advocate for 2 separate repos or to actually release core separately from instrumentations. Maybe, maybe not. But having this as at least logical separation on our mental model, in my opinion, can help us a lot by framing about thought process.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
We currently handle this repository as one big coherent piece, governed by one set of common conventions living in
buildSrc
folder. One downside of this is discussed in #4112: it is hard to have a Gradle convention inbuildSrc
which uses gradle plugin developed as part of this repo.But if we take the idea of #3974 to its logical conclusion then we realise that this repo actually contains at least two separate pieces (leaving benchmarks and example aside for the moment).
One piece is a "core": bare-bone agent, which does not actually contain anything but is still able to load extensions. Or, putting the other way, extensions API and everything that is needed to make that extensions work. This piece, among other things, include muzzle and muzzle gradle plugins and some, but not all, conventions from
buildSrc
. E.g.io.opentelemetry.instrumentation.javaagent-instrumentation.gradle.kts
is NOT part of the core.Another piece is all extensions that we provide OOTB, e.g. content of
instrumentation
folder. It applies and uses muzzle gradle plugins andio.opentelemetry.instrumentation.javaagent-instrumentation.gradle.kts
.Probably it makes sense to look at
javaagent
module as yet another, final piece, that brings it all together.This solves the problem of #4112. First, it makes both public APIs more explicit. One for external users, e.g.
instrumentation-api
module. Another for internal users, e.g.muzzle
. Second, it allows to express stability and support guarantees: for any given major version core version X works with extensions built against core version Y < X. This allows to upgrade agent jar without recompiling all extensions. Third, it will still allow synchronised releases: we release core version X, then release extensions version X.All of the above does NOT mean that I advocate for 2 separate repos or to actually release core separately from instrumentations. Maybe, maybe not. But having this as at least logical separation on our mental model, in my opinion, can help us a lot by framing about thought process.
Beta Was this translation helpful? Give feedback.
All reactions