Skip to content

Commit 8ebe57a

Browse files
Fix meterdb metrics for root db (#4476)
1 parent 26fd52b commit 8ebe57a

File tree

4 files changed

+41
-51
lines changed

4 files changed

+41
-51
lines changed

database/factory/factory.go

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,88 +6,59 @@ package factory
66
import (
77
"fmt"
88

9-
"github.com/ava-labs/avalanchego/api/metrics"
9+
"github.com/prometheus/client_golang/prometheus"
10+
1011
"github.com/ava-labs/avalanchego/database"
1112
"github.com/ava-labs/avalanchego/database/corruptabledb"
1213
"github.com/ava-labs/avalanchego/database/leveldb"
1314
"github.com/ava-labs/avalanchego/database/memdb"
14-
"github.com/ava-labs/avalanchego/database/meterdb"
1515
"github.com/ava-labs/avalanchego/database/pebbledb"
1616
"github.com/ava-labs/avalanchego/database/versiondb"
1717
"github.com/ava-labs/avalanchego/utils/logging"
1818
)
1919

2020
// New creates a new database instance based on the provided configuration.
2121
//
22-
// It also wraps the database with a corruptable DB and a meter DB.
22+
// It also wraps the database with a corruptable DB.
2323
//
2424
// dbName is the name of the database, either leveldb, memdb, or pebbledb.
2525
// dbPath is the path to the database folder.
2626
// readOnly indicates if the database should be read-only.
2727
// dbConfig is the database configuration in JSON format.
28-
// dbMetricsPrefix is used to create a new metrics registerer for the database.
29-
// meterDBRegName is used to create a new metrics registerer for the meter DB.
3028
func New(
3129
name string,
3230
path string,
3331
readOnly bool,
3432
config []byte,
35-
gatherer metrics.MultiGatherer,
33+
reg prometheus.Registerer,
3634
logger logging.Logger,
37-
metricsPrefix string,
38-
meterDBRegName string,
3935
) (database.Database, error) {
40-
dbRegisterer, err := metrics.MakeAndRegister(
41-
gatherer,
42-
metricsPrefix,
36+
var (
37+
db database.Database
38+
err error
4339
)
44-
if err != nil {
45-
return nil, err
46-
}
47-
var db database.Database
48-
// start the db
4940
switch name {
5041
case leveldb.Name:
51-
db, err = leveldb.New(path, config, logger, dbRegisterer)
52-
if err != nil {
53-
return nil, fmt.Errorf("couldn't create %s at %s: %w", leveldb.Name, path, err)
54-
}
42+
db, err = leveldb.New(path, config, logger, reg)
5543
case memdb.Name:
5644
db = memdb.New()
5745
case pebbledb.Name:
58-
db, err = pebbledb.New(path, config, logger, dbRegisterer)
59-
if err != nil {
60-
return nil, fmt.Errorf("couldn't create %s at %s: %w", pebbledb.Name, path, err)
61-
}
46+
db, err = pebbledb.New(path, config, logger, reg)
6247
default:
63-
return nil, fmt.Errorf(
64-
"db-type was %q but should have been one of {%s, %s, %s}",
65-
name,
48+
err = fmt.Errorf(
49+
"db-type must be one of {%s, %s, %s}",
6650
leveldb.Name,
6751
memdb.Name,
6852
pebbledb.Name,
6953
)
7054
}
55+
if err != nil {
56+
return nil, fmt.Errorf("couldn't create %q at %q: %w", name, path, err)
57+
}
7158

72-
// Wrap with corruptable DB
7359
db = corruptabledb.New(db, logger)
74-
7560
if readOnly && name != memdb.Name {
7661
db = versiondb.New(db)
7762
}
78-
79-
meterDBReg, err := metrics.MakeAndRegister(
80-
gatherer,
81-
meterDBRegName,
82-
)
83-
if err != nil {
84-
return nil, err
85-
}
86-
87-
db, err = meterdb.New(meterDBReg, db)
88-
if err != nil {
89-
return nil, fmt.Errorf("failed to create meterdb: %w", err)
90-
}
91-
9263
return db, nil
9364
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ require (
2323
github.com/antithesishq/antithesis-sdk-go v0.3.8
2424
github.com/ava-labs/coreth v0.16.0-rc.0
2525
github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2
26-
github.com/ava-labs/subnet-evm v0.8.0-fuji-rc.0.0.20251028200304-b91527f73c61
26+
github.com/ava-labs/subnet-evm v0.8.1-db-metrics-fix
2727
github.com/btcsuite/btcd/btcutil v1.1.3
2828
github.com/cespare/xxhash/v2 v2.3.0
2929
github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2 h1:hQ15IJxY7WO
7979
github.com/ava-labs/libevm v1.13.15-0.20251016142715-1bccf4f2ddb2/go.mod h1:DqSotSn4Dx/UJV+d3svfW8raR+cH7+Ohl9BpsQ5HlGU=
8080
github.com/ava-labs/simplex v0.0.0-20250919142550-9cdfff10fd19 h1:S6oFasZsplNmw8B2S8cMJQMa62nT5ZKGzZRdCpd+5qQ=
8181
github.com/ava-labs/simplex v0.0.0-20250919142550-9cdfff10fd19/go.mod h1:GVzumIo3zR23/qGRN2AdnVkIPHcKMq/D89EGWZfMGQ0=
82-
github.com/ava-labs/subnet-evm v0.8.0-fuji-rc.0.0.20251028200304-b91527f73c61 h1:9wIpv0Sw/LsGSFqvszIpWFacHXrj2ezMrUG/WLCYKaw=
83-
github.com/ava-labs/subnet-evm v0.8.0-fuji-rc.0.0.20251028200304-b91527f73c61/go.mod h1:XtwTC47oU3sUFRdSIFKlG9IYoWW30UyFCT9tpnMv4lY=
82+
github.com/ava-labs/subnet-evm v0.8.1-db-metrics-fix h1:hESwxfeJQTI0FtQYP3/npWGh+4ifj5I3ehYcqzE41zI=
83+
github.com/ava-labs/subnet-evm v0.8.1-db-metrics-fix/go.mod h1:7Jypx176jtNk7Yzz8upQ2K9lcIUp2QaVVudUiWj/L1s=
8484
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
8585
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
8686
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=

node/node.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"github.com/ava-labs/avalanchego/config/node"
3737
"github.com/ava-labs/avalanchego/database"
3838
"github.com/ava-labs/avalanchego/database/leveldb"
39+
"github.com/ava-labs/avalanchego/database/meterdb"
3940
"github.com/ava-labs/avalanchego/database/pebbledb"
4041
"github.com/ava-labs/avalanchego/database/prefixdb"
4142
"github.com/ava-labs/avalanchego/genesis"
@@ -769,21 +770,39 @@ func (n *Node) initDatabase() error {
769770
// dbFolderName is appended to the database path given in the config
770771
dbFullPath := filepath.Join(n.Config.DatabaseConfig.Path, dbFolderName)
771772

772-
var err error
773-
n.DB, err = databasefactory.New(
773+
dbReg, err := metrics.MakeAndRegister(
774+
n.MetricsGatherer,
775+
dbNamespace,
776+
)
777+
if err != nil {
778+
return err
779+
}
780+
781+
db, err := databasefactory.New(
774782
n.Config.DatabaseConfig.Name,
775783
dbFullPath,
776784
n.Config.DatabaseConfig.ReadOnly,
777785
n.Config.DatabaseConfig.Config,
778-
n.MetricsGatherer,
786+
dbReg,
779787
n.Log,
780-
dbNamespace,
781-
"all",
782788
)
783789
if err != nil {
784790
return fmt.Errorf("couldn't create database: %w", err)
785791
}
786792

793+
meterDBReg, err := metrics.MakeAndRegister(
794+
n.MeterDBMetricsGatherer,
795+
"all",
796+
)
797+
if err != nil {
798+
return err
799+
}
800+
801+
n.DB, err = meterdb.New(meterDBReg, db)
802+
if err != nil {
803+
return err
804+
}
805+
787806
rawExpectedGenesisHash := hashing.ComputeHash256(n.Config.GenesisBytes)
788807

789808
rawGenesisHash, err := n.DB.Get(genesisHashKey)

0 commit comments

Comments
 (0)