Skip to content

Commit 275e2e9

Browse files
committed
Exceptions are allowed to propagate upwards
1 parent 28d3d6e commit 275e2e9

File tree

4 files changed

+13
-66
lines changed

4 files changed

+13
-66
lines changed

sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/http/HttpClientHelper.java

Lines changed: 4 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@
2020
import com.openai.core.http.HttpResponse;
2121

2222
import java.io.ByteArrayOutputStream;
23-
import java.io.IOException;
24-
import java.io.UncheckedIOException;
25-
import java.time.Duration;
2623
import java.util.List;
2724
import java.util.Objects;
2825
import java.util.concurrent.CompletableFuture;
@@ -96,12 +93,7 @@ public CompletableFuture<HttpResponse> executeAsync(HttpRequest request, Request
9693
Objects.requireNonNull(request, "request");
9794
Objects.requireNonNull(requestOptions, "requestOptions");
9895

99-
final com.azure.core.http.HttpRequest azureRequest;
100-
try {
101-
azureRequest = buildAzureRequest(request);
102-
} catch (RuntimeException runtimeException) {
103-
return failedFuture(runtimeException);
104-
}
96+
final com.azure.core.http.HttpRequest azureRequest = buildAzureRequest(request);
10597

10698
Context requestContext = new Context("azure-eagerly-read-response", true);
10799
Timeout timeout = requestOptions.getTimeout();
@@ -131,11 +123,9 @@ private static com.azure.core.http.HttpRequest buildAzureRequest(HttpRequest req
131123
BinaryData bodyData = null;
132124

133125
if (requestBody != null) {
134-
try {
135-
bodyData = toBinaryData(requestBody);
136-
} finally {
137-
closeQuietly(requestBody);
138-
}
126+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
127+
requestBody.writeTo(outputStream);
128+
bodyData = BinaryData.fromBytes(outputStream.toByteArray());
139129
}
140130

141131
HttpHeaders headers = toAzureHeaders(request.headers());
@@ -170,44 +160,5 @@ private static HttpHeaders toAzureHeaders(Headers sourceHeaders) {
170160
return target;
171161
}
172162

173-
/**
174-
* Buffers the OpenAI {@link HttpRequestBody} into {@link BinaryData} so it can be attached to the Azure
175-
* request. The body is consumed exactly once and closed afterwards.
176-
*/
177-
private static BinaryData toBinaryData(HttpRequestBody requestBody) {
178-
if (requestBody == null) {
179-
return null;
180-
}
181-
182-
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
183-
requestBody.writeTo(outputStream);
184-
return BinaryData.fromBytes(outputStream.toByteArray());
185-
} catch (IOException e) {
186-
throw LOGGER.logExceptionAsError(new UncheckedIOException("Failed to buffer request body", e));
187-
}
188-
}
189-
190-
/**
191-
* Closes the OpenAI request body while suppressing any exceptions (to avoid masking the root cause).
192-
*/
193-
private static void closeQuietly(HttpRequestBody body) {
194-
if (body == null) {
195-
return;
196-
}
197-
try {
198-
body.close();
199-
} catch (Exception ignored) {
200-
// no-op
201-
}
202-
}
203-
204-
/**
205-
* Creates a failed {@link CompletableFuture} for callers that require a future even when conversion fails.
206-
*/
207-
private static <T> CompletableFuture<T> failedFuture(Throwable throwable) {
208-
CompletableFuture<T> future = new CompletableFuture<>();
209-
future.completeExceptionally(throwable);
210-
return future;
211-
}
212163
}
213164
}

sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/ClientTestBase.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,9 @@ private void addTestRecordCustomSanitizers() {
105105
}
106106

107107
private void addCustomMatchers() {
108-
interceptorManager.addMatchers(new CustomMatcher().setExcludedHeaders(
109-
Arrays.asList("Cookie",
110-
"Set-Cookie",
111-
"X-Stainless-Arch",
112-
"X-Stainless-Lang",
113-
"X-Stainless-OS",
114-
"X-Stainless-OS-Version",
115-
"X-Stainless-Package-Version",
116-
"X-Stainless-Runtime",
117-
"X-Stainless-Runtime-Version")));
108+
interceptorManager.addMatchers(new CustomMatcher().setExcludedHeaders(Arrays.asList("Cookie", "Set-Cookie",
109+
"X-Stainless-Arch", "X-Stainless-Lang", "X-Stainless-OS", "X-Stainless-OS-Version",
110+
"X-Stainless-Package-Version", "X-Stainless-Runtime", "X-Stainless-Runtime-Version")));
118111
}
119112

120113
protected void sleep(long millis) {

sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/ConversationsAsyncTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,11 @@ public void basicItemCRUDOperations(HttpClient httpClient, AgentsServiceVersion
140140
@LiveOnly
141141
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
142142
@MethodSource("com.azure.ai.agents.TestUtils#getTestParameters")
143-
public void timeoutResponse(HttpClient httpClient, AgentsServiceVersion serviceVersion) throws ExecutionException, InterruptedException {
143+
public void timeoutResponse(HttpClient httpClient, AgentsServiceVersion serviceVersion)
144+
throws ExecutionException, InterruptedException {
144145
ConversationsAsyncClient client = getConversationsAsyncClient(httpClient, serviceVersion);
145-
RequestOptions requestOptions = RequestOptions.builder().timeout(Timeout.builder().read(Duration.ofMillis(10)).build()).build();
146+
RequestOptions requestOptions
147+
= RequestOptions.builder().timeout(Timeout.builder().read(Duration.ofMillis(10)).build()).build();
146148

147149
assertThrows(Exception.class, () -> client.getConversationServiceAsync().create(requestOptions).get());
148150
}

sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/ConversationsTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ public void basicItemCRUDOperations(HttpClient httpClient, AgentsServiceVersion
126126
public void timeoutResponse(HttpClient httpClient, AgentsServiceVersion serviceVersion) {
127127
ConversationsClient client = getConversationsSyncClient(httpClient, serviceVersion);
128128

129-
RequestOptions requestOptions = RequestOptions.builder().timeout(Timeout.builder().read(Duration.ofMillis(10)).build()).build();
129+
RequestOptions requestOptions
130+
= RequestOptions.builder().timeout(Timeout.builder().read(Duration.ofMillis(10)).build()).build();
130131
assertThrows(Exception.class, () -> client.getConversationService().create(requestOptions));
131132
}
132133
}

0 commit comments

Comments
 (0)