Всем привет! Кто нибудь пользовался модулями serial или type_local_nids? В их реализации генерация значения происходит в процессе сохранения сущности. При большой нагрузке на сайт происходит задвоение значения. Это типичная ситуация для дефолтных настроек друпала (смены уровня транзакций)?
есть возможность глобально перед сохранением сущности вмешаться в процесс и поставить такую блокировку? мне кажется нет. интересует перед presave. для этого надо в формы кидать. а если это программное сохранение
function MODULE_set_id($node) { if (lock_acquire('MODULE_set_id')) { // чтение последнего ID из базы + 1 // добавление значения в базу. } else { lock_wait('MODULE_set_id'); return MODULE_set_id($node); } }
/** * Implements hook_node_presave(). */ function MODULE_presave($node) { MODULE_set_id($node); }
прейсейв уже включен в транзакцию. и коммита не будет. во втором сеансе сохранения не будет видно добавления