t8y2/dbx · error
query session not found: %s
Error message
query session not found: %s
What it means
The driver paginates query results by keeping per-query session state in a map keyed by a query id. fetchQueryPage looks up s.querySessions[id]; if the id is unknown (or the session was already consumed/expired) it returns this error instead of a page of rows.
Source
Thrown at agents/drivers/cassandra-go/query.go:107
return result, nil
}
s.nextSessionID++
id := fmt.Sprintf("cassandra-query-%d", s.nextSessionID)
s.querySessions[id] = &querySession{
sql: trimStatementSQL(options.SQL),
keyspace: s.keyspaceForOptions(options),
pageState: append([]byte(nil), nextState...),
remaining: remaining,
}
result.SessionID = &id
result.HasMore = true
return result, nil
}
func (s *server) fetchQueryPage(id string, pageSize int) (queryPageResult, error) {
state := s.querySessions[id]
if state == nil {
return queryPageResult{}, fmt.Errorf("query session not found: %s", id)
}
if pageSize <= 0 {
pageSize = defaultPageSize
}
result, nextState, err := s.fetchCQLPage(state.sql, state.keyspace, state.pageState, pageSize, state.remaining, 0)
if err != nil {
return queryPageResult{}, err
}
state.remaining -= len(result.Rows)
if len(nextState) == 0 || state.remaining <= 0 {
delete(s.querySessions, id)
result.HasMore = false
result.Truncated = len(nextState) > 0 && state.remaining <= 0
return result, nil
}
state.pageState = append(state.pageState[:0], nextState...)
result.SessionID = &id
result.HasMore = trueView on GitHub (pinned to c0390bff16)
Solutions
- Re-execute the original query to obtain a fresh query id, then paginate the new session
- Stop fetching once the page state indicates the result set is complete — do not reuse the final id
- Check that the same driver/server process that issued the query also serves the page fetch (state is in-memory)
- Handle the error by restarting pagination from the first page instead of surfacing it to end users
Example fix
// before page, err := srv.FetchQueryPage(ctx, staleSessionID, 100) // error: query session not found // after result, err := srv.ExecuteQuery(ctx, originalSQL) // re-run to get a new session id page, err := srv.FetchQueryPage(ctx, result.SessionID, 100)
Defensive patterns
Strategy: try-catch
Validate before calling
func validSession(id string) bool { return id != "" && sessionsActive[id] } // track ids issued and not yet drained Try / catch
page, err := srv.FetchQueryPage(ctx, sessionID, size)
if err != nil {
if strings.Contains(err.Error(), "query session not found") {
// restart pagination with a fresh query
result, err := srv.ExecuteQuery(ctx, sql)
if err != nil { return err }
page, err = srv.FetchQueryPage(ctx, result.SessionID, size)
}
if err != nil { return err }
} Prevention
- Never reuse a query id after the final page (state is deleted once drained)
- Re-execute the query after a server/driver restart instead of continuing pagination
- Always take session ids from the response object of the same driver instance
- Set page-state-aware pagination loops that stop on empty page state
When it happens
Trigger: Calling FetchQueryPage (or the next-page API) with a query id that was never returned, or reusing an id after the result set was fully consumed; server restart wiping in-memory querySessions; passing an id from a different driver instance.
Common situations: Client retry logic re-sending an already-drained page request; driver/server process restarted between page fetches; long-running result sets whose session state was evicted; copying session ids between connections.
Related errors
- TDengine query session not found: {session_id}
- query session not found
- Cassandra connection runtime is closed
- query session not found
- Missing Firebird field type for parameter {name}
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/bf1804fd93b4fe35.
Report an issue: GitHub.