Недавно мы обновили пакет сборки CF (Cloud Foundry) с cflinuxfs2 до cflinuxfs3.Это происходит с изменениями java buildpack с java-buildpack.git # v4.8 на java-buildpack.git # v4.16.1.Версия Java в контейнере CF изменена с 1.8.0_162-b12 на 1.8.0_192-b12.
После этого обновления мы столкнулись со странной проблемой с Akka Futures.Хотя несколько запросов отправляются в Akka Future одновременно, выполнение запросов в Future происходит последовательно.Вызывающая точка не блокируется, но выполнение Future для второго запроса блокируется до завершения выполнения первого запроса Future.
Пример вывода в cflinuxfs2: (оба запроса выполняются одновременно)
Создание… одного
будущего запроса получено: один
Создание… двух
будущего запроса получено: два
будущий запрос завершен: один
будущий запрос завершен: два
успех - один
успех - два
Пример вывода в cflinuxfs3: (Оба запроса отправленыодновременно, но выполнение происходит последовательно)
Создание… одного
будущий запрос получен: один
Создание… двух
будущий запрос завершен: один
success- one
будущий запрос получен: два
будущий запрос завершен: два
success- два
Пример кода:
def testFuture(id: String): Future[Boolean] = Future {
println("future request received:" + id)
Thread.sleep(10000)
println("future request finished:" + id)
true
}
def retValueValidation(id: String, retValue: Future[Boolean]) {
retValue.onComplete {
case scala.util.Success(true) =>
println("success- " + id)
case _ =>
println("fail- one")
}
}
println("Creating...one")
val retValue = testFuture("one")
retValueValidation("one", retValue)
println("Creating...two")
val retValue1 = testFuture("two")
retValueValidation("two", retValue1)