Checklist
Description
I am using the SDK to connect to an OpenFGA instance. I am using Java 21 (Liberica) and operate in a Spring Boot context.
Taken the following code:
@Bean
public OpenFgaClient openFgaClient(
final ClientConfiguration clientConfiguration, final ObjectMapper objectMapper) {
try {
// FIXME report to ofga project
final var httpBuilder = HttpClient.newBuilder().version(HTTP_1_1);
final var apiClient = new ApiClient(httpBuilder, objectMapper);
final var client = new OpenFgaClient(clientConfiguration, apiClient);
log.info("OpenFGA client: {}", client);
return client;
} catch (final FgaInvalidParameterException cause) {
throw new BeanCreationException("Failed to create OpenFgaClient", cause);
}
}
everything works. The thing that made it working for me was setting the underlying HttpClients protocol to HTTP_1_1.
if you replace final var client = new OpenFgaClient(clientConfiguration, apiClient); with final var client = new OpenFgaClient(clientConfiguration); - using the default ApiClient and then do whatever call to OpenFGA the connection will not get established. Instead the SDK blocks the call unlimited until the server cancels the call by timeout.
This is due to to an unrestricted call of the CompletableFuture in the function exchangeToken():
https://github.com/openfga/java-sdk/blob/main/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java#L1165
Expectation
Not sure actually. Just wanted to bring that to the table. Maybe HTTP_1_1 should be set as default, as you can find a lot of issues regarding HTTP/2 and Java in the wild.
At least the call should not block indefinitely but rather use the configured timeouts.
Reproduction
GIVEN
you use the Java SDK
TO
connect to a OpenFGA instance
USING
the default ApiClient without customisation of the HTTP protocol
EXPECT
the SDK to block until the server terminated the connection
OpenFGA SDK version
0.7.1
OpenFGA version
v1.8.0
SDK Configuration
Via Java SDK, see provided code snippets
Logs
There are no logs. The client just blocks until the server closes the connection after the server side timeout.
References
None.
Checklist
Description
I am using the SDK to connect to an OpenFGA instance. I am using Java 21 (Liberica) and operate in a Spring Boot context.
Taken the following code:
everything works. The thing that made it working for me was setting the underlying HttpClients protocol to
HTTP_1_1.if you replace
final var client = new OpenFgaClient(clientConfiguration, apiClient);withfinal var client = new OpenFgaClient(clientConfiguration);- using the defaultApiClientand then do whatever call to OpenFGA the connection will not get established. Instead the SDK blocks the call unlimited until the server cancels the call by timeout.This is due to to an unrestricted call of the
CompletableFuturein the functionexchangeToken():https://github.com/openfga/java-sdk/blob/main/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java#L1165
Expectation
Not sure actually. Just wanted to bring that to the table. Maybe HTTP_1_1 should be set as default, as you can find a lot of issues regarding HTTP/2 and Java in the wild.
At least the call should not block indefinitely but rather use the configured timeouts.
Reproduction
OpenFGA SDK version
0.7.1
OpenFGA version
v1.8.0
SDK Configuration
Via Java SDK, see provided code snippets
Logs
There are no logs. The client just blocks until the server closes the connection after the server side timeout.
References
None.