RSS

Dapr v1.8 is now available

We’re happy to announce the release of Dapr 1.8.0! πŸš€ πŸŽ‰ 🎈

Acknowledgements

We would like to extend our thanks to all the new and existing contributors who helped make this release happen.

@1046102779, @AaronCrawfis, @aditirao7, @akhilac1, @akkie, @amimimor, @amulyavarote, @arahja, @Arashrohani, @artursouza, @beiwei30, @ben-kotvis, @BenLocal, @berndverst, @bibryam, @CacheCoww, @ChenCong0207, @cmendible, @CrazyHZM, @daixiang0, @davidfowl, @DeepanshuA, @dntbeSris, @duglin, @espinm2, @ewassef, @fabistb, @famarting, @fanfanbj, @greenie-msft, @halspang, @harrykimpel, @hhunter-ms, @hueifeng, @inirudebwoy, @ItalyPaleAle, @jack1142, @jackliusr, @JadynWong, @jasonlica, @jigargandhi, @jjcollinge, @johnewart, @Joshswooft, @Juneezee, @karpikpl, @LaurenceLiZhixin, @lotuc, @maltegoetz, @marcinjahn, @mattmazzola, @moreyhat, @msfussell, @mukundansundar, @noahziheng, @nyemade-uversky, @patrickhuber, @paulyuk, @pigletfly, @pkedy, @pravinpushkar, @psychomelet, @rzyns, @saber-wang, @safanaj, @sarsharma, @seeflood, @shiling02404, @Shoothzj, @shubham1172, @sjwaight, @skyao, @slapointe, @stulzq, @subash89, @sunzhaochang, @suraciii, @surenderssm, @Taction, @tanvigour, @theonefx, @thielepaul, @ThorstenHans, @tlawrie, @wonderflow, @wujunwei, @wwbweibo, @XavierGeerinck, @yaron2, @zcong1993, @zhenlei520, @zhi-gang-sun

Highlights

Dead letter topics

  • There are times when applications might not be able to handle messages for a variety of reasons. For example, there could be transient issues retrieving data needed to process a message or the app business logic fails returning an error. Dead letter topics are used to forward messages that cannot be delivered to a subscribing app.

Distributed lock API (alpha)

  • Distributed locks provide mutually exclusive access to shared resources from an application. In this release a new alpha API has been introduced to enable to you to take mutually exclusive locks on a shared resource. Read the Overview of the distributed lock API building block.

WASM support for middleware components

  • You can now write Dapr middleware components using external WASM modules and extend Dapr with non-Go languages. Read more about Dapr and WASM support.

Resilency policies (preview)

Continuing the v1.7 release resilency policy features.

Overriding default resiliency retries

  • Dapr provides default retries for certain request failures and transient errors. In this release, there is now the option to override default retries with custom retry logic by defining resiliency policies with reserved, named keywords in a resiliency spec. Read more about overriding built-in retries.

Improved resiliency logging

  • When resiliency policies are now loaded you will see which ones are loaded when the Dapr sidecar starts as information logs. Turning on debug logs enables you to see the resiliency policies firing with details on how often and the targets.

Namespace support for shared state

  • When sharing state between applications, namespaces can now be used to separate state. This allows apps in different namespace with the same appid to reuse the same state store. Read more about state sharing.

Metadata API returns list of component capabilities

Sidecar certificate installation support

The Dapr sidecar can now support installation of certificates for both Linux and Windows containers. This allows for use cases like

  • Using HTTP binding with SSL using a self-signed certificate
  • Configuring an outbound proxy like Squid with client certificate authentication

New arguments and annotations

New arguments and annotations include:

  • Annotation and arguments to set or “turn-off” and configure the actor Placement service host addresses
  • Annotation and arguments to disable the built-in Kubernetes secret store.
  • Annotation to mount pod volumes to the Dapr sidecar container in read-write or read-only mode.

Kubernetes improvements

Component Improvements

Component stabilization

This release focused on preparing more components for beta and stable designation. This means certification tests are added and quality issues are addressed. Read component certification lifecycle for details.

The following components are now offically designated beta status, several of which are stable candidates ready to become stable soon in a future release:

  • Azure Table Storage State Store (stable candidate)
  • Azure Event Hubs Binding (stable candidate)
  • Azure Storage Queues Binding (stable candidate)
  • Postgresql State Store (stable candidate)
  • Azure Event Hubs Pubsub (stable candidate)

New Components

