Size: a a a

pro.rb (Ruby/Rails / RU)

2019 November 22

NK

Nick Kugaevsky in pro.rb (Ruby/Rails / RU)
Треды тебе не гарантируют порядок выполнения
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
неаверное всетаки не race conditions
источник

NK

Nick Kugaevsky in pro.rb (Ruby/Rails / RU)
Тогда я не понял проблему
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
Сейчас опишу полностью свою ситуацию
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
Есть функция в которую передается  массив c id. Перед функцией к этому массиву применяется uniq. В базе данных стоит ключ на уникальность этого ID.  Внутри самой функции я проверяю что если какойто id уже есть в базе данных, то я его просто скипаю. Так вот у меня есть подозрения что иногда получается так что два воркера запускаются одновременно и проверка на уникальность id в БД уже прошла на стороне рельс, и валится на этапе записи в БД
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
Могу псевдокод накидать если неясно расписал
источник

RU

Roman Usherenko in pro.rb (Ruby/Rails / RU)
Dmitry Gorodnichy
Есть функция в которую передается  массив c id. Перед функцией к этому массиву применяется uniq. В базе данных стоит ключ на уникальность этого ID.  Внутри самой функции я проверяю что если какойто id уже есть в базе данных, то я его просто скипаю. Так вот у меня есть подозрения что иногда получается так что два воркера запускаются одновременно и проверка на уникальность id в БД уже прошла на стороне рельс, и валится на этапе записи в БД
никак ты это не проверишь
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
У меня приказ
источник

RU

Roman Usherenko in pro.rb (Ruby/Rails / RU)
надо на стороне рельсов заворачивать в rescue ActiveRecord::Rollback, смотреть его причину, разворачивать ошибку от постргеса и если там написано unique key violation - то что-то делать самому (перегенеривать там или шот такое)
источник

RI

Rustam Ibragimov in pro.rb (Ruby/Rails / RU)
делай фэйл-позитив логику, если нарушил констреинт - игнорь
если не хочется - залокайся, выстрой воркеры в очередеь по локу в бд (накинул идеи)
источник

RU

Roman Usherenko in pro.rb (Ruby/Rails / RU)
а ну еще вроде можно advisory lock делать
источник

RI

Rustam Ibragimov in pro.rb (Ruby/Rails / RU)
на них и был намек у меня
источник

RI

Rustam Ibragimov in pro.rb (Ruby/Rails / RU)
но норовишь плодить тонну локов, а если они еще и xact - тонну транзакций (если твои джобы пулеметят)
источник

RI

Rustam Ibragimov in pro.rb (Ruby/Rails / RU)
а там если логика будет долгая - то боль потом будет 🙂
источник

DG

Dmitry Gorodnichy in pro.rb (Ruby/Rails / RU)
Понял, всем спасибо
источник

D

Dmitry in pro.rb (Ruby/Rails / RU)
Dmitry Gorodnichy
Есть функция в которую передается  массив c id. Перед функцией к этому массиву применяется uniq. В базе данных стоит ключ на уникальность этого ID.  Внутри самой функции я проверяю что если какойто id уже есть в базе данных, то я его просто скипаю. Так вот у меня есть подозрения что иногда получается так что два воркера запускаются одновременно и проверка на уникальность id в БД уже прошла на стороне рельс, и валится на этапе записи в БД
в коде твоей логики добавить перехват исключения на уникальность. И писать в логи, отправлять в сентри или еще куда. так ты поймешь возникает ли такая ситуация
источник

AI

Alan Ikaev in pro.rb (Ruby/Rails / RU)
Привет, есть кто работал с rspec_api_documentation? Не пойму в чем прикол создания групп
источник

AI

Alan Ikaev in pro.rb (Ruby/Rails / RU)
источник

AI

Alan Ikaev in pro.rb (Ruby/Rails / RU)
Я ожидал такого поведения, создаю к примеру группу admin, далее в этой группе ее взаимодействие например с сущностью Order, потом все генерируется и в документации я вижу вложенность типа Admin -> Order
источник