Hydrate events one by one to preserve memory

This commit is contained in:
Thibaud Fabre
2016-04-06 16:16:29 +02:00
parent 334dcff6bf
commit c05cac4800
2 changed files with 15 additions and 5 deletions

View File

@@ -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();
}
}

View File

@@ -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);