0.12.0 “Into The Groove”
Major Changes
-
With the new first-class Pipeline Failure sensors, you can now write sensors to perform arbitrary actions when pipelines in your repo fail using
@pipeline_failure_sensor
. Out-of-the-box sensors are provided to send emails usingmake_email_on_pipeline_failure_sensor
and slack messages usingmake_slack_on_pipeline_failure_sensor
.See the Pipeline Failure Sensor docs to learn more.
-
New first-class Asset sensors help you define sensors that launch pipeline runs or notify appropriate stakeholders when specific asset keys are materialized. This pattern also enables Dagster to infer cross-pipeline dependency links. Check out the docs here!
-
Solid-level retries: A new
retry_policy
argument to the@solid
decorator allows you to easily and flexibly control how specific solids in your pipelines will be retried if they fail by setting a RetryPolicy. -
Writing tests in Dagster is now even easier, using the new suite of direct invocation apis. Solids, resources, hooks, loggers, sensors, and schedules can all be invoked directly to test their behavior. For example, if you have some solid
my_solid
that you'd like to test on an input, you can now writeassert my_solid(1, "foo") == "bar"
(rather than explicitly callingexecute_solid()
). -
[Experimental] A new set of experimental core APIs. Among many benefits, these changes unify concepts such as Presets and Partition sets, make it easier to reuse common resources within an environment, make it possible to construct test-specific resources outside of your pipeline definition, and more. These changes are significant and impactful, so we encourage you to try them out and let us know how they feel! You can learn more about the specifics here
-
[Experimental] There’s a new reference deployment for running Dagster on AWS ECS and a new EcsRunLauncher that launches each pipeline run in its own ECS Task.
-
[Experimental] There’s a new
k8s_job_executor
(https://docs.dagster.io/_apidocs/libraries/dagster-k8s#dagster_k8s.k8s_job_executor)which executes each solid of your pipeline in a separate Kubernetes job. This addition means that you can now choose at runtime (https://docs.dagster.io/deployment/guides/kubernetes/deploying-with-helm#executor) between single pod and multi-pod isolation for solids in your run. Previously this was only configurable for the entire deployment- you could either use theK8sRunLauncher
with the default executors (in process and multiprocess) for low isolation, or you could use theCeleryK8sRunLauncher
with thecelery_k8s_job_executor
for pod-level isolation. Now, your instance can be configured with theK8sRunLauncher
and you can choose between the default executors or the k8s_job_executor.
New since 0.11.16
-
Using the
@schedule
,@resource
, or@sensor
decorator no longer requires a context parameter. If you are not using the context parameter in these, you can now do this:@schedule(cron_schedule="* * * * *", pipeline_name="my_pipeline") def my_schedule(): return {} @resource def my_resource(): return "foo" @sensor(pipeline_name="my_pipeline") def my_sensor(): return RunRequest(run_config={})
-
Dynamic mapping and collect features are no longer marked “experimental”.
DynamicOutputDefinition
andDynamicOutput
can now be imported directly fromdagster
. -
Added repository_name property on
SensorEvaluationContext
, which is name of the repository that the sensor belongs to. -
get_mapping_key is now available on
SolidExecutionContext
, allowing for discerning which downstream branch of aDynamicOutput
you are in. -
When viewing a run in Dagit, you can now download its debug file directly from the run view. This can be loaded into dagit-debug.
-
[dagster-dbt] A new
dbt_cli_resource
simplifies the process of working with dbt projects in your pipelines, and allows for a wide range of potential uses. Check out the integration guide for examples!
Bugfixes
- Fixed a bug when retry from failure with fan-in solids didn’t load the right input source correctly. Now the fan-in solids can load the persistent source from corresponding previous runs if retry from failure.
- Fixed a bug in the
k8s_job_executor
that caused solid tag user defined Kubernetes config to not be applied to the Kubernetes jobs. - Fixed an issue in dagstermill when concurrently running pipelines that contain multiple dagstermill solids with inputs of the same name.
Breaking Changes
-
The deprecated
SystemCronScheduler
andK8sScheduler
schedulers have been removed. All schedules are now executed using the dagster-daemon proess. See the deployment docs for more information about how to use thedagster-daemon
process to run your schedules. -
If you have written a custom run launcher, the arguments to the
launch_run
function have changed in order to enable faster run launches.launch_run
now takes in aLaunchRunContext
object. Additionally, run launchers should now obtain thePipelinePythonOrigin
to pass as an argument to dagster apiexecute_run
. See the implementation of DockerRunLauncher for an example of the new way to write run launchers. -
[helm]
.Values.dagsterDaemon.queuedRunCoordinator
has had its schema altered. It is now referenced at.Values.dagsterDaemon.runCoordinator.
Previously, if you set up your run coordinator configuration in the following manner:dagsterDaemon: queuedRunCoordinator: enabled: true module: dagster.core.run_coordinator class: QueuedRunCoordinator config: max_concurrent_runs: 25 tag_concurrency_limits: [] dequeue_interval_seconds: 30
It is now configured like:
dagsterDaemon: runCoordinator: enabled: true type: QueuedRunCoordinator config: queuedRunCoordinator: maxConcurrentRuns: 25 tagConcurrencyLimits: [] dequeueIntervalSeconds: 30
-
The method
events_for_asset_key
onDagsterInstance
has been deprecated and will now issue a warning. This method was previously used in our asset sensor example code. This can be replaced by calls using the newDagsterInstance
APIget_event_records
. The example code in our sensor documentation has been updated to use our new APIs as well.
Community Contributions
- A dagster-mlflow library has been added, thanks @hug0l1ma!
- imagePullSecrets improvements in the user code deployment helm chart, thanks @jrouly (https://github.com/dagster-io/dagster/commits?author=jrouly)!
Experimental
- You can now configure the EcsRunLauncher to use an existing Task Definition of your choosing. By default, it continues to register its own Task Definition for each run.