Permalink
Browse files

Split Querulous into a core module and a tracing module to avoid addi…

…ng dependencies. Tracing module uses Finagle to log timings of queries
  • Loading branch information...
1 parent c24bc54 commit bf5af4aa03846747067453c5432d0aeea9866335 @johanoskarsson johanoskarsson committed Aug 3, 2011
Showing with 142 additions and 17 deletions.
  1. +1 −1 .gitignore
  2. +41 −15 project/build/QuerulousProject.scala
  3. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/AutoDisabler.scala
  4. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/ConnectionDestroying.scala
  5. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/DaemonThreadFactory.scala
  6. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/FutureTimeout.scala
  7. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/StatsCollector.scala
  8. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/Timeout.scala
  9. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/async/AsyncDatabase.scala
  10. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/async/AsyncQueryEvaluator.scala
  11. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/async/BlockingDatabaseWrapper.scala
  12. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/async/StandardAsyncQueryEvaluator.scala
  13. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/config/AsyncQueryEvaluator.scala
  14. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/config/Database.scala
  15. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/config/Query.scala
  16. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/config/QueryEvaluator.scala
  17. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/ApachePoolingDatabase.scala
  18. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/AutoDisablingDatabase.scala
  19. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/Database.scala
  20. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/MemoizingDatabase.scala
  21. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/SingleConnectionDatabase.scala
  22. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/StatsCollectingDatabase.scala
  23. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/ThrottledPoolingDatabase.scala
  24. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/database/TimingOutDatabase.scala
  25. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/evaluator/AutoDisablingQueryEvaluator.scala
  26. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/evaluator/QueryEvaluator.scala
  27. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/evaluator/QueryEvaluatorProxy.scala
  28. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/evaluator/StandardQueryEvaluator.scala
  29. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/evaluator/Transaction.scala
  30. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/DebuggingQuery.scala
  31. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/Query.scala
  32. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/QueryClass.scala
  33. +11 −0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/QueryProxy.scala
  34. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/RetryingQuery.scala
  35. +1 −1 { → querulous-core}/src/main/scala/com/twitter/querulous/query/SqlQuery.scala
  36. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/StatsCollectingQuery.scala
  37. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/query/TimingOutQuery.scala
  38. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/test/FakeDatabase.scala
  39. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/test/FakeQuery.scala
  40. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/test/FakeQueryEvaluator.scala
  41. 0 { → querulous-core}/src/main/scala/com/twitter/querulous/test/FakeStatsCollector.scala
  42. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/TestEvaluator.scala
  43. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/integration/QuerySpec.scala
  44. 0 ...erulous-core}/src/test/scala/com/twitter/querulous/integration/ThrottledPoolingDatabaseSpec.scala
  45. 0 ...}/src/test/scala/com/twitter/querulous/integration/ThrottledPoolingDatabaseWithFakeConnSpec.scala
  46. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/integration/TimeoutSpec.scala
  47. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/sql/FakeConnection.scala
  48. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/sql/FakeContext.scala
  49. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/sql/FakeDriver.scala
  50. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/sql/FakePreparedStatement.scala
  51. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/sql/FakeResultSet.scala
  52. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/sql/FakeStatement.scala
  53. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/AutoDisablingQueryEvaluatorSpec.scala
  54. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/DatabaseSpec.scala
  55. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/DebuggingQuerySpec.scala
  56. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/FakeDriverSpec.scala
  57. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/MemoizingDatabaseFactorySpec.scala
  58. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/QueryEvaluatorSpec.scala
  59. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/RetryingQuerySpec.scala
  60. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/SqlQuerySpec.scala
  61. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/StandardAsyncQueryEvaluatorSpec.scala
  62. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/StatsCollectingDatabaseSpec.scala
  63. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/StatsCollectingQuerySpec.scala
  64. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/ThrottledPoolingDatabaseSpec.scala
  65. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/TimingOutDatabaseSpec.scala
  66. 0 { → querulous-core}/src/test/scala/com/twitter/querulous/unit/TimingOutQuerySpec.scala
  67. +59 −0 querulous-tracing/src/main/scala/com/twitter/querulous/query/TracingQuery.scala
  68. +29 −0 querulous-tracing/src/test/scala/com/twitter/querulous/unit/TracingQuerySpec.scala
