weaviate/weaviate · warning
build payload: %w
Error message
build payload: %w
What it means
Weaviate's telemetry Telemeter.push() wraps any failure from buildPayload() with "build payload: %w". buildPayload collects used modules, object counts, collection counts, and client usage; any of those steps failing (module lookup, node status fetch, schema access) is bubbled up as this error. It is non-fatal: telemetry pushes happen on a background interval and a failed payload is simply logged.
Source
Thrown at usecases/telemetry/telemetry.go:217
WithField("action", "telemetry_push").
WithField("payload", fmt.Sprintf("%+v", payload)).
Error(err.Error())
return err
}
tel.logger.
WithField("action", "telemetry_push").
WithField("payload", fmt.Sprintf("%+v", payload)).
Info("telemetry terminated")
return nil
}
}
// push sends telemetry data to the consumer url
func (tel *Telemeter) push(ctx context.Context, payloadType string) (*Payload, error) {
payload, err := tel.buildPayload(ctx, payloadType)
if err != nil {
return nil, fmt.Errorf("build payload: %w", err)
}
b, err := json.Marshal(payload)
if err != nil {
return nil, fmt.Errorf("marshal payload: %w", err)
}
url, err := base64.StdEncoding.DecodeString(tel.consumer)
if err != nil {
return nil, fmt.Errorf("decode url: %w", err)
}
resp, err := http.Post(string(url), "application/json", bytes.NewReader(b))
if err != nil {
return nil, fmt.Errorf("failed to send request: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {View on GitHub (pinned to 75aa4b6d11)
Solutions
- Check the wrapped inner error in the log line; it names the failing sub-step (get used modules / get object count / get collections count) and fix that root cause.
- If telemetry pushes during startup noise bother you, disable telemetry by setting ENABLE_TELEMETRY=false (or the telemetry enabled config) — pushes then never run.
- Ensure the node is fully started and the schema is loaded; verify via the /v1/nodes endpoint that LocalNodeStatus works.
- Verify module configuration (ENABLE_MODULES) references valid module names so getUsedModules does not fail.
Example fix
// log shows: build payload: get object count: received nil node stats // after: ensure shards are loaded / node healthy before expecting counts, // or silence by disabling telemetry in config: // before ENABLE_TELEMETRY=true // after ENABLE_TELEMETRY=false
Defensive patterns
Strategy: fallback
Validate before calling
import "net/http"
resp, err := http.Get("http://localhost:8080/v1/nodes")
if err != nil || resp.StatusCode != 200 {
// node status unavailable; telemetry payload build will fail
} Try / catch
if err := tel.PushTelemetry(ctx, telemetry.PayloadType.Periodic); err != nil {
var wrappedErr error
if errors.Unwrap(err) != nil { wrappedErr = errors.Unwrap(err) }
log.Warnf("telemetry push skipped (non-fatal): %v (cause: %v)", err, wrappedErr)
} Prevention
- Keep ENABLE_TELEMETRY=false in environments where node health is not guaranteed.
- Treat telemetry errors as non-fatal log noise; never gate application logic on them.
- Check the unwrapped cause to identify the failing sub-step.
When it happens
Trigger: Periodic or startup/shutdown telemetry push (Telemeter.Start/Stop goroutine) calls push(), and buildPayload fails — e.g. tel.nodesStatusGetter.LocalNodeStatus returns an error, tel.schemaManager.GetSchemaSkipAuth fails, or getUsedModules fails while enumerating enabled modules.
Common situations: Telemetry push fires while the node is still starting or shutting down so the schema manager or node-status endpoint is unavailable; custom module configurations cause module enumeration errors; the cluster is in a degraded state so LocalNodeStatus cannot be served.
Related errors
- failed to add prop value: %w
- expected property type boolean, received %T
- expected property type []boolean, received %T
- expected property type float64, received %T
- expected property type []float* or []int*, received %T
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/4b8e8521587c7117.
Report an issue: GitHub.