Recommendation for planned deprecation of `DaprClientHttp`
- Lenguaje dominante
- Java
- Estrellas
- 300
- Forks
- 230
- Merge medio
- 5 d 1 h
- PR fusionados (30 d)
- 5
Descripción
Given a DaprClient created like this...
```java
try (DaprClient client = (new DaprClientBuilder()).build()) {
...
}
```
...will result in a `DaprClientGrpc` by default.
When using `waitForSidecar` method, this exhibits the same behaviour as calling `v1.0/healthz` -- as this endpoint won't return success until both the components are initialised and the app channel is established.
---
We discovered this because in our Java app we are trying to read secrets from the secret component as part of the app initialisation, therefore before the app channel becomes available.
**The impact was the app dead locked with the sidecar.** Eventually `waitForSidecar` timeout elapsed, and the App crashed as it wasn't able to read the secrets that were depended later on.
---
I did some digging in the Java SDK code, and found that I could force the `DaprClientBuilder` to return a `DaprClientHttp` by doing the following.
```java
System.getProperties().setProperty(Properties.API_PROTOCOL.getName(), DaprApiProtocol.HTTP.name());
try (DaprClient client = (new DaprClientBuilder()).build()) {
...
}
```
In this case, when using `waitForSidecar` method, this exhibits the same behaviour as calling `v1.0/healthz/outbound` -- this endpoint returns successfully when the components are established, **but the app channel is not yet established.** which is exactly what we needed.
The impact was that we could successfully read secrets during the init phase of our Java App, without causing a Deadlock.
Unfortunately, now this means our code depends on a deprecated capability (`DaprClientHttp`), which is planned to be removed in the next version of the Java SDK, 1.10
---
My ask is that the following changes are made **before** `DaprClientHttp` is removed from the SDK.
- Migrate `waitForSidecar` in `DaprClientGrpc` to use `v1.0/healthz/outbound`
- This would then allow this issue to be closed without fix https://github.com/dapr/java-sdk/issues/897
- Introduce a new method called `healthCheck`, which has the same behaviour as calling `v1.0/healthz`
This will allow a migration path for us, and also bring [parity with the dotnet SDK](https://github.com/dapr/dotnet-sdk/blob/17f849b17505b9a61be1e7bd3e69586718b9fdd3/src/Dapr.Client/DaprClientGrpc.cs#L1742-L1785)
Guía de contribución
Línea de trabajo
Empieza leyendo waitForSidecar en DaprClientGrpc y compara su comportamiento con DaprClientHttp y la implementación de .NET referenciada. Confirma la distinción entre v1.0/healthz y v1.0/healthz/outbound, luego define la healthCheck API y verifica que waitForSidecar admita la lectura de secretos antes de que se establezca el canal de la aplicación; el issue 897 está relacionado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- api
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100