The Ant
ну промисы так работают 🤷‍♂️
Kirill
$a = a(); $b = b();
Kirill
вот тебе асинхронный код на файберах
The Ant
вот тебе асинхронный код на файберах
ок, есть пример как на файберах сделать последовательными 2 задачи в мессенжере? типа $bus->dispatch($c1); $bus->dispatch($c2);
The Ant
с промисами я бы мог что-то такое: $bus->dispatch($c1) ->then(fn() => $bus->dispatch($c2));
Kirill
Так и сделать
Kirill
без всяких then
The Ant
если 2 воркера то обработается не последовательно
The Ant
хоть файберы хоть нет
Kirill
проблем-то
The Ant
как? )
Kirill
для начала - оно и так будет последовательно
Kirill
потому что для кооперативного режима нужно написать соответствующий метод
Kirill
вроде: [$result1, $result2] = Task::all([$bus->dispatch(...), $bus->dispatch(...)]);
The Ant
вроде: [$result1, $result2] = Task::all([$bus->dispatch(...), $bus->dispatch(...)]);
диспатч отправит задачу в очередь, последовательно да. Но воркеры которые работают фоном и разибрают эту очередь могут взять задачи параллельно
Павел
Мне кажется тут проблема скорее в том, что отсутствует какой то статус "processed"
The Ant
Мне кажется тут проблема скорее в том, что отсутствует какой то статус "processed"
такой статус есть, просто я хочу сделать условно статус "готово" на том же экране, где это создается
Павел
Если видео перезаливается - оно опять будет в процессе обработки
The Ant
Не понял
Как-то так )
Павел
Обычно когда ищутся костыли, часто проблема именно в флоу
The Ant
Если видео перезаливается - оно опять будет в процессе обработки
да, но перезалив не должен менять на "создано"
Павел
да, но перезалив не должен менять на "создано"
Так у тебя должен быть хэндлео обратки асинхронный, в нем и не будет создано
Павел
Опять же, ты говоришь, что есть создано , но его нельзя редачить. А какой статус, когда можно редачить/пользоваться?
The Ant
Опять же, ты говоришь, что есть создано , но его нельзя редачить. А какой статус, когда можно редачить/пользоваться?
не, хочу чтобы "создано" можно было редактировать уже. Но пока видос обрабатывается нельзя ниче делать. Т.е. 2 статуса.
The Ant
Очень расплывчито, можно редактировать но нельзя ничего делать))
крч, creating = щас в процессе создания, ниче нельзя сделать. created = всё готово приступай к работе
The Ant
как ты говоришь статус processing, но процессинг не отражает действия
Алексей
Доп поле добавить? Можно или нельзя
Павел
Именно по флоу проблема, а не по твоему решению
The Ant
Так ну и в чем проблема?
в том чтобы поставить статус created на том же экране, где создается )
The Ant
в коде
Павел
The Ant
а не в хендреле команды или в левом сервисе
Павел
И зачем?
Павел
Ты сам говоришь, что created ставится после обработки
Павел
А ты хочешь выставить ДО
The Ant
Так как его поставишь, если у тебя асинхрон?
в этом и вопрос, м.б. есть какой-то коллбек для команд, который не внутри хендлера команды запускается
Павел
ты хочешь поставить created, когда еще не created
The Ant
А ты хочешь выставить ДО
нет я хочу после. поэтому и написал про промисы
Павел
нет я хочу после. поэтому и написал про промисы
Промисы - это реализация какого флоу, а у тебя имхо проблема с жизненным циклом
Павел
Может быть сделать второй статус, процесс для видео?
Павел
Или почему ты не моешь в хэндлеое обработки поставить статус?
Kirill
статусы - это всегда фиговый вариант
Kirill
вешай LOCK FOR UPDATE
Kirill
Почему?
потому что при деплое повесятся таски
Kirill
деплой запустился, воркеры обработки пошли на рестарт
Kirill
так и останется висеть со статусом кривым
Павел
так и останется висеть со статусом кривым
Там таски вернутся в очередь, и пойдут на 2 круг
Павел
И тут уже решать проблемы идемпотентности если они есть
Kirill
Там таски вернутся в очередь, и пойдут на 2 круг
как, если статус уже "в работе" висит?
Kirill
а если 5 из 10 воркеров, которые что-то делают помрут из-за нехватки памяти, например?
Kirill
как понять что 5 из 10 статусов "в работе" нифига не в работе?
Kirill
поэтому самый грамотный вариант - это делать LOCK FOR UPDATE, т.к. если залочится запись, то будет означать процессинг, а когда что-то упадёт - коннкешн обрывается и рекорд обратно в список возвращается
The Ant
если я делаю задачу загрузки видео в сторадж, уже не порядок
Павел
С таким флоу всё в порядке будет
Почему нельзя кинуть ивент в басе. Короче я чет не пойму проблемы
The Ant
Или почему ты не моешь в хэндлеое обработки поставить статус?
я могу, но не хочу, хочу чтобы весь процесс был на глазах, и не надо было прыгать по файлам искать где же статус конечный высталяется и что еще по дороге выпоняется
Kirill
Вариант интересный, правда лок всей строки получается.
так да, потому что воркер в работу её берёт
Kirill
одной строки)
Kirill
можно так же и селект делать, скипая записи, которые уже кто-то захавал себе
Kirill
select for update skip locked
Kirill
или ты о чём?
The Ant
про это да
Kirill
у тебя 1000 воркеров, надо понять что в работе, а что нет
Kirill
если будешь обновлять - случиться рейс кондишн
Павел
так и останется висеть со статусом кривым
Такая проблема есть с кривотой, когда что то падает, соглашусь. Не решали так как нет массовости. С другой стороны воркер может и 2 задачи выполнять, т.е. быть не идемпотентными до конца.
Kirill
т.к. селект и апдейт не атомарные
Kirill
но 2 воркера уже не должны 1 задачу выполнять
The Ant
но 2 воркера уже не должны 1 задачу выполнять
если транспорт мускул, то выполняют ) косяк симфы
Kirill
а в коде выше вначале транзакция, потом селект, потом апдейт и коммит где-то далеко