Skip to content

Commit 8097259

Browse files
authored
Proto: make badger/v2 compatible with v1 (dgraph-io#1293)
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/[email protected]/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 dgraph-io#1208.
1 parent 2e708d9 commit 8097259

File tree

3 files changed

+74
-70
lines changed

3 files changed

+74
-70
lines changed

pb/pb.pb.go

Lines changed: 60 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pb/pb.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
// Use protos/gen.sh to generate .pb.go files.
1818
syntax = "proto3";
1919

20-
package pb;
20+
package dgraph.badger.v2.pb;
2121

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

y/metrics.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,17 @@ var (
5252

5353
// These variables are global and have cumulative values for all kv stores.
5454
func init() {
55-
NumReads = expvar.NewInt("badger_disk_reads_total")
56-
NumWrites = expvar.NewInt("badger_disk_writes_total")
57-
NumBytesRead = expvar.NewInt("badger_read_bytes")
58-
NumBytesWritten = expvar.NewInt("badger_written_bytes")
59-
NumLSMGets = expvar.NewMap("badger_lsm_level_gets_total")
60-
NumLSMBloomHits = expvar.NewMap("badger_lsm_bloom_hits_total")
61-
NumGets = expvar.NewInt("badger_gets_total")
62-
NumPuts = expvar.NewInt("badger_puts_total")
63-
NumBlockedPuts = expvar.NewInt("badger_blocked_puts_total")
64-
NumMemtableGets = expvar.NewInt("badger_memtable_gets_total")
65-
LSMSize = expvar.NewMap("badger_lsm_size_bytes")
66-
VlogSize = expvar.NewMap("badger_vlog_size_bytes")
67-
PendingWrites = expvar.NewMap("badger_pending_writes_total")
55+
NumReads = expvar.NewInt("badger_v2_disk_reads_total")
56+
NumWrites = expvar.NewInt("badger_v2_disk_writes_total")
57+
NumBytesRead = expvar.NewInt("badger_v2_read_bytes")
58+
NumBytesWritten = expvar.NewInt("badger_v2_written_bytes")
59+
NumLSMGets = expvar.NewMap("badger_v2_lsm_level_gets_total")
60+
NumLSMBloomHits = expvar.NewMap("badger_v2_lsm_bloom_hits_total")
61+
NumGets = expvar.NewInt("badger_v2_gets_total")
62+
NumPuts = expvar.NewInt("badger_v2_puts_total")
63+
NumBlockedPuts = expvar.NewInt("badger_v2_blocked_puts_total")
64+
NumMemtableGets = expvar.NewInt("badger_v2_memtable_gets_total")
65+
LSMSize = expvar.NewMap("badger_v2_lsm_size_bytes")
66+
VlogSize = expvar.NewMap("badger_v2_vlog_size_bytes")
67+
PendingWrites = expvar.NewMap("badger_v2_pending_writes_total")
6868
}

0 commit comments

Comments
 (0)