Можно ли узнать, какая заблокированная запись останавливает другие активные запросы в Rails? - PullRequest
0 голосов
/ 20 марта 2020

    ActiveRecord::Base.transaction do
      userapply.lock!
      sleep(1.minutes)
    end

, затем, если я выполню это в другом процессе,

        Userapply.all.update_all({priority:1, updated_at: Time.now})

истечет время ожидания или ждет отключения предыдущей блокировки. Первый вопрос:

1) можно ли остановить активный запрос, если он занимает определенное время (это уже указано в файле database.yml, но теперь я уверен, как вручную изменить значение в Speci c код)

2) Кажется, Timeout :: timeout (period) не останавливает активный запрос, если я поставил код таким образом.

    require 'timeout'
    timeout_in_seconds = 2
    begin
      Timeout::timeout(timeout_in_seconds) do
        #Do something that takes long time
        Userapply.all.update_all({priority:1, updated_at: Time.now})
      end
    rescue Timeout::Error
    end

Есть что-то, что я пропускаю здесь?

3) Как мы можем узнать, какая запись заставляет код ждать, пока все связанные записи не будут выпущены? Например, если я запрашиваю Userapply.all.update_all, то есть некоторые записи, которые были заблокированы в других запросах, и я хочу знать, какие идентификаторы в настоящее время поддерживаются.

Сердечно прошу помощи здесь (: (: (:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...