updates to satisfy the v1.10.14 ethdb.Database interface
This commit is contained in:
parent
cc193fe2ec
commit
1b00d37715
6
batch.go
6
batch.go
@ -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
|
||||||
|
11
database.go
11
database.go
@ -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 {
|
||||||
|
@ -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.
|
||||||
|
@ -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 (
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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.
|
||||||
|
@ -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"
|
||||||
|
2
util.go
2
util.go
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user