cli integration

This commit is contained in:
i-norden 2021-11-17 12:22:40 -06:00
parent 81a8ffd257
commit aa984711bd
10 changed files with 29 additions and 11 deletions

View File

@ -45,6 +45,7 @@ import (
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/statediff" "github.com/ethereum/go-ethereum/statediff"
dumpdb "github.com/ethereum/go-ethereum/statediff/indexer/database/dump" dumpdb "github.com/ethereum/go-ethereum/statediff/indexer/database/dump"
"github.com/ethereum/go-ethereum/statediff/indexer/database/file"
"github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres" "github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres"
"github.com/ethereum/go-ethereum/statediff/indexer/interfaces" "github.com/ethereum/go-ethereum/statediff/indexer/interfaces"
"github.com/ethereum/go-ethereum/statediff/indexer/shared" "github.com/ethereum/go-ethereum/statediff/indexer/shared"
@ -204,6 +205,14 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
utils.Fatalf("%v", err) utils.Fatalf("%v", err)
} }
switch dbType { switch dbType {
case shared.FILE:
if !ctx.GlobalIsSet(utils.StateDiffFileNodeRowIDFlag.Name) {
utils.Fatalf("In statediff file writing mode a node row ID must be provided")
}
indexerConfig = file.Config{
NodeID: int64(ctx.GlobalInt(utils.StateDiffFileNodeRowIDFlag.Name)),
FilePath: ctx.GlobalString(utils.StateDiffFilePath.Name),
}
case shared.POSTGRES: case shared.POSTGRES:
driverTypeStr := ctx.GlobalString(utils.StateDiffDBDriverTypeFlag.Name) driverTypeStr := ctx.GlobalString(utils.StateDiffDBDriverTypeFlag.Name)
driverType, err := postgres.ResolveDriverType(driverTypeStr) driverType, err := postgres.ResolveDriverType(driverTypeStr)

View File

@ -167,6 +167,8 @@ var (
utils.StateDiffDBClientNameFlag, utils.StateDiffDBClientNameFlag,
utils.StateDiffWritingFlag, utils.StateDiffWritingFlag,
utils.StateDiffWorkersFlag, utils.StateDiffWorkersFlag,
utils.StateDiffFileNodeRowIDFlag,
utils.StateDiffFilePath,
configFileFlag, configFileFlag,
utils.CatalystFlag, utils.CatalystFlag,
} }

View File

@ -243,6 +243,8 @@ var AppHelpFlagGroups = []flags.FlagGroup{
utils.StateDiffDBClientNameFlag, utils.StateDiffDBClientNameFlag,
utils.StateDiffWritingFlag, utils.StateDiffWritingFlag,
utils.StateDiffWorkersFlag, utils.StateDiffWorkersFlag,
utils.StateDiffFileNodeRowIDFlag,
utils.StateDiffFilePath,
}, },
}, },
{ {

View File

@ -788,7 +788,7 @@ var (
} }
StateDiffDBTypeFlag = cli.StringFlag{ StateDiffDBTypeFlag = cli.StringFlag{
Name: "statediff.db.type", Name: "statediff.db.type",
Usage: "Statediff database type", Usage: "Statediff database type (current options: postgres, file, dump)",
Value: "postgres", Value: "postgres",
} }
StateDiffDBDriverTypeFlag = cli.StringFlag{ StateDiffDBDriverTypeFlag = cli.StringFlag{
@ -852,6 +852,14 @@ var (
Name: "statediff.db.nodeid", Name: "statediff.db.nodeid",
Usage: "Node ID to use when writing state diffs to database", Usage: "Node ID to use when writing state diffs to database",
} }
StateDiffFileNodeRowIDFlag = cli.IntFlag{
Name: "statediff.file.nodeid",
Usage: "Node row ID to use as FK when writing state diffs to database",
}
StateDiffFilePath = cli.StringFlag{
Name: "statediff.file.path",
Usage: "Full path (including filename) to write statediff data out to when operating in file mode",
}
StateDiffDBClientNameFlag = cli.StringFlag{ StateDiffDBClientNameFlag = cli.StringFlag{
Name: "statediff.db.clientname", Name: "statediff.db.clientname",
Usage: "Client name to use when writing state diffs to database", Usage: "Client name to use when writing state diffs to database",

View File

@ -20,10 +20,9 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/ethereum/go-ethereum/statediff/indexer/database/file"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/statediff/indexer/database/dump" "github.com/ethereum/go-ethereum/statediff/indexer/database/dump"
"github.com/ethereum/go-ethereum/statediff/indexer/database/file"
"github.com/ethereum/go-ethereum/statediff/indexer/database/sql" "github.com/ethereum/go-ethereum/statediff/indexer/database/sql"
"github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres" "github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres"
"github.com/ethereum/go-ethereum/statediff/indexer/interfaces" "github.com/ethereum/go-ethereum/statediff/indexer/interfaces"

View File

@ -22,7 +22,7 @@ import (
// Config holds params for writing sql statements out to a file // Config holds params for writing sql statements out to a file
type Config struct { type Config struct {
NodeID int64 // this is the nodeID used as FK in public.blocks NodeID int64 // this is the nodeID used as FK in eth.header_cids
FilePath string FilePath string
} }

View File

@ -63,9 +63,7 @@ func NewSQLWriter(file *os.File) *SQLWriter {
func (sqw *SQLWriter) Loop() { func (sqw *SQLWriter) Loop() {
sqw.collationIndex = 0 sqw.collationIndex = 0
go func() { go func() {
defer func() { defer close(sqw.doneChan)
close(sqw.doneChan)
}()
var l int var l int
for { for {
select { select {

View File

@ -53,7 +53,7 @@ func setupLegacyPGX(t *testing.T) {
} }
}() }()
for _, node := range legacyData.StateDiffs { for _, node := range legacyData.StateDiffs {
err = ind.PushStateNode(tx, node) err = ind.PushStateNode(tx, node, legacyData.MockBlock.Hash().String())
require.NoError(t, err) require.NoError(t, err)
} }

View File

@ -159,7 +159,7 @@ func setupSQLX(t *testing.T) {
} }
}() }()
for _, node := range mocks.StateDiffs { for _, node := range mocks.StateDiffs {
err = ind.PushStateNode(tx, node) err = ind.PushStateNode(tx, node, mockBlock.Hash().String())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@ -100,7 +100,7 @@ type StateNodeModel struct {
// StorageNodeModel is the db model for eth.storage_cids // StorageNodeModel is the db model for eth.storage_cids
type StorageNodeModel struct { type StorageNodeModel struct {
HeaderID string `db:"header_id""` HeaderID string `db:"header_id"`
StatePath []byte `db:"state_path"` StatePath []byte `db:"state_path"`
Path []byte `db:"storage_path"` Path []byte `db:"storage_path"`
StorageKey string `db:"storage_leaf_key"` StorageKey string `db:"storage_leaf_key"`
@ -112,7 +112,7 @@ type StorageNodeModel struct {
// StorageNodeWithStateKeyModel is a db model for eth.storage_cids + eth.state_cids.state_key // StorageNodeWithStateKeyModel is a db model for eth.storage_cids + eth.state_cids.state_key
type StorageNodeWithStateKeyModel struct { type StorageNodeWithStateKeyModel struct {
HeaderID string `db:"header_id""` HeaderID string `db:"header_id"`
StatePath []byte `db:"state_path"` StatePath []byte `db:"state_path"`
Path []byte `db:"storage_path"` Path []byte `db:"storage_path"`
StateKey string `db:"state_leaf_key"` StateKey string `db:"state_leaf_key"`