Ошибка «Не ждать блокировки» с использованием расширения Yii2 Queue и Postgres 10.4 - PullRequest
0 голосов
/ 11 января 2019

Я разработал проект в yii2, который использует расширение yiisoft / yii2-queue. Это расширение хранит заказы на экспорт очень больших CSV. Экспортированные файлы CSV работают правильно, но время от времени возникает исключение из изображения: https://i.imgur.com/nd4zRrI.png

Я думаю, что это может быть из-за версии postgres, с которой я работаю: PostgreSQL 10.4 (Debian 10.4-2.pgdg90 + 1) на x86_64-pc-linux-gnu, скомпилированной gcc (Debian 6.3.0-18 + deb9u1) 6.3.0 20170516, 64-разрядная

Я прочитал, что для версии 9.4 это работает. У меня есть следующая конфигурация расширения:

'components' => [
    'queue' => [
        'class' => \yii\queue\db\Queue::class,
        'tableName' => '{{%queue}}', // Table name
        'channel' => 'default', // Queue channel key
        'db' => require(__DIR__ . '/db.php'),
        'mutex' => [
            'class' => \yii\mutex\PgsqlMutex::class,
            'db' => require(__DIR__ . '/db.php'),
        ],
        'mutexTimeout' => 0,
    ],
]

Кто-нибудь знает, почему возникает эта ошибка и как ее исправить?

1 Ответ

0 голосов
/ 11 января 2019
'mutexTimeout' => 0,

Это, вероятно, причина. Это означает, что очередь попытается получить мьютекс один раз, а в случае сбоя (что вполне вероятно в занятой очереди) она выдаст это исключение.

Я добавил поддержку тайм-аута в PgsqlMutex, но еще не было выпущено этой функции. Я предлагаю использовать master ветвь пакета yiisoft/yii2 и установить mutexTimeout в ненулевое значение.

...