Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/dataobj/internal/encoding/encoder_helpers.go

42 lines
822 B

package encoding
import (
"io"
"github.com/gogo/protobuf/proto"
"github.com/grafana/loki/v3/pkg/dataobj/internal/streamio"
)
type element interface {
metadata() proto.Message
}
func elementMetadataSize(e element) int {
return proto.Size(e.metadata())
}
func elementMetadataWrite(e element, w streamio.Writer) error {
buf := protoBufferPool.Get().(*proto.Buffer)
buf.Reset()
defer protoBufferPool.Put(buf)
if err := buf.Marshal(e.metadata()); err != nil {
return err
}
// Every protobuf message is always prepended with its size as a uvarint.
messageSize := len(buf.Bytes())
if err := streamio.WriteUvarint(w, uint64(messageSize)); err != nil {
return err
}
sz, err := w.Write(buf.Bytes())
if err != nil {
return err
} else if sz != messageSize {
return io.ErrShortWrite
}
return nil
}