akka/akka-core

Scheduled Source with 0 initialDelay is using interval as initialDelay

オープン

#18,383 opened on 2015/09/01

 (13 件のコメント) (0 件のリアクション) (0 人の担当者)Scala (3,547 件のフォーク)batch import
1 - triagedhelp wantedt:stream

Repository metrics

Stars
 (13,277 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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()
  }
}

コントリビューターガイド