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

  1. Check permissions and free space on the directory holding the graph files
  2. Ensure the parent directory exists before writing
  3. 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.