ipfs/kubo · error
error traversing DAG: %w
Error message
error traversing DAG: %w
What it means
`ipfs dag stat` walks the DAG with an ipld-prime traverser to count blocks and sizes. If the traversal itself fails (missing blocks, decode errors, link errors), the command wraps the traversal error as `error traversing DAG: %w`.
Source
Thrown at core/commands/dag/stat.go:99
// unique total. With multiple roots, cidSet tracks which CIDs were
// already counted under a previous root (Visit reports true the
// first time a CID is seen).
if cidSet == nil || cidSet.Visit(current.Node.Cid()) {
dagStatSummary.incrementTotalSize(currentNodeSize)
}
dagStatSummary.incrementRedundantSize(currentNodeSize)
if progressive {
if err := res.Emit(dagStatSummary); err != nil {
return err
}
}
return nil
},
ErrFunc: nil,
SkipDuplicates: true,
})
if err != nil {
return fmt.Errorf("error traversing DAG: %w", err)
}
}
if cidSet != nil {
dagStatSummary.UniqueBlocks = cidSet.Len()
} else {
// Single root: boxo deduplicated within the traversal, so the number of
// unique blocks equals the number of blocks visited.
for _, ds := range dagStatSummary.DagStatsArray {
dagStatSummary.UniqueBlocks += int(ds.NumBlocks)
}
}
dagStatSummary.calculateSummary()
if err := res.Emit(dagStatSummary); err != nil {
return err
}
return nilView on GitHub (pinned to 329838acdf)
Solutions
- Ensure the node is online and the full DAG is fetchable, or import the complete CAR first
- Read the wrapped inner error: block-not-found means fetch data; decode errors mean corrupt data
- Use `ipfs dag stat --local` only when the full DAG is known present locally
- Re-add/re-import from a verified source if blocks are corrupt
Example fix
// before ipfs dag stat /ipfs/<cid> # offline node, partial data // after ipfs dag import full.car # or start daemon ipfs dag stat /ipfs/<cid>
Defensive patterns
Strategy: try-catch
Validate before calling
// check local availability first when offline
if offline {
if out, err := exec.Command("ipfs", "dag", "stat", "--local", path).Output(); err != nil {
return fmt.Errorf("DAG incomplete locally: %s", out)
}
} Try / catch
// CLI: parse wrapped traversal cause
if err := run("ipfs", "dag", "stat", path); err != nil {
if strings.Contains(errText(err), "not found") {
// start daemon / fetch DAG, then retry
return retryAfterFetch(path)
}
return err
} Prevention
- Run dag stat with a connected daemon unless using --local
- Import the full CAR before statting offline
- Check wrapped inner error to distinguish missing vs corrupt blocks
When it happens
Trigger: Missing blocks (offline node without the full DAG), undecodable nodes, or a bad link encountered during `ipfs dag stat`.
Common situations: Running dag stat offline/on a node without the data (`context deadline exceeded` or "block not found" wrapped inside); partial imports with --local-only followed by stat without --local; corrupted blocks.
Related errors
- cannot return size for anything other than a DAG with a root
- supernode routing was never fully implemented and has been r
- unrecognized routing option: %s
- invalid configuration profile: %s
- command disabled: %v
AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03).
Data as JSON: /api/errors/99bb3fd062905b37.
Report an issue: GitHub.