aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/context/Storage.scala
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-08-14 23:28:52 +0200
committerGitHub <noreply@github.com>2017-08-14 23:28:52 +0200
commita949c875684d78818224cd2ca7aaf79aa7878724 (patch)
treece84ab802ba3c543b4b107e32b7cac4dea610fc4 /kamon-core/src/main/scala/kamon/context/Storage.scala
parent18b9fc25d556fef50c5033f8880fab2594783caa (diff)
parent3144a04ea42a4e333b7a608597c07c0458c9f147 (diff)
downloadKamon-a949c875684d78818224cd2ca7aaf79aa7878724.tar.gz
Kamon-a949c875684d78818224cd2ca7aaf79aa7878724.tar.bz2
Kamon-a949c875684d78818224cd2ca7aaf79aa7878724.zip
Merge pull request #1 from ivantopo/wip/context-management-reloaded
remove context management from the Tracer
Diffstat (limited to 'kamon-core/src/main/scala/kamon/context/Storage.scala')
-rw-r--r--kamon-core/src/main/scala/kamon/context/Storage.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/kamon-core/src/main/scala/kamon/context/Storage.scala b/kamon-core/src/main/scala/kamon/context/Storage.scala
new file mode 100644
index 00000000..6b92ff85
--- /dev/null
+++ b/kamon-core/src/main/scala/kamon/context/Storage.scala
@@ -0,0 +1,39 @@
+package kamon.context
+
+trait Storage {
+ def current(): Context
+ def store(context: Context): Storage.Scope
+}
+
+object Storage {
+
+ trait Scope {
+ def context: Context
+ def close(): Unit
+ }
+
+
+ class ThreadLocal extends Storage {
+ private val tls = new java.lang.ThreadLocal[Context]() {
+ override def initialValue(): Context = Context.Empty
+ }
+
+ override def current(): Context =
+ tls.get()
+
+ override def store(context: Context): Scope = {
+ val newContext = context
+ val previousContext = tls.get()
+ tls.set(newContext)
+
+ new Scope {
+ override def context: Context = newContext
+ override def close(): Unit = tls.set(previousContext)
+ }
+ }
+ }
+
+ object ThreadLocal {
+ def apply(): ThreadLocal = new ThreadLocal()
+ }
+} \ No newline at end of file