Wicked
Новичок
Propel 1.2: как сделать job queue?
Пытаюсь сделать разборщик приоретизированных задач на пропеле 1.2.
Понял, что ни один честный способ не работает:
1) Можно было бы стартовать транзакцию, выбирать задачу "order by priority desc limit 1 for update", потом ее удалять и коммитать транзакцию.
Но есть одна проблема - propel не поддерживает SELECT ... FOR UPDATE запросы, и не будет поддерживать до версии 2.0.
2) Можно было бы делать BasePeer::doUpdate() с доп. условием "order by priority desc limit 1", выставляя какой-то уникальный флаг, потом забирать эту задачу селектом по флагу, и т.д.
Но тут возникает другая проблема: такой update не умеет обрабатывать эти самые "order by priority desc limit 1"
В итоге сделал хаком: в классе JobPeer завел такие методы: doSelectOneForUpdate, doSelectForUpdate, doSelectRSForUpdate, BasePeerDoSelectForUpdate, вроде работает.
Интересует, как бы выкрутились Вы
PS: перейти на Доктрину в данном случае не предлагать
Пытаюсь сделать разборщик приоретизированных задач на пропеле 1.2.
Понял, что ни один честный способ не работает:
1) Можно было бы стартовать транзакцию, выбирать задачу "order by priority desc limit 1 for update", потом ее удалять и коммитать транзакцию.
Но есть одна проблема - propel не поддерживает SELECT ... FOR UPDATE запросы, и не будет поддерживать до версии 2.0.
2) Можно было бы делать BasePeer::doUpdate() с доп. условием "order by priority desc limit 1", выставляя какой-то уникальный флаг, потом забирать эту задачу селектом по флагу, и т.д.
Но тут возникает другая проблема: такой update не умеет обрабатывать эти самые "order by priority desc limit 1"

В итоге сделал хаком: в классе JobPeer завел такие методы: doSelectOneForUpdate, doSelectForUpdate, doSelectRSForUpdate, BasePeerDoSelectForUpdate, вроде работает.
Интересует, как бы выкрутились Вы

PS: перейти на Доктрину в данном случае не предлагать
