hasura/graphql-engine · error
reading metadata from response: %w
Error message
reading metadata from response: %w
What it means
After `metadata export` successfully receives a streaming response from the server, the CLI reads the response body with io.ReadAll. This error indicates reading the response stream failed partway — the connection dropped, the response was truncated, or the stream was otherwise interrupted after the request was accepted.
Source
Thrown at cli/commands/metadata_handlers.go:327
return errors.E(op, err)
}
return nil
}
func export(o *MetadataExportOptions, mode cli.MetadataMode) error {
var op errors.Op = "commands.export"
metadata, err := ec.APIClient.V1Metadata.ExportMetadata()
if err != nil {
return errors.E(op, fmt.Errorf("exporting metadata from server: %w", err))
}
var metadataBytes []byte
metadataBytes, err = io.ReadAll(metadata)
if err != nil {
return errors.E(op, fmt.Errorf("reading metadata from response: %w", err))
}
if mode == cli.MetadataModeYAML {
metadataBytes, err = metadatautil.JSONToYAML(metadataBytes)
if err != nil {
return errors.E(op, fmt.Errorf("parsing metadata to yaml: %w", err))
}
}
err = os.WriteFile(o.EC.MetadataFile, metadataBytes, os.ModePerm)
if err != nil {
return errors.E(op, fmt.Errorf("writing metadata to file: %w", err))
}
return nil
}
func apply(o *MetadataApplyOptions, mode cli.MetadataMode) error {View on GitHub (pinned to 724551b9ae)
Solutions
- Retry the export — transient stream failures are the most common cause
- Check for proxy/LB response timeouts and raise them if the metadata document is large
- Inspect server logs to see if it terminated the response early (crash, OOM)
- If reproducible, capture the response with curl to confirm whether truncation is network-side or server-side
Defensive patterns
Strategy: retry
Try / catch
err := export(opts, mode)
for attempt := 0; err != nil && attempt < 3; attempt++ {
if strings.Contains(err.Error(), "reading metadata from response") {
time.Sleep(time.Duration(attempt+1) * time.Second)
err = export(opts, mode)
}
} Prevention
- Increase proxy/LB response timeouts for large metadata payloads
- Retry exports on stream read failures — usually transient
- Avoid networks known to drop long-lived connections, or export from closer to the server
When it happens
Trigger: `metadata export` where ExportMetadata succeeds but io.ReadAll on the response body fails: connection reset mid-transfer, proxy timeouts on large metadata payloads, TLS renegotiation failures, or the server closing the stream early.
Common situations: Large metadata documents exceeding proxy/load-balancer timeouts; flaky networks or VPN drops mid-response; aggressive idle-timeout settings on ingress controllers; server crash while streaming the response.
Related errors
- exporting metadata from server: %w
- writing metadata to file: %w
- error building project metadata: %w
- parsing metadata to yaml: %w
- reading metadata file: %w
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/a0152a64b7b7a825.
Report an issue: GitHub.