
Nikolay
05.02.2018
15:29:34

Александр
05.02.2018
15:30:37

Vadim
05.02.2018
15:31:24
ну подробнее - ты пусканул фбчу и ждешь у себя ее результат - она обосралась - максимум что ты можешь этопоймать невнятный Failure с ошибкой - от чего оно прилетело хрен поймешь.

Ivan
05.02.2018
15:31:45

Google

Oleg
05.02.2018
15:33:06

Nikolay
05.02.2018
15:33:38
и в receive ожидать

Александр
05.02.2018
15:35:27
а что если, акка людям не нравиться потому что они внутри аккторов futueres готовят ?

Oleg
05.02.2018
15:36:02
это сообщение набирала собака

Vadim
05.02.2018
15:37:08

Александр
05.02.2018
15:37:33
а c евентами что делаешь ?

Oleg
05.02.2018
15:37:54
> а что [,] если <,> акка людям не нравит<ь>ся потому[,] что они внутри ак<к>торов futu<e>res готовят ?

Александр
05.02.2018
15:38:36

Oleg
05.02.2018
15:39:01

Vadim
05.02.2018
15:39:05
ну много чего можно сделать - сменить стейт , прибить актор, уйти в таймаут-рейтрай ...

Oleg
05.02.2018
15:39:13
[рожа]

Nikolay
05.02.2018
15:39:20
@yourNightCurator готовь каверзные вопросы Олегу на митап

Google

Alexey
05.02.2018
15:39:33
может он с телефона? я вот часто читаю чатик в автобусе

Александр
05.02.2018
15:39:35


KrivdaAllStars
05.02.2018
15:39:40
finch не позволяет закрывать response в другом месте(не знаю просто) ? есть же кувырок через RequestProxy, в akka-http так можно
val result = Promise[GetResponse]
system.actorOf(RequestHandler.props()) ! Get
result.map {
case error: ErrorResponse =>
val content = error.asJson.noSpaces
error match {
case UserTimeOut =>
case NoObject =>
case NoUser =>
}
Output.payload(content, Status.NotFound)
case rsp: Response =>
Ok(rsp.asJson.noSpaces)
case _ =>
BadRequest(new RuntimeException("server error"))
}
class RequestHandler() extends Actor {
context.system.scheduler.scheduleOnce(maxRequestDuration) {
self ! UserTimeOut
}
override def receive: Receive = {
case Get =>
context.become(awaitInfo(respone))
}
def awaitInfo(response: Promise[GetResponse]): Receive = {
case resp: GetResponse =>
response.setValue(resp)
context.stop(self)
}
}

Oleg
05.02.2018
15:39:53

Александр
05.02.2018
15:39:53

Oleg
05.02.2018
15:40:12
получал транзакции заказным письмом?

Nikolay
05.02.2018
15:40:34
голубями

Oleg
05.02.2018
15:40:46
или forall город. меня в городе не будет?

Александр
05.02.2018
15:41:22

Nikolay
05.02.2018
15:42:05
Seq.empty[City].filter(_.hasTinkoffOffice) :+ City(2)

Oleg
05.02.2018
15:42:53

KrivdaAllStars
05.02.2018
15:42:55

Oleg
05.02.2018
15:43:18
или на :+

KrivdaAllStars
05.02.2018
15:44:34

Nikolay
05.02.2018
15:44:41
пушнул фикс

Oleg
05.02.2018
15:47:47

Александр
05.02.2018
15:47:59

Oleg
05.02.2018
15:48:24
увидел пастебин » не открываю

KrivdaAllStars
05.02.2018
15:50:11

Google

Oleg
05.02.2018
15:51:09

Kirill
05.02.2018
15:55:06
Пацаны, есть ли легкий способ линеаризовать какие-то вычисления без использования акки? Чтобы, например, так:
def linearize[T](action: => Future[T]): Future[T] и гарантировать, что все вызовы linearize будут выполняться строго последовательно, где бы в коде я ни вызвал? Считаем, что этот метод есть в каком-то классе, инстанс которого я шарю между всеми целевыми точками использования.

Oleg
05.02.2018
15:56:17

Александр
05.02.2018
15:57:13

Kirill
05.02.2018
15:58:16
тредпул с 1 потоком же
Ну, я задачу упростил тут, вообще хотелось бы линеаризовать относительно какого-то ключа, тут такой тредпул не зайдёт :)

Александр
05.02.2018
15:58:54
каждому ключу по тредпулу

Oleg
05.02.2018
15:59:19

