В postgres истекает ли рекомендательная блокировка по истечении установленного времени или сеанс автоматически истекает в режиме ожидания? - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно в течение 30 секунд удерживать консультативную блокировку, пока экземпляры моих приложений подключаются к сети. Я заметил, что если я выполняю setTimeout с обратным вызовом, чтобы снять блокировку, с 30 секундами или более, я получаю предупреждение, что у меня нет блокировки типа ExclusiveLock. (Если я вызову setTimeout с 10 секундами, этого не произойдет)

    setTimeout(async () => {
      try {
        await sync.tryLockRelease(lockName) // call to pg_advisory_unlock(id);
        log.info(`${metadataKey}: lock released`)
      } catch (err) {
        log.error(`${metadataKey}: could not release lock: ${err.message}`, err)
      }
    }, 30000)

Если я добавлю интервал, который запрашивает БД каждую секунду, эта проблема не возникает. Это заставляет меня поверить, что сеанс отбраковывается через некоторое время, превышающее 10 секунд.

1 Ответ

0 голосов
/ 24 апреля 2020

Оказывается, в pg-обещании есть параметр (который передается в базовый узел- postgres библиотека), называемый idleTimeoutMillis, который можно установить на странице Синтаксис соединения страницы pg -promise. Тем не менее, кажется, что есть еще нерешенная проблема, когда базовый драйвер не соблюдает значение: https://github.com/brianc/node-postgres/issues/2139

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