{"record":{"id":"3fc427c472973bc4","repo":"t8y2/dbx","slug":"query-session-not-found-s-3fc427","errorCode":null,"errorMessage":"query session not found: %s","messagePattern":"query session not found: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/iotdb/query.go","lineNumber":202,"sourceCode":"\t\tTruncated:       page.truncated,\n\t\tHasMore:         page.hasMore,\n\t}\n\tif page.hasMore {\n\t\ts.nextSessionID++\n\t\tsessionID := fmt.Sprintf(\"iotdb-go-%d\", s.nextSessionID)\n\t\ts.querySessions[sessionID] = page.state\n\t\tresult.SessionID = &sessionID\n\t} else {\n\t\t_ = dataset.Close()\n\t}\n\treturn result, nil\n}\n\nfunc (s *server) fetchQueryPage(sessionID string, requestedPageSize int) (queryPageResult, error) {\n\tstarted := time.Now()\n\tqueryState := s.querySessions[sessionID]\n\tif queryState == nil {\n\t\treturn queryPageResult{}, fmt.Errorf(\"query session not found: %s\", sessionID)\n\t}\n\tpageSize := requestedPageSize\n\tif pageSize <= 0 {\n\t\tpageSize = defaultPageSize\n\t}\n\tpage, err := runCancelable(s, 0, queryState.client, func(ctx context.Context) (queryPageRead, error) {\n\t\trows, hasMore, truncated, err := s.readQuerySessionPage(ctx, queryState, pageSize)\n\t\treturn queryPageRead{state: queryState, rows: rows, hasMore: hasMore, truncated: truncated}, err\n\t})\n\tif err != nil {\n\t\t_ = s.closeQuerySession(sessionID)\n\t\treturn queryPageResult{}, err\n\t}\n\tresult := queryPageResult{\n\t\tColumns:         queryState.columns,\n\t\tColumnTypes:     queryState.columnTypes,\n\t\tRows:            page.rows,\n\t\tExecutionTimeMS: time.Since(started).Milliseconds(),","sourceCodeStart":184,"sourceCodeEnd":220,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/iotdb/query.go#L184-L220","documentation":"server.fetchQueryPage looks up a paged query's state in s.querySessions by sessionID. If no paging state exists (never started, already exhausted/closed, or a different server instance), it returns 'query session not found: %s'.","triggerScenarios":"Calling fetchQueryPage with an ID from a finished query, after the query session was closed or reaped, or on a server instance other than the one that started the query (restart, non-sticky load balancer).","commonSituations":"Continuing to page after consuming the last page; long gaps between pages while the in-memory paging state disappears; multiple replicas without session affinity.","solutions":["Re-run the original query to get a fresh query session ID when paging state is gone.","Stop paging once a page reports no more results instead of calling fetchQueryPage again.","Route all page requests for a query session to the same server instance (sticky sessions).","Track query-session liveness client-side; never reuse IDs across queries."],"exampleFix":"// before\npage, err := s.fetchQueryPage(oldSessionID, size) // after last page\n// after\nif queryExhausted {\n    return endOfResults\n}\npage, err := s.fetchQueryPage(activeSessionID, size)","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"func isQuerySessionNotFound(err error) bool {\n    return err != nil && strings.HasPrefix(err.Error(), \"query session not found: \")\n}","tryCatchPattern":"page, err := s.fetchQueryPage(sessionID, size)\nif isQuerySessionNotFound(err) {\n    // restart the original query to obtain a fresh paging session\n    sessionID, err = s.executeQuery(originalSQL)\n    if err != nil {\n        return err\n    }\n    page, err = s.fetchQueryPage(sessionID, size)\n}","preventionTips":["Stop paging as soon as a page reports no further results.","Keep all page requests on the same server instance (sticky routing).","Re-issue the query rather than reusing IDs after restarts or timeouts.","Never reuse a query session ID across different queries."],"tags":["go","pagination","session-management","iotdb"],"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-14T05:17:10.506Z"}