mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
Hydrate events one by one to preserve memory
This commit is contained in:
@@ -21,6 +21,9 @@ use Doctrine\ORM\EntityRepository;
|
|||||||
*/
|
*/
|
||||||
class WebhookEventRepository extends EntityRepository
|
class WebhookEventRepository extends EntityRepository
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @deprecated This method can overflow available memory when there is a large number of unprocessed events
|
||||||
|
*/
|
||||||
public function findUnprocessedEvents()
|
public function findUnprocessedEvents()
|
||||||
{
|
{
|
||||||
$qb = $this->createQueryBuilder('e');
|
$qb = $this->createQueryBuilder('e');
|
||||||
@@ -29,4 +32,12 @@ class WebhookEventRepository extends EntityRepository
|
|||||||
|
|
||||||
return $qb->getQuery()->getResult();
|
return $qb->getQuery()->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getUnprocessedEventIterator()
|
||||||
|
{
|
||||||
|
$queryBuilder = $this->createQueryBuilder('e')
|
||||||
|
->where('e.processed = 0');
|
||||||
|
|
||||||
|
return $queryBuilder->getQuery()->iterate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -102,6 +102,7 @@ class WebhookJob extends AbstractJob
|
|||||||
$retry = true;
|
$retry = true;
|
||||||
if ($response && (null !== $deliverId = parse_url($request->getUrl(), PHP_URL_FRAGMENT))) {
|
if ($response && (null !== $deliverId = parse_url($request->getUrl(), PHP_URL_FRAGMENT))) {
|
||||||
$delivery = $app['repo.webhook-delivery']->find($deliverId);
|
$delivery = $app['repo.webhook-delivery']->find($deliverId);
|
||||||
|
|
||||||
if ($response->isSuccessful()) {
|
if ($response->isSuccessful()) {
|
||||||
$app['manipulator.webhook-delivery']->deliverySuccess($delivery);
|
$app['manipulator.webhook-delivery']->deliverySuccess($delivery);
|
||||||
|
|
||||||
@@ -114,17 +115,15 @@ class WebhookJob extends AbstractJob
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $retry;
|
return $retry;
|
||||||
}},
|
}
|
||||||
true,
|
}, true, new CurlBackoffStrategy())
|
||||||
new CurlBackoffStrategy()
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
/** @var EventProcessorFactory $eventFactory */
|
/** @var EventProcessorFactory $eventFactory */
|
||||||
$eventFactory = $app['webhook.processor_factory'];
|
$eventFactory = $app['webhook.processor_factory'];
|
||||||
|
|
||||||
foreach ($app['repo.webhook-event']->findUnprocessedEvents() as $event) {
|
foreach ($app['repo.webhook-event']->getUnprocessedEventIterator() as $event) {
|
||||||
// set event as processed
|
// set event as processed
|
||||||
$app['manipulator.webhook-event']->processed($event);
|
$app['manipulator.webhook-event']->processed($event);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user