Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 December 07

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
А разве это не то чего нужно добиться? Что-то я запутался тогда в чем задача
Задача в том, чтобы на два конкурентных запроса положить в базу один токен, а не два. И отдать одинаковый на оба запроса
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
А так - оч странно что приложение шлёт 2 запроса ...
Там два инстанса чата работают, вместо одного, отсюда и проблемы
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Sergey
Задача в том, чтобы на два конкурентных запроса положить в базу один токен, а не два. И отдать одинаковый на оба запроса
Ааа… ну тогда тебе нужно индекс уникальности не на сам токен (хоты это тоже нужно) а на foreign key. Если токен связан с пользователем, то тебе нужно индекс уникальности на user_id повесить.
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
Если нет какой то модели (сущности) их(запросы) объединяющей, будет проблематично
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
Ааа… ну тогда тебе нужно индекс уникальности не на сам токен (хоты это тоже нужно) а на foreign key. Если токен связан с пользователем, то тебе нужно индекс уникальности на user_id повесить.
Да, у меня так и сделано
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
Если нет какой то модели (сущности) их(запросы) объединяющей, будет проблематично
В контроллере я запрашиваю новый токен у твилио, а затем кладу в таблице типа twilio_tokens. У которой user_id & token поля
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Sergey
Да, у меня так и сделано
И что происходит? Создаются две записи с одним user_id но разными токенами?
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
Ограничение на уровне БД приведёт в некоторых случаях к отказу
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
Блокировать нужно user-а и всё
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
по сути уйти от конкурентности для запросов этого юзера
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
И что происходит? Создаются две записи с одним user_id но разными токенами?
Иногда такое случается, но редко. В основной вторая транзакция откатывается и всё норм
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
не норм. откат транзакции это не оч хорошо
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Sergey
Иногда такое случается, но редко. В основной вторая транзакция откатывается и всё норм
Не может быть чтоб такое был. Или это баг в постгресе. Индекс же только на колонку user_id, не совместный на use_id и токен?
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
Блокировать нужно user-а и всё
а как блокировать, если у меня там только INSERT делается?
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
у тебя есть юзер, блокируй его
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
Не может быть чтоб такое был. Или это баг в постгресе. Индекс же только на колонку user_id, не совместный на use_id и токен?
совместный
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
потом делай свой код вставки и потом освобождай
источник

I

Ildar in Ruby, Rails, Hanami | dry-rb
Mikhail Churakov
не норм. откат транзакции это не оч хорошо
Зависит от логики. Если ловить это исключение то отката транзакции не будет. А Прото выберется новый токен и сохранится.
источник

S

Sergey in Ruby, Rails, Hanami | dry-rb
Ildar
Зависит от логики. Если ловить это исключение то отката транзакции не будет. А Прото выберется новый токен и сохранится.
я ловлю экспешн и запрашиваю токен уже положенный в базу
источник

MC

Mikhail Churakov in Ruby, Rails, Hanami | dry-rb
у тебя вначале поток попробует заблокировать общую модель - юзера, БД поставит запрос блокировки на ожидание, а первый поток в этой время отработает
источник