dapr - v1.7.0


Dapr 1.7.0

We're happy to announce the release of Dapr 1.7.0! 🚀 🎉 🎈

Acknowledgements

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

@1046102779, @AaronCrawfis, @abelperezok, @akkie, @alberthuang24, @amimimor, @amulyavarote, @artursouza, @beiwei30, @berndverst, @callmexiaolu88, @chinzhiweiblank, @chiru1221, @Cowlord711, @CrazyHZM, @cuishuang, @daixiang0, @davidgladstone, @DeepanshuA, @derrickburns, @dmitsh, @duglin, @Gehhilfe, @Giovds, @greenie-msft, @halspang, @hhunter-ms, @hmz777, @ItalyPaleAle, @jigargandhi, @jjcollinge, @Joshswooft, @l0ll098, @LaurenceLiZhixin, @lechnerc77, @li1234yun, @light-pan, @ls-2018, @lucasjellema, @lupino3, @marcinjahn, @marviniter, @msfussell, @mukundansundar, @mumumi, @naveen1100, @newbe36524, @nwiizo, @paulyuk, @pkedy, @pravinpushkar, @psychomelet, @qt-luigi, @r-c-correa, @RichardLaos, @rlfcunha, @rodrigoscna, @SergioVelmay, @shizn, @shivamkm07, @Shoothzj, @shubham1172, @si618, @siredmar, @skyao, @sourikghosh, @surenderssm, @Syuparn, @Taction, @tanvigour, @theonefx, @thielepaul, @uptutu, @uy-andrew, @vfarcic, @willvelida, @wimvdc, @XavierGeerinck, @yaron2, @yauri-io, @yordan-pavlov, @zdianjiang

Highlights

Configure retries, timeouts, and circuit breakers across Dapr APIs

Distributed applications are commonly comprised of many services, with dozens - even hundreds - of instances for any given application. These applications do not live in isolation, but are many times dependent on databases, caches, pub/subs, secret stores and other infrastructure services. With more dependencies, the likelihood of a system failure increases. For example, an instance can fail or be unresponsive due to hardware failure, database slowness, an overwhelming number of requests, application restarts/scale outs, or several other reasons. Designing and implementing your application with fault tolerance (the ability to detect, mitigate, and respond to failures) allows your application to recover to a functioning state and become self healing, and also helps prevent cascading failures all the way to your infrastructure services.

Dapr provides a capability for defining and applying fault tolerance resiliency policies via a resiliency spec. Resiliency specs are saved in the same location as components specs and are applied when the Dapr sidecar starts. The sidecar determines how to apply resiliency policies to your Dapr API calls. Within the resiliency spec, you can define policies for popular resiliency patterns, such as:

Policies can then be applied consistently to targets, which include:
- Apps via service invocation
- Components
- Actors

Observability

Additional component metrics

  • In order to provide increased visibility into operations, new metrics have been added to components including, pub/sub, bindings, state stores etc. For example, latencies when using a component or the number of times a given component has been called.

Dapr API call logging

  • The Dapr runtime logs events to standard output for ease of diagnostics, for example listing components loaded at startup other runtime information. With this release you can now turn on logging for the API calls between your application and the Dapr sidecar and also see these in the output log.

Components

New stable components

The following components with stable release candidates in the previous Dapr release have graduated to stable designation:
- MQTT pub/sub
- RabbitMQ pub/sub
- Azure Blob Storage binding
- Azure CosmosDB binding
- Azure Service Bus Queues binding

New state store components

There are now a total of 22 state stores with three new ones added in this release.
- CockroachDB state store component see 1556
- NATS JetStream state store component see 1422
- Oracle Database state store component see 1444

In addition, the preview Query API support has been added to the PostgresSQL, CockroachDB and Redis state stores in addition to the existing ones.

Updates to existing components

See the components section below for the list of numerous other fixes to components in this release.

[Note: With this release, there are now a total of 97 components including 41 bindings, 1 configuration, 8 HTTP middleware, 3 name resolution, 13 pub/sub, 8 secret stores, 23 state stores]

Features moved from preview to stable

Several features were moved from "preview" status to "stable" status having been available for at least two releases and solicited feedback and fixes. The following features are now stable in this release:

CLI Updates

  • Kubernetes namespace support: The components, configurations and list CLI commands now support Kubernetes namespaces when returning output.
  • Easier certificate renewal: To ease the rollover and regeneration of new root and application certificates a dapr mtls renew-certificate command has been introduced. This makes it easier to address root certificate expiry and renewal in clusters. Along with this, any CLI command that uses the Kubernetes -k option, now raises a warning message if the root certificate expiry is less than 30 days away.

