Skip to content

Commit ab680be

Browse files
committed
refresh QWP WebSocket terminal error stack traces
1 parent be30924 commit ab680be

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

core/src/main/java/io/questdb/client/cutlass/qwp/client/QwpWebSocketSender.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,6 +1202,10 @@ private void checkNotClosed() {
12021202
private void checkConnectionError() {
12031203
LineSenderException error = connectionError.get();
12041204
if (error != null) {
1205+
// Refresh the stack so subsequent public API calls point at the
1206+
// call that observed the terminal sender state, not the I/O thread
1207+
// that originally recorded the failure.
1208+
error.fillInStackTrace();
12051209
throw error;
12061210
}
12071211
}

core/src/test/java/io/questdb/client/test/cutlass/qwp/client/QwpWebSocketSenderStateTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public void testConnectionFailureIsSenderLevelTerminalState() throws Exception {
6767
Assert.fail("Expected sender-level connection failure");
6868
} catch (LineSenderException e) {
6969
Assert.assertSame(failure, e);
70+
assertStackContains(e, "table");
7071
}
7172

7273
LineSenderException secondFailure = new LineSenderException("second failure");
@@ -77,6 +78,7 @@ public void testConnectionFailureIsSenderLevelTerminalState() throws Exception {
7778
Assert.fail("Expected original sender-level connection failure");
7879
} catch (LineSenderException e) {
7980
Assert.assertSame(failure, e);
81+
assertStackContains(e, "flush");
8082
}
8183
} finally {
8284
sender.close();
@@ -354,6 +356,16 @@ private static void invokeResetSchemaStateForNewConnection(Object target) throws
354356
method.invoke(target);
355357
}
356358

359+
private static void assertStackContains(Throwable throwable, String methodName) {
360+
for (StackTraceElement element : throwable.getStackTrace()) {
361+
if (QwpWebSocketSender.class.getName().equals(element.getClassName())
362+
&& methodName.equals(element.getMethodName())) {
363+
return;
364+
}
365+
}
366+
Assert.fail("Expected stack trace to contain QwpWebSocketSender." + methodName);
367+
}
368+
357369
private static boolean invokeRecordConnectionFailure(Object target, LineSenderException error) throws Exception {
358370
Method method = target.getClass().getDeclaredMethod("recordConnectionFailure", LineSenderException.class);
359371
method.setAccessible(true);

0 commit comments

Comments
 (0)