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 = &sessionID

View on GitHub (pinned to c0390bff16)

Solutions

  1. Re-execute the original SQL to obtain a fresh session ID instead of reusing the old one
  2. Complete all page fetches within the idle-session window; increase the idle timeout if paging is slow
  3. Track the session ID lifecycle in your code and clear it once the result set is exhausted or cancelled
  4. 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

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


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/fa9cadcb15ced18e. Report an issue: GitHub.