There are now over 100+ components in Dapr (105 in total). New components added in this release:

Preview Features now Stable

The following features are now stable, having been in preview for at least 2 releases.

SDK Improvements

Python

Java

  • Add pubsub routing

.NET

JavaScript

CLI

  • Added the annotate CLI command for adding Dapr annotations to deployed Kubernetes configurations.
  • dapr init and dapr upgrade in k8s mode can now use GHCR and private registry to pull images.
  • Documented the version command.

Next Steps

If you’re new to Dapr, visit the getting started page and familiarize yourself with Dapr.

Docs have been updated with all the new features and changes of this release. To get started with new capabilities introduced in this release, go to the Concepts and the Developing applications.

Note: This release contains a few breaking changes.

See this section on upgrading Dapr to version 1.8.0.

New in this release

Dapr Runtime

  • ADDED PubSub’s DeadLetter Topic 2217
  • ADDED Add kubernetes annotation to enable/disable placement component in daprd 3761
  • CHANGED Actor Reminder Partition No Longer Preview Feature 3813
  • ADDED RocketMQ component with fix for increased goroutine Count 4152
  • ADDED New “watchdog” capability in the Dapr operator to ensure the Dapr sidecar is present in pods 4171
  • ADDED Enhance dapr_rbac ClusterRole for more restricted Kubernetes RBAC Environments 4188
  • ADDED Enable StatefulSets for PubSub subscribers 4195
  • ADDED Allow sidecar to run in pods with automountServiceAccountToken: false 4227
  • FIXED Improve the error message for when a state store has not been set for actor usage and actors are used 4273
  • ADDED Speedup placement hosts update 4359
  • ADDED Metadata API to provide information on sidecar capabilities 4367
  • FIXED bugfix/diagnostics: service monitoring metrics 4387
  • ADDED feature: add middle/http routerchecker 4402
  • FIXED Intermittent i/o timeout error in Dapr sidecar. 4416
  • FIXED Bug in daprd startup behavior. 4422
  • ADDED Allow setting certificate’s filenames/secret keys through command line flags 4428
  • ADDED Provide a Default Policy for Built-In Retries via Resiliency 4449
  • FIXED Wait for specified grace period before cleaning actors and closing the API servers 4451
  • FIXED Resiliency: Fixed endpointPolicy get circuitBreakers template, add missing ok for map get 4505
  • FIXED Fix actor client not requires state store. 4509
  • ADDED Add rest API for configuration store. 4528
  • FIXED Fixes a bug that incorrectly allowed the Dapr API HTTP Port to be reused is the app port. 4531
  • FIXED Concurrent streaming requests fail with dapr grpc proxy 4537
  • FIXED bugfix: operator update service 4563
  • CHANGED Dapr is now built with Go 1.18 4570
  • FIXED odd grammar on error message 4573
  • ADDED Support for installing certificates to the Dapr sidecar container 4587
  • ADDED Improve the logs for resiliency policies 4600
  • ADDED Utilize correct context in resilient calls 4602
  • ADDED Enable flag to enable/disable kubernetes builtin secret store 4605
  • ADDED ci: one-line command for local development 4607
  • FIXED PubSub components do not deliver new messages during the shutdown grace period 4624
  • ADDED Declarative pub/sub subscriptions are picked from stand alone components even if they are not in a .yaml file 4641
  • ADDED VolumeMounts support for Side Car Daprd 4662
  • ADDED Publish a new variant of Dapr container images based on Mariner “distroless” with the -mariner tag 4673
  • ADDED Option to prefix state key with namespace 4676
  • ADDED Dapr integration with Agones 4680
  • FIXED Daprd crashed for race condition of grpc connection pool 4688
  • FIXED Adding alicloud.dubbo component caused spike in total cpu usage in longhaul 4723
  • CHANGED optimize/crds: change level from error to warn 4725
  • FIXED Improved the reliability of the Sidecar Injector and Operator services' startup and shutdown sequences 4731
  • CHANGED Actor type metadata as stable feature 4736
  • CHANGED Enable Pub/Sub routing as stable 4742
  • FIXED Actor actor instance missing error during scaling issue 4768
  • FIXED fix metadata get http api 4815

