t8y2/dbx · error
query session not found
Error message
query session not found
What it means
fetchQueryPage() looks up the paged-query session by sessionID in server.querySessions after expiring idle sessions. If no state exists for the ID — because it never existed, already completed, or was expired/evicted — this error is returned. Sessions are server-side and finite-lived.
Source
Thrown at agents/drivers/hive-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-run the original query with executeQueryPage to create a fresh session, then continue paging from the new sessionID.
- Fetch subsequent pages promptly, within the idle-session TTL, to avoid expiry.
- Use sticky routing / a single driver instance so page fetches hit the same server that started the query.
- Handle this error by transparently restarting the query rather than surfacing it to end users.
Example fix
// before
page, err := fetchQueryPage(oldSessionID, 100) // may be expired
// after
page, err := fetchQueryPage(sessionID, 100)
if err != nil && err.Error() == "query session not found" {
page, err = executeQueryPage(originalSQL, 100) // restart query
} Defensive patterns
Strategy: retry
Validate before calling
// Go — check you hold a live sessionID from executeQueryPage before fetching
if sessionID == "" { return errors.New("no active query session") } Try / catch
page, err := srv.FetchPage(sessionID, pageSize)
if err != nil && strings.Contains(err.Error(), "query session not found") {
// restart the query transparently
page, err = srv.DispatchPaged(queryOptions{SQL: originalSQL}, pageSize)
} Prevention
- Fetch pages promptly, within the idle-session TTL.
- Use sticky routing so page fetches reach the same server instance.
- Keep the original SQL available to restart the query on session loss.
- Treat this error as recoverable: re-issue the query rather than failing the user request.
When it happens
Trigger: Calling fetchQueryPage with a sessionID that was never created (executeQueryPage not called first), a typo'd or stale ID, or an ID whose session expired via expireIdleQuerySessions after the idle timeout.
Common situations: Client retries fetching the next page long after the idle TTL elapsed; server restarted, losing in-memory querySessions while the client kept its cursor; load-balanced deployments routing page requests to a different server instance than the one holding the session.
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/3369991ad95042e4.
Report an issue: GitHub.