Project: Dapr (App Definition and Development / Application Definition & Image Build)
File: v0.11.0.md

We're happy to announce the release of Dapr v0.11.0! Our Dapr releases are increasingly focused on addressing operational concerns like: security, stability, and reliability. Additionally, given the growing number of Dapr deployments, we have further refined out the upgrade process to enable durable production environments. Direct user feedback is the primary input into our release planning process. As with every release, we look forward to hearing from you on any friction you may have experienced using Dapr. We would like to extend our thanks to all the new and existing contributors who helped make this release happen. Highlights support used in applications Support for for development and updated quickstart to use local secret store New components: , , Starting with this release, Dapr Helm chart repo has moved to . In case of in-place cluster upgrade, the steps for adding the new repository to Helm are . If you're new to Dapr, visit the 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 and the . Note: This release contains a few . See section on upgrading Dapr to version 0.11.0. Refactored code style, remove unnecessary code, use defer for unlock operation (Thanks @skyao) Refactored to use github.com/pkg/errors instead of fmt.errorf (Thanks @jigargandhi and @ShaileshSurya) Added code to increase Dapr logging verbosity from app -> sidecar Added optional metadata field to the State APIs Removed non transactional state APIs from actors Added error field to Bulk Get API Fixed empty fields in Bulk Get API JSON response Changed perf test payload size Added service invocation REST API Swagger docs (Thanks @dancadana) Fixed actor returns 200 on GET if key is not present Added requests authentication from api-server in sidecar injector Fixed 'host removed' log prints multiple times per second Fixed response handling from pub/sub message delivery on gRPC Added E2E tests for actor state scenario Updated E2E test components to fetch values from secrets (Thanks @yittg) Added support for cross namespace service discovery in service invocation Added decision record for parity between GetState and SaveState API Fixed return 400 on actor not found Updated speed of Windows CI E2E tests Refactored component processing during runtime init (Thanks @yittg) Fixed actor E2E tests intermittent failure Added log for a loaded component in runtime Changed NATS server to NATS streaming for pub/sub (Thanks @abserari) Added declarative mechanism to create topic subscription Fixed sidecar injector logging admission response (in previous release, under certain condition when running in Kubernetes, this could have included potentially private information). Fixed opaque error message on missing "dapr.io/id" Added label to control plane pods in Helm chart Fixed dapr-operator has cluster-admin permissions in Kubernetes (Thanks @gunniwho) Fixed intermittent E2E test failures for pub/sub Fixed serialization issues with transaction upsert gRPC API Fixed Dapr dashboard does not have a Windows image. Force it to Linux in Helm

Added strong SPIFFE based IDs to sentry workload certificates Added load test for actors Added code coverage GitHub action Added decision record regarding adding content type to state Added scoping for secrets Fixed dapr-placement seems to fail randomly Fixed publishing to component w/o topic returns 200 Fixed multi pub/sub 'PubSubName' abstraction broken Added access control lists for Service Invocation Fixed config file to disable mTLS in e2e tests (Thanks @skyao) Fixed Dapr does not install on ARM64 cluster Updated to go lang version

