hyperledger/fabric · error

walk failed

Error message

walk failed

What it means

Returned by findSource when filepath.Walk over the chaincode source directory returns an error — the tree traversal itself failed (unreadable directory, vanished files), not merely an excluded file. Collected sources are discarded and the walk error is wrapped.

Source

Thrown at core/chaincode/platforms/golang/platform.go:522

				return err
			}
		case cd.Module:
			name = filepath.Join("src", name)
		default:
			// skip top level go.mod and go.sum when not in module mode
			if name == "go.mod" || name == "go.sum" {
				return nil
			}
			name = filepath.Join("src", cd.Path, name)
		}

		name = filepath.ToSlash(name)
		sources[name] = SourceDescriptor{Name: name, Path: path}
		return nil
	}

	if err := filepath.Walk(cd.Source, walkFn); err != nil {
		return nil, errors.Wrap(err, "walk failed")
	}

	return sources, nil
}

func validateMetadata(name, path string) error {
	contents, err := os.ReadFile(path)
	if err != nil {
		return err
	}

	// Validate metadata file for inclusion in tar
	// Validation is based on the passed filename with path
	err = ccmetadata.ValidateMetadataFile(filepath.ToSlash(name), contents)
	if err != nil {
		return err
	}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Check the wrapped underlying error for the exact failing path.
  2. Fix filesystem permissions so the peer process can read the entire chaincode tree.
  3. Remove symlinks that point outside the source root.
  4. Verify the chaincode path exists before calling GetDeploymentPayload.
Defensive patterns

Strategy: try-catch

Validate before calling

if fi, err := os.Stat(path); err != nil || !fi.IsDir() {
	return fmt.Errorf("chaincode path missing or not a directory: %s", path)
}

Try / catch

payload, err := platform.GetDeploymentPayload(path, code)
if err != nil {
	if strings.Contains(err.Error(), "walk failed") {
		// read wrapped cause; fix permissions or missing path
	}
}

Prevention

When it happens

Trigger: Calling GetDeploymentPayload (which calls findSource) when the source tree cannot be traversed: permission denied on a directory, source path missing mid-walk, or the walkFn returning an error such as 607.

Common situations: Unreadable subdirectories due to permissions, source directory removed while packaging, symlink cycles or escaping symlinks breaking relative path computation.

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/c4a886d09e2830e2. Report an issue: GitHub.