Dapr CLI

  • ADDED dapr version command with JSON output format 737
  • ADDED dapr annotate CLI command for adding dapr annotations to Kubernetes configurations. 870
  • FIXED CLI upgrade command panics on edge versions 954
  • ADDED Add timeout to HTTP call in downloadFile method 962
  • ADDED Supporting Dapr GHCR/private registry for dapr init in Kubernetes mode 968
  • FIXED Fixed configuration file initialization bug in dapr init --from-file 970
  • CHANGED Changed certificate generation logic to mimic dapr runtime 987
  • FIXED --dapr-http-read-buffer-size not passed properly in CLI 991

Components

  • ADDED Certification tests for Azure Table Storage in state store 950
  • ADDED Certification tests for Azure Event Hubs binding 960
  • FIXED When Consul is used as a name resolution component, the same appid cannot achieve load balancing, and the dapr started later will overwrite the previous dapr 1199
  • ADDED Certification tests for Azure Events Hub in pubsub 1379
  • CHANGED New Azure Service Bus Queues binding based on updated SDK 1531
  • CHANGED New Azure Service Bus pubsub based on updated SDK 1532
  • ADDED Certification tests for Redis 1534
  • CHANGED Simplify vault token read 1560
  • FIXED Fixes an issue including multiple headers with spaces 1610
  • ADDED New state store component for the Huawei DCS 1628
  • ADDED parallel concurrencty for SQS component 1651
  • ADDED output binding for commercetools 1652
  • FIXED Pulsar namespace setting is invalid 1659
  • ADDED Add Nats Streaming Parallel Concurrency Mode 1669
  • ADDED Add metadata property to configure BatchingMaxSize in Pulsar 1671
  • ADDED Add topic metadata for mqtt input binding and support user defined topic for mqtt output binding 1674
  • ADDED Support custom queueEndpoint in Azure Storage Queues 1692
  • FIXED Ignore Subscribe/Get wrong redis configuration type keys. 1693
  • CHANGED Using Go 1.18 for building codebase 1697
  • ADDED Support for MongoDB Atlas connection strings in MongoDB component 1698
  • ADDED Add metadata property to configure Batching in Pulsar 1707
  • ADDED secret store based on Huawei CSMS 1710
  • ADDED new bindings component for the Huawei OBS 1718
  • ADDED new bindings component for Huawei OBS 1724
  • ADDED Certification tests for Azure Storage Queue binding 1728
  • FIXED Fix: MQTT route messages to the correct publisher 1737
  • ADDED middleware: basic WASM support 1747
  • CHANGED Better handling of concurrency in MQTT Subscribe method 1748
  • ADDED support for names in the SendGrid To and From fields. 1749
  • ADDED [pubsub][rabbitmq]add support for binding multiple routingkeys at the same time 1750
  • FIXED Fixes for SNS/SQS PubSub 1754
  • FIXED Fixed Kafka PubSub to allow multiple handlers for different topics 1755
  • ADDED NATS Streaming: Add parallel processing, fix retry bug 1760
  • ADDED Rabbitmq publisher confirm 1762
  • ADDED Apache dubbo output binding 1768
  • ADDED Components capabilities: adding query api to the feature list 1775
  • ADDED Certification test + connection idle time for Postgresql 1778
  • ADDED Add file upload to s3 binding 1785
  • CHANGED Zeebe updated to Camunda Platform 8 1787
  • ADDED Azure Table Storage State Store: Suppport for Active Directory Authentication and support for CosmosDB Table API 1792
  • FIXED consumer rebalance failed in kakfa binding component 1799
  • CHANGED add id when registering services to consul 1802
  • CHANGED pubsub.mqtt: default value for ‘qos’ is now ‘1’, and default value for ‘cleanSession’ to ‘false’ 1809
  • FIXED unmarshalling in Azure ServiceBus binding 1845

.NET SDK

  • ADDED When publishing a message allow setting Cloudevent attributes / Pub-Sub routing 773
  • ADDED Support for Configuration Subscribe API 822
  • FIXED App API Token support 835
  • ADDED FOSSA Scan to Build Actions 843
  • ADDED Support for Per Actor Type Configuration 857
  • ADDED Enable raw metadata for Pub/Sub with .WithTopic<> Extension. 860
  • FIXED Move AddDaprClient in Dapr.AspNetCore from AddSingleton to TryAddSingleton 867
  • ADDED Subscription supports adding custom metadata 873
  • ADDED Support for Distributed Lock API 885

Go SDK

  • FIXED fix(typo): client configuration subscribe 279
  • FIXED chore(client): update func definition to be clearer 281
  • FIXED fix/typo: modify state annotation 283