View
2 .gitignore
@@ -9,4 +9,4 @@ project/boot/
project/plugins/project/
querulous.tmproj
out/
-
+*.ivyjars
View
56 project/build/QuerulousProject.scala
@@ -1,24 +1,50 @@
import sbt._
import com.twitter.sbt._
-class QuerulousProject(info: ProjectInfo) extends StandardLibraryProject(info)
+class QuerulousProject(info: ProjectInfo) extends StandardParentProject(info)
with DefaultRepos
with SubversionPublisher {
- val utilCore = "com.twitter" % "util-core" % "1.10.4"
- val dbcp = "commons-dbcp" % "commons-dbcp" % "1.4"
- val mysqljdbc = "mysql" % "mysql-connector-java" % "5.1.13"
- val pool = "commons-pool" % "commons-pool" % "1.5.4"
-
- val utilEval = "com.twitter" % "util-eval" % "1.10.4" % "test"
- val scalaTools = "org.scala-lang" % "scala-compiler" % "2.8.1" % "test"
- val hamcrest = "org.hamcrest" % "hamcrest-all" % "1.1" % "test"
- val specs = "org.scala-tools.testing" % "specs_2.8.0" % "1.6.5" % "test"
- val objenesis = "org.objenesis" % "objenesis" % "1.1" % "test"
- val jmock = "org.jmock" % "jmock" % "2.4.0" % "test"
- val cglib = "cglib" % "cglib" % "2.2" % "test"
- val asm = "asm" % "asm" % "1.5.3" % "test"
- val dbcpTests = "commons-dbcp" % "commons-dbcp-tests" % "1.4" % "test"
+ val coreProject = project(
+ "querulous-core", "querulous",
+ new CoreProject(_))
+
+ /**
+ * finagle compatible tracing for database requests
+ */
+ val tracingProject = project(
+ "querulous-tracing", "querulous-tracing",
+ new TracingProject(_), coreProject)
+
+ trait Defaults
+ extends ProjectDependencies
+ with DefaultRepos
+ with SubversionPublisher
+
+ class CoreProject(info: ProjectInfo) extends StandardLibraryProject(info)
+ with Defaults
+ {
+ val utilCore = "com.twitter" % "util-core" % "1.10.4"
+ val dbcp = "commons-dbcp" % "commons-dbcp" % "1.4"
+ val mysqljdbc = "mysql" % "mysql-connector-java" % "5.1.13"
+ val pool = "commons-pool" % "commons-pool" % "1.5.4"
+
+ val utilEval = "com.twitter" % "util-eval" % "1.10.4" % "test"
+ val scalaTools = "org.scala-lang" % "scala-compiler" % "2.8.1" % "test"
+ val hamcrest = "org.hamcrest" % "hamcrest-all" % "1.1" % "test"
+ val specs = "org.scala-tools.testing" % "specs_2.8.0" % "1.6.5" % "test"
+ val objenesis = "org.objenesis" % "objenesis" % "1.1" % "test"
+ val jmock = "org.jmock" % "jmock" % "2.4.0" % "test"
+ val cglib = "cglib" % "cglib" % "2.2" % "test"
+ val asm = "asm" % "asm" % "1.5.3" % "test"
+ val dbcpTests = "commons-dbcp" % "commons-dbcp-tests" % "1.4" % "test"
+ }
+
+ class TracingProject(info: ProjectInfo) extends StandardLibraryProject(info)
+ with Defaults
+ {
+ val finagle = "com.twitter" % "finagle-core" % "1.7.3"
+ }
override def subversionRepository = Some("http://svn.local.twitter.com/maven-public/")
}
View
0 .../com/twitter/querulous/AutoDisabler.scala → .../com/twitter/querulous/AutoDisabler.scala
File renamed without changes.
View
0 ...tter/querulous/ConnectionDestroying.scala → ...tter/querulous/ConnectionDestroying.scala
File renamed without changes.
View
0 ...itter/querulous/DaemonThreadFactory.scala → ...itter/querulous/DaemonThreadFactory.scala
File renamed without changes.
View
0 ...com/twitter/querulous/FutureTimeout.scala → ...com/twitter/querulous/FutureTimeout.scala
File renamed without changes.
View
0 ...om/twitter/querulous/StatsCollector.scala → ...om/twitter/querulous/StatsCollector.scala
File renamed without changes.
View
0 ...scala/com/twitter/querulous/Timeout.scala → ...scala/com/twitter/querulous/Timeout.scala
File renamed without changes.
View
0 ...itter/querulous/async/AsyncDatabase.scala → ...itter/querulous/async/AsyncDatabase.scala
File renamed without changes.
View
0 ...querulous/async/AsyncQueryEvaluator.scala → ...querulous/async/AsyncQueryEvaluator.scala
File renamed without changes.
View
0 ...ulous/async/BlockingDatabaseWrapper.scala → ...ulous/async/BlockingDatabaseWrapper.scala
File renamed without changes.
View
0 ...s/async/StandardAsyncQueryEvaluator.scala → ...s/async/StandardAsyncQueryEvaluator.scala
File renamed without changes.
View
0 ...uerulous/config/AsyncQueryEvaluator.scala → ...uerulous/config/AsyncQueryEvaluator.scala
File renamed without changes.
View
0 ...m/twitter/querulous/config/Database.scala → ...m/twitter/querulous/config/Database.scala
File renamed without changes.
View
0 .../com/twitter/querulous/config/Query.scala → .../com/twitter/querulous/config/Query.scala
File renamed without changes.
View
0 ...ter/querulous/config/QueryEvaluator.scala → ...ter/querulous/config/QueryEvaluator.scala
File renamed without changes.
View
0 ...lous/database/ApachePoolingDatabase.scala → ...lous/database/ApachePoolingDatabase.scala
File renamed without changes.
View
0 ...lous/database/AutoDisablingDatabase.scala → ...lous/database/AutoDisablingDatabase.scala
File renamed without changes.
View
0 ...twitter/querulous/database/Database.scala → ...twitter/querulous/database/Database.scala
File renamed without changes.
View
0 ...uerulous/database/MemoizingDatabase.scala → ...uerulous/database/MemoizingDatabase.scala
File renamed without changes.
View
0 ...s/database/SingleConnectionDatabase.scala → ...s/database/SingleConnectionDatabase.scala
File renamed without changes.
View
0 ...us/database/StatsCollectingDatabase.scala → ...us/database/StatsCollectingDatabase.scala
File renamed without changes.
View
0 ...s/database/ThrottledPoolingDatabase.scala → ...s/database/ThrottledPoolingDatabase.scala
File renamed without changes.
View
0 ...uerulous/database/TimingOutDatabase.scala → ...uerulous/database/TimingOutDatabase.scala
File renamed without changes.
View
0 ...aluator/AutoDisablingQueryEvaluator.scala → ...aluator/AutoDisablingQueryEvaluator.scala
File renamed without changes.
View
0 .../querulous/evaluator/QueryEvaluator.scala → .../querulous/evaluator/QueryEvaluator.scala
File renamed without changes.
View
0 ...ulous/evaluator/QueryEvaluatorProxy.scala → ...ulous/evaluator/QueryEvaluatorProxy.scala
File renamed without changes.
View
0 ...us/evaluator/StandardQueryEvaluator.scala → ...us/evaluator/StandardQueryEvaluator.scala
File renamed without changes.
View
0 ...ter/querulous/evaluator/Transaction.scala → ...ter/querulous/evaluator/Transaction.scala
File renamed without changes.
View
0 ...tter/querulous/query/DebuggingQuery.scala → ...tter/querulous/query/DebuggingQuery.scala
File renamed without changes.
View
0 ...a/com/twitter/querulous/query/Query.scala → ...a/com/twitter/querulous/query/Query.scala
File renamed without changes.
View
0 .../twitter/querulous/query/QueryClass.scala → .../twitter/querulous/query/QueryClass.scala
File renamed without changes.
View
11 .../twitter/querulous/query/QueryProxy.scala → .../twitter/querulous/query/QueryProxy.scala
@@ -12,4 +12,15 @@ abstract class QueryProxy(query: Query) extends Query {
def addParams(params: Any*) = query.addParams(params)
protected def delegate[A](f: => A) = f
+
+ /**
+ * If this query wraps another query, return it.
+ * For example a TimingOutQuery could wrap a SqlQuery.
+ */
+ protected def getRootQuery: Query = {
+ query match {
+ case q: QueryProxy => q.getRootQuery
+ case _ => query
+ }
+ }
}
View
0 ...itter/querulous/query/RetryingQuery.scala → ...itter/querulous/query/RetryingQuery.scala
File renamed without changes.
View
2 ...om/twitter/querulous/query/SqlQuery.scala → ...om/twitter/querulous/query/SqlQuery.scala
@@ -41,7 +41,7 @@ object NullValues {
def apply(typeVal: Int) = nullTypes(typeVal)
}
-class SqlQuery(connection: Connection, query: String, params: Any*) extends Query {
+class SqlQuery(connection: Connection, val query: String, params: Any*) extends Query {
def this(connection: Connection, query: String) = {
this(connection, query, Nil)
View
0 ...uerulous/query/StatsCollectingQuery.scala → ...uerulous/query/StatsCollectingQuery.scala
File renamed without changes.
View
0 ...tter/querulous/query/TimingOutQuery.scala → ...tter/querulous/query/TimingOutQuery.scala
File renamed without changes.
View
0 ...twitter/querulous/test/FakeDatabase.scala → ...twitter/querulous/test/FakeDatabase.scala
File renamed without changes.
View
0 ...om/twitter/querulous/test/FakeQuery.scala → ...om/twitter/querulous/test/FakeQuery.scala
File renamed without changes.
View
0 ...r/querulous/test/FakeQueryEvaluator.scala → ...r/querulous/test/FakeQueryEvaluator.scala
File renamed without changes.
View
0 ...r/querulous/test/FakeStatsCollector.scala → ...r/querulous/test/FakeStatsCollector.scala
File renamed without changes.
View
0 ...com/twitter/querulous/TestEvaluator.scala → ...com/twitter/querulous/TestEvaluator.scala
File renamed without changes.
View
0 ...ter/querulous/integration/QuerySpec.scala → ...ter/querulous/integration/QuerySpec.scala
File renamed without changes.
View
0 ...ration/ThrottledPoolingDatabaseSpec.scala → ...ration/ThrottledPoolingDatabaseSpec.scala
File renamed without changes.
View
0 ...tledPoolingDatabaseWithFakeConnSpec.scala → ...tledPoolingDatabaseWithFakeConnSpec.scala
File renamed without changes.
View
0 ...r/querulous/integration/TimeoutSpec.scala → ...r/querulous/integration/TimeoutSpec.scala
File renamed without changes.
View
0 ...witter/querulous/sql/FakeConnection.scala → ...witter/querulous/sql/FakeConnection.scala
File renamed without changes.
View
0 ...m/twitter/querulous/sql/FakeContext.scala → ...m/twitter/querulous/sql/FakeContext.scala
File renamed without changes.
View
0 ...om/twitter/querulous/sql/FakeDriver.scala → ...om/twitter/querulous/sql/FakeDriver.scala
File renamed without changes.
View
0 ...querulous/sql/FakePreparedStatement.scala → ...querulous/sql/FakePreparedStatement.scala
File renamed without changes.
View
0 ...twitter/querulous/sql/FakeResultSet.scala → ...twitter/querulous/sql/FakeResultSet.scala
File renamed without changes.
View
0 ...twitter/querulous/sql/FakeStatement.scala → ...twitter/querulous/sql/FakeStatement.scala
File renamed without changes.
View
0 ...nit/AutoDisablingQueryEvaluatorSpec.scala → ...nit/AutoDisablingQueryEvaluatorSpec.scala
File renamed without changes.
View
0 ...twitter/querulous/unit/DatabaseSpec.scala → ...twitter/querulous/unit/DatabaseSpec.scala
File renamed without changes.
View
0 ...r/querulous/unit/DebuggingQuerySpec.scala → ...r/querulous/unit/DebuggingQuerySpec.scala
File renamed without changes.
View
0 ...itter/querulous/unit/FakeDriverSpec.scala → ...itter/querulous/unit/FakeDriverSpec.scala
File renamed without changes.
View
0 ...s/unit/MemoizingDatabaseFactorySpec.scala → ...s/unit/MemoizingDatabaseFactorySpec.scala
File renamed without changes.
View
0 ...r/querulous/unit/QueryEvaluatorSpec.scala → ...r/querulous/unit/QueryEvaluatorSpec.scala
File renamed without changes.
View
0 ...er/querulous/unit/RetryingQuerySpec.scala → ...er/querulous/unit/RetryingQuerySpec.scala
File renamed without changes.
View
0 ...twitter/querulous/unit/SqlQuerySpec.scala → ...twitter/querulous/unit/SqlQuerySpec.scala
File renamed without changes.
View
0 ...nit/StandardAsyncQueryEvaluatorSpec.scala → ...nit/StandardAsyncQueryEvaluatorSpec.scala
File renamed without changes.
View
0 ...us/unit/StatsCollectingDatabaseSpec.scala → ...us/unit/StatsCollectingDatabaseSpec.scala
File renamed without changes.
View
0 ...ulous/unit/StatsCollectingQuerySpec.scala → ...ulous/unit/StatsCollectingQuerySpec.scala
File renamed without changes.
View
0 ...s/unit/ThrottledPoolingDatabaseSpec.scala → ...s/unit/ThrottledPoolingDatabaseSpec.scala
File renamed without changes.
View
0 ...uerulous/unit/TimingOutDatabaseSpec.scala → ...uerulous/unit/TimingOutDatabaseSpec.scala
File renamed without changes.
View
0 ...r/querulous/unit/TimingOutQuerySpec.scala → ...r/querulous/unit/TimingOutQuerySpec.scala
File renamed without changes.
View
59 querulous-tracing/src/main/scala/com/twitter/querulous/query/TracingQuery.scala
@@ -0,0 +1,59 @@
+package com.twitter.querulous.query
+
+import com.twitter.finagle.tracing.{Tracer, Annotation, Trace}
+import java.nio.ByteBuffer
+import java.sql.Connection
+import java.net.{UnknownHostException, InetSocketAddress, InetAddress}
+
+/**
+ * Adds trace annotations to capture data about the query.
+ * This data is then processed and sent off with a Finagle compatible tracer.
+ */
+class TracingQuery(query: Query, connection: Connection, queryClass: QueryClass,
+ serviceName: String, tracer: Tracer) extends QueryProxy(query: Query) {
+
+ override protected def delegate[A](f: => A) = {
+ Trace.unwind {
+ Trace.pushTracer(tracer)
+ // generate the id for this span, decide to sample or not
+ val nextId = Trace.nextId
+ if (Trace.id.sampled || tracer.sampleTrace(nextId)) {
+ Trace.pushId(nextId.copy(sampled = true))
+ } else {
+ Trace.pushId(nextId)
+ }
+
+ try {
+ // don't know the port
+ Trace.recordClientAddr(new InetSocketAddress(
+ InetAddress.getByName(connection.getClientInfo("ClientHostname")), 0))
+ } catch {
+ case e: UnknownHostException => () // just don't set it if we can't find it
+ }
+
+ // we want to know which query caused these timings
+ getRootQuery match {
+ case q: SqlQuery =>
+ Trace.record(Annotation.BinaryAnnotation("querulous.query",
+ ByteBuffer.wrap(q.query.getBytes())))
+ Trace.recordRpcname(serviceName, queryClass.name)
+ case _ => ()
+ }
+
+ // send request and time it
+ Trace.record(Annotation.ClientSend())
+ val rv = f
+ Trace.record(Annotation.ClientRecv())
+ rv
+ }
+ }
+}
+
+class TracingQueryFactory(queryFactory: QueryFactory, serviceName: String, tracer: Tracer)
+ extends QueryFactory {
+
+ def apply(connection: Connection, queryClass: QueryClass, query: String, params: Any*) = {
+ new TracingQuery(queryFactory(connection, queryClass, query, params: _*),
+ connection, queryClass, serviceName, tracer)
+ }
+}
View
29 querulous-tracing/src/test/scala/com/twitter/querulous/unit/TracingQuerySpec.scala
@@ -0,0 +1,29 @@
+package com.twitter.querulous.unit
+
+import java.sql.Connection
+import org.specs.Specification
+import org.specs.mock.JMocker
+import com.twitter.finagle.tracing.{Record, TraceId, Tracer}
+import com.twitter.querulous.query._
+
+class TracingQuerySpec extends Specification with JMocker {
+ "TracingQuery" should {
+
+ "add records as query is executed" in {
+ val queryString = "select * from users"
+ val tracer = mock[Tracer]
+ val connection = mock[Connection]
+
+ expect {
+ one(tracer).sampleTrace(a[TraceId])
+ one(connection).getClientInfo("ClientHostname")
+ one(connection).prepareStatement(queryString)
+ exactly(5).of(tracer).record(a[Record])
+ }
+
+ val query = new SqlQuery(connection, queryString)
+ val tracingQuery = new TracingQuery(query, connection, QueryClass.Select, "service", tracer)
+ tracingQuery.execute()
+ }
+ }
+}

0 comments on commit bf5af4a

Please sign in to comment.