Skip to content

Commit b3d0362

Browse files
committed
core, ethdb/pebble: enable async write mode in pebble
1 parent 1665dfe commit b3d0362

File tree

7 files changed

+20
-24
lines changed

7 files changed

+20
-24
lines changed

core/bench_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) {
183183
if !disk {
184184
db = rawdb.NewMemoryDatabase()
185185
} else {
186-
pdb, err := pebble.New(b.TempDir(), 128, 128, "", false, true)
186+
pdb, err := pebble.New(b.TempDir(), 128, 128, "", false)
187187
if err != nil {
188188
b.Fatalf("cannot create temporary database: %v", err)
189189
}
@@ -303,7 +303,7 @@ func makeChainForBench(db ethdb.Database, genesis *Genesis, full bool, count uin
303303
func benchWriteChain(b *testing.B, full bool, count uint64) {
304304
genesis := &Genesis{Config: params.AllEthashProtocolChanges}
305305
for i := 0; i < b.N; i++ {
306-
pdb, err := pebble.New(b.TempDir(), 1024, 128, "", false, true)
306+
pdb, err := pebble.New(b.TempDir(), 1024, 128, "", false)
307307
if err != nil {
308308
b.Fatalf("error opening database: %v", err)
309309
}
@@ -316,7 +316,7 @@ func benchWriteChain(b *testing.B, full bool, count uint64) {
316316
func benchReadChain(b *testing.B, full bool, count uint64) {
317317
dir := b.TempDir()
318318

319-
pdb, err := pebble.New(dir, 1024, 128, "", false, true)
319+
pdb, err := pebble.New(dir, 1024, 128, "", false)
320320
if err != nil {
321321
b.Fatalf("error opening database: %v", err)
322322
}
@@ -332,7 +332,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) {
332332
b.ResetTimer()
333333

334334
for i := 0; i < b.N; i++ {
335-
pdb, err = pebble.New(dir, 1024, 128, "", false, true)
335+
pdb, err = pebble.New(dir, 1024, 128, "", false)
336336
if err != nil {
337337
b.Fatalf("error opening database: %v", err)
338338
}

core/blockchain_repair_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,7 +1765,7 @@ func testRepairWithScheme(t *testing.T, tt *rewindTest, snapshots bool, scheme s
17651765
datadir := t.TempDir()
17661766
ancient := filepath.Join(datadir, "ancient")
17671767

1768-
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
1768+
pdb, err := pebble.New(datadir, 0, 0, "", false)
17691769
if err != nil {
17701770
t.Fatalf("Failed to create persistent key-value database: %v", err)
17711771
}
@@ -1850,7 +1850,7 @@ func testRepairWithScheme(t *testing.T, tt *rewindTest, snapshots bool, scheme s
18501850
chain.stopWithoutSaving()
18511851

18521852
// Start a new blockchain back up and see where the repair leads us
1853-
pdb, err = pebble.New(datadir, 0, 0, "", false, true)
1853+
pdb, err = pebble.New(datadir, 0, 0, "", false)
18541854
if err != nil {
18551855
t.Fatalf("Failed to reopen persistent key-value database: %v", err)
18561856
}
@@ -1915,7 +1915,7 @@ func testIssue23496(t *testing.T, scheme string) {
19151915
datadir := t.TempDir()
19161916
ancient := filepath.Join(datadir, "ancient")
19171917

1918-
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
1918+
pdb, err := pebble.New(datadir, 0, 0, "", false)
19191919
if err != nil {
19201920
t.Fatalf("Failed to create persistent key-value database: %v", err)
19211921
}
@@ -1973,7 +1973,7 @@ func testIssue23496(t *testing.T, scheme string) {
19731973
chain.stopWithoutSaving()
19741974

19751975
// Start a new blockchain back up and see where the repair leads us
1976-
pdb, err = pebble.New(datadir, 0, 0, "", false, true)
1976+
pdb, err = pebble.New(datadir, 0, 0, "", false)
19771977
if err != nil {
19781978
t.Fatalf("Failed to reopen persistent key-value database: %v", err)
19791979
}

core/blockchain_sethead_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1969,7 +1969,7 @@ func testSetHeadWithScheme(t *testing.T, tt *rewindTest, snapshots bool, scheme
19691969
datadir := t.TempDir()
19701970
ancient := filepath.Join(datadir, "ancient")
19711971

1972-
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
1972+
pdb, err := pebble.New(datadir, 0, 0, "", false)
19731973
if err != nil {
19741974
t.Fatalf("Failed to create persistent key-value database: %v", err)
19751975
}

core/blockchain_snapshot_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func (basic *snapshotTestBasic) prepare(t *testing.T) (*BlockChain, []*types.Blo
6666
datadir := t.TempDir()
6767
ancient := filepath.Join(datadir, "ancient")
6868

69-
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
69+
pdb, err := pebble.New(datadir, 0, 0, "", false)
7070
if err != nil {
7171
t.Fatalf("Failed to create persistent key-value database: %v", err)
7272
}
@@ -257,7 +257,7 @@ func (snaptest *crashSnapshotTest) test(t *testing.T) {
257257
chain.triedb.Close()
258258

259259
// Start a new blockchain back up and see where the repair leads us
260-
pdb, err := pebble.New(snaptest.datadir, 0, 0, "", false, true)
260+
pdb, err := pebble.New(snaptest.datadir, 0, 0, "", false)
261261
if err != nil {
262262
t.Fatalf("Failed to create persistent key-value database: %v", err)
263263
}

core/blockchain_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2492,7 +2492,7 @@ func testSideImportPrunedBlocks(t *testing.T, scheme string) {
24922492
datadir := t.TempDir()
24932493
ancient := path.Join(datadir, "ancient")
24942494

2495-
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
2495+
pdb, err := pebble.New(datadir, 0, 0, "", false)
24962496
if err != nil {
24972497
t.Fatalf("Failed to create persistent key-value database: %v", err)
24982498
}

ethdb/pebble/pebble.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (l panicLogger) Fatalf(format string, args ...interface{}) {
144144

145145
// New returns a wrapped pebble DB object. The namespace is the prefix that the
146146
// metrics reporting should use for surfacing internal stats.
147-
func New(file string, cache int, handles int, namespace string, readonly bool, ephemeral bool) (*Database, error) {
147+
func New(file string, cache int, handles int, namespace string, readonly bool) (*Database, error) {
148148
// Ensure we have some minimal caching and file guarantees
149149
if cache < minCache {
150150
cache = minCache
@@ -185,7 +185,7 @@ func New(file string, cache int, handles int, namespace string, readonly bool, e
185185
fn: file,
186186
log: logger,
187187
quitChan: make(chan chan error),
188-
writeOptions: &pebble.WriteOptions{Sync: !ephemeral},
188+
writeOptions: &pebble.WriteOptions{Sync: false},
189189
}
190190
opt := &pebble.Options{
191191
// Pebble has a single combined cache area and the write
@@ -227,7 +227,8 @@ func New(file string, cache int, handles int, namespace string, readonly bool, e
227227
WriteStallBegin: db.onWriteStallBegin,
228228
WriteStallEnd: db.onWriteStallEnd,
229229
},
230-
Logger: panicLogger{}, // TODO(karalabe): Delete when this is upstreamed in Pebble
230+
WALBytesPerSync: 5 * ethdb.IdealBatchSize,
231+
Logger: panicLogger{}, // TODO(karalabe): Delete when this is upstreamed in Pebble
231232
}
232233
// Disable seek compaction explicitly. Check https://github.com/ethereum/go-ethereum/pull/20130
233234
// for more details.

node/database.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,6 @@ type openOptions struct {
3636
Cache int // the capacity(in megabytes) of the data caching
3737
Handles int // number of files to be open simultaneously
3838
ReadOnly bool
39-
40-
// Ephemeral means that filesystem sync operations should be avoided:
41-
// data integrity in the face of a crash is not important. This option
42-
// should typically be used in tests.
43-
Ephemeral bool
4439
}
4540

4641
// openDatabase opens both a disk-based key-value database such as leveldb or pebble, but also
@@ -83,15 +78,15 @@ func openKeyValueDatabase(o openOptions) (ethdb.Database, error) {
8378
}
8479
if o.Type == rawdb.DBPebble || existingDb == rawdb.DBPebble {
8580
log.Info("Using pebble as the backing database")
86-
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly, o.Ephemeral)
81+
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly)
8782
}
8883
if o.Type == rawdb.DBLeveldb || existingDb == rawdb.DBLeveldb {
8984
log.Info("Using leveldb as the backing database")
9085
return newLevelDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly)
9186
}
9287
// No pre-existing database, no user-requested one either. Default to Pebble.
9388
log.Info("Defaulting to pebble as the backing database")
94-
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly, o.Ephemeral)
89+
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly)
9590
}
9691

9792
// newLevelDBDatabase creates a persistent key-value database without a freezer
@@ -107,8 +102,8 @@ func newLevelDBDatabase(file string, cache int, handles int, namespace string, r
107102

108103
// newPebbleDBDatabase creates a persistent key-value database without a freezer
109104
// moving immutable chain segments into cold storage.
110-
func newPebbleDBDatabase(file string, cache int, handles int, namespace string, readonly bool, ephemeral bool) (ethdb.Database, error) {
111-
db, err := pebble.New(file, cache, handles, namespace, readonly, ephemeral)
105+
func newPebbleDBDatabase(file string, cache int, handles int, namespace string, readonly bool) (ethdb.Database, error) {
106+
db, err := pebble.New(file, cache, handles, namespace, readonly)
112107
if err != nil {
113108
return nil, err
114109
}

0 commit comments

Comments
 (0)