Postgres datastore constructor methods

This commit is contained in:
Ian Norden 2020-09-18 09:10:56 -05:00
parent c0b4f6fe24
commit 29259bc3e6
4 changed files with 42 additions and 0 deletions

View File

@ -24,6 +24,8 @@ import (
"runtime"
"time"
"github.com/ethereum/go-ethereum/ethdb/postgres"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/consensus/ethash"
"github.com/ethereum/go-ethereum/core"
@ -160,4 +162,7 @@ type Config struct {
// MuirGlacier block override (TODO: remove after the fork)
OverrideMuirGlacier *big.Int
// Config params for Postgres database
PostgresConfig *postgres.Config
}

View File

@ -26,6 +26,8 @@ import (
"strings"
"sync"
"github.com/ethereum/go-ethereum/ethdb/postgres"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/external"
"github.com/ethereum/go-ethereum/accounts/keystore"
@ -191,6 +193,9 @@ type Config struct {
staticNodesWarning bool
trustedNodesWarning bool
oldGethResourceWarning bool
// Config params for using Postgres database
PostgresConfig *postgres.Config
}
// IPCEndpoint resolves an IPC endpoint based on a configured value, taking into

View File

@ -26,6 +26,8 @@ import (
"strings"
"sync"
"github.com/ethereum/go-ethereum/ethdb/postgres"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/ethdb"
@ -607,6 +609,9 @@ func (n *Node) EventMux() *event.TypeMux {
// previous can be found) from within the node's instance directory. If the node is
// ephemeral, a memory database is returned.
func (n *Node) OpenDatabase(name string, cache, handles int, namespace string) (ethdb.Database, error) {
if n.config.PostgresConfig != nil {
return n.openPostgresDatabase()
}
if n.config.DataDir == "" {
return rawdb.NewMemoryDatabase(), nil
}
@ -619,6 +624,9 @@ func (n *Node) OpenDatabase(name string, cache, handles int, namespace string) (
// database to immutable append-only files. If the node is an ephemeral one, a
// memory database is returned.
func (n *Node) OpenDatabaseWithFreezer(name string, cache, handles int, freezer, namespace string) (ethdb.Database, error) {
if n.config.PostgresConfig != nil {
return n.openPostgresDatabase()
}
if n.config.DataDir == "" {
return rawdb.NewMemoryDatabase(), nil
}
@ -633,6 +641,14 @@ func (n *Node) OpenDatabaseWithFreezer(name string, cache, handles int, freezer,
return rawdb.NewLevelDBDatabaseWithFreezer(root, cache, handles, freezer, namespace)
}
func (n *Node) openPostgresDatabase() (ethdb.Database, error) {
db, err := postgres.NewDB(n.config.PostgresConfig)
if err != nil {
return nil, err
}
return postgres.NewDatabase(db), nil
}
// ResolvePath returns the absolute path of a resource in the instance directory.
func (n *Node) ResolvePath(x string) string {
return n.config.ResolvePath(x)

View File

@ -20,6 +20,8 @@ import (
"path/filepath"
"reflect"
"github.com/ethereum/go-ethereum/ethdb/postgres"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/core/rawdb"
"github.com/ethereum/go-ethereum/ethdb"
@ -42,6 +44,9 @@ type ServiceContext struct {
// if no previous can be found) from within the node's data directory. If the
// node is an ephemeral one, a memory database is returned.
func (ctx *ServiceContext) OpenDatabase(name string, cache int, handles int, namespace string) (ethdb.Database, error) {
if ctx.config.PostgresConfig != nil {
return ctx.openPostgresDatabase()
}
if ctx.config.DataDir == "" {
return rawdb.NewMemoryDatabase(), nil
}
@ -54,6 +59,9 @@ func (ctx *ServiceContext) OpenDatabase(name string, cache int, handles int, nam
// database to immutable append-only files. If the node is an ephemeral one, a
// memory database is returned.
func (ctx *ServiceContext) OpenDatabaseWithFreezer(name string, cache int, handles int, freezer string, namespace string) (ethdb.Database, error) {
if ctx.config.PostgresConfig != nil {
return ctx.openPostgresDatabase()
}
if ctx.config.DataDir == "" {
return rawdb.NewMemoryDatabase(), nil
}
@ -68,6 +76,14 @@ func (ctx *ServiceContext) OpenDatabaseWithFreezer(name string, cache int, handl
return rawdb.NewLevelDBDatabaseWithFreezer(root, cache, handles, freezer, namespace)
}
func (ctx *ServiceContext) openPostgresDatabase() (ethdb.Database, error) {
db, err := postgres.NewDB(ctx.config.PostgresConfig)
if err != nil {
return nil, err
}
return postgres.NewDatabase(db), nil
}
// ResolvePath resolves a user path into the data directory if that was relative
// and if the user actually uses persistent storage. It will return an empty string
// for emphemeral storage and the user's own input for absolute paths.