updates to satisfy the v1.10.14 ethdb.Database interface

This commit is contained in:
i-norden 2021-12-29 00:17:09 -06:00
parent cc193fe2ec
commit 1b00d37715
9 changed files with 43 additions and 20 deletions

View File

@ -21,8 +21,8 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb"
"github.com/hashicorp/golang-lru" lru "github.com/hashicorp/golang-lru"
"github.com/ipfs/go-block-format" blocks "github.com/ipfs/go-block-format"
"github.com/ipfs/go-blockservice" "github.com/ipfs/go-blockservice"
) )
@ -30,6 +30,8 @@ var (
EvictionWarningErr = errors.New("warn: batch has exceeded capacity, data has been evicted") EvictionWarningErr = errors.New("warn: batch has exceeded capacity, data has been evicted")
) )
var _ ethdb.Batch = &Batch{}
// Batch is the type that satisfies the ethdb.Batch interface for IPFS Ethereum data using the ipfs blockservice interface // Batch is the type that satisfies the ethdb.Batch interface for IPFS Ethereum data using the ipfs blockservice interface
// This is ipfs-backing-datastore agnostic but must operate through a configured ipfs node (and so is subject to lockfile contention with e.g. an ipfs daemon) // This is ipfs-backing-datastore agnostic but must operate through a configured ipfs node (and so is subject to lockfile contention with e.g. an ipfs daemon)
// If blockservice block exchange is configured the blockservice can fetch data that are missing locally from IPFS peers // If blockservice block exchange is configured the blockservice can fetch data that are missing locally from IPFS peers

View File

