Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
e3b3fab
all: chain freezer on top of db rework (19244)
gzliudan Mar 3, 2025
fa32d9f
core/rawdb, eth/downloader: align 64bit atomic fields (19591)
gzliudan Mar 3, 2025
09556da
core/rawdb: keep genesis in key-value store for full sync too (19628)
gzliudan Mar 3, 2025
c31eaae
core: concurrent database reinit from freezer dump (19604)
gzliudan Mar 3, 2025
daa6157
core/rawdb: avoid O_APPEND (19676)
gzliudan Mar 3, 2025
7261f48
core/rawdb: expose various counter metrics for grafana (19692)
gzliudan Mar 3, 2025
1e4a1ec
core: fix fast head updating logic (19764)
gzliudan Mar 11, 2025
99adb40
core/rawdb: remove unused function print
gzliudan Mar 3, 2025
74052af
core/rawdb: add missing error checks (19871)
gzliudan Mar 3, 2025
4e1b59e
core/rawdb: switch some invalid counters to gauges (20047)
gzliudan Mar 3, 2025
4ebd98e
core/rawdb: check hash before return data from ancient db (20195)
gzliudan Mar 3, 2025
e4375f5
core/rawdb: fix reinit regression caused by the hash check PR (20403)
gzliudan Mar 3, 2025
b43232e
core: write chain data in atomic way (20287)
gzliudan Mar 4, 2025
4b72b39
core/rawdb: fix freezer table test error check (20779)
meowsbits Mar 18, 2020
9e10b8d
core/rawdb: fix data race between Retrieve and Close (20919)
MariusVanDerWijden Apr 14, 2020
2f859ca
core/rawdb: stop freezer process as part of freezer.Close() (21010)
AusIV May 11, 2020
aa4f8e1
all: tx background indexing/unindexing, improve chain initiation from…
gzliudan Mar 4, 2025
c204c45
core/rawdb: swap tailId and itemOffset for deleted items in freezer (…
zhangsoledad Jun 17, 2020
685885d
core/rawdb: fix high memory usage in freezer (21243)
AusIV Jun 19, 2020
bde99a7
all: historical data garbage collection (19570)
gzliudan Mar 7, 2025
9c8b52e
core/rawdb: better log messages for ancient failure (21327)
rjl493456442 Jul 13, 2020
afdde7b
core/rawdb: convert some comments to godoc convention (21384)
meowsbits Jul 29, 2020
9ecf8e8
core/rawdb: refactor freezer (21105)
gzliudan Mar 10, 2025
f78feb7
core: define and test chain reparation cornercases (21409)
gzliudan Mar 10, 2025
a05e46f
core/rawdb: only complain loudly if truncating many items (21483)
karalabe Aug 25, 2020
bd44c4d
eth/downloader: fix memory leak (21491)
gzliudan Mar 11, 2025
46c3aff
eth/downloader: only roll back light sync if not fully validating (21…
gzliudan Mar 11, 2025
dbc6158
core/rawdb: added counters to the db inspect report (21495)
gzliudan Mar 11, 2025
46a2e76
eth/downloader: dynamically move pivot even during chain sync (21529)
gzliudan Mar 10, 2025
186925a
eth/downloader: fix data race around the ancientlimit (21681)
rjl493456442 Oct 9, 2020
b9d4ba9
core: refactor function SetHead (21594)
gzliudan Mar 12, 2025
2333681
core: aiming genesis when middle block is missing (22135)
gzliudan Mar 14, 2025
b1e4f11
core/rawdb: add function newFreezerTable (21967)
gzliudan Mar 11, 2025
78ea6df
core/rawdb: refactor function InspectDatabase (22014)
gzliudan Mar 11, 2025
e1d2b45
all: add read-only option to database (22407)
gzliudan Mar 11, 2025
0511ce4
cmd/XDC, core/rawdb: add db-command to inspect freezer index (22633)
gzliudan Mar 11, 2025
5b1c5ea
core/rawdb: fix datarace in freezer (22728)
holiman Apr 26, 2021
1e9830a
core: remove old conversion to shuffle leveldb blocks into ancients (…
gzliudan Mar 11, 2025
7e76508
core/rawdb: wait for background freezing to exit when closing freezer…
holiman May 17, 2021
1b30c02
core/rawdb: db inspect move 'config' and 'shutdown' into 'meta data' …
gzliudan Mar 21, 2025
6623427
core/rawdb: implement sequential reads in freezer_table (23117)
holiman Aug 13, 2021
745167a
eth/downloader: fix typo in comment (23413)
chuwt Aug 18, 2021
a771757
core/rawdb: freezer batch write (23462)
holiman Sep 7, 2021
2e75121
core/rawdb, ethdb: introduce batched/atomic reads from ancients (23566)
holiman Oct 25, 2021
f4a31a0
core/rawdb: better error message in freezer (23901)
holiman Nov 16, 2021
91a849a
core, eth/downloader: fix resetting below freezer threshold (23949)
gzliudan Mar 12, 2025
a9b4c65
core/rawdb: use AncientRange when initializing leveldb from freezer (…
holiman Nov 23, 2021
941f52d
core/rawdb: improve delivery speed on header requests (23105)
holiman Dec 7, 2021
bb62644
core/rawdb: enforce readonly in freezer instantiation (24119)
s1na Jan 18, 2022
ca3c512
cmd/XDC: add db cmd to show metadata (23900)
gzliudan Mar 19, 2025
f54f19d
core/rawdb, cmd, ethdb, eth: implement freezer tail deletion (23954)
rjl493456442 Mar 10, 2022
b6b8817
core/rawdb: fix db commands (24540)
rjl493456442 Mar 22, 2022
9896a72
core/rawdb: simple legacy receipt converter (24028)
s1na Mar 23, 2022
eb1ca4d
core/rawdb: use T.TempDir to create temporary test directories (24633)
gzliudan Apr 15, 2025
be6e975
core/rawdb: fix typo (24731)
s7v7nislands Apr 25, 2022
565d8c8
core/rawdb: untie freezer and ancient chain data (24684)
rjl493456442 May 6, 2022
278d886
core/rawdb: fix typo in comment (25191)
noirgif Jun 29, 2022
fd37248
cmd, core, ethdb, node: move chain freezer one folder deeper (25487)
rjl493456442 Aug 8, 2022
c597a36
core/rawdb: fix some typos (25551)
gzliudan Mar 17, 2025
315ab9c
core/rawdb: fix leak of backoff timer (25776)
ucwong Sep 16, 2022
92b3a6a
core/rawdb: provide more info on 'gap in the chain' error (25938)
holiman Oct 12, 2022
c90bf10
core/rawdb: open meta file in read only mode (26009)
rjl493456442 Oct 19, 2022
81f9e78
core/rawdb: refactor db inspector for extending multiple ancient stor…
gzliudan Mar 17, 2025
daf979f
core/rawdb: improve freezerTable.Sync (26245)
fjl Nov 24, 2022
3c47fd1
core/rawdb: fix freezer validation (26251)
rjl493456442 Nov 25, 2022
5ca0d66
core/rawdb: implement resettable freezer (26324)
rjl493456442 Dec 19, 2022
413cbab
core/rawdb: fsync head data file before closing it (26490)
rjl493456442 Jan 13, 2023
3387d74
core/rawdb: fix cornercase shutdown behaviour in freezer (26485)
holiman Jan 16, 2023
d73fd2c
core/rawdb: expose chain freezer constructor without internals (26748)
karalabe Feb 21, 2023
ec45219
core/rawdb, node: use standalone flock dependency (26633)
holiman Feb 23, 2023
7632885
core/rawdb: use atomic int added in go1.19 (26935)
s7v7nislands Mar 21, 2023
c0f172a
core/rawdb: update freezertable read meter (26946)
jsvisa Mar 23, 2023
f5734d7
core/rawdb: replace noarg fmt.Errorf with errors.New (27332)
gzliudan Mar 18, 2025
58b1a1a
core/rawdb: support freezer batch read with no size limit (27687)
rjl493456442 Jul 12, 2023
0c4086b
core/rawdb: no need to run truncateFile for readonly mode (28145)
jsvisa Sep 21, 2023
5194e32
core/rawdb: use readonly file lock in readonly mode (28180)
jsvisa Sep 22, 2023
f21a6ea
trie/triedb/pathdb, core/rawdb: enhance error message in freezer (28198)
rjl493456442 Oct 23, 2023
e1226be
core/rawdb: add logging and fix comments around AncientRange function…
jakub-freebit Oct 31, 2023
7b3c5a5
core/rawdb: fsync the index file after each freezer write (28483)
rjl493456442 Nov 10, 2023
8e4c5e7
core/rawdb: implement size reporting for live items in freezer_table …
wangyifan Dec 18, 2023
d12dd7b
core/rawdb: find smallest block stored in key-value store when chain …
rjl493456442 Mar 8, 2023
40bb5dd
core/rawdb: fix ancient root folder (29697)
rjl493456442 May 2, 2024
424ac05
core/rawdb: fix freezer read-only option (29823)
gzliudan Mar 19, 2025
07f94e9
core/rawdb: more accurate description of freezer in docs (30393)
rjl493456442 Sep 13, 2024
50a1928
core/rawdb: freezer index repair (29792)
rjl493456442 Oct 1, 2024
db8354a
ethdb: refactor Database interface (30693)
gzliudan Mar 19, 2025
2386933
core/rawdb: fix panic in freezer (30973)
MariusVanDerWijden Jan 6, 2025
4534339
core/rawdb: introduce flush offset in freezer (30392)
rjl493456442 Feb 4, 2025
d6e45a1
core/rawdb: skip setting flushOffset in read-only mode (31173)
rjl493456442 Feb 13, 2025
1d938e5
core/rawdb: allow for truncation in the freezer (31362)
MariusVanDerWijden Mar 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion XDCxDAO/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,16 @@ type XDCXDAO interface {
HasAncient(kind string, number uint64) (bool, error)
Ancient(kind string, number uint64) ([]byte, error)
Ancients() (uint64, error)
Tail() (uint64, error)
AncientSize(kind string) (uint64, error)
AppendAncient(number uint64, hash, header, body, receipt, td []byte) error
TruncateAncients(n uint64) error
TruncateHead(n uint64) error
TruncateTail(n uint64) error
AncientRange(kind string, start, count, maxBytes uint64) ([][]byte, error)
ReadAncients(fn func(ethdb.AncientReaderOp) error) (err error)
MigrateTable(string, func([]byte) ([]byte, error)) error
AncientDatadir() (string, error)
ModifyAncients(fn func(ethdb.AncientWriteOp) error) (writeSize int64, err error)
Sync() error
NewIterator(prefix []byte, start []byte) ethdb.Iterator

Expand Down
37 changes: 35 additions & 2 deletions XDCxDAO/leveldb.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ func (db *BatchDatabase) Ancients() (uint64, error) {
return 0, errNotSupported
}

// Tail returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) Tail() (uint64, error) {
return 0, errNotSupported
}

// AncientSize returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) AncientSize(kind string) (uint64, error) {
return 0, errNotSupported
Expand All @@ -155,11 +160,39 @@ func (db *BatchDatabase) AppendAncient(number uint64, hash, header, body, receip
return errNotSupported
}

// TruncateAncients returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) TruncateAncients(items uint64) error {
// TruncateHead returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) TruncateHead(items uint64) error {
return errNotSupported
}

// TruncateTail returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) TruncateTail(items uint64) error {
return errNotSupported
}

func (db *BatchDatabase) AncientRange(kind string, start, max, maxByteSize uint64) ([][]byte, error) {
return nil, errNotSupported
}

func (db *BatchDatabase) ReadAncients(fn func(ethdb.AncientReaderOp) error) (err error) {
return fn(db)
}

// MigrateTable processes the entries in a given table in sequence
// converting them to a new format if they're of an old format.
func (db *BatchDatabase) MigrateTable(kind string, convert func([]byte) ([]byte, error)) error {
return errNotSupported
}

// AncientDatadir returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) AncientDatadir() (string, error) {
return "", errNotSupported
}

func (db *BatchDatabase) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (writeSize int64, err error) {
return 0, errNotSupported
}

// Sync returns an error as we don't have a backing chain freezer.
func (db *BatchDatabase) Sync() error {
return errNotSupported
Expand Down
37 changes: 35 additions & 2 deletions XDCxDAO/mongodb.go
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,11 @@ func (db *MongoDatabase) Ancients() (uint64, error) {
return 0, errNotSupported
}

// Tail returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) Tail() (uint64, error) {
return 0, errNotSupported
}

// AncientSize returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) AncientSize(kind string) (uint64, error) {
return 0, errNotSupported
Expand All @@ -855,11 +860,39 @@ func (db *MongoDatabase) AppendAncient(number uint64, hash, header, body, receip
return errNotSupported
}

// TruncateAncients returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) TruncateAncients(items uint64) error {
// TruncateHead returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) TruncateHead(items uint64) error {
return errNotSupported
}

