kubernetes/kops · error

converting to proto: %w

Error message

converting to proto: %w

What it means

writeObjectWithTypeCode serializes each trace object with proto.Marshal before framing it in the file. If the proto message cannot be marshaled (invalid message, unset required-ish data, corrupted internal state), the error is wrapped as "converting to proto: %w".

Source

Thrown at pkg/otel/otlptracefile/writer.go:117

	w.typeCodes[typeName] = TypeCode(typeCode)
}

// writeObject appends an object to the file
func (w *writer) writeObject(ctx context.Context, obj proto.Message) error {
	typeCode, err := w.codeForType(ctx, obj)
	if err != nil {
		return err
	}

	return w.writeObjectWithTypeCode(ctx, typeCode, obj)
}

// writeObjectWithTypeCode is the key function here.  We encode and write the object.
// We include a header that identifies the object using the provided typeCode.
func (w *writer) writeObjectWithTypeCode(ctx context.Context, typeCode TypeCode, obj proto.Message) error {
	buf, err := proto.Marshal(obj)
	if err != nil {
		return fmt.Errorf("converting to proto: %w", err)
	}

	crc32q := crc32.MakeTable(crc32.Castagnoli)
	checksum := crc32.Checksum(buf, crc32q)

	flags := uint32(0)

	w.fileMutex.Lock()
	defer w.fileMutex.Unlock()

	if w.f == nil {
		return fmt.Errorf("already closed")
	}

	// write the object with a header.
	header := make([]byte, 16)
	binary.BigEndian.PutUint32(header[0:4], uint32(len(buf)))
	binary.BigEndian.PutUint32(header[4:8], checksum)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Upgrade the OTel SDK / instrumentation libraries producing the malformed spans.
  2. Identify the offending span via surrounding logs and sanitize its attributes before export.
  3. Report the issue upstream with the wrapped proto error message if it persists.
Defensive patterns

Strategy: try-catch

Try / catch

if err := w.writeObject(ctx, obj); err != nil {
    if strings.Contains(err.Error(), "converting to proto") {
        // drop/skip the malformed object and continue, log the wrapped cause
        return nil
    }
    return err
}

Prevention

When it happens

Trigger: Writing a trace span/resource message whose underlying protobuf has an invalid field (e.g. NaN/unencodable value in a value, nil-required submessage) during codeForType/writeObject.

Common situations: Span attributes containing exotic types from instrumentation libraries; corrupted resource data from a buggy SDK version.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/41dfe2dbbfb76e8d. Report an issue: GitHub.