{"record":{"id":"3369991ad95042e4","repo":"t8y2/dbx","slug":"query-session-not-found-336999","errorCode":null,"errorMessage":"query session not found","messagePattern":"query session not found","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/hive-go/query.go","lineNumber":184,"sourceCode":"\t\t\tHasMore:         false,\n\t\t}, nil\n\t}\n\treturn queryPageResult{\n\t\tColumns:         columns,\n\t\tColumnTypes:     columnTypes,\n\t\tRows:            page,\n\t\tExecutionTimeMS: time.Since(started).Milliseconds(),\n\t\tTruncated:       false,\n\t\tSessionID:       &sessionID,\n\t\tHasMore:         true,\n\t}, nil\n}\n\nfunc (server *server) fetchQueryPage(sessionID string, requestedPageSize int) (queryPageResult, error) {\n\tserver.expireIdleQuerySessions(time.Now())\n\tstate := server.querySessions[sessionID]\n\tif state == nil {\n\t\treturn queryPageResult{}, errors.New(\"query session not found\")\n\t}\n\tpageSize := requestedPageSize\n\tif pageSize <= 0 {\n\t\tpageSize = defaultPageSize\n\t}\n\tctx := context.Background()\n\tserver.setActiveOperation(state.cancel)\n\tpage, hasMore, truncated, err := server.readQuerySessionPage(ctx, state, pageSize)\n\tserver.activeMu.Lock()\n\tserver.activeCancel = nil\n\tserver.activeMu.Unlock()\n\tif err != nil {\n\t\tserver.closeQuerySession(sessionID)\n\t\treturn queryPageResult{}, err\n\t}\n\tvar resultSessionID *string\n\tif hasMore {\n\t\tresultSessionID = &sessionID","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/hive-go/query.go#L166-L202","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\npage, err := fetchQueryPage(oldSessionID, 100) // may be expired\n// after\npage, err := fetchQueryPage(sessionID, 100)\nif err != nil && err.Error() == \"query session not found\" {\n    page, err = executeQueryPage(originalSQL, 100) // restart query\n}","handlingStrategy":"retry","validationCode":"// Go — check you hold a live sessionID from executeQueryPage before fetching\nif sessionID == \"\" { return errors.New(\"no active query session\") }","typeGuard":null,"tryCatchPattern":"page, err := srv.FetchPage(sessionID, pageSize)\nif err != nil && strings.Contains(err.Error(), \"query session not found\") {\n    // restart the query transparently\n    page, err = srv.DispatchPaged(queryOptions{SQL: originalSQL}, pageSize)\n}","preventionTips":["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."],"tags":["hive","pagination","session-expired","state","go"],"backgroundTag":"session-not-found","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}