-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] Netty HTTP Server exception for There is a blocking call in the CosmosClientAsync #40051
Comments
Thanks for the feedback! We are routing this to the appropriate team for follow-up. cc @kushagraThapar @pjohari-ms @TheovanKraay. |
thanks @alejojarahi for creating this issue, looks like a genuine problem in case of async client creation. @alzimmermsft I am curious, if this is the same case in azure-core as well and have we solved it? I would like to keep the solutions consistent if possible. Referencing the PR where we added this, will be good to re-iterate our approach to warming up http clients in case of async clients. |
IMO, we should remove the blocking warmup of the http client. |
azure-core-http-netty doesn't perform a warmup of the Netty HttpClient |
thanks @alzimmermsft for the confirmation. azure-cosmos client or any other client if needs to warmup, they will need to call certain APIs that will allow the client to warmup. Ideally, you would want to have a warmed-up client and then only enable the traffic on it (through nio threads or whatever). You would want to warmup the client on the main thread before opening it up for traffic. If your ask is to make this configurable, we can think about doing so. |
Hi @kushagraThapar. Thanks for the reply. This error also occurs in the scenario that CosmosAsyncClient is instantiated only onces. Example in Springboot 3 import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosClientBuilder;
import reactor.core.publisher.Flux;
public class UserRepository {
private static final String DATABASE_NAME = "test";
CosmosAsyncClient cosmosAsyncClient = null;
public CosmosAsyncClient getInstance() {
if(cosmosAsyncClient == null) {
cosmosAsyncClient = new CosmosClientBuilder()
.endpoint("ENDPOINT")
.key("KEY")
.buildAsyncClient();
}
return cosmosAsyncClient;
}
public Flux<User> getAll() {
return getInstance().getDatabase(DATABASE_NAME)
.getContainer("users")
.queryItems("SELECT * FROM users", User.class);
}
}
If the reactive client is subject to only being able to start by on the main thread, this can limit or affect the architecture of a project. For example this use case https://stackoverflow.com/questions/73412719/create-recreate-azure-cosmosdb-async-client-from-java-reactor-context. If the team does not consider it a bug, it should be a configurable functionality |
@alejojarahi the stack overflow code snippet you mentioned is also not a valid use case of the cosmos client, because the customer is trying to create a new cosmos client every time they need to rotate their keys.
Instead they should use a key rotation pattern like some form of Creating clients randomly and during the execution of the application is never the right approach, as client creation is considered a heavy operation, specially in case of Cosmos SDK where it needs to get Database account, metadata, fill the caches, create TCP / HTTP connections, etc. when the client boots up. |
Describe the bug
They do a dynamic lookup on the warmup function in the the Netty HttpClient and then invokes this. They do this by blocking.
In the cosmos library this warmup call does not seem to be configurable.
Exception or Stack Trace
To Reproduce
Code Snippet
In Springboot or Micronaut Controller
In Micronaut Framework there is a setting that also leads to the same problem https://github.com/micronaut-projects/micronaut-azure/blob/5.5.x/azure-cosmos/src/main/java/io/micronaut/azure/cosmos/client/CosmosClientFactory.java
Expected behavior
The connection to the database is created and the query can be executed without any exception or thread blocking
Setup (please complete the following information):
Additional context
On stackoverflow they expand a little more on the same error that is presented in actual version https://stackoverflow.com/questions/73412719/create-recreate-azure-cosmosdb-async-client-from-java-reactor-context
Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report
The text was updated successfully, but these errors were encountered: