
# Dapr 1.1.0

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

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

**Highlights**

* New preview feature for sidecar injection in Kubernetes Job with new `shutdown` API to stop sidecar from app [2689](https://github.com/dapr/dapr/issues/2689)
* Defining Dapr sidecar environment variables [2508](https://github.com/dapr/dapr/issues/2508)
* Etag is required for actors in future added state stores [2890](https://github.com/dapr/dapr/issues/2890)
* Dapr API Token is not included in telemetry traces anymore [2974](https://github.com/dapr/dapr/issues/2974)
* Local Storage Binding [752](https://github.com/dapr/components-contrib/issues/752)
* Added conformance tests for various pubsub components (Pulsar, MQTT, Hazelcast, RabbitMQ)
* .NET Apps can now have unit tests for Actor Timers and Reminder functionality [575](https://github.com/dapr/dotnet-sdk/issues/575)
* .NET SDK support for hierarchical nesting configuration [615](https://github.com/dapr/dotnet-sdk/issues/615)

If you're new to Dapr, visit the [getting started](https://docs.dapr.io/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](https://docs.dapr.io/concepts/) and the [Developing applications](https://docs.dapr.io/developing-applications/).

See [this](#upgrading-to-dapr-1.1.0) section on upgrading Dapr to version 1.1.0.

## Acknowledgements

Thanks to everyone who made this release possible!

@1046102779, @Betula-L, @Hugome, @PeterGerrard, @SamuelMcAravey, @Taction, @artursouza, @dinggh, @halspang, @hnlq715, @jigargandhi, @ksivamuthu, @liamgib, @luckyxiaoqiang, @lynn-orrell, @moonchanyong, @mukundansundar, @orizohar, @pkedy, @puzpuzpuz, @rynowak, @springe2004, @tcnghia, @trondhindenes, @wcs1only, @withinboredom, @yaron2

## New in this release

### Dapr Runtime

- **FIXED** Bug in runtime. [2348](https://github.com/dapr/dapr/issues/2348)
- **RESOLVED** feat: Allow for defining env-vars for sidecar [2508](https://github.com/dapr/dapr/issues/2508)
- **ADDED** Support response propagation for input bindings [2628](https://github.com/dapr/dapr/issues/2628)
- **RESOLVED** Prevent helm install from clashing with an existing `role-tokenreview-binding` (used by Vault) cluster role binding [2651](https://github.com/dapr/dapr/issues/2651)
- **RESOLVED** Daprd failed to start metric server due to address already in use even though configuration metric disabled. [2677](https://github.com/dapr/dapr/issues/2677)
- **ADDED** Dapr sidecar support for K8s Cronjob. [2689](https://github.com/dapr/dapr/issues/2689)
- **ADDED** list of Dapr components before loading them [2723](https://github.com/dapr/dapr/issues/2723)
- **RESOLVED** TraceId is not propagated when using dapr grpc client's InvokeMethodAsync method [2749](https://github.com/dapr/dapr/issues/2749)
- **RESOLVED** Avoid push of Helm chart when chart version wasn't updated [2750](https://github.com/dapr/dapr/pull/2750)
- **RESOLVED** hotfix(fswatcher): repair fswatcher fmask &error [2777](https://github.com/dapr/dapr/pull/2777)
- **RESOLVED** feat(logger): fix typo [2778](https://github.com/dapr/dapr/pull/2778)
- **RESOLVED** support(scopes): increase resource definition fault tolerance [2779](https://github.com/dapr/dapr/pull/2779)
- **RESOLVED** optimize(healthz): continuously check failed and return failure state [2781](https://github.com/dapr/dapr/pull/2781)
- **RESOLVED** Upgrade to Go 1.16 [2819](https://github.com/dapr/dapr/pull/2819)
- **RESOLVED** optimize(components): use IsInitialVersion method [2832](https://github.com/dapr/dapr/pull/2832)
- **RESOLVED** confirms that state key does not contain "||" [2835](https://github.com/dapr/dapr/pull/2835)
- **RESOLVED** optimize(http): reduce repetitive secretstore codes  [2841](https://github.com/dapr/dapr/pull/2841)
- **FIXED** Runtime will no longer override X-Forwarded Headers if they already exist [2846](https://github.com/dapr/dapr/issues/2846)
- **RESOLVED** fixme(fasthttp/router): upgrade fasthttp router to solve '/' [2863](https://github.com/dapr/dapr/pull/2863)
- **RESOLVED** Fail actors state stores if etag is not supported [2890](https://github.com/dapr/dapr/issues/2890)
- **RESOLVED** Fix spelling of separator [2913](https://github.com/dapr/dapr/pull/2913)
- **RESOLVED** Fix read/write map race in grpc.Manager [2915](https://github.com/dapr/dapr/pull/2915)
- **RESOLVED** Fix typos in comments [2928](https://github.com/dapr/dapr/pull/2928)
- **FIXED** Race condition of reading and writing components in runtime. [2932](https://github.com/dapr/dapr/issues/2932)
- **RESOLVED** Use filepath package to do file path operations [2936](https://github.com/dapr/dapr/issues/2936)
- **FIXED** Component update without checking namespace and scope by operator [2937](https://github.com/dapr/dapr/issues/2937)
- **RESOLVED** Fix typos related to placement [2959](https://github.com/dapr/dapr/pull/2959)
- **RESOLVED** Changed sidecar injector pull policy to IfNotPresent [2965](https://github.com/dapr/dapr/pull/2965)
- **RESOLVED** Dapr API Token should not be included in telemetry traces [2974](https://github.com/dapr/dapr/issues/2974)

### Dapr CLI

- **ADDED** JSON logging option [515](https://github.com/dapr/cli/issues/515)
- **ADDED** `--wait` flag for `init` and `upgrade` commands [597](https://github.com/dapr/cli/issues/597)
- **RESOLVED** status check panic on pending containers [609](https://github.com/dapr/cli/issues/609)
- **RESOLVED** CRD gone after running `dapr upgrade` [622](https://github.com/dapr/cli/issues/622)
- **FIXED** CLI returns non-zero for dapr stop command in Windows [631](https://github.com/dapr/cli/issues/631)

### Components

- **ADDED** blob deletion support in Azure Blob Storage binding [681](https://github.com/dapr/components-contrib/issues/681)
- **RESOLVED** Avoid using github.com/satori/go.uuid [703](https://github.com/dapr/components-contrib/issues/703)
- **ADDED** message redelivery and improved concurrency settings for Redis PubSub [710](https://github.com/dapr/components-contrib/issues/710)
- **ADDED** Retries to handle MQTT message error and acknowledge processed messages [720](https://github.com/dapr/components-contrib/issues/720)
- **ADDED** Retries to handle Hazelcast message errors [723](https://github.com/dapr/components-contrib/issues/723)
- **ADDED** `eTag` support for MongoDB state store [726](https://github.com/dapr/components-contrib/issues/726)
- **RESOLVED** GetResponse does not return nil eTag in state store [731](https://github.com/dapr/components-contrib/issues/731)
- **RESOLVED** Storing `byte[]` value in CosmoDB state component [745](https://github.com/dapr/components-contrib/issues/745)
- **ADDED** AWS SSM Parameter store component as secret store [746](https://github.com/dapr/components-contrib/issues/746)
- **RESOLVED** Local Storage Binding [752](https://github.com/dapr/components-contrib/issues/752)
- **RESOLVED** refactor GCP pubsub [760](https://github.com/dapr/components-contrib/pull/760)
- **RESOLVED** fix pubsub redis close bug [769](https://github.com/dapr/components-contrib/pull/769)

### .NET SDK

- **RESOLVED** Added documentation for docker-compose, Tye and other local development options [534](https://github.com/dapr/dotnet-sdk/issues/534)
- **RESOLVED** Updated actor docs [546](https://github.com/dapr/dotnet-sdk/issues/546)
- **RESOLVED** Make it possible to unit test Actor Timers and Reminder functionality [575](https://github.com/dapr/dotnet-sdk/issues/575)
- **FIXED** handling of non-JSON content in data field for CloudEvents [592](https://github.com/dapr/dotnet-sdk/issues/592)
- **RESOLVED** Add documentation for dependency injection in actors [612](https://github.com/dapr/dotnet-sdk/issues/612)
- **ADDED** support for hierarchical nesting configuration [615](https://github.com/dapr/dotnet-sdk/issues/615)
- **ADDED** support for configuring key delimiters for nesting configuration  [627](https://github.com/dapr/dotnet-sdk/issues/627)

### Python SDK

- **ADDED** Add DAPR_HTTP_TIMEOUT_SECONDS configuration option. [162](https://github.com/dapr/python-sdk/issues/162)
- **ADDED** Shutdown support for python-sdk [210](https://github.com/dapr/python-sdk/issues/210)

### Go SDK

- **RESOLVED** fix go-sdk example doc [144](https://github.com/dapr/go-sdk/pull/144)
- **RESOLVED** Update pub.go [145](https://github.com/dapr/go-sdk/pull/145)
- **RESOLVED** doc: fix typo [148](https://github.com/dapr/go-sdk/pull/148)
- **RESOLVED** feat: add shutdown [151](https://github.com/dapr/go-sdk/pull/151)

### Quickstarts

- **RESOLVED** Broken Link for .net SDK quick start examples [389](https://github.com/dapr/quickstarts/issues/389)
- **RESOLVED** Update quickstarts to reflect dapr init --namespace option [393](https://github.com/dapr/quickstarts/issues/393)
- **RESOLVED** Autovalidate external URLs [394](https://github.com/dapr/quickstarts/issues/394)
- **RESOLVED** Multiple race conditions when deploying quickstarts to Kubernetes [398](https://github.com/dapr/quickstarts/issues/398)
- **RESOLVED** Pub/Sub quickstart links lead to Chinese pages [410](https://github.com/dapr/quickstarts/issues/410)

## Upgrading to Dapr 1.1.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 releases like this, download the latest and greatest release from [here](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH. Alternatively, follow [these](https://docs.dapr.io/getting-started/install-dapr-cli/) instructions to get the latest CLI.

Once you have installed the CLI, run:

```bash
dapr init --runtime-version=1.1.0
```

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

```bash
$ dapr --version

CLI version: 1.1.0
Runtime version: 1.1.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 CLI release from [here](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH.
Alternatively, follow [these](https://docs.dapr.io/getting-started/install-dapr-cli/) instructions to get the latest CLI.

To upgrade Dapr, run:

```
dapr upgrade --runtime-version 1.1.0 -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*

##### Troubleshooting upgrade using the CLI

There is a known issue running upgrades on clusters that may have previously had a version prior to 1.0.0-rc.2 installed on a cluster.

Most users should not encounter this issue, but there are a few upgrade path edge cases that may leave an incompatible CustomResourceDefinition installed on your cluster. The error message for this case looks like this:

```
❌  Failed to upgrade Dapr: Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
The CustomResourceDefinition "configurations.dapr.io" is invalid: spec.preserveUnknownFields: Invalid value: true: must be false in order to use defaults in the schema

```

To resolve this issue please run the follow command to upgrade the CustomResourceDefinition to a compatible version:

```
kubectl replace -f https://raw.githubusercontent.com/dapr/dapr/5a15b3e0f093d2d0938b12f144c7047474a290fe/charts/dapr/crds/configuration.yaml
```

Then proceed with the `dapr upgrade --runtime-version 1.1.0 -k` command as above.

##### 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.1.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

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

Alternatively, you can use the latest version of CLI:

```
dapr init --runtime-version=1.1.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.6.0    15s  2021-03-31 13:07.39
  dapr-sidecar-injector  dapr-system  True     Running  1         1.1.0   15s  2021-03-31 13:07.39
  dapr-sentry            dapr-system  True     Running  1         1.1.0   15s  2021-03-31 13:07.39
  dapr-operator          dapr-system  True     Running  1         1.1.0   15s  2021-03-31 13:07.39
  dapr-placement         dapr-system  True     Running  1         1.1.0   15s  2021-03-31 13:07.39
```

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