How to create a step condition
Each step can have conditions, which implement the TechDivision\ProcessPipelines\Api\StepConditionInterface
interface.
Existing Conditions
There are some ready-to-use conditions.
TechDivision\ProcessPipelines\Helper\Condition\Step\PreviousStepsCompleted
-
Run the given step only if the previous steps are successfully finished.
TechDivision\ProcessPipelines\Helper\Condition\Step\PreviousStepsFinished
-
Run the given step only if the previous steps are not in a pending, running or enqueued state.
Usage
See How to configure a pipeline for more details about the XML structure. |
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:TechDivision/ProcessPipelines/etc/pipeline.xsd">
<pipeline name="example_pipeline" description="Example pipeline">
...
<step name="my_third_step" executorType="MyCompany\MyModule\Model\Executor\DoSomeThing" sortOrder="1522" description="" runAlwaysStep="">
<conditions>
<step_condition type="TechDivision\ProcessPipelines\Helper\Condition\Step\PreviousStepsCompleted" description="Run only after previous"/>
</conditions>
</step>
...
</pipeline>
</config>
xml
Virtual Conditions
Template Conditions
By using the virtualType
feature of Magento’s DI it is easy to create new conditions with some new params.
Therefore there are some "template" conditions.
TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit
-
Limitation for repeats for given steps.
TechDivision\ProcessPipelines\Helper\Condition\Step\TimeBetweenAttempts
-
Timeout between retries.
TechDivision\ProcessPipelines\Helper\Condition\Step\WaitForStepIsNotRunning
-
Disables execution of a step while the defined steps (even in other pipelines) are running. For example only one import process at the same time possible…
TechDivision\PacemakerImportBase\Model\Condition\Step\NoConflictingStepsInProcess
-
The list of conflicting step names can be set via DI. Verifies that these steps are not running or enqueued. This check works overall existing pipelines.
TechDivision\PacemakerImportBase\Model\Condition\Step\IsStageReady
-
This condition was designed to verify whether a stage is ready to be executed.
Ready to use virtual conditions
TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit\Limit1
-
Attempts limit 1
TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit\Limit2
-
Attempts limit 2
TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit\Limit5
-
Attempts limit 5
TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit\Limit10
-
Attempts limit 10
TechDivision\ProcessPipelines\Helper\Condition\Step\TimeBetweenAttempts\Minutes5
-
5 minutes delay between attempts
TechDivision\ProcessPipelines\Helper\Condition\Step\TimeBetweenAttempts\Minutes15
-
15 minutes delay between attempts
TechDivision\ProcessPipelines\Helper\Condition\Step\TimeBetweenAttempts\Minutes30
-
30 minutes delay between attempts
Usage
In following example module virtual conditions are used to allow parallel execution. |
Create virtual spawn conditions using di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
...
<virtualType name="MyCompany\MyModule\Virtual\Condition\AttemptsLimit42" type="TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit">
<arguments>
<argument name="data" xsi:type="array">
<item name="limit" xsi:type="string">42</item>
</argument>
</arguments>
</virtualType>
<virtualType name="MyCompany\MyModule\Virtual\Condition\TimeBetweenAttempts\Minutes42" type="TechDivision\ProcessPipelines\Helper\Condition\Step\TimeBetweenAttempts">
<arguments>
<argument name="data" xsi:type="array">
<item name="minutes" xsi:type="string">42</item>
</argument>
</arguments>
</virtualType>
<virtualType name="MyCompany\MyModule\Virtual\Condition\AllDownloadsAreReady" type="TechDivision\ProcessPipelines\Helper\Condition\Step\PreviousStepsCompleted">
<arguments>
<argument name="data" xsi:type="array">
<item name="step_filter" xsi:type="string">download_media_step,download_csv_step</item>
</argument>
</arguments>
</virtualType>
<virtualType name="MyCompany\MyModule\Virtual\Condition\NoImportIsRunning" type="TechDivision\ProcessPipelines\Helper\Condition\Step\WaitForStepIsNotRunning">
<arguments>
<argument name="data" xsi:type="array">
<item name="step_names" xsi:type="string">import_stock_step,import_products_step</item>
</argument>
</arguments>
</virtualType>
...
</config>
xml
Use the virtual condition in pipeline.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:TechDivision/ProcessPipelines/etc/pipeline.xsd">
<pipeline name="example_pipeline" description="Example pipeline">
...
<step name="some_step" executorType="MyCompany\MyModule\Model\Executor\DoSomeThing" sortOrder="10" description="" >
<conditions>
<step_condition type="MyCompany\MyModule\Virtual\Condition\AttemptsLimit42" description="Retry up to 42 times"/>
<step_condition type="TechDivision\ProcessPipelines\Helper\Condition\Step\TimeBetweenAttempts\Minutes5" description="Wait 5 minutes between attempts"/>
<step_condition type="MyCompany\MyModule\Virtual\Condition\AllDownloadsAreReady" description="Start only if downloads are ready"/>
<step_condition type="MyCompany\MyModule\Virtual\Condition\NoImportIsRunning" description="Ensure no other import process is active"/>
</conditions>
</step>
...
</pipeline>
</config>
xml