Fixed logs make it sound like everything is fully running when not Fixed Dapr status command does not show control plane correctly in HA mode Fixed publish command when dashboard is running Updated CLI waits for dapr sidecar before running apps without port Added code coverage GitHub action Fixed dapr dashboard -p flag is not working Changed Helm chart repo from ACR to GitHub repo Added ARM64 binary support Added support for ARM architecture Fixed passing port configuration from command line Refactored local secret store based on file Added support for environment variables as secret store Updated MQTT publish for multi pub/sub (Thanks @kumaya) Fixed CosmosDB component metadata support in ExecuteStateTransactionRequest Added pub/sub response type Added Qos to rabbitMQ binding (Thanks @abserari) Added OPA HTTP middleware (Thanks @RichiCoder1) Added Redis failover feature to Redis state store Components (Thanks @abserari) Added code coverage GitHub action Added option for base64 decoding in Azure Blob Storage output binding component (Thanks @mtaghavi2005) Added get operation for Azure Blob Storage output binding Fixed broken consistency values for CosmosDB state component Fixed NATS streaming has a NATS logger but not a Dapr logger (Thanks @abserari) Fixed Multi() transaction operations API for redis to use HSET and HDEL Added bi-directional output binding for PostgreSQL Fixed return effective URL of Azure Blob Storage document created when using an output binding Added RethinkDB state component for time-series data use-cases Added support for W3C tracing Added support for DAPRAPITOKEN injection into calls Added content type metadata support in gRPC invoke service calls Added metadata support for State APIs Added support for Bulk Get State API Added support for State Transaction API Added code coverage GitHub action Updated state store and secrets store examples Added metadata support for State APIs Added support for State Transaction API Added ability to specify default DaprClient options to AddDapr (Thanks @EdwinVW) Added support to send headers as metadata to sidecar (Thanks @amolenk) Fixed MarkerService pattern for preventing multiple registrations of a service for DI does not work (Thanks @EdwinVW) Added sample application for pub/sub (Thanks @abserari) Fixed README documentation (Thanks @li1234yun) Added support for pub/sub event handling code, retry logic Added consistent support for parent trace ID in client requests Added explicit Dapr API authentication token support Added metadata support for State APIs Added code coverage GitHub action Added support for Bulk Get State API Added example for scoping of secrets Added support for State Transaction API Added metadata support for State APIs Added support to save multiple states Added metadata support for State APIs (Thanks @gdhuper) Added metadata support for State APIs Fixed kubectl command to apply correct yaml file (Thanks @awolf) Fixed broken links to binding docs (Thanks @awolf) Added docs for changes to local secret store Updated actors API reference doc Updated pub/sub API reference doc Updated state API reference doc Fixed broken links (Thanks @sau-lanvy) Added cross namespace information for service invocation Added declarative pub/sub documentation Updated documentation for Prometheus and Grafana setup Added disclaimer about plain text secrets Added Redis failover guidelines (Thanks @abserari) Added secrets scoping information Fixed missing line continuation in commands Added configuration options doc for decodeBase64 (Thanks @mtaghavi2005) Updated Helm chart links Updated NATS streaming setup and deleted NATS setup (Thanks @abserari) Added case-sensitivity of input parameters (state keys, pubsub topics) Added clarification on use of CloudEvents during publish Updated Azure Blob Storage binding documentation Refactored service invocation and state management concepts doc Updated Queue depth autoscaling docs for KEDA v2.0-beta Fixed incorrect spelling in docs (Thanks @harrykimpel) Fixed incorrect spelling in docs (Thanks @pkedy) 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? Uninstall Dapr using the CLI you currently have installed. Note that this will remove the default $HOME/.dapr directory, binaries and all containers daprredis, daprplacement and dapr_zipkin. Linux users need to run sudo if they have installed binary in default path /usr/local/bin/ or have docker command needing sudo: ```bash dapr uninstall --all ``` Next, follow instructions to install the latest CLI version, or alternatively download the latest and greatest release from and put the `dapr` binary in your PATH. Once you have installed the CLI, run: ```bash dapr init ``` Wait for the update to finish, ensure you are using the latest version of Dapr(0.11.0) with: ```bash $ dapr --version CLI version: 0.11.0 Runtime version: 0.11.0 ``` If you previously installed Dapr using Helm, starting with this releases you can now upgrade Dapr to a new version. If you installed Dapr using the CLI, go . Get the latest version of the Dapr CLI as outlined above, and put it in your path. You can also use the helper scripts outlined to get the latest version. First, add new Dapr helm repository(see ) and update your Helm repos: ```bash helm repo add dapr https://dapr.github.io/helm-charts/ --force-update helm repo update ``` Run the following commands to upgrade the Dapr control plane system services and data plane services: Remove ClusterRole Binding (Needed* for upgrading to v0.11.0. This is for this release only.) ``` kubectl delete clusterrolebinding dapr-operator ``` Export certificates ``` dapr mtls export -o ./certs ``` Updating Dapr control plane pods Using the certs exported above, run the following command: ``` helm upgrade dapr dapr/dapr --version 0.11.0 --namespace dapr-system --reset-values --set-file daprsentry.tls.root.certPEM=./certs/ca.crt --set-file daprsentry.tls.issuer.certPEM=./certs/issuer.crt --set-file dapr_sentry.tls.issuer.keyPEM=./certs/issuer.key ``` Wait until all the pods are in Running state: ``` kubectl get pods -w -n dapr-system ``` Verify the control plane is updated and healthy: ``` $ dapr status -k NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED dapr-dashboard dapr-system True Running 1 0.3.0 15s 2020-09-28 13:07.39 dapr-sidecar-injector dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 dapr-sentry dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 dapr-operator dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 dapr-placement dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 ``` Updating the data plane (sidecars) Next, issue a rolling update to your Dapr enabled

