Skip to content

Commit b315208

Browse files
committed
Merge branch 'rc/barnard-patch-3' into merge-rc-barnard-patch-3-into-extend-bootstrap-time
2 parents 935a0b1 + 38974a2 commit b315208

File tree

98 files changed

+3493
-516
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+3493
-516
lines changed

cmd/node/CLI.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ GLOBAL OPTIONS:
7373
--operation-mode operation mode String flag for specifying the desired operation mode(s) of the node, resulting in altering some configuration values accordingly. Possible values are: snapshotless-observer, full-archive, db-lookup-extension, historical-balances or `""` (empty). Multiple values can be separated via ,
7474
--repopulate-tokens-supplies Boolean flag for repopulating the tokens supplies database. It will delete the current data, iterate over the entire trie and add he new obtained supplies
7575
--p2p-prometheus-metrics Boolean option for enabling the /debug/metrics/prometheus route for p2p prometheus metrics
76+
--state-accesses-types-to-collect value String slice option for enabling collecting specified state accesses types. Can be (READ, WRITE)
7677
--help, -h show help
7778
--version, -v print the version
7879

cmd/node/config/config.toml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,19 @@
355355
ShardIDProviderType = "BinarySplit"
356356
NumShards = 4
357357

358+
[StateAccessesStorage]
359+
[StateAccessesStorage.Cache]
360+
Name = "StateAccessesStorage"
361+
Capacity = 5000
362+
Type = "SizeLRU"
363+
SizeInBytes = 10485760 #10MB
364+
[StateAccessesStorage.DB]
365+
FilePath = "StateAccesses"
366+
Type = "LvlDBSerial"
367+
BatchDelaySeconds = 2
368+
MaxBatchSize = 100
369+
MaxOpenFiles = 10
370+
358371
[PeerAccountsTrieStorage]
359372
[PeerAccountsTrieStorage.Cache]
360373
Name = "PeerAccountsTrieStorage"
@@ -696,6 +709,11 @@
696709
Enabled = false
697710
MaxSizeInBytes = 10485760 #10MB
698711

712+
[StateAccessesCollectorConfig]
713+
TypesToCollect = [] # These can be "READ","WRITE".
714+
SaveToStorage = false
715+
WithAccountChanges = false
716+
699717
[BlockSizeThrottleConfig]
700718
MinSizeInBytes = 104857 # 104857 is 10% from 1MB
701719
MaxSizeInBytes = 943718 # 943718 is 90% from 1MB

cmd/node/flags.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import (
66
"os"
77
"runtime"
88

9+
logger "github.com/multiversx/mx-chain-logger-go"
10+
"github.com/urfave/cli"
11+
912
"github.com/multiversx/mx-chain-go/common"
1013
"github.com/multiversx/mx-chain-go/common/operationmodes"
1114
"github.com/multiversx/mx-chain-go/config"
1215
"github.com/multiversx/mx-chain-go/facade"
13-
logger "github.com/multiversx/mx-chain-logger-go"
14-
"github.com/urfave/cli"
1516
)
1617

1718
var (
@@ -408,6 +409,13 @@ var (
408409
Name: "p2p-prometheus-metrics",
409410
Usage: "Boolean option for enabling the /debug/metrics/prometheus route for p2p prometheus metrics",
410411
}
412+
413+
// stateAccessesTypesToCollect defines a flag for collecting specified types of state accesses
414+
// If enabled, it will override the configuration
415+
stateAccessesTypesToCollect = cli.StringSliceFlag{
416+
Name: "state-accesses-types-to-collect",
417+
Usage: "String slice option for enabling collecting specified state accesses types. Can be (READ, WRITE)",
418+
}
411419
)
412420

413421
func getFlags() []cli.Flag {
@@ -470,6 +478,7 @@ func getFlags() []cli.Flag {
470478
operationMode,
471479
repopulateTokensSupplies,
472480
p2pPrometheusMetrics,
481+
stateAccessesTypesToCollect,
473482
}
474483
}
475484

