Skip to content

Commit b3261b1

Browse files
authoredFeb 6, 2025··
Close StatementClient when hitting client-side timeout (#136)
1 parent da87c84 commit b3261b1

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed
 

‎lib/trino/client/statement_client.rb

+2
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,15 @@ def raise_if_timeout!
233233
elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - @started_at
234234

235235
if @query_timeout && elapsed > @query_timeout
236+
close
236237
raise_timeout_error!
237238
end
238239

239240
if @plan_timeout && (@results == nil || @results.columns == nil) &&
240241
elapsed > @plan_timeout
241242
# @results is not set (even first faraday_get_with_retry isn't called yet) or
242243
# result from Trino doesn't include result schema. Query planning isn't done yet.
244+
close
243245
raise_timeout_error!
244246
end
245247
end

‎spec/statement_client_spec.rb

+18
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,21 @@
540540
client.advance
541541

542542
sleep 1
543+
543544
stub_request(:get, "localhost/v1/next_uri").
544545
with(headers: headers).
545546
to_return(body: planning_response.to_json)
547+
548+
cancel = stub_request(:delete, "localhost/v1/next_uri").
549+
with(headers: headers).
550+
to_return(status: 204) # NoContent
551+
546552
expect do
547553
client.advance
548554
end.to raise_error(Trino::Client::TrinoQueryTimeoutError, "Query queryid timed out")
555+
556+
expect(cancel).to have_been_requested
557+
expect(client.client_error?).to eq true
549558
end
550559

551560
it "raises TrinoQueryTimeoutError if timeout during initial resuming" do
@@ -602,12 +611,21 @@
602611
client.advance
603612

604613
sleep 1
614+
605615
stub_request(:get, "localhost/v1/next_uri").
606616
with(headers: headers).
607617
to_return(body: late_running_response.to_json)
618+
619+
cancel = stub_request(:delete, "localhost/v1/next_uri").
620+
with(headers: headers).
621+
to_return(status: 204) # NoContent
622+
608623
expect do
609624
client.advance
610625
end.to raise_error(Trino::Client::TrinoQueryTimeoutError, "Query queryid timed out")
626+
627+
expect(cancel).to have_been_requested
628+
expect(client.client_error?).to eq true
611629
end
612630

613631
it "doesn't raise errors if query is done" do

0 commit comments

Comments
 (0)
Please sign in to comment.