Skip to content

Commit 736cbc8

Browse files
axaysagathiyakishansagathiyaEclesioMeloJunior
authored
chore(chain, cmd, dot): Change retain blocks type to be uint32 (#2877)
Co-authored-by: Kishan Sagathiya <[email protected]> Co-authored-by: Eclésio Junior <[email protected]>
1 parent 783101a commit 736cbc8

File tree

13 files changed

+39
-17
lines changed

13 files changed

+39
-17
lines changed

chain/dev/defaults.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var (
3131
// DefaultPruningMode is the default pruning mode
3232
DefaultPruningMode = "archive"
3333
// DefaultRetainBlocks is the default retained blocks
34-
DefaultRetainBlocks = int64(512)
34+
DefaultRetainBlocks = uint32(512)
3535

3636
// DefaultTelemetryURLs is the default URL of the telemetry server to connect to.
3737
DefaultTelemetryURLs []genesis.TelemetryEndpoint

chain/gssmr/defaults.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ var (
3333
// DefaultPruningMode is the default pruning mode
3434
DefaultPruningMode = "archive"
3535
// DefaultRetainBlocks is the default retained blocks
36-
DefaultRetainBlocks = int64(512)
36+
DefaultRetainBlocks = uint32(512)
3737

3838
// DefaultTelemetryURLs is the default URL of the telemetry server to connect to.
3939
DefaultTelemetryURLs []genesis.TelemetryEndpoint

chain/kusama/defaults.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var (
3131
// DefaultPruningMode is the default pruning mode
3232
DefaultPruningMode = "archive"
3333
// DefaultRetainBlocks is the default retained blocks
34-
DefaultRetainBlocks = int64(512)
34+
DefaultRetainBlocks = uint32(512)
3535

3636
// DefaultTelemetryURLs is the default URL of the telemetry server to connect to.
3737
DefaultTelemetryURLs []genesis.TelemetryEndpoint

chain/polkadot/defaults.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var (
2828
// DefaultPruningMode is the default pruning mode
2929
DefaultPruningMode = "archive"
3030
// DefaultRetainBlocks is the default pruning mode
31-
DefaultRetainBlocks = int64(512)
31+
DefaultRetainBlocks = uint32(512)
3232

3333
// DefaultTelemetryURLs is the default URL of the telemetry server to connect to.
3434
DefaultTelemetryURLs []genesis.TelemetryEndpoint

cmd/gossamer/config.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,14 @@ func setDotGlobalConfigFromFlags(ctx *cli.Context, cfg *dot.GlobalConfig) error
482482
cfg.MetricsAddress = metricsAddress
483483
}
484484

485-
cfg.RetainBlocks = ctx.Int64(RetainBlockNumberFlag.Name)
485+
const uint32Max = ^uint32(0)
486+
flagValue := ctx.Uint64(RetainBlockNumberFlag.Name)
487+
488+
if uint64(uint32Max) < flagValue {
489+
return fmt.Errorf("retain blocks value overflows uint32 boundaries, must be less than or equal to: %d", uint32Max)
490+
}
491+
492+
cfg.RetainBlocks = uint32(flagValue)
486493
cfg.Pruning = pruner.Mode(ctx.String(PruningFlag.Name))
487494
cfg.NoTelemetry = ctx.Bool("no-telemetry")
488495

cmd/gossamer/flags.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,10 +359,10 @@ var (
359359

360360
// RetainBlockNumberFlag retain number of block from latest block while pruning,
361361
// valid for the use with prune-state subcommand
362-
RetainBlockNumberFlag = cli.Int64Flag{
362+
RetainBlockNumberFlag = cli.Uint64Flag{
363363
Name: "retain-blocks",
364364
Usage: "Retain number of block from latest block while pruning",
365-
Value: dev.DefaultRetainBlocks,
365+
Value: uint64(dev.DefaultRetainBlocks),
366366
}
367367

368368
// PruningFlag triggers the online pruning of historical state tries.

cmd/gossamer/main.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,15 @@ func pruneState(ctx *cli.Context) error {
425425
}
426426

427427
bloomSize := ctx.GlobalUint64(BloomFilterSizeFlag.Name)
428-
retainBlocks := ctx.GlobalInt64(RetainBlockNumberFlag.Name)
428+
429+
const uint32Max = ^uint32(0)
430+
flagValue := ctx.GlobalUint64(RetainBlockNumberFlag.Name)
431+
432+
if uint64(uint32Max) < flagValue {
433+
return fmt.Errorf("retain blocks value overflows uint32 boundaries, must be less than or equal to: %d", uint32Max)
434+
}
435+
436+
retainBlocks := uint32(flagValue)
429437

430438
pruner, err := state.NewOfflinePruner(inputDBPath, prunedDBPath, bloomSize, retainBlocks)
431439
if err != nil {

cmd/gossamer/utils_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ func newTestContext(description string, flags []string, values []interface{}) (*
3636
set.Uint(flags[i], v, "")
3737
case int64:
3838
set.Int64(flags[i], v, "")
39+
case uint32:
40+
set.Uint64(flags[i], uint64(v), "")
3941
case []string:
4042
set.Var(&cli.StringSlice{}, flags[i], "")
4143
default:
@@ -67,6 +69,11 @@ func newTestContext(description string, flags []string, values []interface{}) (*
6769
if err != nil {
6870
return nil, fmt.Errorf("failed to set cli flag: %T, err: %w", flags[i], err)
6971
}
72+
case uint32:
73+
err := ctx.Set(flags[i], strconv.Itoa(int(values[i].(uint32))))
74+
if err != nil {
75+
return nil, fmt.Errorf("failed to set cli flag: %T, err: %w", flags[i], err)
76+
}
7077
case []string:
7178
for _, str := range values[i].([]string) {
7279
err := ctx.Set(flags[i], str)

dot/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ type GlobalConfig struct {
4747
MetricsAddress string
4848
NoTelemetry bool
4949
TelemetryURLs []genesis.TelemetryEndpoint
50-
RetainBlocks int64
50+
RetainBlocks uint32
5151
Pruning pruner.Mode
5252
}
5353

dot/config/toml/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type GlobalConfig struct {
2323
BasePath string `toml:"basepath,omitempty"`
2424
LogLvl string `toml:"log,omitempty"`
2525
MetricsAddress string `toml:"metrics-address,omitempty"`
26-
RetainBlocks int64 `toml:"retain-blocks,omitempty"`
26+
RetainBlocks uint32 `toml:"retain-blocks,omitempty"`
2727
Pruning string `toml:"pruning,omitempty"`
2828
}
2929

dot/state/offline_pruner.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ type OfflinePruner struct {
2727
blockState *BlockState
2828
bloom *bloomState
2929
bestBlockHash common.Hash
30-
retainBlockNum int64
30+
retainBlockNum uint32
3131

3232
inputDBPath string
3333
prunedDBPath string
3434
}
3535

3636
// NewOfflinePruner creates an instance of OfflinePruner.
3737
func NewOfflinePruner(inputDBPath, prunedDBPath string, bloomSize uint64,
38-
retainBlockNum int64) (*OfflinePruner, error) {
38+
retainBlockNum uint32) (*OfflinePruner, error) {
3939
db, err := utils.LoadChainDB(inputDBPath)
4040
if err != nil {
4141
return nil, fmt.Errorf("failed to load DB %w", err)

dot/state/pruner/pruner.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func (p Mode) IsValid() bool {
4646
// Config holds state trie pruning mode and retained blocks
4747
type Config struct {
4848
Mode Mode
49-
RetainedBlocks int64
49+
RetainedBlocks uint32
5050
}
5151

5252
// Pruner is implemented by FullNode and ArchiveNode.
@@ -82,7 +82,7 @@ type FullNode struct {
8282
// pendingNumber is the block number to be pruned.
8383
// Initial value is set to 1 and is incremented after every block pruning.
8484
pendingNumber int64
85-
retainBlocks int64
85+
retainBlocks uint32
8686
sync.RWMutex
8787
}
8888

@@ -110,7 +110,7 @@ func newJournalRecord(hash common.Hash, insertedMerkleValues,
110110
}
111111

112112
// NewFullNode creates a Pruner for full node.
113-
func NewFullNode(db, storageDB chaindb.Database, retainBlocks int64, l log.LeveledLogger) (Pruner, error) {
113+
func NewFullNode(db, storageDB chaindb.Database, retainBlocks uint32, l log.LeveledLogger) (Pruner, error) {
114114
p := &FullNode{
115115
deathList: make([]deathRow, 0),
116116
deathIndex: make(map[string]int64),
@@ -216,7 +216,7 @@ func (p *FullNode) start() {
216216
checkPruning := func() {
217217
p.Lock()
218218
defer p.Unlock()
219-
if int64(len(p.deathList)) <= p.retainBlocks {
219+
if uint32(len(p.deathList)) <= p.retainBlocks {
220220
canPrune = false
221221
return
222222
}

dot/state/service_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ func TestService_StorageTriePruning(t *testing.T) {
167167
LogLevel: log.Info,
168168
PrunerCfg: pruner.Config{
169169
Mode: pruner.Full,
170-
RetainedBlocks: int64(retainBlocks),
170+
RetainedBlocks: uint32(retainBlocks),
171171
},
172172
Telemetry: telemetryMock,
173173
}

0 commit comments

Comments
 (0)