akka/akka-core

Scheduled Source with 0 initialDelay is using interval as initialDelay

Aperta

#18.383 aperta il 1 set 2015

 (13 commenti) (0 reazioni) (0 assegnatari)Scala (3547 fork)batch import
1 - triagedhelp wantedt:stream

Metriche repository

Star
 (13.277 stelle)
Metriche merge PR
 (Merge medio 8g 19h) (10 PR mergiate in 30 g)

Descrizione

The test app below with initialDelay = 0.nanos prints this:

root 2015-09-01T16:28:12.209Z BEFORE
root 2015-09-01T16:28:17.317Z TICK

-> applied initialDelay is ~5 seconds which is clearly unexpected

now change to initialDelay = 1.nanos and you get

root 2015-09-01T16:28:38.760Z BEFORE
root 2015-09-01T16:28:38.889Z TICK

-> initialDelay is correctly applied

import java.time.Instant

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Sink, Source}

import scala.concurrent.duration._

object BugInitialDelay extends App{

  import scala.concurrent.ExecutionContext.Implicits.global

  implicit val system = ActorSystem("foo")
  implicit val materializer = ActorMaterializer()

  println(Instant.now() + " BEFORE")
  Source(initialDelay = 0.nanos, interval = 5.seconds, tick = ()).take(1).map{ tick =>
    println(Instant.now() + " TICK")
  }.runWith(Sink.ignore).onComplete { _ =>
    system.shutdown()
  }
}

Guida contributor