New ways to install Dapr in self hosted mode

  • Private and alternative image registries (Preview): In self hosted mode the CLI init command can now specify any private registry to pull the container images required to install Dapr, as well as the ability to choose either public Dockerhub or Github repositories. This enables you to place images in trusted repositories of your choice, or pull from different purblic sources in case of image throttling.

  • Offline or airgap installation (Preview): By default, Dapr downloads binaries and pulls images from the network to setup the development environment. With this release, Dapr now supports offline or airgap installation using pre-downloaded artifacts, either with a Docker or slim environment. The artifacts for each Dapr release are now built into a Dapr Installer Bundle which can be downloaded from the releases in that repository. By using this installer bundle with the Dapr CLI init command, you can install Dapr into environments that do not have any network access.

Performance

Unix Domain Sockets now available on Kubernetes

  • It's now possible to use Unix Domain Sockets with Kubernetes (as well as self hosted) for increased throughput and lower latency when invoking the Dapr sidecar by using the dapr.io/unix-domain-socket-path annotation.

    Note: This feature is not available on Windows, only on Linux

Try it!

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.7.0.

New in this release

Dapr Runtime

  • FIXED Dapr setting a default content type of text/plain 4472
  • ADDED Circuit Breaking 777
  • ADDED Content-Type for state operations 2892
  • ADDED Resiliency policies across all building blocks 3586
  • CHANGED Actor Reentrancy to stable feature 3811
  • CHANGED gRPC Proxying to stable feature 3814
  • FIXED Service invocation to return original status code on service invocation. Add the possibility to configure retries base on error type 3826
  • FIXED Serialization of 64bit values. 3837
  • ADDED Unsubscribe method for the configuration API. 3906
  • FIXED Bug in runtime matching wildcard routes for pubsub. 3920
  • ADDED Actor options configuration per actor type 3934
  • ADDED Logging for mTLS cert expiration 3940
  • ADDED Logging for sidecar pod name in Dapr Operator 3947
  • FIXED Method invocation / Dapr automatically decodes %2f in URL 4008
  • FIXED TLS connectivity to gRPC proxy functionality when --app-ssl is enabled 4048
  • ADDED More metrics 4068
  • ADDED logging for Dapr API calls over gRPC and HTTP 4119
  • ADDED Nightly builds for Dapr 4124
  • FIXED helm charts: increase failure threshold for liveness and readiness probes 4132
  • ADDED sidecar-injector health check port setting in helm chart 4174
  • FIXED Configuration API, listen to all keys 4178
  • ADDED HealthzPort option to injector helm chart - defaults to 8080 4179
  • FIXED Dapr retries forever when app is erroring on subscriptions 4185
  • FIXED gRPC proxy connection closes after mTLS TTL passed 4197
  • ADDED Dapr images to GitHub container registry in addition to Docker Hub 4199
  • FIXED Multiple access control policies for a single app not working 4202
  • ADDED New options available for the default secret-reader deployed by the dapr_rbac subchart. 4203
  • FIXED Sidecar loads components instead of skipping if exists when operator stream reconnects 4212
  • FIXED Update of components in Kubernetes mode was accidentally available and not working properly, now blocked. 4218
  • ADDED Introduce state store component backed by Oracle Database or OCI Autonomous Database 4221
  • FIXED Condition in ReminderRename that would leave Reminder deleted. 4229
  • CHANGED Automatic State Store Encryption to stable feature 4260
  • ADDED prometheus.io/probe annotation 4272
  • FIXED When the deployment selector is updated, dapr will get a "connection refused" error 4287
  • FIXED Parity between HTTP and gRPC APIs when saving JSON state 4349
  • FIXED Concurrent map write error in placement 4353
  • FIXED Reduce placement blocking client 4361
  • ADDED Mirror of 3rd party container images to Dapr's GHCR 4365
  • ADDED Explicit support for other AES key sizes 4373
  • FIXED In Docker containers, use the CA cert bundle that's part of the base distroless images 4380
  • ADDED Resiliency: Debug logging when a circuit breaker changes state 4381
  • ADDED Rejson image to Dapr's GHCR 4411
  • FIXED Issue when actor reminders are used on single actor instance but is assigned on two pods on Kubernetes 4419
  • ADDED Support for Unix Domain Socket (UDS) on Kubernetes 4309
  • FIXED Allow disabling of default content-type for service invocation over HTTP where no content-type is specified 4469

