Skip to content

Commit

Permalink
TASK: Remove retry_attempt from subscriptions
Browse files Browse the repository at this point in the history
neos/neos-development-collection#5321 (comment)

> Anyways, I think with the removed retry strategy we should just get rid of the automatic retry altogether right now.
  It's quite unlikely that a retry suddenly works without other changes. So I'd be fully OK if it was only possible to manually retry failed subscriptions for 9.0
  • Loading branch information
mhsdesign committed Nov 23, 2024
1 parent 3373ced commit d08df42
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 40 deletions.
36 changes: 1 addition & 35 deletions Classes/Subscription/Engine/SubscriptionEngine.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ public function setup(SubscriptionEngineCriteria|null $criteria = null): Result

$this->subscriptionStore->setup();
$this->discoverNewSubscriptions();
$this->retrySubscriptions($criteria);
$subscriptions = $this->subscriptionStore->findByCriteria(SubscriptionCriteria::forEngineCriteriaAndStatus($criteria, SubscriptionStatus::NEW));
if ($subscriptions->isEmpty()) {
$this->logger?->info('Subscription Engine: No subscriptions to setup, finish setup.');
Expand Down Expand Up @@ -125,8 +124,7 @@ private function handleEvent(EventEnvelope $eventEnvelope, EventInterface $domai
}
$this->logger?->debug(sprintf('Subscription Engine: Subscriber "%s" for "%s" processed the event "%s" (sequence number: %d).', substr(strrchr($subscriber::class, '\\') ?: '', 1), $subscription->id->value, $eventEnvelope->event->type->value, $eventEnvelope->sequenceNumber->value));
$subscription->set(
position: $eventEnvelope->sequenceNumber,
retryAttempt: 0
position: $eventEnvelope->sequenceNumber
);
return null;
}
Expand Down Expand Up @@ -217,44 +215,12 @@ private function resetSubscription(Subscription $subscription): ?Error
return null;
}

private function retrySubscriptions(SubscriptionEngineCriteria $criteria): void
{
$this->subscriptionManager->findForUpdate(
SubscriptionCriteria::create($criteria->ids, SubscriptionStatusFilter::fromArray([SubscriptionStatus::ERROR])),
fn (Subscriptions $subscriptions) => $subscriptions->map($this->retrySubscription(...)),
);
}

private function retrySubscription(Subscription $subscription): void
{
if ($subscription->error === null) {
return;
}
$retryable = in_array(
$subscription->error->previousStatus,
[SubscriptionStatus::NEW, SubscriptionStatus::BOOTING, SubscriptionStatus::ACTIVE],
true,
);
if (!$retryable) {
return;
}
$subscription->set(
status: $subscription->error->previousStatus,
retryAttempt: $subscription->retryAttempt + 1,
);
$subscription->error = null;
$this->subscriptionManager->update($subscription);

$this->logger?->info(sprintf('Subscription Engine: Retry subscription "%s" (%d) and set back to %s.', $subscription->id->value, $subscription->retryAttempt, $subscription->status->value));
}

private function catchUpSubscriptions(SubscriptionEngineCriteria $criteria, SubscriptionStatus $subscriptionStatus, \Closure $progressClosure = null): ProcessedResult
{
$this->logger?->info(sprintf('Subscription Engine: Start catching up subscriptions in state "%s".', $subscriptionStatus->value));

$this->discoverNewSubscriptions();
$this->discoverDetachedSubscriptions($criteria);
$this->retrySubscriptions($criteria);

return $this->subscriptionManager->findForUpdate(
SubscriptionCriteria::forEngineCriteriaAndStatus($criteria, $subscriptionStatus),
Expand Down
6 changes: 1 addition & 5 deletions Classes/Subscription/Subscription.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ public function __construct(
public SubscriptionStatus $status,
public SequenceNumber $position,
public SubscriptionError|null $error = null,
public int $retryAttempt = 0,
public readonly \DateTimeImmutable|null $lastSavedAt = null,
) {
}
Expand All @@ -42,18 +41,15 @@ public static function createFromSubscriber(ProjectionSubscriber $subscriber): s
*/
public function set(
SubscriptionStatus $status = null,
SequenceNumber $position = null,
int $retryAttempt = null,
SequenceNumber $position = null
): self {
$this->status = $status ?? $this->status;
$this->position = $position ?? $this->position;
$this->retryAttempt = $retryAttempt ?? $this->retryAttempt;
return new self(
$this->id,
$status ?? $this->status,
$position ?? $this->position,
$this->error,
$retryAttempt ?? $this->retryAttempt,
$this->lastSavedAt,
);
}
Expand Down

0 comments on commit d08df42

Please sign in to comment.