Skip to content

Commit 42acfce

Browse files
Merge #4267
4267: Add version beacon storage initialization r=janezpodhostnik a=janezpodhostnik Extracted from #3736. This just adds a version beacons parameter to initialization of storage and bootstrapping. It does nothing for now, but I wanted to split this out as it touches a lot of files. Co-authored-by: Janez Podhostnik <[email protected]>
2 parents 2b127d2 + 353af67 commit 42acfce

File tree

15 files changed

+284
-19
lines changed

15 files changed

+284
-19
lines changed

cmd/scaffold.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,7 @@ func (fnb *FlowNodeBuilder) initStorage() error {
991991
epochCommits := bstorage.NewEpochCommits(fnb.Metrics.Cache, fnb.DB)
992992
statuses := bstorage.NewEpochStatuses(fnb.Metrics.Cache, fnb.DB)
993993
commits := bstorage.NewCommits(fnb.Metrics.Cache, fnb.DB)
994+
versionBeacons := bstorage.NewVersionBeacons(fnb.DB)
994995

995996
fnb.Storage = Storage{
996997
Headers: headers,
@@ -1006,6 +1007,7 @@ func (fnb *FlowNodeBuilder) initStorage() error {
10061007
Collections: collections,
10071008
Setups: setups,
10081009
EpochCommits: epochCommits,
1010+
VersionBeacons: versionBeacons,
10091011
Statuses: statuses,
10101012
Commits: commits,
10111013
}
@@ -1078,6 +1080,7 @@ func (fnb *FlowNodeBuilder) initState() error {
10781080
fnb.Storage.Setups,
10791081
fnb.Storage.EpochCommits,
10801082
fnb.Storage.Statuses,
1083+
fnb.Storage.VersionBeacons,
10811084
)
10821085
if err != nil {
10831086
return fmt.Errorf("could not open protocol state: %w", err)
@@ -1129,6 +1132,7 @@ func (fnb *FlowNodeBuilder) initState() error {
11291132
fnb.Storage.Setups,
11301133
fnb.Storage.EpochCommits,
11311134
fnb.Storage.Statuses,
1135+
fnb.Storage.VersionBeacons,
11321136
fnb.RootSnapshot,
11331137
options...,
11341138
)

cmd/util/cmd/common/state.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ func InitProtocolState(db *badger.DB, storages *storage.All) (protocol.State, er
2525
storages.Setups,
2626
storages.EpochCommits,
2727
storages.Statuses,
28+
storages.VersionBeacons,
2829
)
2930

3031
if err != nil {

consensus/integration/nodes_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ func createNode(
375375
setupsDB := storage.NewEpochSetups(metricsCollector, db)
376376
commitsDB := storage.NewEpochCommits(metricsCollector, db)
377377
statusesDB := storage.NewEpochStatuses(metricsCollector, db)
378+
versionBeaconDB := storage.NewVersionBeacons(db)
378379
consumer := events.NewDistributor()
379380

380381
localID := identity.ID()
@@ -395,6 +396,7 @@ func createNode(
395396
setupsDB,
396397
commitsDB,
397398
statusesDB,
399+
versionBeaconDB,
398400
rootSnapshot,
399401
)
400402
require.NoError(t, err)

engine/common/follower/integration_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,20 @@ func TestFollowerHappyPath(t *testing.T) {
5252
all := storageutil.StorageLayer(t, db)
5353

5454
// bootstrap root snapshot
55-
state, err := pbadger.Bootstrap(metrics, db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
55+
state, err := pbadger.Bootstrap(
56+
metrics,
57+
db,
58+
all.Headers,
59+
all.Seals,
60+
all.Results,
61+
all.Blocks,
62+
all.QuorumCertificates,
63+
all.Setups,
64+
all.EpochCommits,
65+
all.Statuses,
66+
all.VersionBeacons,
67+
rootSnapshot,
68+
)
5669
require.NoError(t, err)
5770
mockTimer := util.MockBlockTimer()
5871

engine/testutil/nodes.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ func CompleteStateFixture(
245245
s.Setups,
246246
s.EpochCommits,
247247
s.Statuses,
248+
s.VersionBeacons,
248249
rootSnapshot,
249250
)
250251
require.NoError(t, err)

integration/testnet/container.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,7 @@ func (c *Container) OpenState() (*state.State, error) {
391391
setups := storage.NewEpochSetups(metrics, db)
392392
commits := storage.NewEpochCommits(metrics, db)
393393
statuses := storage.NewEpochStatuses(metrics, db)
394+
versionBeacons := storage.NewVersionBeacons(db)
394395

395396
return state.OpenState(
396397
metrics,
@@ -403,6 +404,7 @@ func (c *Container) OpenState() (*state.State, error) {
403404
setups,
404405
commits,
405406
statuses,
407+
versionBeacons,
406408
)
407409
}
408410

module/builder/collection/builder_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,20 @@ func (suite *BuilderSuite) SetupTest() {
101101
rootSnapshot, err := inmem.SnapshotFromBootstrapState(root, result, seal, unittest.QuorumCertificateFixture(unittest.QCWithRootBlockID(root.ID())))
102102
require.NoError(suite.T(), err)
103103

104-
state, err := pbadger.Bootstrap(metrics, suite.db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
104+
state, err := pbadger.Bootstrap(
105+
metrics,
106+
suite.db,
107+
all.Headers,
108+
all.Seals,
109+
all.Results,
110+
all.Blocks,
111+
all.QuorumCertificates,
112+
all.Setups,
113+
all.EpochCommits,
114+
all.Statuses,
115+
all.VersionBeacons,
116+
rootSnapshot,
117+
)
105118
require.NoError(suite.T(), err)
106119

107120
suite.protoState, err = pbadger.NewFollowerState(

state/cluster/badger/mutator_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,20 @@ func (suite *MutatorSuite) SetupTest() {
8888

8989
suite.protoGenesis = genesis.Header
9090

91-
state, err := pbadger.Bootstrap(metrics, suite.db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
91+
state, err := pbadger.Bootstrap(
92+
metrics,
93+
suite.db,
94+
all.Headers,
95+
all.Seals,
96+
all.Results,
97+
all.Blocks,
98+
all.QuorumCertificates,
99+
all.Setups,
100+
all.EpochCommits,
101+
all.Statuses,
102+
all.VersionBeacons,
103+
rootSnapshot,
104+
)
92105
require.NoError(suite.T(), err)
93106

94107
suite.protoState, err = pbadger.NewFollowerState(

state/cluster/badger/snapshot_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,20 @@ func (suite *SnapshotSuite) SetupTest() {
6868
participants := unittest.IdentityListFixture(5, unittest.WithAllRoles())
6969
root := unittest.RootSnapshotFixture(participants)
7070

71-
suite.protoState, err = pbadger.Bootstrap(metrics, suite.db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, root)
71+
suite.protoState, err = pbadger.Bootstrap(
72+
metrics,
73+
suite.db,
74+
all.Headers,
75+
all.Seals,
76+
all.Results,
77+
all.Blocks,
78+
all.QuorumCertificates,
79+
all.Setups,
80+
all.EpochCommits,
81+
all.Statuses,
82+
all.VersionBeacons,
83+
root,
84+
)
7285
require.NoError(suite.T(), err)
7386

7487
suite.Require().Nil(err)

state/protocol/badger/mutator_test.go

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,20 @@ func TestExtendValid(t *testing.T) {
103103
rootSnapshot, err := inmem.SnapshotFromBootstrapState(block, result, seal, qc)
104104
require.NoError(t, err)
105105

106-
state, err := protocol.Bootstrap(metrics, db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
106+
state, err := protocol.Bootstrap(
107+
metrics,
108+
db,
109+
all.Headers,
110+
all.Seals,
111+
all.Results,
112+
all.Blocks,
113+
all.QuorumCertificates,
114+
all.Setups,
115+
all.EpochCommits,
116+
all.Statuses,
117+
all.VersionBeacons,
118+
rootSnapshot,
119+
)
107120
require.NoError(t, err)
108121

109122
fullState, err := protocol.NewFullConsensusState(
@@ -639,7 +652,20 @@ func TestExtendEpochTransitionValid(t *testing.T) {
639652
tracer := trace.NewNoopTracer()
640653
log := zerolog.Nop()
641654
all := storeutil.StorageLayer(t, db)
642-
protoState, err := protocol.Bootstrap(metrics, db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
655+
protoState, err := protocol.Bootstrap(
656+
metrics,
657+
db,
658+
all.Headers,
659+
all.Seals,
660+
all.Results,
661+
all.Blocks,
662+
all.QuorumCertificates,
663+
all.Setups,
664+
all.EpochCommits,
665+
all.Statuses,
666+
all.VersionBeacons,
667+
rootSnapshot,
668+
)
643669
require.NoError(t, err)
644670
receiptValidator := util.MockReceiptValidator()
645671
sealValidator := util.MockSealValidator(all.Seals)
@@ -1732,7 +1758,20 @@ func TestExtendInvalidSealsInBlock(t *testing.T) {
17321758

17331759
rootSnapshot := unittest.RootSnapshotFixture(participants)
17341760

1735-
state, err := protocol.Bootstrap(metrics, db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
1761+
state, err := protocol.Bootstrap(
1762+
metrics,
1763+
db,
1764+
all.Headers,
1765+
all.Seals,
1766+
all.Results,
1767+
all.Blocks,
1768+
all.QuorumCertificates,
1769+
all.Setups,
1770+
all.EpochCommits,
1771+
all.Statuses,
1772+
all.VersionBeacons,
1773+
rootSnapshot,
1774+
)
17361775
require.NoError(t, err)
17371776

17381777
head, err := rootSnapshot.Head()
@@ -2249,7 +2288,20 @@ func TestHeaderInvalidTimestamp(t *testing.T) {
22492288
rootSnapshot, err := inmem.SnapshotFromBootstrapState(block, result, seal, qc)
22502289
require.NoError(t, err)
22512290

2252-
state, err := protocol.Bootstrap(metrics, db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
2291+
state, err := protocol.Bootstrap(
2292+
metrics,
2293+
db,
2294+
all.Headers,
2295+
all.Seals,
2296+
all.Results,
2297+
all.Blocks,
2298+
all.QuorumCertificates,
2299+
all.Setups,
2300+
all.EpochCommits,
2301+
all.Statuses,
2302+
all.VersionBeacons,
2303+
rootSnapshot,
2304+
)
22532305
require.NoError(t, err)
22542306

22552307
blockTimer := &mockprotocol.BlockTimer{}

state/protocol/badger/state.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type State struct {
3232
commits storage.EpochCommits
3333
statuses storage.EpochStatuses
3434
}
35+
versionBeacons storage.VersionBeacons
3536
// cache the root height because it cannot change over the lifecycle of a protocol state instance
3637
rootHeight uint64
3738
// cache the spork root block height because it cannot change over the lifecycle of a protocol state instance
@@ -69,6 +70,7 @@ func Bootstrap(
6970
setups storage.EpochSetups,
7071
commits storage.EpochCommits,
7172
statuses storage.EpochStatuses,
73+
versionBeacons storage.VersionBeacons,
7274
root protocol.Snapshot,
7375
options ...BootstrapConfigOptions,
7476
) (*State, error) {
@@ -86,7 +88,19 @@ func Bootstrap(
8688
return nil, fmt.Errorf("expected empty database")
8789
}
8890

89-
state := newState(metrics, db, headers, seals, results, blocks, qcs, setups, commits, statuses)
91+
state := newState(
92+
metrics,
93+
db,
94+
headers,
95+
seals,
96+
results,
97+
blocks,
98+
qcs,
99+
setups,
100+
commits,
101+
statuses,
102+
versionBeacons,
103+
)
90104

91105
if err := IsValidRootSnapshot(root, !config.SkipNetworkAddressValidation); err != nil {
92106
return nil, fmt.Errorf("cannot bootstrap invalid root snapshot: %w", err)
@@ -555,6 +569,7 @@ func OpenState(
555569
setups storage.EpochSetups,
556570
commits storage.EpochCommits,
557571
statuses storage.EpochStatuses,
572+
versionBeacons storage.VersionBeacons,
558573
) (*State, error) {
559574
isBootstrapped, err := IsBootstrapped(db)
560575
if err != nil {
@@ -563,7 +578,19 @@ func OpenState(
563578
if !isBootstrapped {
564579
return nil, fmt.Errorf("expected database to contain bootstrapped state")
565580
}
566-
state := newState(metrics, db, headers, seals, results, blocks, qcs, setups, commits, statuses)
581+
state := newState(
582+
metrics,
583+
db,
584+
headers,
585+
seals,
586+
results,
587+
blocks,
588+
qcs,
589+
setups,
590+
commits,
591+
statuses,
592+
versionBeacons,
593+
)
567594

568595
// report last finalized and sealed block height
569596
finalSnapshot := state.Final()
@@ -675,6 +702,7 @@ func newState(
675702
setups storage.EpochSetups,
676703
commits storage.EpochCommits,
677704
statuses storage.EpochStatuses,
705+
versionBeacons storage.VersionBeacons,
678706
) *State {
679707
return &State{
680708
metrics: metrics,
@@ -693,6 +721,7 @@ func newState(
693721
commits: commits,
694722
statuses: statuses,
695723
},
724+
versionBeacons: versionBeacons,
696725
}
697726
}
698727

state/protocol/badger/state_test.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ func TestBootstrapAndOpen(t *testing.T) {
7474
all.Setups,
7575
all.EpochCommits,
7676
all.Statuses,
77+
all.VersionBeacons,
7778
)
7879
require.NoError(t, err)
7980

@@ -154,6 +155,7 @@ func TestBootstrapAndOpen_EpochCommitted(t *testing.T) {
154155
all.Setups,
155156
all.EpochCommits,
156157
all.Statuses,
158+
all.VersionBeacons,
157159
)
158160
require.NoError(t, err)
159161

@@ -524,7 +526,20 @@ func bootstrap(t *testing.T, rootSnapshot protocol.Snapshot, f func(*bprotocol.S
524526
db := unittest.BadgerDB(t, dir)
525527
defer db.Close()
526528
all := storutil.StorageLayer(t, db)
527-
state, err := bprotocol.Bootstrap(metrics, db, all.Headers, all.Seals, all.Results, all.Blocks, all.QuorumCertificates, all.Setups, all.EpochCommits, all.Statuses, rootSnapshot)
529+
state, err := bprotocol.Bootstrap(
530+
metrics,
531+
db,
532+
all.Headers,
533+
all.Seals,
534+
all.Results,
535+
all.Blocks,
536+
all.QuorumCertificates,
537+
all.Setups,
538+
all.EpochCommits,
539+
all.Statuses,
540+
all.VersionBeacons,
541+
rootSnapshot,
542+
)
528543
f(state, err)
529544
}
530545

0 commit comments

Comments
 (0)