Dapr CLI

  • ADDED Simplify development and debugging setup using a dev container. 202
  • FIXED On error, run exits with an error code 684
  • ADDED dapr init has support for Dapr GitHub container registry via Environment variable 726
  • ADDED Added support for standalone installer 731
  • ADDED Add support for querying based on namespace in the dapr list, configurations and components command 786
  • FIXED dapr init -s installs old runtime version 853
  • ADDED "dapr init" ADD "--image-registry" 869
  • ADDED Support for renew or replace of auto-generated TLS certificates using the CLI 892
  • ADDED Support for checking expiry of TLS certificates of running Kubernetes related commands via Dapr CLI 893
  • FIXED --log-as-json through cli is not working 897
  • FIXED CLI should throw an error when invalid method is invoked. 909

Components

  • ADDED FOSSA workflow for identifying dependencies with non-OSS-compliant licenses 1568
  • ADDED content-type support for pub/sub, binding and state store components 1299
  • ADDED configuration unsubscribe API 1440
  • ADDED new CockroachDB state store component 1556
  • ADDED new NATS JetStream state store component 1422
  • ADDED new Oracle Database state store component 1444
  • ADDED Apache pulsar pub/sub: upgrade client to 0.8.0 1514
  • ADDED AWS DynamoDB state store: support for time to live 1489
  • ADDED AWS S3 binding: Add option to disable SSL for S3 1554
  • ADDED Azure CosmosDB state store & binding: now retries throttled requests from database 1611
  • ADDED Azure EventHubs binding: Adds Azure Active Directory support 1572
  • ADDED Azure ServiceBus pub/sub: Retry attempts for various possible causes of 'Connection reset by peer' 1495
  • ADDED Consul name resolution: Updates Consul API to v1.11.0 (necessary for Zeebe upgrade) 1575
  • ADDED GCP pub/sub: Add reconnect loop for subscriptions 1293
  • ADDED Hashicorp Vault secret store: Support version and engine path. Add parseAsMap option. 841
  • ADDED influxdb binding: Add support for query 1452
  • ADDED Kafka binding: Version configuration 1277
  • ADDED NATS JetStream pub/sub: Adds support for wildcard subscriptions 1464
  • ADDED NATS Jetstream pub/sub: NKey based authentication 1437
  • ADDED OCI ObjectStorage state store: Support configuration through OCI configuration and PEM key file 1428
  • ADDED PostgreSQL state store: Add Query state store API implementation 1456
  • ADDED Pulsar pub/sub: add producer option disableBatching 1419
  • ADDED Pulsar pub/sub: Token authentication & support for hosts over http 1427
  • ADDED rabbitmq pub/sub: Support for setting exchangekind 1502
  • ADDED Redis state store: Add Query state store API implementation 1211
  • ADDED zeebe binding: upgrades zeebe library to 1.3.4 1519
  • FIXED Addresses macOS security warnings due to deprecated system headers by upgrading 99design/keyring library 1535
  • FIXED Fixes a pub/sub cloudevent serialization issue with 64 bit data type 1597
  • FIXED Fixes an issue with unsubscribing from configurations by id 1483
  • FIXED statestore query API preview: Removes redundant value prefix from the key names in JSON query syntax 1490
  • FIXED AWS S3 binding: allow disabling SSL cert validation (to accept self-signed certs) 1592
  • FIXED AWS SNS/SQS pub/sub: bugfixes - visibility timeout reset; honors disable entity management setting in DLQ 1445
  • FIXED Azure CosmosDB state store: Fixes an issue with stored procedure creation when Azure AD credentials are used 1603
  • FIXED Azure CosmosDB state store: transaction API to respect order of operations 1209
  • FIXED Azure EventHubs pub/sub: Support Azure AD credentials for checkpointing storage 1566
  • FIXED Google Cloud pub/sub: Returns No Ack (nack) when there is an error 1561
  • FIXED mDNS name resolution: sync first browse 1591
  • FIXED MongoDB state store: Actor reminders broken since 1.5.0 due to data serialization problem (see also hotfix release 1.5.2 and 1.6.1) 1355
  • FIXED MongoDB state store: Fixes an issue preventing MongoDB from querying non-string values 1583
  • FIXED MongoDB state store: Removes MongoDB bson artifacts from JSON value output 1582
  • FIXED MySQL binding: add TEXT column type special case handling 1466
  • FIXED MySQL binding: adds special handling for JSON_EXTRACT and LONGTEXT column types 1486
  • FIXED MySQL state store: transaction API to respect order of operations. 1521
  • FIXED PostgreSQL state store: transaction API to respect order of operations. 1522
  • FIXED rabbitmq pub/sub: Fixes a reconnect issue 1471
  • FIXED Redis state store: Fixes an issue preventing querying of numeric values 1594
  • FIXED Setting a value using ETag for the Postgres state store 1497
  • FIXED SQL Server state store: Ensures transaction API executes all transactions sequentially. 1537
  • FIXED SQL Server state store: transaction API to respect order of operations. 1505

