bettercap/bettercap · error
error creating %s: %v
Error message
error creating %s: %v
What it means
I/O error wrapping in graph.WriteNode: marshaling succeeded but ioutil.WriteFile failed persisting the node file (permission denied, disk full, missing directory). Raised from CreateNode/UpdateNode, so the change is lost even though the in-memory graph was updated.
Source
Thrown at modules/graph/node.go:81
if raw, err := ioutil.ReadFile(fileName); err != nil {
return nil, fmt.Errorf("error while reading %s: %v", fileName, err)
} else if err = json.Unmarshal(raw, &node); err != nil {
return nil, fmt.Errorf("error while decoding %s: %v", fileName, err)
}
return &node, nil
}
func WriteNode(fileName string, node *Node, update bool) error {
if update {
node.UpdatedAt = time.Now()
} else {
node.CreatedAt = time.Now()
}
if raw, err := json.Marshal(node); err != nil {
return fmt.Errorf("error creating data for %s: %v", fileName, err)
} else if err = ioutil.WriteFile(fileName, raw, os.ModePerm); err != nil {
return fmt.Errorf("error creating %s: %v", fileName, err)
}
return nil
}
func CreateNode(fileName string, node *Node) error {
return WriteNode(fileName, node, false)
}
func UpdateNode(fileName string, node *Node) error {
return WriteNode(fileName, node, true)
}
func (n Node) String() string {
if n.Dummy == false {
return fmt.Sprintf("%s_%s", n.Type, n.ID)
}
return string(n.Type)
}View on GitHub (pinned to 8eca2820f3)
Solutions
- Check permissions and free space on the directory holding the graph files
- Ensure the parent directory exists before writing
- Retry the write on transient failures
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at modules/graph/node.go:81 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of bettercap/bettercap@8eca2820f3 (2026-09-02).
Data as JSON: /api/errors/c11fa94f51eeb9b8.
Report an issue: GitHub.