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

  1. 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.
  2. If telemetry pushes during startup noise bother you, disable telemetry by setting ENABLE_TELEMETRY=false (or the telemetry enabled config) — pushes then never run.
  3. Ensure the node is fully started and the schema is loaded; verify via the /v1/nodes endpoint that LocalNodeStatus works.
  4. 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

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


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/4b8e8521587c7117. Report an issue: GitHub.