Dashboard

  • ADDED Several Dashboard improvements 190

.NET SDK

  • ADDED Support for providing Actor TypeName during runtime at startup. 677
  • FIXED AddDaprSecretStore Extension always throws unhandled exception at container start 779
  • FIXED ActorHost.JsonSerializerOptions is always null 814
  • ADDED Build/test with .NET 6 to CI matrix 794

Go SDK

  • FIXED Configuration API 200
  • FIXED Receiving sub events with rawPayload does not work 256
  • ADDED Graceful shutdown 260

Java SDK

  • REMOVED Deprecated builder classes 601
  • ADDED Added support for statestore query API 653
  • FIXED Long values are not sent correctly with PubSub 686
  • FIXED Topic annotation handles class-level @RequestMapping 694
  • FIXED Fixed service invocation path segments to avoid automatic encoding of / to %2f 702
  • FIXED Dapr invoke method has very low throughput compared to calling API directly 709
  • FIXED Actor DurationUtils parsing of duration throws an exception 712

Python SDK

  • ADDED adds DaprClient configuration option max_grpc_message_length for max gRPC message length in service invocation 371
  • ADDED adds support for asynchronous service invocation with new method invoke_method_async in DaprClient (HTTP only) 300
  • ADDED adds support for configuration subscriptions as part of the configuration API preview) 334
  • ADDED adds support for TTL in actor reminders 315
  • ADDED adds pubsub topic event response support to GRPC ext client. This allows a subscriber to indicate whether a pub/sub message was handled successfully, should be dropped, or should be retried. 341
  • FIXED now reuses any existing asyncio event loop everywhere (including in DaprInvocationHttpClient), allowing for use in environments like Jupyter Notebooks 295
  • FIXED fixes an issue where actor timers used the wrong context 330
  • FIXED removes a superfluous metadata deprecation warning 354
  • ADDED updates examples for new state store query syntax 355

JavaScript SDK

  • ADDED Doc: Configuration API in JS-SDK 160
  • ADDED JS-SDK client uses environment variables to initialize 178
  • ADDED Upgrade to latest Node LTS 16.14.0 185

Upgrading to Dapr 1.7.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.7.0

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

$ dapr --version

CLI version: 1.7.0
Runtime version: 1.7.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.7.0 -k

To upgrade with high availability mode:

dapr upgrade --runtime-version 1.7.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.7.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.7.0 --namespace dapr-system --wait

Alternatively, you can use the latest version of CLI:

dapr init --runtime-version=1.7.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-03-29 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.7.0   15s  2022-03-29 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.7.0   15s  2022-03-29 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.7.0   15s  2022-03-29 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.7.0   15s  2022-03-29 13:07.39

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

Components

  • In this release the value field has been removed from the key name in the state management Query API as part of the ongoing feedback on this preview feature.
    • FIXED statestore preview Query API: Remove 'value' prefix from the key names in query JSON 1490
  • This release include the breaking change to the MongoDB store as described in v1.6.1 release notes to address a data serialization problem.
  • FIXED MongoDB state store: Removes MongoDB bson artifacts from JSON value output 1582
  • If you use "/" as part of your method invocation, this release will affect those service invocations:
  • FIXED Method invocation / Dapr automatically decodes %2f in URL 4008

Java SDK

  • REMOVED Deprecated builder classes 601

Deprecation Notices

  • Starting in Dapr 1.9, content-type will no longer default to text/plain if not explictly provided as a header for HTTP invocations. Users are recommended to turn on this new behavior via the new preview feature to evaluate the impact of this change.

Details

date
April 7, 2022, 9:39 p.m.
name
Dapr Runtime v1.7.0
type
Minor
👇
Register or login to:
  • 🔍View and search all dapr releases.
  • 🛠️Create and share lists to track your tools.
  • 🚨Setup notifications for major, security, feature or patch updates.
  • 🚀Much more coming soon!
Continue with GitHub
Continue with Google
or