After a fair amount of head scratching, I tracked this down to a change in behaviour of the protobuf compiler. Version 3.14.0+ generates slightly different pb.go files with respect to the timestamp type (and possibly others):

--- metrics.pb.go.old   2022-11-08 23:31:00.000000000 +1300
+++ metrics.pb.go.new   2022-11-08 23:31:00.000000000 +1300
@@ -6,7 +6,7 @@
 import (
        fmt "fmt"
        proto "github.com/golang/protobuf/proto"
-       timestamp "github.com/golang/protobuf/ptypes/timestamp"
+       timestamppb "google.golang.org/protobuf/types/known/timestamppb"
        math "math"
 )

@@ -629,12 +629,12 @@
 }

 type Exemplar struct {
-       Label                []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"` -       Value                *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"` -       Timestamp            *timestamp.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp,omitempty"`
-       XXX_NoUnkeyedLiteral struct{}             `json:"-"`
-       XXX_unrecognized     []byte               `json:"-"`
-       XXX_sizecache        int32                `json:"-"`
+       Label                []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"` +       Value                *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"` +       Timestamp            *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp,omitempty"`
+       XXX_NoUnkeyedLiteral struct{}               `json:"-"`
+       XXX_unrecognized     []byte                 `json:"-"`
+       XXX_sizecache        int32                  `json:"-"`
 }

 func (m *Exemplar) Reset()         { *m = Exemplar{} }
@@ -676,7 +676,7 @@
        return 0
 }

-func (m *Exemplar) GetTimestamp() *timestamp.Timestamp {
+func (m *Exemplar) GetTimestamp() *timestamppb.Timestamp {
        if m != nil {
                return m.Timestamp
        }

I was surprised that the protobuf _compiler_ was responsible for this change, but verified with an older snapshot of the package (3.12.4-1+b5) that the previous behaviour was restored. Snapshot versions 3.14.0-1 and later produce the newer style generated pb.go file, referencing timestamppb.Timestamp.

The upstream changelogs for the protobuf compiler do not list any Go-related changes in version 3.13.x, however for version 3.14.0 the following is mentioned:

  Go:
  * Update go_package options to reference google.golang.org/protobuf module.

I strongly suspect that this resulted in the change in the generated pb.go file. The Makefile in prometheus/client_model also pins the protobuf compiler version to 3.13.0:

# Need to be on a previous version that doesn't cause the updated WKT go_package values to be added.
PROTOC_VERSION := 3.13.0

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to