Skip to content

Commit

Permalink
Proto: make badger/v2 compatible with v1 (#1293)
Browse files Browse the repository at this point in the history
There were two instances of init-time work being incompatible with v1.
That is, if one imported both v1 and v2 as part of a Go build, the
resulting binary would end up panicking before main could run. The
examples below are done with the latest versions of v1 and v2, and a
main.go as follows:

	package main

	import (
		_ "github.com/dgraph-io/badger"
		_ "github.com/dgraph-io/badger/v2"
	)

	func main() {}

First, the protobuf package used "pb" as its proto package name. This is
a problem, because types are registered globally with their fully
qualified names, like "pb.Foo". Since both badger/pb and badger/v2/pb
tried to globally register types with the same qualified names, we'd get
a panic:

	$ go run .
	panic: proto: duplicate enum registered: pb.ManifestChange_Operation

	goroutine 1 [running]:
	github.com/golang/protobuf/proto.RegisterEnum(...)
		.../go/pkg/mod/github.com/golang/protobuf@v1.3.1/proto/properties.go:459
	github.com/dgraph-io/badger/v2/pb.init.0()
		.../badger/pb/pb.pb.go:638 +0x459

To fix this, make v2's proto package fully qualified. Since the
namespace is global, just "v2.pb" wouldn't suffice; it's not unique
enough. "dgraph.badger.v2.pb" seems good, since it follows the Go module
path pretty closely.

The second issue was with expvar, which too uses globally registered
names:

	$ go run .
	2020/04/08 22:59:20 Reuse of exported var name: badger_disk_reads_total
	panic: Reuse of exported var name: badger_disk_reads_total

	goroutine 1 [running]:
	log.Panicln(0xc00010de48, 0x2, 0x2)
		.../src/log/log.go:365 +0xac
	expvar.Publish(0x906fcc, 0x17, 0x9946a0, 0xc0000b0318)
		.../src/expvar/expvar.go:278 +0x267
	expvar.NewInt(...)
		.../src/expvar/expvar.go:298
	github.com/dgraph-io/badger/v2/y.init.1()
		.../badger/y/metrics.go:55 +0x65
	exit status 2

This time, replacing the "badger_" var prefix with "badger_v2_" seems
like it's simple enough as a fix.

Fixes #1208.
  • Loading branch information
mvdan authored Apr 9, 2020
1 parent 2e708d9 commit 8097259
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 70 deletions.
116 changes: 60 additions & 56 deletions pb/pb.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pb/pb.proto
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
// Use protos/gen.sh to generate .pb.go files.
syntax = "proto3";

package pb;
package dgraph.badger.v2.pb;

option go_package = "github.com/dgraph-io/badger/v2/pb";

Expand Down
26 changes: 13 additions & 13 deletions y/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ var (

// These variables are global and have cumulative values for all kv stores.
func init() {
NumReads = expvar.NewInt("badger_disk_reads_total")
NumWrites = expvar.NewInt("badger_disk_writes_total")
NumBytesRead = expvar.NewInt("badger_read_bytes")
NumBytesWritten = expvar.NewInt("badger_written_bytes")
NumLSMGets = expvar.NewMap("badger_lsm_level_gets_total")
NumLSMBloomHits = expvar.NewMap("badger_lsm_bloom_hits_total")
NumGets = expvar.NewInt("badger_gets_total")
NumPuts = expvar.NewInt("badger_puts_total")
NumBlockedPuts = expvar.NewInt("badger_blocked_puts_total")
NumMemtableGets = expvar.NewInt("badger_memtable_gets_total")
LSMSize = expvar.NewMap("badger_lsm_size_bytes")
VlogSize = expvar.NewMap("badger_vlog_size_bytes")
PendingWrites = expvar.NewMap("badger_pending_writes_total")
NumReads = expvar.NewInt("badger_v2_disk_reads_total")
NumWrites = expvar.NewInt("badger_v2_disk_writes_total")
NumBytesRead = expvar.NewInt("badger_v2_read_bytes")
NumBytesWritten = expvar.NewInt("badger_v2_written_bytes")
NumLSMGets = expvar.NewMap("badger_v2_lsm_level_gets_total")
NumLSMBloomHits = expvar.NewMap("badger_v2_lsm_bloom_hits_total")
NumGets = expvar.NewInt("badger_v2_gets_total")
NumPuts = expvar.NewInt("badger_v2_puts_total")
NumBlockedPuts = expvar.NewInt("badger_v2_blocked_puts_total")
NumMemtableGets = expvar.NewInt("badger_v2_memtable_gets_total")
LSMSize = expvar.NewMap("badger_v2_lsm_size_bytes")
VlogSize = expvar.NewMap("badger_v2_vlog_size_bytes")
PendingWrites = expvar.NewMap("badger_v2_pending_writes_total")
}

0 comments on commit 8097259

Please sign in to comment.