[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Advice needed to break dependency stalemate



On Thu, Dec 22, 2022 at 01:31:17PM +1300, Daniel Swarbrick wrote:
> Hi,
> 
> I'm throwing this out to the team in hope of getting some help with a tricky
> problem regarding two packages central to the Prometheus ecosystem.
> 
> golang-github-prometheus-common and golang-github-prometheus-client-golang
> have a circular dependency on each other. They have also both long depended
> on golang-goprotobuf-dev (i.e., the v1.3.x branch of
> github.com/golang/protobuf).
> 
> Both prometheus-common and prometheus-client-golang require patching in
> order to build against golang-goprotobuf-dev, since the upstream versions
> require github.com/golang/protobuf 1.5.x.
> 
> Now that golang-goprotobuf-dev is a transitional dummy package for
> golang-github-golang-protobuf-1-3-dev, and
> golang-github-golang-protobuf-1-5-dev is available in sid, these patches can
> theoretically be dropped, and the dependencies updated.
> 
> However... this is where the circular dependency bites. I'm unable to
> modernize golang-github-prometheus-common to use protobuf-1-5-dev, since it
> depends on golang-github-prometheus-client-golang, which still depends on
> protobuf-1-3-dev, and results in a conflict. And vice versa.
> 
> To make matters even trickier, client-golang also depends on
> golang-github-prometheus-client-model-dev, which also depends on
> protobuf-1-3-dev.
> 

I just checked what upstream does, they

+ use golang/protobuf/1.3 in https://github.com/prometheus/client_model/blob/v0.3.0/go.mod#L5
+ use golang/protobuf/1.5 in other places.

So we can assuem the generated pb.go (from client_model) by protoc-gen-go 1.3
can be used by golang/protobuf/1.5, and upstream has tested the combination.

So I think we can follow upstream, which means:

+ still uses protoc-gen-go 1.3 to regenerate the client_model, ensure it only
  imports github.com/golang/protobuf. This is to make sure other packages that
  still depend on old protobuf won't break.
+ declare golang-github-prometheus-client-model-dev depends on
  golang-github-golang-protobuf-1-3-dev | golang-github-golang-protobuf-1-5-dev.
+ other prometheus packages can use golang-github-golang-protobuf-1-5-dev in build-depends.

As a side node, please don't use golang-github-golang-protobuf-1-3-dev and
golang-google-protobuf-dev together when building prometheus. They are not compatible.


Reply to: