Skip to content

Commit bb82d3b

Browse files
committed
Fix thread leak issue
1 parent 98b19ef commit bb82d3b

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

embedded-keycloak/src/main/scala/org/tmt/embedded_keycloak/impl/HealthCheck.scala

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.tmt.embedded_keycloak.impl
22

3+
import java.util.concurrent.atomic.AtomicInteger
34
import java.util.{Timer, TimerTask}
45

56
import org.tmt.embedded_keycloak.Settings
@@ -12,18 +13,32 @@ import scala.util.Try
1213
import scala.util.control.NonFatal
1314

1415
private[embedded_keycloak] class HealthCheck(settings: Settings) {
15-
def checkHealth(): Future[Unit] = retry[Response](makeCall()).map(_ => ())
1616

17-
private def retry[T](f: => Future[T], attempts: Int = 10, interval: FiniteDuration = 3.seconds): Future[T] = {
17+
/**
18+
* This ID is used to generate thread names.
19+
*/
20+
private val nextSerialNumber = new AtomicInteger(0)
21+
private def serialNumber = nextSerialNumber.getAndIncrement
22+
23+
def checkHealth(): Future[Unit] = {
24+
val timer = new Timer(s"embedded-keyclock-timer-$serialNumber")
25+
retry[Response](makeCall(), timer = timer)
26+
.transform(_ => Try(timer.cancel()))
27+
}
28+
29+
private def retry[T](f: => Future[T],
30+
attempts: Int = 10,
31+
interval: FiniteDuration = 3.seconds,
32+
timer: Timer): Future[T] = {
1833
f.recoverWith {
19-
case NonFatal(_) if attempts > 0 => delay(interval) { retry(f, attempts - 1, interval) }.flatten
34+
case NonFatal(_) if attempts > 0 =>
35+
delay(interval, timer) { retry(f, attempts - 1, interval, timer) }.flatten
2036
}
2137
}
2238

23-
def delay[T](delay: FiniteDuration)(block: => T): Future[T] = {
39+
def delay[T](delay: FiniteDuration, timer: Timer)(block: => T): Future[T] = {
2440
val promise = Promise[T]()
25-
val t = new Timer()
26-
t.schedule(new TimerTask {
41+
timer.schedule(new TimerTask {
2742
override def run(): Unit = {
2843
promise.complete(Try(block))
2944
}

0 commit comments

Comments
 (0)