gastownhall/beads · error
blocker edge rows from %s: %w
Error message
blocker edge rows from %s: %w
What it means
Wraps an error from rows.Err() after streaming blocker edge rows in IsBlockedInTx. Errors that occur mid-iteration (connection drop, I/O failure, cancellation) surface here after the loop, aborting the blocked check so no partial edge set is used.
Source
Thrown at internal/storage/issueops/dependency_queries.go:954
WHERE issue_id = ? AND type IN ('blocks', 'waits-for', 'conditional-blocks')
`, DepTargetExpr, depTable), issueID)
if err != nil {
if optionalBlockedTable(depTable) && isTableNotExistError(err) {
continue
}
return false, nil, fmt.Errorf("check blockers from %s: %w", depTable, err)
}
for rows.Next() {
var e depEdge
if err := rows.Scan(&e.dependsOnID, &e.depType); err != nil {
_ = rows.Close()
return false, nil, fmt.Errorf("scan blocker edge: %w", err)
}
edges = append(edges, e)
}
_ = rows.Close()
if err := rows.Err(); err != nil {
return false, nil, fmt.Errorf("blocker edge rows from %s: %w", depTable, err)
}
}
if len(edges) == 0 {
return true, nil, nil
}
blockerIDs := make([]string, 0, len(edges))
for _, e := range edges {
blockerIDs = append(blockerIDs, e.dependsOnID)
}
statusByID, err := loadStatusByIDInTx(ctx, tx, blockerIDs)
if err != nil {
return false, nil, fmt.Errorf("check blocker status: %w", err)
}
var blockers []string
for _, e := range edges {
status, ok := statusByID[e.dependsOnID]View on GitHub (pinned to 71377f2769)
Solutions
- Inspect the wrapped error for cancellation vs I/O cause
- Increase timeouts or avoid cancelling the context mid-transaction
- Restore connectivity to the SQL server and retry
- Check disk space / file locks for embedded backends
Defensive patterns
Strategy: try-catch
Try / catch
if err := issueops.IsBlocked(ctx, id); err != nil {
if errors.Is(err, context.Canceled) || errors.Is(err, io.ErrUnexpectedEOF) {
// transient: retry with fresh context
}
return err
} Prevention
- Set adequate context timeouts for blocked checks
- Avoid cancelling operations mid-transaction
- Ensure sufficient disk space for embedded backends
When it happens
Trigger: The driver encounters a streaming error while iterating edge rows from a dependency table during IsBlockedInTx, detected via rows.Err() after the Next() loop.
Common situations: Context cancellation/timeout mid-query; connection reset to a remote SQL server; embedded storage I/O errors (disk full, file lock).
Related errors
- iterate inbound dependencies from %s: %w
- remaining blocker rows from %s: %w
- check issue existence in %s: rows: %w
- row iteration error: %w
- count wisp dependencies: %w
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/06dd43d2ea551efa.
Report an issue: GitHub.