Чтобы лучше понять пессимистическую блокировку, я попытался запустить этот код в своем приложении на Rails:
Thread.new do
geoge_order.with_lock do
puts "[geoge] transaction start"
sleep(1)
puts "[geoge] transaction end"
end
end
Thread.new do
amanda_order.with_lock do
puts "[amanda] transaction start"
puts "[amanda] transaction end"
end
end
Я установил пессимистическую блокировку для разных записей заказов, поэтому ожидал, что каждый заказ будет читаемым одновременно. И я получил то, что ожидал от консоли Rails:
[geoge] transaction start
[amanda] transaction start
[amanda] transaction end
[geoge] transaction end
Однако при выполнении в тесте Rails блокировка чтения происходит так, как если бы блокировка была установлена для той же записи:
[geoge] transaction start
[geoge] transaction end
[amanda] transaction start
[amanda] transaction end
Почему результат на консоли рельсов отличается от результата теста рельсов?
- среда разработки: Ruby 2.6.0, Ruby on Rails 5.2.2, MySql 14.14, тест: Rspec, MiniTest