Skip to content

Commit 553183e

Browse files
authored
core, eth, node: use sync write option in pebble (#31519)
Fixes #31499
1 parent 49f0d49 commit 553183e

7 files changed

+23
-18
lines changed

core/bench_test.go

+4-4
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)
186+
pdb, err := pebble.New(b.TempDir(), 128, 128, "", false, true)
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)
306+
pdb, err := pebble.New(b.TempDir(), 1024, 128, "", false, true)
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)
319+
pdb, err := pebble.New(dir, 1024, 128, "", false, true)
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)
335+
pdb, err = pebble.New(dir, 1024, 128, "", false, true)
336336
if err != nil {
337337
b.Fatalf("error opening database: %v", err)
338338
}

core/blockchain_repair_test.go

+4-4
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)
1768+
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
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)
1853+
pdb, err = pebble.New(datadir, 0, 0, "", false, true)
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)
1918+
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
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)
1976+
pdb, err = pebble.New(datadir, 0, 0, "", false, true)
19771977
if err != nil {
19781978
t.Fatalf("Failed to reopen persistent key-value database: %v", err)
19791979
}

core/blockchain_sethead_test.go

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

core/blockchain_snapshot_test.go

+2-2
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)
69+
pdb, err := pebble.New(datadir, 0, 0, "", false, true)
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)
260+
pdb, err := pebble.New(snaptest.datadir, 0, 0, "", false, true)
261261
if err != nil {
262262
t.Fatalf("Failed to create persistent key-value database: %v", err)
263263
}

core/blockchain_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2491,7 +2491,7 @@ func testSideImportPrunedBlocks(t *testing.T, scheme string) {
24912491
datadir := t.TempDir()
24922492
ancient := path.Join(datadir, "ancient")
24932493

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

ethdb/pebble/pebble.go

+2-2
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) (*Database, error) {
147+
func New(file string, cache int, handles int, namespace string, readonly bool, ephemeral 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) (
185185
fn: file,
186186
log: logger,
187187
quitChan: make(chan chan error),
188-
writeOptions: &pebble.WriteOptions{Sync: false},
188+
writeOptions: &pebble.WriteOptions{Sync: !ephemeral},
189189
}
190190
opt := &pebble.Options{
191191
// Pebble has a single combined cache area and the write

node/database.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ 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
3944
}
4045

4146
// openDatabase opens both a disk-based key-value database such as leveldb or pebble, but also
@@ -78,15 +83,15 @@ func openKeyValueDatabase(o openOptions) (ethdb.Database, error) {
7883
}
7984
if o.Type == rawdb.DBPebble || existingDb == rawdb.DBPebble {
8085
log.Info("Using pebble as the backing database")
81-
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly)
86+
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly, o.Ephemeral)
8287
}
8388
if o.Type == rawdb.DBLeveldb || existingDb == rawdb.DBLeveldb {
8489
log.Info("Using leveldb as the backing database")
8590
return newLevelDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly)
8691
}
8792
// No pre-existing database, no user-requested one either. Default to Pebble.
8893
log.Info("Defaulting to pebble as the backing database")
89-
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly)
94+
return newPebbleDBDatabase(o.Directory, o.Cache, o.Handles, o.Namespace, o.ReadOnly, o.Ephemeral)
9095
}
9196

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

103108
// newPebbleDBDatabase creates a persistent key-value database without a freezer
104109
// moving immutable chain segments into cold storage.
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)
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)
107112
if err != nil {
108113
return nil, err
109114
}

0 commit comments

Comments
 (0)