
# Dapr 0.7.0

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

With this release we focused on improvements to tracing and service invocation. This release also expands Dapr functionality with addition components. Continuing with the theme of improved stability, we also added a performance test for service invocation, fixed bugs, and added features to our long haul tests infrastructure.

There are also updated to the CLI with new commands and a lot of docs updates.

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

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 [Deploying applications](https://docs.dapr.io/developing-applications/).

> **Note: This release contains a few [breaking changes](#breaking-changes).**

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

## New in this release

### Dapr Runtime

**Fixed** Trace options defaults

**Fixed** gRPC load balancing not working on Kubernetes

**Updated** HTTP router to `fasthttp/router` - ~4% throughput increase

**Updated** Service invocation APIs and implementation with new spec

**Updated** Tracing headers for new service invocation spec changes

**Updated** Tracing scopes for internal and external gRPC servers (Thanks @jjcollinge)

**Fixed** Actor drain variable spelling errors (Thanks @ksashikumar)

**Fixed** Metadata API inconsistency

**Added** Context propagation

**Updated** Tracing headers to fit industry standards

**Fixed** Distributed tracing call map formation

**Added** gRPC API versioning

**Updated** Tracing spec configuration

**Moved** To using versioned Docker image tags instead of `:latest`

**Added** Sampling rate for tracing configuration

### Components

**Added** Azure Event Grid input/output binding (Thanks @lynn-orrell)

**Added** Twitter output binding

**Added** Sendgrid output binding (Thanks @benc-uk)

**Added** Message time to live in RabbitMQ, Azure Service Bus/Storage Queue bindings (Thanks @fbeltrao)

**Added** Support for nested partition keys in CosmosDB (Thanks @ksivamuthu)

**Fixed** string escape for Azure Blob Storage (Thanks @benc-uk)

**Added** TLS support for Redis binding

**Added** Per call partition key support for Kafka binding


### CLI

**Added** `dapr status` command for validating Kubernetes control plane health and status

**Updated** `dapr init` to only pull a new binary if needed (Thanks @abhirockzz)

**Added** Homebrew package for MacOS

**Added**  `--runtime-verion` flag support for `dapr init --kubernetes`


### System service components

**Fixed** Operator not creating k8s services if a deployment is patched

**Updated** Sidecar injector to add configurable resource requests and limits on sidecar container

**Updated** Sidecar injector to support configurable readiness probes


### .NET  SDK

**Added** Actor proxy method with parameterized interface (Thanks @jpiquot)

**Updated** Protobuf clients


### Java SDK

**Updated** Protobuf clients

**Fixed** Actor API always returning true on Contain State API call


### Docs

**Added** TTL information for RabbitMQ/Azure Service Bus bindings (Thanks @fbeltrao)

**Added** Added namespace metadata to deployments

**Added** All Dapr sidecar annotations for Kubernetes

**Added** Service invocation V1 spec

**Updated** Kafka binding for partition key

**Added** How To for Azure Event Hubs Pub/Sub

**Added** How To for Kafka Pub/Sub

**Updated** How To tutorial for Azure Application Insights

**Updated** Redis binding with TLS configuration

**Added** How To tutorial for using Pub Sub across different namespaces

**Added** Sendgrid binding spec

**Added** Readiness configuration for Kubernetes

**Improved** application insights distributed tracing onboarding guide by uploading localfowarder docker image to [dapr official dockerhub](https://hub.docker.com/r/daprio/dapr-localforwarder)


## Tests

**Added** Performance test for service invocation

**Added** Performance test configuration and test app using Fortio

**Improved** Coverage for service invocation

**Added** Message analyzer delay monitor for Long Haul

**Fixed** Containers not updating if config YAML doesn't change

**Improved** Long haul tests validation and monitoring

**Added** Long haul test snapshot monitor

**Added** Long haul test hashtag counter delay monitor

**Added** Long haul test Generic error spike monitor

**Added** Long haul test feed stream generator

**Added** Hashtag snapshot service


## Upgrading to Dapr 0.7.0

If you're upgrading from an older version of Dapr to 0.7.0, 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:

```bash
dapr uninstall --all
```

Next, get the latest CLI following [these](https://github.com/dapr/cli#installing-dapr-cli) instructions, or alternatively download the latest and greatest release from [here](https://github.com/dapr/cli/releases) and put the `dapr` binary in your PATH.

Once you have downloaded the CLI, run:

```bash
dapr init
```

Wait for the update to finish, and you're good to go!
Make sure you have the right runtime version (0.7.0) with:

```bash
dapr --version
```

### Kubernetes

Download the latest CLI release as outlined above in the `Local Machine / Self-hosted` section.

If you previously installed Dapr on your Kubernetes cluster using the Dapr CLI, run:

```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
```

```bash
helm repo update
```

Wait until Dapr is uninstalled, and make sure the `dapr-system` namespace is gone.

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 [these](https://docs.dapr.io/getting-started/install-dapr/#install-with-helm-advanced) instructions on how to install Dapr using __Helm 3__.

Alternatively, if you want to install Dapr in a dev/test setup, run:

```
dapr init --kubernetes
```

#### Post installation

After Dapr 0.7.0 has been installed, perform a rolling restart for your deployments.

## Breaking Changes

### gRPC Service Invocation

#### gRPC Protobuf update

-   Package name in Dapr gRPC protobuf files has been changed to :
    -   renamed to  `dapr to` dapr.proto.dapr.v1`
    -   renamed to  `daprclient`  -  `dapr.proto.daprclient.v1`
    -   moved the common protobuf message related to service invocation to  `dapr.proto.common.v1`  package

#### gRPC Service invocation

-   If you're a Java SDK or dotnet SDK user, you must upgrade your SDK to the latest version.
-   If you're a JS/Python/CPP/Rust SDK user, you must upgrade your SDK to the latest version first and update your code by referring to each sdk's examples.
    -   [javascript example](https://github.com/dapr/js-sdk/blob/master/examples/simple/app.js)
    -   [python example](https://github.com/dapr/python-sdk/tree/master/examples/invoke-simple)
    -   [cpp-sdk example](https://github.com/dapr/cpp-sdk/tree/master/examples/echo_app)
    -   [rust-sdk example](https://github.com/dapr/rust-sdk/tree/master/examples)
-   If HTTP callee app returns non-OK status code to caller app using gRPC API, caller app's gRPC client will throw the exception in 0.7.0 release. The caller app needs to handle the exception properly.

### Tracing configuration

With the 0.7.0 release, Dapr trace configuration is simplified. Users now provide a "samplingRate" value to enable or disable the traces. Set "samplingRate: "0" to disable the traces. Set "samplingRate: "1" to generate traces on every operation. Refer https://docs.dapr.io/operations/troubleshooting/setup-tracing/ for more details.
