t8y2/dbx · error
query session not found
Error message
query session not found
What it means
fetchQueryPage looks up the paged-query state by sessionID in server.querySessions; if no entry exists it returns this error. The session either never existed, was already consumed/cancelled, or was removed by expireIdleQuerySessions after the idle timeout. The library cannot continue fetching results for an unknown session.
Source
Thrown at agents/drivers/argo-go/query.go:184
HasMore: false,
}, nil
}
return queryPageResult{
Columns: columns,
ColumnTypes: columnTypes,
Rows: page,
ExecutionTimeMS: time.Since(started).Milliseconds(),
Truncated: false,
SessionID: &sessionID,
HasMore: true,
}, nil
}
func (server *server) fetchQueryPage(sessionID string, requestedPageSize int) (queryPageResult, error) {
server.expireIdleQuerySessions(time.Now())
state := server.querySessions[sessionID]
if state == nil {
return queryPageResult{}, errors.New("query session not found")
}
pageSize := requestedPageSize
if pageSize <= 0 {
pageSize = defaultPageSize
}
ctx := context.Background()
server.setActiveOperation(state.cancel)
page, hasMore, truncated, err := server.readQuerySessionPage(ctx, state, pageSize)
server.activeMu.Lock()
server.activeCancel = nil
server.activeMu.Unlock()
if err != nil {
server.closeQuerySession(sessionID)
return queryPageResult{}, err
}
var resultSessionID *string
if hasMore {
resultSessionID = &sessionIDView on GitHub (pinned to c0390bff16)
Solutions
- Re-execute the original SQL to obtain a fresh session ID instead of reusing the old one
- Complete all page fetches within the idle-session window; increase the idle timeout if paging is slow
- Track the session ID lifecycle in your code and clear it once the result set is exhausted or cancelled
- Check logs for session expiry/cancellation between execute and fetch
Example fix
// before
page, err := fetchQueryPage(ctx, staleSessionID, 1000)
// after
page, err := fetchQueryPage(ctx, sessionID, 1000)
if err != nil && strings.Contains(err.Error(), "query session not found") {
sessionID, page, err = restartQuery(ctx, sqlText) // re-run to get a new session
} Defensive patterns
Strategy: try-catch
Validate before calling
// no pre-call check possible; track session lifecycle yourself
if sessionID == "" || sessionConsumed[sessionID] {
return errors.New("cannot fetch: session already finished")
} Try / catch
page, err := fetchQueryPage(ctx, sessionID, size)
if err != nil && strings.Contains(err.Error(), "query session not found") {
sessionID, page, err = restartQuery(ctx, sqlText) // re-execute to get a new session
} Prevention
- Drain or cancel sessions within the idle TTL window
- Clear stored session IDs once results are exhausted
- Re-execute the statement on stale-session errors instead of retrying the fetch
- Increase idle timeout for slow paging workloads
When it happens
Trigger: Calling fetchQueryPage (the fetch-next-page path) with a sessionID that was never returned by executeQueryPage; fetching again after the final page was consumed; fetching after idle expiry removed the session; fetching after a cancel quarantined the session.
Common situations: Long-running paging loops that pause longer than the idle session TTL; reusing a stale session ID stored across requests in a web service; retrying a fetch after a network error without re-executing the statement; a second consumer replaying an already-drained session ID.
Related errors
- query session not found
- Hive host is required
- Hive connection string must start with jdbc:hive2:// or hive
- Hive endpoint is empty
- Hive JWT authentication requires jwt or the JWT environment
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/fa9cadcb15ced18e.
Report an issue: GitHub.