// TruncateTail returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) TruncateTail(items uint64) error {
return errNotSupported
}

func (db *MongoDatabase) AncientRange(kind string, start, max, maxByteSize uint64) ([][]byte, error) {
return nil, errNotSupported
}

func (db *MongoDatabase) ReadAncients(fn func(ethdb.AncientReaderOp) error) (err error) {
return fn(db)
}

// MigrateTable processes the entries in a given table in sequence
// converting them to a new format if they're of an old format.
func (db *MongoDatabase) MigrateTable(kind string, convert func([]byte) ([]byte, error)) error {
return errNotSupported
}

// AncientDatadir returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) AncientDatadir() (string, error) {
return "", errNotSupported
}

func (db *MongoDatabase) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (writeSize int64, err error) {
return 0, errNotSupported
}

// Sync returns an error as we don't have a backing chain freezer.
func (db *MongoDatabase) Sync() error {
return errNotSupported
Expand Down
4 changes: 2 additions & 2 deletions accounts/abi/bind/backends/simulated.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ func NewXDCSimulatedBackend(alloc types.GenesisAlloc, gasLimit uint64, chainConf
return lendingServ
}

blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, consensus, vm.Config{})
blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, consensus, vm.Config{}, nil)

backend := &SimulatedBackend{
database: database,
Expand All @@ -162,7 +162,7 @@ func NewSimulatedBackend(alloc types.GenesisAlloc, gasLimit uint64) *SimulatedBa
database := rawdb.NewMemoryDatabase()
genesis := core.Genesis{Config: params.AllEthashProtocolChanges, GasLimit: gasLimit, Alloc: alloc}
genesis.MustCommit(database)
blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, ethash.NewFaker(), vm.Config{})
blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, ethash.NewFaker(), vm.Config{}, nil)

