hyperledger/fabric · error

failed to create tar for chaincode

Error message

failed to create tar for chaincode

What it means

GetDeploymentPayload wraps any error from closing the tar or gzip writer with 'failed to create tar for chaincode'. Close flushes buffered data, so gzip/tar errors (including earlier write failures deferred to Close) surface here.

Source

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

		})
		if err != nil {
			return nil, err
		}
	}

	for _, file := range fileMap.Sources() {
		err = util.WriteFileToPackage(file.Path, file.Name, tw)
		if err != nil {
			return nil, fmt.Errorf("Error writing %s to tar: %s", file.Name, err)
		}
	}

	err = tw.Close()
	if err == nil {
		err = gw.Close()
	}
	if err != nil {
		return nil, errors.Wrapf(err, "failed to create tar for chaincode")
	}

	return payload.Bytes(), nil
}

func (p *Platform) GenerateDockerfile() (string, error) {
	var buf []string
	buf = append(buf, "FROM "+util.GetDockerImageFromConfig("chaincode.golang.runtime"))
	buf = append(buf, "ADD binpackage.tar /usr/local/bin")

	return strings.Join(buf, "\n"), nil
}

const (
	staticLDFlagsOpts  = "-ldflags \"-linkmode external -extldflags '-static'\""
	dynamicLDFlagsOpts = ""
)

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Inspect errors.Wrapf result for the underlying cause.
  2. Retry GetDeploymentPayload; ensure all prior writes succeeded.
  3. Ensure the source tree is stable and readable during packaging.
Defensive patterns

Strategy: try-catch

Validate before calling

if fi, err := os.Stat(path); err != nil || !fi.IsDir() { return errors.New("invalid chaincode path") }

Try / catch

payload, err := platform.GetDeploymentPayload(path, code)
if err != nil {
	if strings.Contains(err.Error(), "failed to create tar for chaincode") {
		// retry once; otherwise surface wrapped gzip/tar close error
	}
}

Prevention

When it happens

Trigger: Calling GetDeploymentPayload when tw.Close() or gw.Close() returns an error, typically from an underlying write failure to the byte buffer or gzip stream corruption.

Common situations: Out-of-memory or buffer write failures, gzip writer already in error state from a previous failed write, concurrent misuse of the platform.

Related errors


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