@ -33,6 +33,8 @@ var (
errNotSupported = errors.New("this operation is not supported") errNotSupported = errors.New("this operation is not supported")
) )
var _ ethdb.Database = &Database{}
// Database is the type that satisfies the ethdb.Database and ethdb.KeyValueStore interfaces for IPFS Ethereum data // Database is the type that satisfies the ethdb.Database and ethdb.KeyValueStore interfaces for IPFS Ethereum data
// This is ipfs-backing-datastore agnostic but must operate through a configured ipfs node (and so is subject to lockfile contention with e.g. an ipfs daemon) // This is ipfs-backing-datastore agnostic but must operate through a configured ipfs node (and so is subject to lockfile contention with e.g. an ipfs daemon)
// If blockservice block exchange is configured the blockservice can fetch data that are missing locally from IPFS peers // If blockservice block exchange is configured the blockservice can fetch data that are missing locally from IPFS peers
@ -205,15 +207,20 @@ func (d *Database) AppendAncient(number uint64, hash, header, body, receipt, td
return errNotSupported return errNotSupported
} }
// ReadAncients retrieves multiple items in sequence, starting from the index 'start'. // AncientRange retrieves all the items in a range, starting from the index 'start'.
// It will return // It will return
// - at most 'count' items, // - at most 'count' items,
// - at least 1 item (even if exceeding the maxBytes), but will otherwise // - at least 1 item (even if exceeding the maxBytes), but will otherwise
// return as many items as fit into maxBytes. // return as many items as fit into maxBytes.
func (d *Database) ReadAncients(kind string, start, count, maxBytes uint64) ([][]byte, error) { func (d *Database) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) {
return nil, errNotSupported return nil, errNotSupported
} }
// ReadAncients applies the provided AncientReader function
func (d *Database) ReadAncients(fn func(ethdb.AncientReader) error) (err error) {
return errNotSupported
}
// TruncateAncients satisfies the ethdb.AncientWriter interface // TruncateAncients satisfies the ethdb.AncientWriter interface
// TruncateAncients discards all but the first n ancient data from the ancient store // TruncateAncients discards all but the first n ancient data from the ancient store
func (d *Database) TruncateAncients(n uint64) error { func (d *Database) TruncateAncients(n uint64) error {

View File

@ -23,6 +23,8 @@ import (
"github.com/ipfs/go-blockservice" "github.com/ipfs/go-blockservice"
) )
var _ ethdb.Iterator = &Iterator{}
// Iterator is the type that satisfies the ethdb.Iterator interface for IPFS Ethereum data // Iterator is the type that satisfies the ethdb.Iterator interface for IPFS Ethereum data
// Iteratee interface is used in Geth for various tests, trie/sync_bloom.go (for fast sync), // Iteratee interface is used in Geth for various tests, trie/sync_bloom.go (for fast sync),
// rawdb.InspectDatabase, and the new core/state/snapshot features. // rawdb.InspectDatabase, and the new core/state/snapshot features.

View File

@ -20,11 +20,11 @@ import (
"context" "context"
"errors" "errors"
"github.com/ipfs/go-block-format" blocks "github.com/ipfs/go-block-format"
"github.com/ipfs/go-blockservice" "github.com/ipfs/go-blockservice"
"github.com/ipfs/go-cid" "github.com/ipfs/go-cid"
"github.com/ipfs/go-ipfs-blockstore" blockstore "github.com/ipfs/go-ipfs-blockstore"
"github.com/ipfs/go-ipfs-exchange-interface" exchange "github.com/ipfs/go-ipfs-exchange-interface"
) )
var ( var (

View File

@ -21,6 +21,8 @@ import (
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
) )
var _ ethdb.Batch = &Batch{}
// Batch is the type that satisfies the ethdb.Batch interface for PG-IPFS Ethereum data using a direct Postgres connection // Batch is the type that satisfies the ethdb.Batch interface for PG-IPFS Ethereum data using a direct Postgres connection
type Batch struct { type Batch struct {
db *sqlx.DB db *sqlx.DB

View File

@ -20,6 +20,7 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"strconv"
"strings" "strings"
"time" "time"
@ -38,6 +39,8 @@ var (
dbSizePgStr = "SELECT pg_database_size(current_database())" dbSizePgStr = "SELECT pg_database_size(current_database())"
) )
var _ ethdb.Database = &Database{}
// Database is the type that satisfies the ethdb.Database and ethdb.KeyValueStore interfaces for PG-IPFS Ethereum data using a direct Postgres connection // Database is the type that satisfies the ethdb.Database and ethdb.KeyValueStore interfaces for PG-IPFS Ethereum data using a direct Postgres connection
type Database struct { type Database struct {
db *sqlx.DB db *sqlx.DB
@ -63,7 +66,7 @@ func NewKeyValueStore(db *sqlx.DB, cacheConfig CacheConfig) ethdb.KeyValueStore
} }
// NewDatabase returns a ethdb.Database interface for PG-IPFS // NewDatabase returns a ethdb.Database interface for PG-IPFS
func NewDatabase(db *sqlx.DB, cacheConfig CacheConfig) *Database { func NewDatabase(db *sqlx.DB, cacheConfig CacheConfig) ethdb.Database {
database := Database{db: db} database := Database{db: db}
database.InitCache(cacheConfig) database.InitCache(cacheConfig)
@ -212,19 +215,19 @@ func (d *Database) Stat(property string) (string, error) {
var byteSize string var byteSize string
return byteSize, d.db.Get(&byteSize, dbSizePgStr) return byteSize, d.db.Get(&byteSize, dbSizePgStr)
case Idle: case Idle:
return string(d.db.Stats().Idle), nil return strconv.Itoa(d.db.Stats().Idle), nil
case InUse: case InUse:
return string(d.db.Stats().InUse), nil return strconv.Itoa(d.db.Stats().InUse), nil
case MaxIdleClosed: case MaxIdleClosed:
return string(d.db.Stats().MaxIdleClosed), nil return strconv.FormatInt(d.db.Stats().MaxIdleClosed, 10), nil
case MaxLifetimeClosed: case MaxLifetimeClosed:
return string(d.db.Stats().MaxLifetimeClosed), nil return strconv.FormatInt(d.db.Stats().MaxLifetimeClosed, 10), nil
case MaxOpenConnections: case MaxOpenConnections:
return string(d.db.Stats().MaxOpenConnections), nil return strconv.Itoa(d.db.Stats().MaxOpenConnections), nil
case OpenConnections: case OpenConnections:
return string(d.db.Stats().OpenConnections), nil return strconv.Itoa(d.db.Stats().OpenConnections), nil
case WaitCount: case WaitCount:
return string(d.db.Stats().WaitCount), nil return strconv.FormatInt(d.db.Stats().WaitCount, 10), nil
case WaitDuration: case WaitDuration:
return d.db.Stats().WaitDuration.String(), nil return d.db.Stats().WaitDuration.String(), nil
default: default:
@ -292,15 +295,20 @@ func (d *Database) AppendAncient(number uint64, hash, header, body, receipt, td
return errNotSupported return errNotSupported
} }
// ReadAncients retrieves multiple items in sequence, starting from the index 'start'. // AncientRange retrieves all the items in a range, starting from the index 'start'.
// It will return // It will return
// - at most 'count' items, // - at most 'count' items,
// - at least 1 item (even if exceeding the maxBytes), but will otherwise // - at least 1 item (even if exceeding the maxBytes), but will otherwise
// return as many items as fit into maxBytes. // return as many items as fit into maxBytes.
func (d *Database) ReadAncients(kind string, start, count, maxBytes uint64) ([][]byte, error) { func (d *Database) AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error) {
return nil, errNotSupported return nil, errNotSupported
} }
// ReadAncients applies the provided AncientReader function
func (d *Database) ReadAncients(fn func(ethdb.AncientReader) error) (err error) {
return errNotSupported
}
// TruncateAncients satisfies the ethdb.AncientWriter interface // TruncateAncients satisfies the ethdb.AncientWriter interface
// TruncateAncients discards all but the first n ancient data from the ancient store // TruncateAncients discards all but the first n ancient data from the ancient store
func (d *Database) TruncateAncients(n uint64) error { func (d *Database) TruncateAncients(n uint64) error {

View File

@ -21,6 +21,8 @@ import (
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
) )
var _ ethdb.Iterator = &Iterator{}
// Iterator is the type that satisfies the ethdb.Iterator interface for PG-IPFS Ethereum data using a direct Postgres connection // Iterator is the type that satisfies the ethdb.Iterator interface for PG-IPFS Ethereum data using a direct Postgres connection
// Iteratee interface is used in Geth for various tests, trie/sync_bloom.go (for fast sync), // Iteratee interface is used in Geth for various tests, trie/sync_bloom.go (for fast sync),
// rawdb.InspectDatabase, and the new core/state/snapshot features. // rawdb.InspectDatabase, and the new core/state/snapshot features.

View File

@ -17,8 +17,8 @@
package pgipfsethdb package pgipfsethdb
import ( import (
"github.com/ipfs/go-ipfs-blockstore" blockstore "github.com/ipfs/go-ipfs-blockstore"
"github.com/ipfs/go-ipfs-ds-help" dshelp "github.com/ipfs/go-ipfs-ds-help"
"github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx"
_ "github.com/lib/pq" //postgres driver _ "github.com/lib/pq" //postgres driver
"github.com/multiformats/go-multihash" "github.com/multiformats/go-multihash"

View File

@ -17,7 +17,7 @@
package ipfsethdb package ipfsethdb
import ( import (
"github.com/ipfs/go-block-format" blocks "github.com/ipfs/go-block-format"
"github.com/ipfs/go-cid" "github.com/ipfs/go-cid"
_ "github.com/lib/pq" //postgres driver _ "github.com/lib/pq" //postgres driver
"github.com/multiformats/go-multihash" "github.com/multiformats/go-multihash"