Back to Dapr

Dapr 1.5.0

docs/release_notes/v1.5.0.md

1.17.617.8 KB
Original Source

Dapr 1.5.0

We're happy to announce the release of Dapr 1.5.0!

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

Highlights

Components upgraded to Stable

The Dapr Steering and Technical Committee (STC) voted to change the components certification criteria and rename components from GA to Stable.

The following components are now upgraded to Stable indicating that they are suitable for use in production scenarios:

In addition, multiple fixes have been made to other components including RabbitMQ pub/sub, MySQL state store, and PostgreSQL state store.

For more information see the Dapr components reference.

Query API for state management

The state management building block API now includes a query API, currently in Alpha state. This API provides a way of querying the key/value data stored in state store components. It is not a replacement for a complete query language, and is focused on retrieving, filtering and sorting key/value data that you have saved through the state store APIs.

Even though the state store is a key/value store, the value might be a JSON document with its own hierarchy, keys, and values. This query API allows you to use those keys and values to retrieve corresponding documents.

For more information read the state management query API docs.

Configuration API building block

Configuration is a new building block API introduced in this release and is currently in Alpha state. Consuming application configuration is a common task when writing applications and frequently configuration stores are used to manage this configuration data. A configuration item is often dynamic in nature and is tightly coupled to the needs of the application that consumes it. The Configuration API provides an abstraction over different stores and exposes key/value data and importantly with the ability to subscribe to configuration item update notfications.

In this initial release this API can only be used over gRPC. HTTP will be made available before the final stable release (for example, \v1.0\configuration\myconfigstore).

For more information read the configuration overview.

Actors in the Go SDK

Virtual actors are now available in the Dapr Go SDK. See go-sdk/21 for details.

For a Dapr actor example using the Go SDK, see go-sdk/examples/actor.

Actors reliability improvement

Enhancements to the actor runtime were released to improve reliability. See dapr/1914 and dapr/3533 for details.

Support for ARM64 Macs (Preview)

Dapr CLI, sidecar and Dashboard are now natively compiled for ARM64 Macs. Also, Dapr CLI installation via Homebrew was fixed. See the Dapr CLI installation instructions for details.

New components

New components added to this release include:

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.

See this section on upgrading Dapr to version 1.5.0.

Acknowledgements

Thanks to everyone who made this release possible!

@1046102779, @AaronCrawfis, @abhishek-galoda, @alvinhenrick, @amimimor, @anhldbk, @AnyISalIn, @apuzyrevsky, @artursouza, @beiwei30, @berndverst, @caogj, @CodeMonkeyLeet, @CrazyHZM, @cshi0, @cwdsuzhou, @daixiang0, @DarinShapiroMS, @Darquewarrior, @denis111, @dmitsh, @doddgu, @fjvela, @greenie-msft, @halspang, @hokandil, @huiyangz, @ItalyPaleAle, @jjcollinge, @Juneezee, @krutsko, @l0ll098, @LaurenceLiZhixin, @li1234yun, @marviniter, @mnussbaum, @msfussell, @mthmulders, @mukundansundar, @orizohar, @penghuima, @pkedy, @qmhu, @ravi-k4, @richgo, @swuecho, @Taction, @tanvigour, @theonefx, @tomkerkhove, @wcs1only, @willtsai, @wmeints, @workfigure, @XavierGeerinck, @yaron2

New in this release

