Skip to content

Commit b7cec7e

Browse files
committed
Warn on finished span in runWithSpan
1 parent 28cdeac commit b7cec7e

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

core/kamon-core/src/main/scala/kamon/ContextStorage.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package kamon
1818

1919
import kamon.context.{Context, Storage}
2020
import kamon.trace.Span
21+
import org.slf4j.LoggerFactory
2122

2223
import scala.util.control.NonFatal
2324

@@ -28,6 +29,7 @@ import scala.util.control.NonFatal
2829
trait ContextStorage {
2930
import ContextStorage._
3031

32+
private val log = LoggerFactory.getLogger(classOf[ContextStorage])
3133
/**
3234
* Returns the current Context on Kamon's Context Storage. As the default behavior, this will return Context.Empty if
3335
* no other Context has been stored on the calling thread.
@@ -118,6 +120,9 @@ trait ContextStorage {
118120
*/
119121
@inline def runWithSpan[T](span: Span, finishSpan: Boolean)(f: => T): T = {
120122
try {
123+
if (span.isFinished) {
124+
log.warn(s"Kamon.runWithSpan() running with finished span: ${span.operationName()}")
125+
}
121126
runWithContextEntry(Span.Key, span)(f)
122127
} catch {
123128
case NonFatal(t) =>

core/kamon-core/src/main/scala/kamon/trace/Span.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ sealed abstract class Span extends Sampler.Operation {
7777
*/
7878
def trace: Trace
7979

80+
/**
81+
* Returns true if this Span was finished.
82+
*/
83+
def isFinished: Boolean
84+
8085
/**
8186
* Returns true if this Span was initially created in another process and then transferred to this process.
8287
*/
@@ -426,6 +431,7 @@ object Span {
426431

427432
override val isRemote: Boolean = false
428433
override val isEmpty: Boolean = false
434+
override val isFinished: Boolean = _isOpen
429435

430436
override def start(): Delayed =
431437
start(clock.instant())
@@ -679,6 +685,7 @@ object Span {
679685
override def kind: Kind = Kind.Unknown
680686
override def isRemote: Boolean = false
681687
override def isEmpty: Boolean = true
688+
override def isFinished: Boolean = false
682689
override def position(): Position = Position.Unknown
683690
override def tag(key: String, value: String): Span = this
684691
override def tag(key: String, value: Long): Span = this
@@ -715,6 +722,7 @@ object Span {
715722
override def kind: Kind = Kind.Unknown
716723
override def isRemote: Boolean = true
717724
override def isEmpty: Boolean = false
725+
override def isFinished: Boolean = false
718726
override def position(): Position = Position.Unknown
719727
override def tag(key: String, value: String): Span = this
720728
override def tag(key: String, value: Long): Span = this

0 commit comments

Comments
 (0)