Skip to content

record.proto is too generic and results in conflict with other packages #788

Description

@dereknola

Background

I work on the k3s project, which has a large dependency trail. Recently we attempted to move to a new version of spegel, which pulled in new versions of libp2p/go-libp2p-kad-dht which bumped boxo from from v0.10.0 -> v0.24.3

Issue

All these dependencies thrown together has resulted in conflicts around record.proto registration:

panic: proto: file "record.proto" is already registered
	See https://protobuf.dev/reference/go/faq#namespace-conflict

Looking thru our vendor list you can see that there are a multitude of dependencies that use a very generic record.proto for some protobuf.

grep -rF 'record.proto' vendor/
vendor/go.etcd.io/etcd/server/v3/wal/walpb/record.pb.go:// source: record.proto
vendor/go.etcd.io/etcd/server/v3/wal/walpb/record.pb.go:func init() { proto.RegisterFile("record.proto", fileDescriptor_bf94fd919e302a1d) }
vendor/github.com/libp2p/go-libp2p-record/pb/record.pb.go:// source: record.proto
vendor/github.com/libp2p/go-libp2p-record/pb/record.pb.go:func init() { proto.RegisterFile("record.proto", fileDescriptor_bf94fd919e302a1d) }
vendor/github.com/libp2p/go-libp2p-record/pb/record.proto:// `protoc --gogo_out=. record.proto`
vendor/github.com/libp2p/go-libp2p-kad-dht/pb/dht.proto:import "github.com/libp2p/go-libp2p-record/pb/record.proto";
vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/pb/identify.proto:  // github.com/libp2p/go-libp2p/core/peer/pb/peer_record.proto for message definitions.
vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/pb/identify.pb.go:	// github.com/libp2p/go-libp2p/core/peer/pb/peer_record.proto for message definitions.
vendor/github.com/libp2p/go-libp2p/core/peer/pb/peer_record.pb.go:// source: core/peer/pb/peer_record.proto
vendor/github.com/ipfs/boxo/ipns/pb/record.pb.go:// source: record.proto
vendor/github.com/ipfs/boxo/ipns/record.go://go:generate protoc -I=pb --go_out=pb --go_opt=module=github.com/ipfs/boxo/ipns/pb pb/record.proto

Looking at the FAQ around how to resolve this that https://protobuf.dev/reference/go/faq#namespace-conflict, it seems that boxo does not define a unique enough option go_package for its protobuf. Additionally, it is likely a good idea to just change the name entirely from something so generic as record.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

P2Medium: Good to have, but can wait until someone steps upeffort/hoursEstimated to take one or several hourskind/bugA bug in existing code (including security flaws)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions