Size: a a a

2020 September 03

AK

Alexey Kuzin in pro.jvm
Может подскажете чатик, где могут помочь?
источник

NG

Nikita Gryzlov in pro.jvm
Alexey Kuzin
Вторая проблема -- балансировщик по логике вещей должен дождаться всей картины для своей инициализации. А интерфейс completable future не очень удобен для комбинации фьюч, может есть реализация получше?
CompletableFuture.allOf не подойдёт?
источник

SK

Stanislav Kashirin in pro.jvm
Alexey Kuzin
Вторая проблема -- балансировщик по логике вещей должен дождаться всей картины для своей инициализации. А интерфейс completable future не очень удобен для комбинации фьюч, может есть реализация получше?
У Spotify есть набор утилит для работы с CompletableFuture/CompletionStage
источник

AK

Alexey Kuzin in pro.jvm
Nikita Gryzlov
CompletableFuture.allOf не подойдёт?
Мучаюсь с ним, он не предназначен для сбора результата. Есть конечно вариант скопировать код из jdk и написать свой allOf, но пока ищу другие варианты
источник

AK

Alexey Kuzin in pro.jvm
Stanislav Kashirin
У Spotify есть набор утилит для работы с CompletableFuture/CompletionStage
Спасибо, посмотрю
источник

SK

Stanislav Kashirin in pro.jvm
Alexey Kuzin
Мучаюсь с ним, он не предназначен для сбора результата. Есть конечно вариант скопировать код из jdk и написать свой allOf, но пока ищу другие варианты
https://github.com/spotify/completable-futures

CompletableFutures.allAsList, combine, combineFutures
источник

VP

Vladimir Petrakovich in pro.jvm
Alexey Kuzin
Мучаюсь с ним, он не предназначен для сбора результата. Есть конечно вариант скопировать код из jdk и написать свой allOf, но пока ищу другие варианты
Почему не предназначен? Делаете allOf(), а внутри следущего шага get() у исходных фьюч.
источник

AK

Alexey Kuzin in pro.jvm
Я результат allOf хотел дальше прокинуть для инициализации балансировщика, но со вспомогательной фьючей можно и так да.
источник

AK

Alexey Kuzin in pro.jvm
Резолвить ее руками
источник

AK

Alexey Kuzin in pro.jvm
А что скажете насчёт обхода гонок при инициализации коннекшена? Может есть какая-то книга или бест практисес?
источник

AK

Alexey Kuzin in pro.jvm
Пример гонки: коннекшены прикопаны в какой-то структуре, а начальный момент она пуста, два треда могут пойти её инициализировать. Очевидное решение с захватом монитора на структуре кажется неправильным
источник

DP

Denis Pavlyuchenko in pro.jvm
Alexey Kuzin
Пример гонки: коннекшены прикопаны в какой-то структуре, а начальный момент она пуста, два треда могут пойти её инициализировать. Очевидное решение с захватом монитора на структуре кажется неправильным
сорри, может задачу совсем не так понимаю, но разве обычного AtomicBoolean вместе с его CAS-ом - тут не достаточно?
источник

AK

Alexey Kuzin in pro.jvm
Denis Pavlyuchenko
сорри, может задачу совсем не так понимаю, но разве обычного AtomicBoolean вместе с его CAS-ом - тут не достаточно?
Стейт машину предлагаешь с тремя состояниями? Я думал об этом, но у меня она уже есть внутри коннекшена, получается огород какой-то
источник

SK

Stanislav Kashirin in pro.jvm
Alexey Kuzin
Пример гонки: коннекшены прикопаны в какой-то структуре, а начальный момент она пуста, два треда могут пойти её инициализировать. Очевидное решение с захватом монитора на структуре кажется неправильным
Два треда запускают асинхронный процесс инициализации?
источник

AK

Alexey Kuzin in pro.jvm
Denis Pavlyuchenko
сорри, может задачу совсем не так понимаю, но разве обычного AtomicBoolean вместе с его CAS-ом - тут не достаточно?
И это разве не фейл-фаст решение, с обработкой ошибок на стороне клиента?
источник

AK

Alexey Kuzin in pro.jvm
Stanislav Kashirin
Два треда запускают асинхронный процесс инициализации?
Я захотел лейзи инициализацию тут
источник

DP

Denis Pavlyuchenko in pro.jvm
Alexey Kuzin
Стейт машину предлагаешь с тремя состояниями? Я думал об этом, но у меня она уже есть внутри коннекшена, получается огород какой-то
Я имел ввиду, что можно взять AtomicBoolean, и делать из потоков CAS - чей CAS прошел, тот и делает инициализацию
источник

SK

Stanislav Kashirin in pro.jvm
Можно через cas зайти в секцию запустить вычисление и записать на него фьючу
источник

AK

Alexey Kuzin in pro.jvm
Denis Pavlyuchenko
Я имел ввиду, что можно взять AtomicBoolean, и делать из потоков CAS - чей CAS прошел, тот и делает инициализацию
Ну это понятно, у меня так сделано внутри коннекшена
источник

КХ

Константин Хатунцев... in pro.jvm
Alexey Kuzin
Мучаюсь с ним, он не предназначен для сбора результата. Есть конечно вариант скопировать код из jdk и написать свой allOf, но пока ищу другие варианты
источник