get_failed_submissions_for_retry( $batch_limit, $max_retries ); if ( empty( $submissions ) ) { return; } foreach ( $submissions as $submission ) { self::maybe_retry_submission( $submission, $max_retries ); } } /** * Retry a single submission when eligible. * * @since 1.0.0 * * @param array $submission Submission data. * @param int $max_retries Maximum retries allowed. */ private static function maybe_retry_submission( array $submission, int $max_retries ): void { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh $retry_count = (int) ( $submission['retry_count'] ?? 0 ); if ( $retry_count >= $max_retries ) { return; } $submission_id = (string) ( $submission['id'] ?? '' ); if ( empty( $submission_id ) ) { return; } $storage = Storage::get_instance(); $reset = $storage->reset_for_retry( $submission_id ); if ( ! $reset ) { Logger::log( 'Retry skipped - could not reset submission status', [ 'submission_id' => $submission_id, ] ); return; } $queued = QueueManager::queue( $submission_id ); if ( $queued ) { Logger::log( 'Retry queued for failed submission', [ 'submission_id' => $submission_id, 'retry_count' => $retry_count + 1, ] ); return; } // If enqueue failed, set status back to failed without incrementing. $storage->update_status( $submission_id, 'failed', [ 'retry_count' => $retry_count, ] ); Logger::log( 'Retry enqueue failed - submission left as failed', [ 'submission_id' => $submission_id, ] ); } }