cmd/node/main.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import (
88

99
"github.com/multiversx/mx-chain-core-go/core"
1010
"github.com/multiversx/mx-chain-core-go/core/check"
11+
logger "github.com/multiversx/mx-chain-logger-go"
12+
"github.com/multiversx/mx-chain-logger-go/file"
13+
"github.com/urfave/cli"
14+
1115
"github.com/multiversx/mx-chain-go/cmd/node/factory"
1216
"github.com/multiversx/mx-chain-go/common"
1317
"github.com/multiversx/mx-chain-go/config"
1418
"github.com/multiversx/mx-chain-go/config/overridableConfig"
1519
"github.com/multiversx/mx-chain-go/node"
16-
logger "github.com/multiversx/mx-chain-logger-go"
17-
"github.com/multiversx/mx-chain-logger-go/file"
18-
"github.com/urfave/cli"
1920
// test point 1 for custom profiler
2021
)
2122

@@ -260,6 +261,9 @@ func readConfigs(ctx *cli.Context, log logger.Logger) (*config.Configs, error) {
260261
if ctx.IsSet(identityFlagName.Name) {
261262
preferencesConfig.Preferences.Identity = ctx.GlobalString(identityFlagName.Name)
262263
}
264+
if ctx.IsSet(stateAccessesTypesToCollect.Name) {
265+
generalConfig.StateAccessesCollectorConfig.TypesToCollect = ctx.GlobalStringSlice(stateAccessesTypesToCollect.Name)
266+
}
263267

264268
return &config.Configs{
265269
GeneralConfig: generalConfig,

config/config.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,18 +163,20 @@ type Config struct {
163163
SmartContractsStorageForSCQuery StorageConfig
164164
TrieEpochRootHashStorage StorageConfig
165165
SmartContractsStorageSimulate StorageConfig
166+
StateAccessesStorage StorageConfig
166167

167168
BootstrapStorage StorageConfig
168169
MetaBlockStorage StorageConfig
169170
ProofsStorage StorageConfig
170171

171-
AccountsTrieStorage StorageConfig
172-
PeerAccountsTrieStorage StorageConfig
173-
EvictionWaitingList EvictionWaitingListConfig
174-
StateTriesConfig StateTriesConfig
175-
TrieStorageManagerConfig TrieStorageManagerConfig
172+
AccountsTrieStorage StorageConfig
173+
PeerAccountsTrieStorage StorageConfig
174+
EvictionWaitingList EvictionWaitingListConfig
175+
StateTriesConfig StateTriesConfig
176+
StateAccessesCollectorConfig StateAccessesCollectorConfig
177+
TrieStorageManagerConfig TrieStorageManagerConfig
176178
TrieLeavesRetrieverConfig TrieLeavesRetrieverConfig
177-
BadBlocksCache CacheConfig
179+
BadBlocksCache CacheConfig
178180

179181
TxBlockBodyDataPool CacheConfig
180182
PeerBlockBodyDataPool CacheConfig
@@ -333,6 +335,13 @@ type StateTriesConfig struct {
333335
StateStatisticsEnabled bool
334336
}
335337

338+
// StateAccessesCollectorConfig will hold information about state accesses collector
339+
type StateAccessesCollectorConfig struct {
340+
TypesToCollect []string
341+
SaveToStorage bool
342+
WithAccountChanges bool
343+
}
344+
336345
// TrieStorageManagerConfig will hold config information about trie storage manager
337346
type TrieStorageManagerConfig struct {
338347
PruningBufferLen uint32

dataRetriever/unitType.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ const (
5151
ScheduledSCRsUnit UnitType = 22
5252
// ProofsUnit is the header proofs unit identifier
5353
ProofsUnit UnitType = 23
54+
// StateAccessesUnit is the state accesses storage unit identifier
55+
StateAccessesUnit UnitType = 24
5456

5557
// ShardHdrNonceHashDataUnit is the header nonce-hash pair data unit identifier
5658
//TODO: Add only unit types lower than 100
@@ -114,6 +116,8 @@ func (ut UnitType) String() string {
114116
return "ScheduledSCRsUnit"
115117
case ProofsUnit:
116118
return "ProofsUnit"
119+
case StateAccessesUnit:
120+
return "StateAccessesUnit"
117121
}
118122

119123
if ut < ShardHdrNonceHashDataUnit {

epochStart/bootstrap/disabled/disabledAccountsAdapter.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ func (a *accountsAdapter) GetStackDebugFirstEntry() []byte {
128128
return nil
129129
}
130130

131+
// SetTxHashForLatestStateAccesses -
132+
func (a *accountsAdapter) SetTxHashForLatestStateAccesses(_ []byte) {
133+
}
134+
131135
// Close -
132136
func (a *accountsAdapter) Close() error {
133137
return nil

epochStart/metachain/baseRewards_test.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import (
1414
"github.com/multiversx/mx-chain-core-go/data/rewardTx"
1515
"github.com/multiversx/mx-chain-core-go/hashing/sha256"
1616
"github.com/multiversx/mx-chain-core-go/marshal"
17+
vmcommon "github.com/multiversx/mx-chain-vm-common-go"
18+
"github.com/stretchr/testify/assert"
19+
"github.com/stretchr/testify/require"
20+
1721
"github.com/multiversx/mx-chain-go/epochStart"
1822
"github.com/multiversx/mx-chain-go/epochStart/mock"
1923
"github.com/multiversx/mx-chain-go/process"
@@ -27,9 +31,6 @@ import (
2731
stateMock "github.com/multiversx/mx-chain-go/testscommon/state"
2832
"github.com/multiversx/mx-chain-go/testscommon/storage"
2933
"github.com/multiversx/mx-chain-go/trie"
30-
vmcommon "github.com/multiversx/mx-chain-vm-common-go"
31-
"github.com/stretchr/testify/assert"
32-
"github.com/stretchr/testify/require"
3334
)
3435

3536
func TestBaseRewardsCreator_NilShardCoordinator(t *testing.T) {
@@ -1160,9 +1161,10 @@ func getBaseRewardsArguments() BaseRewardsCreatorArgs {
11601161

11611162
trieFactoryManager, _ := trie.CreateTrieStorageManager(storageManagerArgs, storage.GetStorageManagerOptions())
11621163
argsAccCreator := factory.ArgsAccountCreator{
1163-
Hasher: hasher,
1164-
Marshaller: marshalizer,
1165-
EnableEpochsHandler: &enableEpochsHandlerMock.EnableEpochsHandlerStub{},
1164+
Hasher: hasher,
1165+
Marshaller: marshalizer,
1166+
EnableEpochsHandler: &enableEpochsHandlerMock.EnableEpochsHandlerStub{},
1167+
StateAccessesCollector: &stateMock.StateAccessesCollectorStub{},
11661168
}
11671169
accCreator, _ := factory.NewAccountCreator(argsAccCreator)
11681170
enableEpochsHandler := &enableEpochsHandlerMock.EnableEpochsHandlerStub{}

epochStart/metachain/systemSCs_test.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -756,13 +756,14 @@ func createAccountsDB(
756756
spm, _ := storagePruningManager.NewStoragePruningManager(ewl, 10)
757757

758758
args := state.ArgsAccountsDB{
759-
Trie: tr,
760-
Hasher: hasher,
761-
Marshaller: marshaller,
762-
AccountFactory: accountFactory,
763-
StoragePruningManager: spm,
764-
AddressConverter: &testscommon.PubkeyConverterMock{},
765-
SnapshotsManager: disabledState.NewDisabledSnapshotsManager(),
759+
Trie: tr,
760+
Hasher: hasher,
761+
Marshaller: marshaller,
762+
AccountFactory: accountFactory,
763+
StoragePruningManager: spm,
764+
AddressConverter: &testscommon.PubkeyConverterMock{},
765+
SnapshotsManager: disabledState.NewDisabledSnapshotsManager(),
766+
StateAccessesCollector: disabledState.NewDisabledStateAccessesCollector(),
766767
}
767768
adb, _ := state.NewAccountsDB(args)
768769
return adb
@@ -778,9 +779,10 @@ func createFullArgumentsForSystemSCProcessing(enableEpochsConfig config.EnableEp
778779

779780
trieFactoryManager, _ := trie.CreateTrieStorageManager(storageManagerArgs, storageMock.GetStorageManagerOptions())
780781
argsAccCreator := factory.ArgsAccountCreator{
781-
Hasher: hasher,
782-
Marshaller: marshalizer,
783-
EnableEpochsHandler: &enableEpochsHandlerMock.EnableEpochsHandlerStub{},
782+
Hasher: hasher,
783+
Marshaller: marshalizer,
784+
EnableEpochsHandler: &enableEpochsHandlerMock.EnableEpochsHandlerStub{},
785+
StateAccessesCollector: disabledState.NewDisabledStateAccessesCollector(),
784786
}
785787
accCreator, _ := factory.NewAccountCreator(argsAccCreator)
786788
peerAccCreator := factory.NewPeerAccountCreator()

factory/api/apiResolverFactory.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -550,9 +550,10 @@ func createShardVmContainerFactory(args scQueryElementArgs, argsHook hooks.ArgBl
550550

551551
func createNewAccountsAdapterApi(args scQueryElementArgs, chainHandler data.ChainHandler) (state.AccountsAdapterAPI, common.StorageManager, error) {
552552
argsAccCreator := factoryState.ArgsAccountCreator{
553-
Hasher: args.coreComponents.Hasher(),
554-
Marshaller: args.coreComponents.InternalMarshalizer(),
555-
EnableEpochsHandler: args.coreComponents.EnableEpochsHandler(),
553+
Hasher: args.coreComponents.Hasher(),
554+
Marshaller: args.coreComponents.InternalMarshalizer(),
555+
EnableEpochsHandler: args.coreComponents.EnableEpochsHandler(),
556+
StateAccessesCollector: args.stateComponents.StateAccessesCollector(),
556557
}
557558
accountFactory, err := factoryState.NewAccountCreator(argsAccCreator)
558559
if err != nil {
@@ -596,13 +597,14 @@ func createNewAccountsAdapterApi(args scQueryElementArgs, chainHandler data.Chai
596597
}
597598

598599
argsAPIAccountsDB := state.ArgsAccountsDB{
599-
Trie: merkleTrie,
600-
Hasher: args.coreComponents.Hasher(),
601-
Marshaller: args.coreComponents.InternalMarshalizer(),
602-
AccountFactory: accountFactory,
603-
StoragePruningManager: storagePruning,
604-
AddressConverter: args.coreComponents.AddressPubKeyConverter(),
605-
SnapshotsManager: disabledState.NewDisabledSnapshotsManager(),
600+
Trie: merkleTrie,
601+
Hasher: args.coreComponents.Hasher(),
602+
Marshaller: args.coreComponents.InternalMarshalizer(),
603+
AccountFactory: accountFactory,
604+
StoragePruningManager: storagePruning,
605+
AddressConverter: args.coreComponents.AddressPubKeyConverter(),
606+
SnapshotsManager: disabledState.NewDisabledSnapshotsManager(),
607+
StateAccessesCollector: disabledState.NewDisabledStateAccessesCollector(),
606608
}
607609

608610
provider, err := blockInfoProviders.NewCurrentBlockInfo(chainHandler)

0 commit comments

Comments
 (0)