Skip to content

Commit 25386b2

Browse files
authored
Scala 3 bundle (#1313)
* jdbc support (scala 3) * fix okhttp + spring for scala 3. Add a kamon-bundle-3 * fix bundle for scala 3 * Self hosted runner isn't picking up jobs, move to GitHub one...
1 parent 5f36f94 commit 25386b2

File tree

21 files changed

+249
-161
lines changed

21 files changed

+249
-161
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on: [push, pull_request]
44

55
jobs:
66
ci:
7-
runs-on: self-hosted
7+
runs-on: ubuntu-latest
88
env:
99
JAVA_OPTS: -Xms5120M -Xmx5120M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8
1010
JVM_OPTS: -Xms5120M -Xmx5120M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66

77
jobs:
88
release:
9-
runs-on: self-hosted
9+
runs-on: ubuntu-latest
1010
env:
1111
JAVA_OPTS: -Xms5120M -Xmx5120M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8
1212
JVM_OPTS: -Xms5120M -Xmx5120M -Xss6M -XX:ReservedCodeCacheSize=256M -Dfile.encoding=UTF-8

build.sbt

Lines changed: 68 additions & 34 deletions
Large diffs are not rendered by default.

instrumentation/kamon-cassandra/src/main/scala/com/datastax/driver/core/ConnectionPoolAdvices.scala

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@ import kamon.instrumentation.cassandra.CassandraInstrumentation
2424
import kamon.util.CallingThreadExecutionContext
2525
import kanela.agent.libs.net.bytebuddy.asm.Advice
2626

27+
import scala.annotation.static
28+
29+
class PoolConstructorAdvice
2730
object PoolConstructorAdvice {
2831

2932
@Advice.OnMethodExit
30-
def onConstructed(
33+
@static def onConstructed(
3134
@Advice.This poolWithMetrics: HostConnectionPool with HasPoolMetrics,
3235
@Advice.FieldValue("host") host: Host,
3336
@Advice.FieldValue("totalInFlight") totalInflight: AtomicInteger
@@ -46,10 +49,11 @@ object PoolConstructorAdvice {
4649
}
4750
}
4851

52+
class PoolCloseAdvice
4953
object PoolCloseAdvice {
5054

5155
@Advice.OnMethodExit
52-
def onClose(@Advice.This poolWithMetrics: HostConnectionPool with HasPoolMetrics): Unit = {
56+
@static def onClose(@Advice.This poolWithMetrics: HostConnectionPool with HasPoolMetrics): Unit = {
5357
poolWithMetrics.nodeMonitor.cleanup()
5458
}
5559
}
@@ -62,12 +66,12 @@ class BorrowAdvice
6266
object BorrowAdvice {
6367

6468
@Advice.OnMethodEnter
65-
def startBorrow(@Advice.This poolMetrics: HasPoolMetrics): Long = {
69+
@static def startBorrow(@Advice.This poolMetrics: HasPoolMetrics): Long = {
6670
Kamon.clock().nanos()
6771
}
6872

6973
@Advice.OnMethodExit(suppress = classOf[Throwable], inline = false)
70-
def onBorrowed(
74+
@static def onBorrowed(
7175
@Advice.Return connection: ListenableFuture[Connection],
7276
@Advice.Enter start: Long,
7377
@Advice.This poolMetrics: HasPoolMetrics,
@@ -91,10 +95,11 @@ object BorrowAdvice {
9195
* Incremented when new connection requested and decremented either on
9296
* connection being explicitly trashed or defunct
9397
*/
98+
class InitPoolAdvice
9499
object InitPoolAdvice {
95100

96101
@Advice.OnMethodExit
97-
def onPoolInited(
102+
@static def onPoolInited(
98103
@Advice.This hasPoolMetrics: HasPoolMetrics,
99104
@Advice.Return done: ListenableFuture[_],
100105
@Advice.FieldValue("open") openConnections: AtomicInteger
@@ -108,10 +113,11 @@ object InitPoolAdvice {
108113
}
109114
}
110115

116+
class CreateConnectionAdvice
111117
object CreateConnectionAdvice {
112118

113119
@Advice.OnMethodExit
114-
def onConnectionCreated(
120+
@static def onConnectionCreated(
115121
@Advice.This hasPoolMetrics: HasPoolMetrics,
116122
@Advice.Return created: Boolean
117123
): Unit =
@@ -120,21 +126,23 @@ object CreateConnectionAdvice {
120126
}
121127
}
122128

129+
class TrashConnectionAdvice
123130
object TrashConnectionAdvice {
124131

125132
@Advice.OnMethodExit
126-
def onConnectionTrashed(
133+
@static def onConnectionTrashed(
127134
@Advice.This hasPoolMetrics: HasPoolMetrics,
128135
@Advice.FieldValue("host") host: Host
129136
): Unit = {
130137
hasPoolMetrics.nodeMonitor.connectionTrashed
131138
}
132139
}
133140

141+
class ConnectionDefunctAdvice
134142
object ConnectionDefunctAdvice {
135143

136144
@Advice.OnMethodExit
137-
def onConnectionDefunct(@Advice.This hasPoolMetrics: HasPoolMetrics): Unit = {
145+
@static def onConnectionDefunct(@Advice.This hasPoolMetrics: HasPoolMetrics): Unit = {
138146
hasPoolMetrics.nodeMonitor.connectionClosed
139147
}
140148
}

instrumentation/kamon-cassandra/src/main/scala/com/datastax/driver/core/ExecutionAdvices.scala

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.datastax.driver.core
1818

1919
import java.util.concurrent.atomic.AtomicReference
20-
2120
import com.datastax.driver.core.Message.Response
2221
import com.datastax.driver.core.RequestHandler.QueryState
2322
import kamon.Kamon
@@ -31,20 +30,23 @@ import kamon.instrumentation.context.HasContext
3130
import kamon.trace.Span
3231
import kanela.agent.libs.net.bytebuddy.asm.Advice
3332

33+
import scala.annotation.static
34+
3435
object QueryOperations {
3536
val QueryOperationName = "cassandra.query"
3637
val BatchOperationName = "cassandra.batch"
3738
val QueryPrepareOperationName: String = QueryOperationName + ".prepare"
3839
val ExecutionOperationName: String = QueryOperationName + ".execution"
3940
}
4041

42+
class QueryExecutionAdvice
4143
object QueryExecutionAdvice {
4244
import QueryOperations._
4345

4446
val ParentSpanKey: Context.Key[Span] = Context.key[Span]("__parent-span", Span.Empty)
4547

4648
@Advice.OnMethodEnter
47-
def onQueryExec(
49+
@static def onQueryExec(
4850
@Advice.This execution: HasContext,
4951
@Advice.Argument(0) host: Host with HasPoolMetrics,
5052
@Advice.FieldValue("position") position: Int,
@@ -84,10 +86,11 @@ object QueryExecutionAdvice {
8486
/**
8587
* Transfer context from msg to created result set so it can be used for further page fetches
8688
*/
89+
class OnResultSetConstruction
8790
object OnResultSetConstruction {
8891

8992
@Advice.OnMethodExit
90-
def onCreateResultSet(
93+
@static def onCreateResultSet(
9194
@Advice.Return rs: ArrayBackedResultSet,
9295
@Advice.Argument(0) msg: Responses.Result with HasContext
9396
): Unit = if (rs.isInstanceOf[HasContext]) {
@@ -96,36 +99,39 @@ object OnResultSetConstruction {
9699

97100
}
98101

102+
class OnFetchMore
99103
object OnFetchMore {
100104

101105
@Advice.OnMethodEnter
102-
def onFetchMore(@Advice.This hasContext: HasContext): Scope = {
106+
@static def onFetchMore(@Advice.This hasContext: HasContext): Scope = {
103107
val clientSpan = hasContext.context.get(QueryExecutionAdvice.ParentSpanKey)
104108
Kamon.storeContext(Context.of(Span.Key, clientSpan))
105109
}
106110

107111
@Advice.OnMethodExit
108-
def onFetched(@Advice.Enter scope: Scope): Unit = {
112+
@static def onFetched(@Advice.Enter scope: Scope): Unit = {
109113
scope.close()
110114
}
111115
}
112116

117+
class QueryWriteAdvice
113118
object QueryWriteAdvice {
114119

115120
@Advice.OnMethodEnter
116-
def onStartWriting(@Advice.This execution: HasContext): Unit = {
121+
@static def onStartWriting(@Advice.This execution: HasContext): Unit = {
117122
execution.context
118123
.get(Span.Key)
119124
.mark("cassandra.connection.write-started")
120125
}
121126
}
122127

123128
//Server timeouts and exceptions
129+
class OnSetAdvice
124130
object OnSetAdvice {
125131
import QueryOperations._
126132

127133
@Advice.OnMethodEnter
128-
def onSetResult(
134+
@static def onSetResult(
129135
@Advice.This execution: Connection.ResponseCallback with HasContext,
130136
@Advice.Argument(0) connection: Connection,
131137
@Advice.Argument(1) response: Message.Response,
@@ -159,10 +165,11 @@ object OnSetAdvice {
159165
/**
160166
* Handling of client exceptions
161167
*/
168+
class OnExceptionAdvice
162169
object OnExceptionAdvice {
163170

164171
@Advice.OnMethodEnter
165-
def onException(
172+
@static def onException(
166173
@Advice.This execution: HasContext,
167174
@Advice.Argument(0) connection: Connection,
168175
@Advice.Argument(1) exception: Exception,
@@ -181,10 +188,11 @@ object OnExceptionAdvice {
181188
/**
182189
* Handling of client timeouts
183190
*/
191+
class OnTimeoutAdvice
184192
object OnTimeoutAdvice {
185193

186194
@Advice.OnMethodEnter
187-
def onTimeout(
195+
@static def onTimeout(
188196
@Advice.This execution: HasContext,
189197
@Advice.Argument(0) connection: Connection,
190198
@Advice.FieldValue("current") currentHost: Host with HasPoolMetrics
@@ -199,10 +207,11 @@ object OnTimeoutAdvice {
199207
}
200208
}
201209

210+
class HostLocationAdvice
202211
object HostLocationAdvice {
203212

204213
@Advice.OnMethodExit
205-
def onHostLocationUpdate(
214+
@static def onHostLocationUpdate(
206215
@Advice.This host: Host with HasPoolMetrics,
207216
@Advice.FieldValue("manager") clusterManager: Any
208217
): Unit = {

instrumentation/kamon-cassandra/src/main/scala/com/datastax/driver/core/SessionInterceptor.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@
1717
package com.datastax.driver.core
1818

1919
import java.util.concurrent.Callable
20-
2120
import kamon.instrumentation.cassandra.driver.InstrumentedSession
2221
import kanela.agent.libs.net.bytebuddy.implementation.bind.annotation.{RuntimeType, SuperCall}
2322

23+
import scala.annotation.static
24+
2425
class SessionInterceptor
2526
object SessionInterceptor {
2627

2728
@RuntimeType
28-
def newSession(@SuperCall session: Callable[Session]): Session = {
29+
@static def newSession(@SuperCall session: Callable[Session]): Session = {
2930
new InstrumentedSession(session.call())
3031
}
3132
}

instrumentation/kamon-cassandra/src/main/scala/kamon/instrumentation/cassandra/driver/DriverInstrumentation.scala

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import kanela.agent.libs.net.bytebuddy.asm.Advice
3333

3434
import java.util.concurrent.CompletionStage
3535
import java.util.function.BiConsumer
36+
import scala.annotation.static
3637

3738
class DriverInstrumentation extends InstrumentationBuilder {
3839

@@ -51,12 +52,12 @@ class DriverInstrumentation extends InstrumentationBuilder {
5152
*/
5253
onType("com.datastax.driver.core.HostConnectionPool")
5354
.advise(method("borrowConnection"), classOf[BorrowAdvice])
54-
.advise(method("trashConnection"), TrashConnectionAdvice)
55-
.advise(method("addConnectionIfUnderMaximum"), CreateConnectionAdvice)
56-
.advise(method("onConnectionDefunct"), ConnectionDefunctAdvice)
57-
.advise(isConstructor, PoolConstructorAdvice)
58-
.advise(method("initAsync"), InitPoolAdvice)
59-
.advise(method("closeAsync"), PoolCloseAdvice)
55+
.advise(method("trashConnection"), classOf[TrashConnectionAdvice])
56+
.advise(method("addConnectionIfUnderMaximum"), classOf[CreateConnectionAdvice])
57+
.advise(method("onConnectionDefunct"), classOf[ConnectionDefunctAdvice])
58+
.advise(isConstructor, classOf[PoolConstructorAdvice])
59+
.advise(method("initAsync"), classOf[InitPoolAdvice])
60+
.advise(method("closeAsync"), classOf[PoolCloseAdvice])
6061
.mixin(classOf[HasPoolMetrics.Mixin])
6162

6263
/**
@@ -66,18 +67,18 @@ class DriverInstrumentation extends InstrumentationBuilder {
6667
* to be used for further fetches
6768
*/
6869
onType("com.datastax.driver.core.RequestHandler$SpeculativeExecution")
69-
.advise(method("query"), QueryExecutionAdvice)
70-
.advise(method("write"), QueryWriteAdvice)
71-
.advise(method("onException"), OnExceptionAdvice)
72-
.advise(method("onTimeout"), OnTimeoutAdvice)
73-
.advise(method("onSet"), OnSetAdvice)
70+
.advise(method("query"), classOf[QueryExecutionAdvice])
71+
.advise(method("write"), classOf[QueryWriteAdvice])
72+
.advise(method("onException"), classOf[OnExceptionAdvice])
73+
.advise(method("onTimeout"), classOf[OnTimeoutAdvice])
74+
.advise(method("onSet"), classOf[OnSetAdvice])
7475
.mixin(classOf[HasContext.MixinWithInitializer])
7576

7677
onSubTypesOf("com.datastax.driver.core.Message$Response")
7778
.mixin(classOf[HasContext.MixinWithInitializer])
7879

7980
onType("com.datastax.driver.core.ArrayBackedResultSet")
80-
.advise(method("fromMessage"), OnResultSetConstruction)
81+
.advise(method("fromMessage"), classOf[OnResultSetConstruction])
8182

8283
/**
8384
* In order for fetchMore execution to be a sibling of original execution
@@ -86,15 +87,15 @@ class DriverInstrumentation extends InstrumentationBuilder {
8687
onType("com.datastax.driver.core.ArrayBackedResultSet$MultiPage")
8788
.mixin(classOf[HasContext.MixinWithInitializer])
8889
onType("com.datastax.driver.core.ArrayBackedResultSet$MultiPage")
89-
.advise(method("queryNextPage"), OnFetchMore)
90+
.advise(method("queryNextPage"), classOf[OnFetchMore])
9091

9192
/**
9293
* Query metrics are tagged with target information (based on config)
9394
* so all query metrics are mixed into a Host object
9495
*/
9596
onType("com.datastax.driver.core.Host")
9697
.mixin(classOf[HasPoolMetrics.Mixin])
97-
.advise(method("setLocationInfo"), HostLocationAdvice)
98+
.advise(method("setLocationInfo"), classOf[HostLocationAdvice])
9899

99100

100101
/**
@@ -104,8 +105,8 @@ class DriverInstrumentation extends InstrumentationBuilder {
104105
"com.datastax.oss.driver.internal.core.cql.CqlPrepareHandler",
105106
"com.datastax.oss.driver.internal.core.cql.CqlRequestHandler")
106107
.mixin(classOf[HasContext.Mixin])
107-
.advise(isConstructor(), OnRequestHandlerConstructorAdvice)
108-
.advise(method("onThrottleReady"), OnThrottleReadyAdvice)
108+
.advise(isConstructor(), classOf[OnRequestHandlerConstructorAdvice])
109+
.advise(method("onThrottleReady"), classOf[OnThrottleReadyAdvice])
109110

110111
}
111112

@@ -116,10 +117,11 @@ object DriverInstrumentation {
116117
}
117118
}
118119

120+
class OnRequestHandlerConstructorAdvice
119121
object OnRequestHandlerConstructorAdvice {
120122

121123
@Advice.OnMethodExit()
122-
def exit(@Advice.This requestHandler: HasContext, @Advice.Argument(0) req: Any): Unit = {
124+
@static def exit(@Advice.This requestHandler: HasContext, @Advice.Argument(0) req: Any): Unit = {
123125
val (operationName, statement) = req match {
124126
case pr: PrepareRequest => (QueryOperations.QueryPrepareOperationName, pr.getQuery())
125127
case ss: cql.SimpleStatement => (QueryOperations.QueryOperationName, ss.getQuery())
@@ -158,10 +160,11 @@ object OnRequestHandlerConstructorAdvice {
158160
}
159161
}
160162

163+
class OnThrottleReadyAdvice
161164
object OnThrottleReadyAdvice {
162165

163166
@Advice.OnMethodEnter()
164-
def enter(@Advice.This requestHandler: HasContext): Unit = {
167+
@static def enter(@Advice.This requestHandler: HasContext): Unit = {
165168
val querySpan = requestHandler.context.get(Span.Key)
166169
querySpan.mark("cassandra.throttle.ready")
167170
}

0 commit comments

Comments
 (0)