mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 07:23:13 +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
|
||||
{
|
||||
/**
|
||||
* @deprecated This method can overflow available memory when there is a large number of unprocessed events
|
||||
*/
|
||||
public function findUnprocessedEvents()
|
||||
{
|
||||
$qb = $this->createQueryBuilder('e');
|
||||
@@ -29,4 +32,12 @@ class WebhookEventRepository extends EntityRepository
|
||||
|
||||
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;
|
||||
if ($response && (null !== $deliverId = parse_url($request->getUrl(), PHP_URL_FRAGMENT))) {
|
||||
$delivery = $app['repo.webhook-delivery']->find($deliverId);
|
||||
|
||||
if ($response->isSuccessful()) {
|
||||
$app['manipulator.webhook-delivery']->deliverySuccess($delivery);
|
||||
|
||||
@@ -114,17 +115,15 @@ class WebhookJob extends AbstractJob
|
||||
}
|
||||
|
||||
return $retry;
|
||||
}},
|
||||
true,
|
||||
new CurlBackoffStrategy()
|
||||
)
|
||||
}
|
||||
}, true, new CurlBackoffStrategy())
|
||||
)
|
||||
));
|
||||
|
||||
/** @var EventProcessorFactory $eventFactory */
|
||||
$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
|
||||
$app['manipulator.webhook-event']->processed($event);
|
||||
|
||||
|
Reference in New Issue
Block a user