Skip to content

Commit b826007

Browse files
piotrrzyskofindepi
authored andcommitted
Fix testDirectTrinoClientLongQuery
Record heartbeats more frequently to prevent query timeouts during large result sets or when the query state changes more often than the heartbeat interval.
1 parent b0738cb commit b826007

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

core/trino-main/src/main/java/io/trino/client/direct/DirectTrinoClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ public DispatchQuery execute(SessionContext sessionContext, @Language("SQL") Str
110110
!(dispatchQuery.getState() == FINISHING && dispatchQuery.getFullQueryInfo().getStages().isEmpty());
111111
state = queryManager.getQueryState(queryId)) {
112112
for (Slice serializedPage = exchangeClient.pollPage(); serializedPage != null; serializedPage = exchangeClient.pollPage()) {
113+
// record heartbeat for each page to avoid query timeout during large result sets
114+
dispatchQuery.recordHeartbeat();
113115
Page page = pageDeserializer.deserialize(serializedPage);
114116
queryResultsListener.consumeOutputPage(page);
115117
}
@@ -146,6 +148,8 @@ private void getQueryFutureWithHeartbeats(ListenableFuture<Object> anyCompleteFu
146148
while (!anyCompleteFuture.isDone()) {
147149
try {
148150
anyCompleteFuture.get(heartBeatIntervalMillis, TimeUnit.MILLISECONDS);
151+
// some time elapsed, so record a heartbeat
152+
dispatchQuery.recordHeartbeat();
149153
}
150154
catch (TimeoutException e) {
151155
// continue waiting until the query state changes or the exchange client is blocked.

0 commit comments

Comments
 (0)