When the pods restart, the new Dapr sidecar version will be picked up. ``` kubectl rollout restart deploy/<DEPLOYMENT-NAME> ``` All done! If you previously installed Dapr on your Kubernetes cluster using the Dapr CLI, run: Note: Make sure you're uninstalling with your existing CLI version ```bash dapr uninstall --kubernetes ``` It's fine to ignore any errors that might show up. If you previously installed Dapr using Helm 2.X: ```bash helm del --purge dapr ``` If you previously installed Dapr using Helm 3.X: ```bash helm uninstall dapr -n dapr-system ``` Update the Dapr repo: ```bash helm repo update ``` If you installed Dapr with Helm to a namespace other than `dapr-system`, modify the uninstall command above to account for that. You can now follow instructions on how to install Dapr using Helm 3. Alternatively, you can use the newer version of CLI: ``` dapr init --kubernetes ``` 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.3.0 15s 2020-09-28 13:07.39 dapr-sidecar-injector dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 dapr-sentry dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 dapr-operator dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 dapr-placement dapr-system True Running 1 0.11.0 15s 2020-09-28 13:07.39 ``` After Dapr 0.11.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> ``` Dapr Helm chart repository has been migrated from `https://daprio.azurecr.io/helm/v1/repo` to `https://dapr.github.io/helm-charts/`. Run the below commands to use add new repository: ```bash helm repo add dapr https://dapr.github.io/helm-charts/ --force-update helm repo update ``` A double serialization issue when gRPC State Transaction API was used, has been fixed in this release. As a result, states previously saved via the gRPC State Transaction API, will not be properly deserialized with the latest v0.11.0 version of the code. For example previously, a string saved using the gRPC State Transaction API was saved as: ``` \"saved state\" ``` When deserialized, it would be read as `"saved state"` instead of `saved state`. Similarly for JSON serialized values, it was marshaled once again and then saved. This has been fixed in v0.11.0 and the double serialization removed. Any code that expects the value in the previous incorrectly serialized format will need some changes to work with v0.11.0. Read more . The implementation of NATS pub/sub component changed from NATS serving to NATS streaming. Read more about it for NATS streaming setup and usage. The local secret store component type has been renamed from `secretstores.local.localsecretstore` to `secretstores.local.file`. If you have used this component, you will need to change the type name in your configuration file. The Java SDK supports sending and receiving trace context with the API calls. All APIs have a complex Request object with builders, with the method ```java withContext(io.grpc.Context context) ``` to pass trace context to Dapr. Similarly the responses from Dapr APIs are now wrapped in a object which contains the actual response and the context associated with it. Old method signature: ```java Mono<Void> publishEvent(PublishEventRequest request); ``` New method signature: ```java Mono<Response<Void>> publishEvent(PublishEventRequest request); ```