Dapr Runtime

  • RESOLVED Improve the reliability of partition table dissemination for actors 1914
  • ADDED Configuration API 2988
  • FIXED Http opa middleware crash 3216
  • RESOLVED Pass ReadBufferSize argument to fasthttp server and grpc server 3319
  • ADDED New parameters to add custom label at pod level 3435
  • FIXED Dapr runtime sends InputBinding events to undesignated locations 3472
  • FIXED Postgres support for actors 3533
  • RESOLVED Add tolerations support to Helm Chart values. 3534
  • RESOLVED Fixed typo in secret store init 3535
  • RESOLVED Operator: hide debug log 3543
  • FIXED Metadata headers not sent to server via dapr gRPC proxy 3561
  • FIXED Put 'kubernetes-admin' in allow list 3571
  • ADDED State Store Query API 3662
  • RESOLVED Retriable pubsub error should include the topic in the logging 3675
  • RESOLVED Make release notes script list authors while ignoring case 3684
  • RESOLVED Support for PATCH request in service invocation 3696
  • RESOLVED Create unit test for admission control 3708
  • FIXED Fixed panic sending on a nil gRPC stream in the placement heartbeat loop 3727
  • ADDED Support to override sidecar image per app in K8s via dapr.io/sidecar-image 3745
  • FIXED Resource leak for grpc server connection 3752
  • FIXED Crash backoff in dapr operator after upgrade to 1.4.3 (helm doesn't upgrade CRDs definitions) 3756
  • FIXED gRPC inbound request metrics is empty 3768
  • RESOLVED Default W3CString should not be passed down 3769
  • RESOLVED Automatically set GOMAXPROCS to match Linux container CPU quota 3781
  • RESOLVED Change API version of PodDisruptionBudget to policy/v1 when supported 3799
  • FIXED Binding event panic 3804
  • ADDED Support for Kafka version setting in Pubsub 3806
  • RESOLVED Cleanly shutdown HTTP and gRPC servers when Dapr is shutdown 3810
  • ADDED azure.cosmosdb.gremlinapi binding 3851

Dapr CLI

  • ADDED Support for unix domain socket 788
  • FIXED use input param namespace when listing Pods 798
  • RESOLVED Allow specifying of runtime-version via Env Var for dapr init 806

Components

  • RESOLVED Certify Azure SQL Server as stable in state store 949
  • RESOLVED Certify Apache Kafka as stable in pubsub 953 1241
  • RESOLVED Certify Azure Key Vault w/ Managed Identity as stable in secret store 959
  • ADDED User agent header for Azure services 1014
  • ADDED Azure Service Bus message metadata for Pubsub 1071
  • ADDED Delay queue params for Pulsar 1107
  • FIXED Postgres state store and add it to conformance tests 1117
  • ADDED Mysql conformance test 1122 1168
  • ADDED Enhancements to CREATE operation GCP Storage Bucket binding + adds GET, DELETE and LIST 1125
  • FIXED Azure Storage Queue resolving extra double quotation 1130
  • RESOLVED Update Azure Service Bus Go SDK to latest 1141
  • RESOLVED RabbitMQ binding uses text/plain as content type 1144
  • RESOLVED Pass the message body in OPA middleware 1166
  • FIXED RabbitMQ pubsub ignores 'durable' metadata 1181
  • FIXED RabbitMQ pubsub does not handle channel closing properly 1187
  • FIXED TLS with Kafka pubsub component 1188
  • UPDATED paho.mqtt.golang to v1.3.5 1192
  • RESOLVED binding/mysql: optimize output error 1195
  • RESOLVED Reconnect RabbitMQ on 'unexpected command received' error 1198
  • RESOLVED add metadata to query request/response 1215
  • ADDED Support message-id property from IoTHub device events in EventHubs 1221
  • RESOLVED restrict sns/sqs pubsub subscription permissions 1230
  • FIXED MQTT bindings can hang on Close() 1235
  • RESOLVED Body of email empty in SMTP binding when invoking the binding over gRPC 1253
  • FIXED Body content parsing for SMTP binding 1254
  • ADDED Warning generated by SMTP binding when username and password are both set. 1255
  • ADDEDED Option to override Kafka Broker version 1275
  • RESOLVED Renamed package for CosmosDB.GramlinAPI binding component 1276

Dashboard

  • ADDED Configurable base URL 128
  • RESOLVED Generate binaries for Darwin ARM64 (including M1 Macs) 174

.NET SDK

  • RESOLVED Support .net 6 preview 4 new Minimal APIs 695
  • RESOLVED Response.BodyWriter on Net6.0 Required Call CompleteAsync()? 704
  • RESOLVED Report error correctly for missing route key on [FromState] 706
  • ADDED Support for gRPC proxying 741
  • RESOLVED StateManager request don't have dapr-api-token header. 767
  • RESOLVED Allow multiple topics to call the same endpoint 715
  • RESOLVED IIS Express Problem - app returned http status code 400 from subscription endpoint 743
  • FIXED Falsely logged default subscription message 760

Go SDK

  • ADDED Actor support 21
  • RESOLVED Add metadata support for PublishEvent API 164
  • RESOLVED Rationalize PublishEvent* APIs 174
  • RESOLVED By default, gRPC limits incoming messages to 4 MB and expose parameter to allow user to set the limit 189
  • RESOLVED Decode data_base64 cloudEvent for http service 201
  • FIXED HTTP service stop method doesn't do anything 208
  • RESOLVED Dapr client doesn't report failure when instantiated without a daprd connection 212
  • RESOLVED Make client init fail if server connection fails 213

Python SDK

  • RESOLVED Data argument not sent to output binding when calling DaprClient.invoke_binding 274
  • RESOLVED DaprJSONEncoder bug 283

Upgrading to Dapr 1.5.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:

bash
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:

bash
dapr init --runtime-version=1.5.0

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

bash
$ dapr --version

CLI version: 1.5.0
Runtime version: 1.5.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.5.0 -k

To upgrade with high availability mode:

dapr upgrade --runtime-version 1.5.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.5.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

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.5.0 --namespace dapr-system --wait

Alternatively, you can use the latest version of CLI:

dapr init --runtime-version=1.5.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.9.0    15s  2021-11-09 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.5.0   15s  2021-11-09 13:07.39

After Dapr 1.5.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

None.