backend := &SimulatedBackend{
database: database,
Expand Down
29 changes: 18 additions & 11 deletions cmd/XDC/chaincmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/cmd/utils"
"github.com/XinFinOrg/XDPoSChain/common"
"github.com/XinFinOrg/XDPoSChain/core"
"github.com/XinFinOrg/XDPoSChain/core/rawdb"
"github.com/XinFinOrg/XDPoSChain/core/state"
"github.com/XinFinOrg/XDPoSChain/core/types"
xdc_genesis "github.com/XinFinOrg/XDPoSChain/genesis"
Expand Down Expand Up @@ -73,6 +74,7 @@ It expects the genesis file or the network name [ mainnet | testnet | devnet ] a
utils.MetricsInfluxDBTokenFlag,
utils.MetricsInfluxDBBucketFlag,
utils.MetricsInfluxDBOrganizationFlag,
utils.TxLookupLimitFlag,
}, utils.DatabaseFlags),
Description: `
The import command imports blocks from an RLP-encoded form. The form can be one file
Expand Down Expand Up @@ -201,7 +203,7 @@ func importChain(ctx *cli.Context) error {
// Start metrics export if enabled
utils.SetupMetrics(&cfg.Metrics)

chain, db := utils.MakeChain(ctx, stack, false)
chain, db := utils.MakeChain(ctx, stack)
defer db.Close()

// Start periodically gathering memory profiles
Expand Down Expand Up @@ -276,7 +278,7 @@ func exportChain(ctx *cli.Context) error {
stack, _, _ := makeFullNode(ctx)
defer stack.Close()

chain, db := utils.MakeChain(ctx, stack, true)
chain, db := utils.MakeChain(ctx, stack)
defer db.Close()
start := time.Now()

Expand Down Expand Up @@ -347,22 +349,27 @@ func dump(ctx *cli.Context) error {
stack, _, _ := makeFullNode(ctx)
defer stack.Close()

chain, chainDb := utils.MakeChain(ctx, stack, true)
defer chainDb.Close()

db := utils.MakeChainDatabase(ctx, stack, true)
for _, arg := range ctx.Args().Slice() {
var block *types.Block
var header *types.Header
if hashish(arg) {
block = chain.GetBlockByHash(common.HexToHash(arg))
hash := common.HexToHash(arg)
number := rawdb.ReadHeaderNumber(db, hash)
if number != nil {
header = rawdb.ReadHeader(db, hash, *number)
}
} else {
num, _ := strconv.Atoi(arg)
block = chain.GetBlockByNumber(uint64(num))
number, _ := strconv.Atoi(arg)
hash := rawdb.ReadCanonicalHash(db, uint64(number))
if hash != (common.Hash{}) {
header = rawdb.ReadHeader(db, hash, uint64(number))
}
}
if block == nil {
if header == nil {
fmt.Println("{}")
utils.Fatalf("block not found")
} else {
state, err := state.New(block.Root(), state.NewDatabase(chainDb))
state, err := state.New(header.Root, state.NewDatabase(db))
if err != nil {
utils.Fatalf("could not create new state: %v", err)
}
Expand Down
12 changes: 12 additions & 0 deletions cmd/XDC/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,18 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend, XDCConfig) {
})
}

// Warn users to migrate if they have a legacy freezer format.
if eth != nil {
firstIdx := uint64(0)
isLegacy, _, err := dbHasLegacyReceipts(eth.ChainDb(), firstIdx)
if err != nil {
utils.Fatalf("Failed to check db for legacy receipts: %v", err)
}
if isLegacy {
log.Warn("Database has receipts with a legacy format. Please run `XDC db freezer-migrate`.")
}
}

// Add the Ethereum Stats daemon if requested.
if cfg.Ethstats.URL != "" {
utils.RegisterEthStatsService(stack, backend, cfg.Ethstats.URL)
Expand Down
Loading