Java SDK

  • ADDED Added pubsub routing support 631
  • CHANGED Replace Hashicorp Vault with local file in Secret Store example 667

Python SDK

  • ADDED support for TTL and time/interval formats in actor timers & reminders 309
  • ADDED option to disable Pubsub topic validation 381
  • ADDED support for per Actor Type Configuration 383
  • FIXED DaprInvocationHttpClient should correctly populate headers in InvokeMethodResponse 398
  • FIXED invoke_binding call shouldn’t require the data parameter 399
  • ADDED Support for Unsubscribe Configuration 417
  • ADDED support for Dapr FastAPI SDK Router Tags in generated OpenAPI docs

JavaScript SDK

  • CHANGED Update actor documentation and examples 98
  • ADDED Configuration API support 140
  • ADDED Actors Reminder/Timer TTL support 141
  • CHANGED Update documentation for dapr client and server 152
  • ADDED State Management Query API documentation 159
  • FIXED Validate changes in the syntax of query JSON for state store query API 187
  • FIXED Fix e2e test pipeline to not fail silently 197
  • FIXED Fix actors e2e test 203
  • ADDED Support for configuring the SDK logger 217
  • ADDED gRPC proxy support 219
  • CHANGED Publish SDK to new package @dapr/dapr 223
  • CHANGED Overhaul README 236
  • CHANGED Deprecate dapr-client NPM package in favor of @dapr/dapr 261
  • FIXED Stop sending empty body from HTTP Client invoker 262
  • ADDED Documentation on how to use and customize logger 288
  • FIXED Do not change buffer data type to JSON in gRPC messages 292

Upgrading to Dapr 1.8.0

To upgrade to this release of Dapr, follow the steps here to ensure a smooth upgrade. You know, the one where you don’t get red errors on the terminal.. we all hate that, right?

Local Machine / Self-hosted

Uninstall Dapr using the CLI you currently have installed. Note that this will remove the default $HOME/.dapr directory, binaries and all containers dapr_redis, dapr_placement and dapr_zipkin. Linux users need to run sudo if docker command needs sudo:

dapr uninstall --all

For RC releases like this, download the latest and greatest release from here and put the dapr binary in your PATH.

Once you have installed the CLI, run:

dapr init --runtime-version=1.8.0

Wait for the update to finish, ensure you are using the latest version of Dapr(1.8.0) with:

$ dapr --version

CLI version: 1.8.0
Runtime version: 1.8.0

Kubernetes

Upgrading from previous version

You can perform zero-downtime upgrades using both Helm 3 and the Dapr CLI.

Upgrade using the CLI

Download the latest RC release from here and put the dapr binary in your PATH.

To upgrade Dapr, run:

dapr upgrade --runtime-version 1.8.0 -k

To upgrade with high availability mode:

dapr upgrade --runtime-version 1.8.0 --enable-ha=true -k

Wait until the operation is finished and check your status with dapr status -k.

All done!

Note: Make sure your deployments are restarted to pick the latest version of the Dapr sidecar

Upgrade using Helm

To upgrade Dapr using Helm, run:

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update

helm upgrade dapr dapr/dapr --version 1.8.0 --namespace=dapr-system --wait

Wait until the operation is finished and check your status with dapr status -k.

All done!

Note: Make sure your deployments are restarted to pick the latest version of the Dapr sidecar

Starting a fresh install on a cluster

Please see how to deploy Dapr on a Kubernetes cluster for a complete guide to installing Dapr on Kubernetes

You can use Helm 3 to install Dapr:

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update

kubectl create namespace dapr-system

helm install dapr dapr/dapr --version 1.8.0 --namespace dapr-system --wait

Alternatively, you can use the latest version of CLI:

dapr init --runtime-version=1.8.0 -k
Post installation

Verify the control plane pods are running and are healthy:

$ dapr status -k
  NAME                   NAMESPACE    HEALTHY  STATUS   REPLICAS  VERSION  AGE  CREATED
  dapr-dashboard         dapr-system  True     Running  1         0.10.0    15s  2022-06-24 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.8.0   15s  2022-06-24 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.8.0   15s  2022-06-24 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.8.0   15s  2022-06-24 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.8.0   15s  2022-06-24 13:07.39

After Dapr 1.8.0 has been installed, perform a rolling restart for your deployments to pick up the new version of the sidecar. This can be done with:

kubectl rollout restart deploy/<deployment-name>

Breaking Changes

.NET SDK

  • RESOLVED App API Token support 835