Skip to content

Commit 90a4b97

Browse files
author
Steve Salas
committed
Generating trace settings may take a long time
1 parent 42d9850 commit 90a4b97

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

codepulse/src/main/scala/com/secdec/codepulse/tracer/AkkaTracingTarget.scala

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@
2020
package com.secdec.codepulse.tracer
2121

2222
import java.util.concurrent.TimeoutException
23+
2324
import scala.concurrent.Await
2425
import scala.concurrent.ExecutionContext
2526
import scala.concurrent.Future
26-
import scala.concurrent.duration.DurationInt
27+
import scala.concurrent.duration.{DurationInt, FiniteDuration}
2728
import scala.util.Failure
2829
import scala.util.Success
2930
import com.codedx.codepulse.hq.trace.Trace
@@ -169,7 +170,13 @@ object AkkaTracingTarget {
169170
deletionKey -> deletionFuture
170171
}
171172

172-
def connectTrace(trace: Trace)(implicit exc: ExecutionContext) = getAckFuture(TraceConnected(trace))
173+
def connectTrace(trace: Trace)(implicit exc: ExecutionContext) = {
174+
// TraceSettingsCreator.generateTraceSettings may take awhile to complete if
175+
// there are many records in the tree_node_data table. Use a timeout duration of
176+
// 10 minutes to effectively make a synchronous transition between the Initializing
177+
// and Tracing states
178+
getAckFuture(TraceConnected(trace))(exc = exc, timeout = new Timeout(10.minutes))
179+
}
173180

174181
def cancelPendingDeletion()(implicit exc: ExecutionContext) = getAckFuture(CancelPendingDeletion)
175182
def finalizeDeletion(key: DeletionKey)(implicit exc: ExecutionContext) = getAckFuture(FinalizeDeletion(key))
@@ -181,8 +188,7 @@ object AkkaTracingTarget {
181188
* containing that message. If any other message is sent, the future fails
182189
* with no exception message.
183190
*/
184-
private def getAckFuture(msg: TargetRequest)(implicit exc: ExecutionContext) = {
185-
implicit val timeout = new Timeout(5.seconds)
191+
private def getAckFuture(msg: TargetRequest)(implicit exc: ExecutionContext, timeout: Timeout = new Timeout(5.seconds)) = {
186192
val future = actor ? msg
187193
future flatMap {
188194
case Ack => Future successful ()

0 commit comments

Comments
 (0)