Aller au contenu

Élagage de l’état

À mesure qu’un workflow franchit de nombreuses étapes, l’état accumulé peut devenir volumineux. L’élagage de l’état supprime automatiquement les anciens résultats d’étape pour maintenir la taille de l’état JSON tout en préservant les données importantes.

Activer l’élagage de l’état

Appelez prune_state_after() sur le générateur de workflow. L’argument indique le nombre d’étapes récentes dont les résultats doivent être conservés :

PHP
use Queuety\Queuety;

Queuety::workflow( 'long_pipeline' )
    ->then( StepA::class )
    ->then( StepB::class )
    ->then( StepC::class )
    ->then( StepD::class )
    ->then( StepE::class )
    ->prune_state_after( 2 )
    ->dispatch( [ 'input' => $data ] );

Avec prune_state_after( 2 ), une fois l’étape D terminée, les résultats des étapes A et B sont supprimés de l’état. Ceux des étapes C et D, les deux plus récentes, sont conservés.

Fonctionnement de l’élagage

Lorsque l’élagage de l’état est activé, Queuety suit les clés ajoutées à l’état par chaque étape dans un tableau _step_outputs réservé. Après le passage à une nouvelle étape, toutes les clés ajoutées par des étapes antérieures au seuil sont supprimées.

Par exemple, avec prune_state_after( 2 ) :

Code
After step 0 (StepA): state has keys from StepA + initial payload
After step 1 (StepB): state has keys from StepA + StepB + initial payload
After step 2 (StepC): state has keys from StepA + StepB + StepC + initial payload
  -> prune: StepA output removed (only 2 most recent kept)
After step 3 (StepD): state has keys from StepB + StepC + StepD + initial payload
  -> prune: StepB output removed

Éléments préservés

Queuety n’élague jamais les clés réservées commençant par _, comme _steps, _queue, _priority, _max_attempts, _on_cancel, _prune_state_after et _step_outputs. Les clés de la charge utile initiale transmises à dispatch() sont également préservées, car elles ne sont pas suivies comme des résultats d’étape. Enfin, Queuety conserve les résultats des N étapes les plus récentes, selon le seuil que vous avez configuré.

Quand l’utiliser

L’élagage de l’état est utile pour les workflows comportant de nombreuses étapes, lorsque chacune produit des données dont les étapes suivantes n’ont pas réellement besoin. Parmi les exemples typiques : les longs pipelines où chaque étape n’a besoin que des résultats de la précédente ou des deux précédentes, les workflows ETL qui génèrent de volumineuses structures intermédiaires et les workflows récursifs ou répétitifs qui accumuleraient autrement des états redondants. Si votre workflow ne comporte que quelques étapes ou si les étapes tardives dépendent toujours des premières, vous n’avez probablement pas besoin d’élagage.

Comportement par défaut

L’élagage de l’état est désactivé par défaut. La méthode prune_state_after() accepte un argument entier. Sans argument, elle utilise la valeur par défaut 2 :

PHP
->prune_state_after()     // keeps the 2 most recent step outputs
->prune_state_after( 5 )  // keeps the 5 most recent step outputs