Dapr 1.0.0-rc.3
We're happy to announce the release of Dapr 1.0.0-rc.3!
We would like to extend our thanks to all new and existing contributors who helped make this release happen.
This is a release candidate version as we progress towards Dapr v1.0.0. We appreciate you trying Dapr and providing feedback on this release.
See this section on upgrading Dapr to version 1.0.0-rc.3.
Highlights
- Pub/Sub per message time-to-live
Dapr enables per-message time-to-live (TTL) for all pub/sub components. Applications can set time-to-live per message, and subscribers will not receive those messages after expiration. - Sidecar to app authentication
- MySQL output binding
- MySQL state store
- Component metadata's random value via
{uuid}
marker - Upgrade CLI command to upgrade the Dapr control plane
- Runs as non-root by defaut on Kubernetes
- Numerous improvements to the Dapr Dashboard
- Added dapr-distributed-calendar sample
- Java SDK fixed to perform async API calls to Dapr sidecar
- Improvements to actor registration, exception handling in the .NET SDK
- Service invocation in the SDK now uses HTTP as the underlying protocol so deeper integration with .NET SDK API surface for HTTP is possible, which makes service invocation much more flexible. See Service Invocation section for more details
Acknowledgements
Thanks to everyone who made this release possible!
@1046102779, @AaronCrawfis, @Betula-L, @DarqueWarrior, @Yggdrasill-7C9, @alpha-baby, @alydersen, @arghya88, @artursouza, @beiwei30, @cmendible, @darren-wang, @davidkarlsen, @dylandee, @eibrunorodrigues, @fjvela, @gaoxinge, @georgestevens99, @halspang, @hepin1989, @IroNEDR, @jigargandhi, @juazasan, @Karishma-Chawla, @karoldeland, @kevgo, @kzmake, @mchmarny, @mrchypark, @msfussell, @mukundansundar, @newbe36524, @orizohar, @pkedy, @rrylee, @rynowak, @skyao, @soiboxauxi, @tcnghia, @TenSt, @tomkerkhove, @trondhindenes, @vinayada1, @wcs1only, @withinboredom, @wjayesh, @XavierGeerinck, @xiazuojie, @yaron2, @youngbupark, @zzxwill
New in this release
Dapr Runtime
-
RESOLVED Migrate Dockerfile used to build Dapr to static, nonroot runtime image 1551
-
RESOLVED Enable sidecar to app authentication 1781
-
ADDED Support for message expiration in PubSub. 2216
-
RESOLVED Make required the version field on Component YAML 2260
-
FIXED Empty etags treated as empty etags. 2320
-
Change response handling for cross-protocol invocation. 2342
-
RESOLVED v1.0 Milestone 3 Plan 2346
-
RESOLVED Error: app not subscribed to binding 2468
-
RESOLVED How to configure oauth middleware in dapr1.0-rc1 and running? 2474
-
GENERATED _pb.go and _grpc.pb.go separately using newer gRPC protoc for Go. 2481
-
RESOLVED The invocation chain is break when using service invoke 2504
-
RESOLVED Access control configuration invalid w/o at least 1 policy 2526
-
RESOLVED Add Metadata gRPC API 2527
-
RESOLVED Consistency of API names surfaced by each SDK 2535
-
FIXED Docker image to be distroless and nonroot. 2536
-
FIXED Error message for unknown state stores being HTTP escaped. 2551
-
RESOLVED Remove redundant cancelfunc calls 2598
-
RESOLVED GetBulkSecrets fails when access limits are set in config 2600
-
FIXED The middleware.http.uppercase middleware comes pre-registered in Standalone mode. 2602
-
RESOLVED Make missing app-id annotation have a clearer log message 2603
-
FIXED CLI and Helm chart no longer default to amd64 architecture for Kubernetes installs. This allows deployments to arm64 Kubernetes clusters to succeed with the default configuration. 2605
-
RESOLVED Add missing metadata in getBulkState() response 2608
-
RESOLVED Update setup-dapr-development-env.md 2614
-
RESOLVED Return HTTP 409 Conflict when ETag doesn't match 2619
-
RESOLVED RBAC issue on OpenShift when installing with Helm 2620
-
RESOLVED fix(fsm): Apply return type must be bool type, or daprd runtime maybe panic 2626
-
RESOLVED Add Known Types repeated twice 2627
-
RESOLVED Secret API "bulk" http endpoint does not work 2649
-
RESOLVED Update Bulk Secrets API to return map[string]map[string]string 2652
-
RESOLVED Update setup-dapr-development-env.md 2664
-
RESOLVED fix(actors): timer ticker bug 2670
-
RESOLVED Helm chart tlc 2692
-
FIXED Support multiple path segments in access control policy 2725
Dapr CLI
-
RESOLVED Dapr Uninstall Fails with Dapr: cannot get the manifest file: https://api.github.com/repos/dapr/dapr/releases - 403 rate limit exceeded 415
-
RESOLVED Update Dapr CLI logging to better show errors and warnings 484
-
RESOLVED Change the way of dapr cli reinstalling 527
-
RESOLVED [feature] add a metrics-port on run command 554
-
FIXED Dapr slim init now creates a
config.yaml
file like a normal init. 556 -
RESOLVED Add Upgrade CLI command to upgrade the Dapr control plane services 560
-
FIXED Workaround to allow dapr to be run with rosetta on M1 macs 570
-
RESOLVED Document metrics port 573
-
RESOLVED Allow all Helm values to pass to init/upgrade commands 574
-
RESOLVED Helm link points to self hosted 576
Components
-
RESOLVED Dapr pub/sub publish is stripping Cloud Event fields 506
-
RESOLVED Document when to release a new version of a component 526
-
RESOLVED Can't load oauth2 middleware in dapr1.0-rc1 kubernetes 537
-
RESOLVED Update the Secrets Component documentation 559
-
RESOLVED Add prefetch count to RabbitMQ pub/sub 560
-
FIXED Kubernetes get secret to fallback to k8s namespace. 563
-
RESOLVED Add concurrency to RabbitMQ 574
-
RESOLVED Exclusive Queues for RabbitMQ 577
-
RESOLVED Added Exclusive Flag to RabbitMQ queues 580
-
RESOLVED Support priority queue for RabbitMQ Bind/Pubsub Components 582
-
RESOLVED App able to subscribe to one GCP Pub/Sub topic only 583
-
RESOLVED Shared Subscription in MQTT 589
-
RESOLVED SecretStore BulkGetSecret method flattens all of secrets into a single map 590
-
RESOLVED Update sample links 611
-
RESOLVED Need a MySQL binding support similar with PostgreSQL 616
-
RESOLVED Fix get bulk secret for hashicorp vault. 632
-
RESOLVED Fix service bus new topic creation 636
Dashboard
-
FIXED display of full cmd and registered actors 78
-
RESOLVED Numerous improvements and issues on the Dashboard 93
-
RESOLVED Improve log page for K8s 104
-
ENABLED Dashboard to run unprivileged. 119
-
FIXED reported vulnerabilities by npm. 120
.NET SDK
The .NET SDK NuGet packages that corresponds with RC3 of the Dapr runtime is version 1.0.0-rc05
.
The .NET SDK has several major feature additions and impactful changes in this release. We recommend every user to read this migration guide as a supplement to the release notes.
-
RESOLVED Remove Query all statenames from IActorStateManager because it does not behave as expected 53
-
FIXED Changed signatures to use IReadOnlyDictionary<TKey, TValue> over Dictionary<TKey, TValue> in public APIs 395
-
FIXED Actor Runtime should not report Exception text in HTTP responses 410
-
ADDED support for metadata in pub/sub 425
-
FIXED TrySaveStateAsync and TryDeleteStateAsync should only handle "rejections" based on ETag, not all RPC exceptions 426
-
FIXED Actors HTTP handlers don't work with some common frontend server patterns 434
-
FIXED bug in actor serialization of
ActorId
. 477 -
RESOLVED Have consistent API names for .NET SDK 500
-
ADDED DaprClient: Implement GetBulkSecretAsync 510
-
RESOLVED Change the name of Invoke to InvokeMethod on the Actor proxy for naming consistency 513
-
RESOLVED Throw DaprException for dapr errors 516
-
RESOLVED Use Task instead of ValueTask 517
-
ADDED Support for metadata in Publish API. 521
-
FIXED ActorProxy.Create(ActorId actorId, Type actorInterfaceType, string actorType) does not work522
-
RESOLVED ModelBinding throws ArgumentNullException when state not found in store 524
-
ADDED More flexible options for HTTP service invocation 526
-
FIXED Support for null and empty etag. 545
-
RESOLVED Simplifying Service Invocation API surface 549
-
RESOLVED Expose Dapr API token to users as a settable value 551
-
FIXED DaprClient now implements IDisposable so that networking resources can be reclaimed deterministically. 559
Go SDK
-
RESOLVED add metadata in state get response 128
-
RESOLVED fix some typo 131
-
RESOLVED Update SDK to support new etag mechanism, change BulkGetSecrets 134
-
RESOLVED Add support for etag and bulk secret modifications 135
Java SDK
The Maven version that corresponds with this release of the Dapr runtime is version 1.0.0-rc-4
.
The Java SDK has several major feature additions and impactful changes in this release. We recommend every user to read this migration guide as a supplement to the release notes.
-
RESOLVED add java.lang.reflect.Type to deserialize API 331
-
RESOLVED Add wait() method to block until Sidecar is up 377
-
REFACTORED CloudEvent serialization, also adding default constructor. 385
-
RESOLVED validated handling of metadata and fixed when applicable. 396
-
RESOLVED How to set timeout invoking service 399
-
FIXED missing eTag response for state APIs. 405
-
RENAMED methods and properties for consistency across SDKs. 409
-
RESOLVED Rename invoke to invokeMethod for ActorProxy 418
-
RESOLVED Implement getBulkSecret API 421
-
REMOVED DaprException from IllegalArgumentException. 424
-
FIXED input encoding for HTTP calls. 427
-
RESOLVED Add support for metadata in Publish API 430
-
FIXED datacontenttype to respect content-type metadata. 432
-
FIXED implementations of DaprClient API were blocking for gRPC and HTTP. 434
-
RESOLVED etag error code changes in dapr runtime need a change in the sdk 437
-
RESOLVED Handle service invocation over HTTP only 438
-
REMOVED unused
etag
param from getState() 439 -
RESOLVED Why not implement java-sdk-springboot as a spring boot starter? 441
-
FIXED Support for null and empty etag. 442
-
RENAMED InvokeServiceRequest to InvokeMethodRequest. 443
-
RESOLVED @ActorMethod to override method's name for client and service 444
-
REMOVED Dependency from OpenTelemetry SDK 453
-
FIXED error handling for service invocation with HTTP client and gRPC service. 461
-
ADDED examples on how to write Unit tests with DaprClient and Actors. 470
-
FIXED order of State key-value params. 472
Python SDK
Python SDK version is 1.0.0rc3 and is available through pip/pypi
-
RESOLVED Add wait() method to block until Sidecar is up 140
-
RESOLVED For invoke Service - How to return error over grpc. 141
-
RESOLVED Naming changes 150
-
RESOLVED Allow for a more recent version of grpcio 160
-
ADDED code in state store example showcasing etag handling. 167
-
FIXED Support for null and empty etag. 169
-
RESOLVED Makes service method API invocations over HTTP by default. 176
-
RESOLVED Add support for bulkGetSecret 179
-
REMOVE dependency from OpenCensus SDK. 181
PHP SDK
- RESOLVED Dapr composer org, package and publish 1
Documentation
-
RESOLVED Make it clear in the docs that all Dapr services Placements and Sentry service do not need Docker to run locally 857
-
RESOLVED Document components maturity status 935
-
UPDATED overview description for pub/sub topics and subscriptions 987
-
RESOLVED mDNS round robin capability 1025
-
RESOLVED Fix spelling of Rust 1056
-
RESOLVED Update apns.md 1058
-
RESOLVED Fix typo in Kubernetes binding docs 1060
-
RESOLVED [CONTENT] PubSub handling of CloudEvents and TTL 1061
-
RESOLVED Add a note about installing the cli to M1 macs 1064
-
RESOLVED refine code align in middleware concept 1066
-
RESOLVED update link 1068
-
RESOLVED updated rabbitmq pub/sub documentation 1069
-
RESOLVED Change NATS streaming deliverAll to deliverNew 1074
-
RESOLVED Update rabbitmq.md 1086
-
RESOLVED Update the component docs for state stores to capture all the metadata fields and have complete examples 1087
-
RESOLVED [CONTENT] Add info about
{uuid}
1095 -
RESOLVED Insert section for Dapr to App authentication 1096
-
RESOLVED MySQL State component documentation 1100
-
RESOLVED Document Content Type application/cloudevents+json 1130
Quickstarts
-
ADDED Automated validation of quickstarts 357
-
RESOLVED Error when running Python app: exec: "flask": executable file not found in $PATH 363
Samples
- RESOLVED add new sample 41
Upgrading to Dapr 1.0.0-rc.3
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.0.0-rc.3
Wait for the update to finish, ensure you are using the latest version of Dapr(1.0.0-rc.3) with:
$ dapr --version
CLI version: 1.0.0-rc.4
Runtime version: 1.0.0-rc.3
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.0.0-rc.3 -k
To upgrade with high availability mode:
dapr upgrade --runtime-version 1.0.0.-rc.3 --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.0.0-rc.3 --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
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.0.0-rc.3 --namespace dapr-system --wait
Alternatively, you can use the latest version of CLI:
dapr init --runtime-version=1.0.0-rc.3 -k
Post installation
Verify the control plane pods are running and are healthy:
$ kubectl get pods -n dapr-system
NAME READY STATUS RESTARTS AGE
dapr-dashboard-85cc6c9f7d-hzk69 1/1 Running 0 13m
dapr-operator-84985cb985-h2zdv 1/1 Running 0 13m
dapr-placement-server-0 1/1 Running 0 13m
dapr-sentry-5974c7cb6d-9bnqd 1/1 Running 0 13m
dapr-sidecar-injector-5b5bb9454-sfmmx 1/1 Running 0 13m
Breaking Changes
Component versioning
Specifying a component version is now required.
All components MUST now include the v1
version in their spec:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: mycomponent
spec:
version: v1
ETags
Two changes were made regarding ETags:
-
An Etag mismatch operation will now return an HTTP status code of
409
and a gRPC code ofAborted
. -
There is now a distinction between missing and empty etags.
An missing etag from the request is assumed as last-write-wins, while an empty etag will attempt saving the record only if it doesn't exist.
Dapr Runtime
-
RESOLVED Make required the version field on Component YAML 2260
-
FIXED Empty etag treated as no etag. 2320
-
CHANGED response handling for cross-protocol invocation. 2342
-
RESOLVED Return HTTP 409 Conflict when ETag doesn't match 2619
.NET SDK
-
RESOLVED Remove Query all statenames from IActorStateManager because it does not behave as expected 53
-
RESOLVED Prefer IDictionary<TKey, TValue> over Dictionary<TKey, TValue> in public APIs 395
-
RESOLVED TrySaveStateAsync and TryDeleteStateAsync should only handle "rejections" based on ETag, not all RPC exceptions 426
-
RESOLVED Actors HTTP handlers don't work with some common frontend server patterns 434
-
RESOLVED Have consistent API names for .NET SDK 500
-
RESOLVED Throw DaprException for dapr errors 516
-
RESOLVED Use Task instead of ValueTask 517
-
RESOLVED Reimagining service invocation for dotnet-sdk 526
-
RESOLVED Simplifying Service Invocation API surface 549
-
RESOLVED Expose Dapr API token to users as a settable value 551
-
FIXED DaprClient now implements IDisposable so that networking resources can be reclaimed deterministically. 559
Go SDK
- RESOLVED Remove unstable dependencies. 136
Java SDK
-
REFACTORED CloudEvent serialization, also adding default constructor. 385
-
FIXED missing eTag response for state APIs. 405
-
RENAMED methods and properties for consistency across SDKs. 409
-
RESOLVED Handle service invocation over HTTP only 438
-
REMOVED unused
etag
param from getState() 439 -
RENAMED InvokeServiceRequest to InvokeMethodRequest. 443
-
REMOVED dependency from OpenTelemetry SDK 453
-
FIXED order of State key-value params. 472