Skip to content

Commit 054412e

Browse files
committed
all: clean up and proerly abstract database access
1 parent 15eee47 commit 054412e

File tree

94 files changed

+1586
-1394
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+1586
-1394
lines changed

accounts/abi/bind/backends/simulated.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ type SimulatedBackend struct {
6666
// NewSimulatedBackend creates a new binding backend using a simulated blockchain
6767
// for testing purposes.
6868
func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend {
69-
database := ethdb.NewMemDatabase()
69+
database := rawdb.NewMemoryDatabase()
7070
genesis := core.Genesis{Config: params.AllEthashProtocolChanges, GasLimit: gasLimit, Alloc: alloc}
7171
genesis.MustCommit(database)
7272
blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, ethash.NewFaker(), vm.Config{}, nil)

cmd/evm/runner.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ import (
3131
"github.com/ethereum/go-ethereum/cmd/utils"
3232
"github.com/ethereum/go-ethereum/common"
3333
"github.com/ethereum/go-ethereum/core"
34+
"github.com/ethereum/go-ethereum/core/rawdb"
3435
"github.com/ethereum/go-ethereum/core/state"
3536
"github.com/ethereum/go-ethereum/core/vm"
3637
"github.com/ethereum/go-ethereum/core/vm/runtime"
37-
"github.com/ethereum/go-ethereum/ethdb"
3838
"github.com/ethereum/go-ethereum/log"
3939
"github.com/ethereum/go-ethereum/params"
4040
cli "gopkg.in/urfave/cli.v1"
@@ -99,12 +99,12 @@ func runCmd(ctx *cli.Context) error {
9999
if ctx.GlobalString(GenesisFlag.Name) != "" {
100100
gen := readGenesis(ctx.GlobalString(GenesisFlag.Name))
101101
genesisConfig = gen
102-
db := ethdb.NewMemDatabase()
102+
db := rawdb.NewMemoryDatabase()
103103
genesis := gen.ToBlock(db)
104104
statedb, _ = state.New(genesis.Root(), state.NewDatabase(db))
105105
chainConfig = gen.Config
106106
} else {
107-
statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase()))
107+
statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase()))
108108
genesisConfig = new(core.Genesis)
109109
}
110110
if ctx.GlobalString(SenderFlag.Name) != "" {

cmd/geth/chaincmd.go

+16-20
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,13 @@ import (
2929
"github.com/ethereum/go-ethereum/common"
3030
"github.com/ethereum/go-ethereum/console"
3131
"github.com/ethereum/go-ethereum/core"
32+
"github.com/ethereum/go-ethereum/core/rawdb"
3233
"github.com/ethereum/go-ethereum/core/state"
3334
"github.com/ethereum/go-ethereum/core/types"
3435
"github.com/ethereum/go-ethereum/eth/downloader"
35-
"github.com/ethereum/go-ethereum/ethdb"
3636
"github.com/ethereum/go-ethereum/event"
3737
"github.com/ethereum/go-ethereum/log"
3838
"github.com/ethereum/go-ethereum/trie"
39-
"github.com/syndtr/goleveldb/leveldb/util"
4039
"gopkg.in/urfave/cli.v1"
4140
)
4241

@@ -193,14 +192,15 @@ func initGenesis(ctx *cli.Context) error {
193192
defer stack.Close()
194193

195194
for _, name := range []string{"chaindata", "lightchaindata"} {
196-
chaindb, err := stack.OpenDatabase(name, 0, 0)
195+
chaindb, err := stack.OpenDatabase(name, 0, 0, "")
197196
if err != nil {
198197
utils.Fatalf("Failed to open database: %v", err)
199198
}
200199
_, hash, err := core.SetupGenesisBlock(chaindb, genesis)
201200
if err != nil {
202201
utils.Fatalf("Failed to write genesis block: %v", err)
203202
}
203+
chaindb.Close()
204204
log.Info("Successfully wrote genesis state", "database", name, "hash", hash)
205205
}
206206
return nil
@@ -213,8 +213,8 @@ func importChain(ctx *cli.Context) error {
213213
stack := makeFullNode(ctx)
214214
defer stack.Close()
215215

216-
chain, chainDb := utils.MakeChain(ctx, stack)
217-
defer chainDb.Close()
216+
chain, db := utils.MakeChain(ctx, stack)
217+
defer db.Close()
218218

219219
// Start periodically gathering memory profiles
220220
var peakMemAlloc, peakMemSys uint64
@@ -249,15 +249,13 @@ func importChain(ctx *cli.Context) error {
249249
fmt.Printf("Import done in %v.\n\n", time.Since(start))
250250

251251
// Output pre-compaction stats mostly to see the import trashing
252-
db := chainDb.(*ethdb.LDBDatabase)
253-
254-
stats, err := db.LDB().GetProperty("leveldb.stats")
252+
stats, err := db.Stat("leveldb.stats")
255253
if err != nil {
256254
utils.Fatalf("Failed to read database stats: %v", err)
257255
}
258256
fmt.Println(stats)
259257

260-
ioStats, err := db.LDB().GetProperty("leveldb.iostats")
258+
ioStats, err := db.Stat("leveldb.iostats")
261259
if err != nil {
262260
utils.Fatalf("Failed to read database iostats: %v", err)
263261
}
@@ -282,23 +280,22 @@ func importChain(ctx *cli.Context) error {
282280
// Compact the entire database to more accurately measure disk io and print the stats
283281
start = time.Now()
284282
fmt.Println("Compacting entire database...")
285-
if err = db.LDB().CompactRange(util.Range{}); err != nil {
283+
if err = db.Compact(nil, nil); err != nil {
286284
utils.Fatalf("Compaction failed: %v", err)
287285
}
288286
fmt.Printf("Compaction done in %v.\n\n", time.Since(start))
289287

290-
stats, err = db.LDB().GetProperty("leveldb.stats")
288+
stats, err = db.Stat("leveldb.stats")
291289
if err != nil {
292290
utils.Fatalf("Failed to read database stats: %v", err)
293291
}
294292
fmt.Println(stats)
295293

296-
ioStats, err = db.LDB().GetProperty("leveldb.iostats")
294+
ioStats, err = db.Stat("leveldb.iostats")
297295
if err != nil {
298296
utils.Fatalf("Failed to read database iostats: %v", err)
299297
}
300298
fmt.Println(ioStats)
301-
302299
return nil
303300
}
304301

@@ -344,10 +341,10 @@ func importPreimages(ctx *cli.Context) error {
344341
stack := makeFullNode(ctx)
345342
defer stack.Close()
346343

347-
diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase)
344+
db := utils.MakeChainDatabase(ctx, stack)
348345
start := time.Now()
349346

350-
if err := utils.ImportPreimages(diskdb, ctx.Args().First()); err != nil {
347+
if err := utils.ImportPreimages(db, ctx.Args().First()); err != nil {
351348
utils.Fatalf("Import error: %v\n", err)
352349
}
353350
fmt.Printf("Import done in %v\n", time.Since(start))
@@ -362,10 +359,10 @@ func exportPreimages(ctx *cli.Context) error {
362359
stack := makeFullNode(ctx)
363360
defer stack.Close()
364361

365-
diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase)
362+
db := utils.MakeChainDatabase(ctx, stack)
366363
start := time.Now()
367364

368-
if err := utils.ExportPreimages(diskdb, ctx.Args().First()); err != nil {
365+
if err := utils.ExportPreimages(db, ctx.Args().First()); err != nil {
369366
utils.Fatalf("Export error: %v\n", err)
370367
}
371368
fmt.Printf("Export done in %v\n", time.Since(start))
@@ -386,7 +383,7 @@ func copyDb(ctx *cli.Context) error {
386383
dl := downloader.New(syncmode, chainDb, new(event.TypeMux), chain, nil, nil)
387384

388385
// Create a source peer to satisfy downloader requests from
389-
db, err := ethdb.NewLDBDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256)
386+
db, err := rawdb.NewLevelDBDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256, "")
390387
if err != nil {
391388
return err
392389
}
@@ -413,11 +410,10 @@ func copyDb(ctx *cli.Context) error {
413410
// Compact the entire database to remove any sync overhead
414411
start = time.Now()
415412
fmt.Println("Compacting entire database...")
416-
if err = chainDb.(*ethdb.LDBDatabase).LDB().CompactRange(util.Range{}); err != nil {
413+
if err = db.Compact(nil, nil); err != nil {
417414
utils.Fatalf("Compaction failed: %v", err)
418415
}
419416
fmt.Printf("Compaction done in %v.\n\n", time.Since(start))
420-
421417
return nil
422418
}
423419

cmd/geth/dao_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525

2626
"github.com/ethereum/go-ethereum/common"
2727
"github.com/ethereum/go-ethereum/core/rawdb"
28-
"github.com/ethereum/go-ethereum/ethdb"
2928
"github.com/ethereum/go-ethereum/params"
3029
)
3130

@@ -121,7 +120,7 @@ func testDAOForkBlockNewChain(t *testing.T, test int, genesis string, expectBloc
121120
}
122121
// Retrieve the DAO config flag from the database
123122
path := filepath.Join(datadir, "geth", "chaindata")
124-
db, err := ethdb.NewLDBDatabase(path, 0, 0)
123+
db, err := rawdb.NewLevelDBDatabase(path, 0, 0, "")
125124
if err != nil {
126125
t.Fatalf("test %d: failed to open test database: %v", test, err)
127126
}

cmd/utils/cmd.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las
238238
}
239239

240240
// ImportPreimages imports a batch of exported hash preimages into the database.
241-
func ImportPreimages(db *ethdb.LDBDatabase, fn string) error {
241+
func ImportPreimages(db ethdb.Database, fn string) error {
242242
log.Info("Importing preimages", "file", fn)
243243

244244
// Open the file handle and potentially unwrap the gzip stream
@@ -285,7 +285,7 @@ func ImportPreimages(db *ethdb.LDBDatabase, fn string) error {
285285

286286
// ExportPreimages exports all known hash preimages into the specified file,
287287
// truncating any data already present in the file.
288-
func ExportPreimages(db *ethdb.LDBDatabase, fn string) error {
288+
func ExportPreimages(db ethdb.Database, fn string) error {
289289
log.Info("Exporting preimages", "file", fn)
290290

291291
// Open the file handle and potentially wrap with a gzip stream

cmd/utils/flags.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1548,7 +1548,7 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database {
15481548
if ctx.GlobalString(SyncModeFlag.Name) == "light" {
15491549
name = "lightchaindata"
15501550
}
1551-
chainDb, err := stack.OpenDatabase(name, cache, handles)
1551+
chainDb, err := stack.OpenDatabase(name, cache, handles, "")
15521552
if err != nil {
15531553
Fatalf("Could not open database: %v", err)
15541554
}

consensus/clique/snapshot_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ import (
2424

2525
"github.com/ethereum/go-ethereum/common"
2626
"github.com/ethereum/go-ethereum/core"
27+
"github.com/ethereum/go-ethereum/core/rawdb"
2728
"github.com/ethereum/go-ethereum/core/types"
2829
"github.com/ethereum/go-ethereum/core/vm"
2930
"github.com/ethereum/go-ethereum/crypto"
30-
"github.com/ethereum/go-ethereum/ethdb"
3131
"github.com/ethereum/go-ethereum/params"
3232
)
3333

@@ -400,7 +400,7 @@ func TestClique(t *testing.T) {
400400
copy(genesis.ExtraData[extraVanity+j*common.AddressLength:], signer[:])
401401
}
402402
// Create a pristine blockchain with the genesis injected
403-
db := ethdb.NewMemDatabase()
403+
db := rawdb.NewMemoryDatabase()
404404
genesis.Commit(db)
405405

406406
// Assemble a chain of headers from the cast votes

core/bench_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,14 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) {
150150
// Create the database in memory or in a temporary directory.
151151
var db ethdb.Database
152152
if !disk {
153-
db = ethdb.NewMemDatabase()
153+
db = rawdb.NewMemoryDatabase()
154154
} else {
155155
dir, err := ioutil.TempDir("", "eth-core-bench")
156156
if err != nil {
157157
b.Fatalf("cannot create temporary directory: %v", err)
158158
}
159159
defer os.RemoveAll(dir)
160-
db, err = ethdb.NewLDBDatabase(dir, 128, 128)
160+
db, err = rawdb.NewLevelDBDatabase(dir, 128, 128, "")
161161
if err != nil {
162162
b.Fatalf("cannot create temporary database: %v", err)
163163
}
@@ -255,7 +255,7 @@ func benchWriteChain(b *testing.B, full bool, count uint64) {
255255
if err != nil {
256256
b.Fatalf("cannot create temporary directory: %v", err)
257257
}
258-
db, err := ethdb.NewLDBDatabase(dir, 128, 1024)
258+
db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "")
259259
if err != nil {
260260
b.Fatalf("error opening database at %v: %v", dir, err)
261261
}
@@ -272,7 +272,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) {
272272
}
273273
defer os.RemoveAll(dir)
274274

275-
db, err := ethdb.NewLDBDatabase(dir, 128, 1024)
275+
db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "")
276276
if err != nil {
277277
b.Fatalf("error opening database at %v: %v", dir, err)
278278
}
@@ -283,7 +283,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) {
283283
b.ResetTimer()
284284

285285
for i := 0; i < b.N; i++ {
286-
db, err := ethdb.NewLDBDatabase(dir, 128, 1024)
286+
db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "")
287287
if err != nil {
288288
b.Fatalf("error opening database at %v: %v", dir, err)
289289
}

core/block_validator_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ import (
2222
"time"
2323

2424
"github.com/ethereum/go-ethereum/consensus/ethash"
25+
"github.com/ethereum/go-ethereum/core/rawdb"
2526
"github.com/ethereum/go-ethereum/core/types"
2627
"github.com/ethereum/go-ethereum/core/vm"
27-
"github.com/ethereum/go-ethereum/ethdb"
2828
"github.com/ethereum/go-ethereum/params"
2929
)
3030

3131
// Tests that simple header verification works, for both good and bad blocks.
3232
func TestHeaderVerification(t *testing.T) {
3333
// Create a simple chain to verify
3434
var (
35-
testdb = ethdb.NewMemDatabase()
35+
testdb = rawdb.NewMemoryDatabase()
3636
gspec = &Genesis{Config: params.TestChainConfig}
3737
genesis = gspec.MustCommit(testdb)
3838
blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 8, nil)
@@ -84,7 +84,7 @@ func TestHeaderConcurrentVerification32(t *testing.T) { testHeaderConcurrentVeri
8484
func testHeaderConcurrentVerification(t *testing.T, threads int) {
8585
// Create a simple chain to verify
8686
var (
87-
testdb = ethdb.NewMemDatabase()
87+
testdb = rawdb.NewMemoryDatabase()
8888
gspec = &Genesis{Config: params.TestChainConfig}
8989
genesis = gspec.MustCommit(testdb)
9090
blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 8, nil)
@@ -156,7 +156,7 @@ func TestHeaderConcurrentAbortion32(t *testing.T) { testHeaderConcurrentAbortion
156156
func testHeaderConcurrentAbortion(t *testing.T, threads int) {
157157
// Create a simple chain to verify
158158
var (
159-
testdb = ethdb.NewMemDatabase()
159+
testdb = rawdb.NewMemoryDatabase()
160160
gspec = &Genesis{Config: params.TestChainConfig}
161161
genesis = gspec.MustCommit(testdb)
162162
blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 1024, nil)

core/blockchain.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import (
4343
"github.com/ethereum/go-ethereum/params"
4444
"github.com/ethereum/go-ethereum/rlp"
4545
"github.com/ethereum/go-ethereum/trie"
46-
"github.com/hashicorp/golang-lru"
46+
lru "github.com/hashicorp/golang-lru"
4747
)
4848

4949
var (
@@ -291,7 +291,7 @@ func (bc *BlockChain) SetHead(head uint64) error {
291291
defer bc.chainmu.Unlock()
292292

293293
// Rewind the header chain, deleting all block bodies until then
294-
delFn := func(db rawdb.DatabaseDeleter, hash common.Hash, num uint64) {
294+
delFn := func(db ethdb.Deleter, hash common.Hash, num uint64) {
295295
rawdb.DeleteBody(db, hash, num)
296296
}
297297
bc.hc.SetHead(head, delFn)

0 commit comments

Comments
 (0)