Kirill
05.02.2018
15:59:26
Самое главное, чтобы линеаризовались именно эффекты, а не только результаты

Oleg
05.02.2018
16:02:06
а складываются во фри
если нужно расшаренное мутабельное состояние, действия с которым нужно линеаризовать
то MVar
for {
value <- mvar.take
newVal <- actions(value)
_ <- mvar.put(newval)
}вместо тысячи акторов

Kirill
05.02.2018
16:07:48
А, нет, я не хочу их потом вручную запускать. Это как очередь, в которую с одной стороны сколько угодно человек запихивают, а с другой - один разгребает. Только акторки one-by-one изначально гарантируют
И дают возможность просто плевать сообщения и не думать, кто, как и когда будет разгребать

Oleg
05.02.2018
16:09:13

Kirill
05.02.2018
16:10:49
Observable
Да, я туда посмотрел, но я смотрел недолго, и не нашёл ничего такого, что позволило бы мне сделать такой вот api, который я описал, с непрерывно разгребающейся в любой момент очередью. Видимо плохо смотрел

Oleg
05.02.2018
16:15:07

Google

Kirill
05.02.2018
16:18:47
не очень понял контракта твоего апи
trait Linear {
def linearize[T](f: => Future[T]): Future[T]
}
val l: Linear = ???
в одном месте:
l.linearize(Future.successful(1))
в другом
l.linearize(Future.successful(2))
Эффекты выполняются линеаризованно, хоть эти места друг от друга вообще не зависят.
Или я просто уже под вечер плыву, но возможно обсервабл мне действительно как-то поможет, там есть mapAsync, и может быть, его можно как-то натравить на какой-то бесконечный итератор, которому можно подбрасывать элементы.

Александр
05.02.2018
16:27:02
удобнее ли это будет чем акторы ?
покажи потом что вышло

Oleg
05.02.2018
16:42:34

IG
05.02.2018
16:43:22
ок

Oleg
05.02.2018
16:45:21
пофиксил, теперь buttHole - это ActorRef

Kirill
05.02.2018
16:45:44
C мониксом можно, но не самое приятное, делать штуку, которая хаотично внезапно может куда-то что-то запихнуть
Можно через BufferedObserver, можно через хитрый MVar[Seq]
Но самое простое, что я нашёл - это стримы
val buttHole = Source
.actorRef[() => Future[String]](1000, OverflowStrategy.dropNew)
.mapAsync(1)(_ ())
.toMat(Sink.foreach(???))(Keep.left)
.run()
Да, мне эти варианты приходили в голову, с мваром я пытался наколбасить, но там оказалось слишком хитро. Похоже, что с акторрефом будет самое простое
спасибо


Александр
05.02.2018
16:51:46
а гоняет кто-нить jackson-module-scala вместе с Enumeration магией ?

Oleg
05.02.2018
16:53:45

Kirill
05.02.2018
16:56:46

Oleg
05.02.2018
16:57:55

Kirill
05.02.2018
16:58:20
Даю-то я by-name параметр, а получить хочу запущенную футуру с результатом
Да, в примере использования я результат не указал, май бэд

Daniel
05.02.2018
17:00:36
я сегодня совсем плох, но позволь прояснить
чем аск тебя не устраивает раз уж про акторы?

Kirill
05.02.2018
17:01:56
Интуитивно не устраивает) Я же спрашивал с целью избавиться от акторов, а пришли всё равно к акторному решению

Google

Daniel
05.02.2018
17:02:23
я правильно понимаю, что многие могут спросить твой сериализатор, и каждому надо ответить только его результатом?
просто это оч все смахивает на кусок шедулера потоков - очередь и разгребатор

Kirill
05.02.2018
17:03:28
Собственно, я почти так выше и описывал про разгребать )

Daniel
05.02.2018
17:04:34
ну и как бы это неприятно не было, это оч похоже на актор

Kirill
05.02.2018
17:04:35
И про очередь сказал:) Просто очень хочется с акторов с аском это на что-то более человечное перевести, не очень мне нравятся эти вот Any, стектрейсы вглубь акки итд

Daniel
05.02.2018
17:05:08
ну тогда свой класс с очередью внутри
или попробуй этих мягких тёплых типизированных акторов

Oleg
05.02.2018
17:07:00

Kirill
05.02.2018
17:08:30

Oleg
05.02.2018
17:21:05
код с телефона в метро, не обессудь
фактически как актор пул но с мварами вместт акторов

Nikolay
05.02.2018
17:23:53

Andrey
05.02.2018
17:24:31
У мя был такой