PeerDAS: Add various missing items (#15629)

* `startBaseServices`: Warm data column storage cache.

* `TestFindPeers_NodeDeduplication`: Use `t.context`.

* `BUILD.bazel`: Moge `# gazelle.ignore` at the top of the file.

Rationale: This directive is applied to the whole file, regardless its position in the file.

* Improve `TestConstructGenericBeaconBlock`: Courtesy of Terence

* Add `TestDataColumnStoragePath_FlagSpecified`.

* `appFlags`: Move `flags.SubscribeAllDataSubnets` (cosmetic).

* `appFlags`: Add `storage.DataColumnStoragePathFlag`.

* Add changelog.
This commit is contained in:
Manu NALEPA
2025-08-25 15:06:57 +02:00
committed by GitHub
parent d48ed44c4c
commit 92c359456e
8 changed files with 31 additions and 10 deletions

View File

@@ -318,6 +318,7 @@ func startBaseServices(cliCtx *cli.Context, beacon *BeaconNode, depositAddress s
} }
beacon.BlobStorage.WarmCache() beacon.BlobStorage.WarmCache()
beacon.DataColumnStorage.WarmCache()
log.Debugln("Starting Slashing DB") log.Debugln("Starting Slashing DB")
if err := beacon.startSlasherDB(cliCtx, clearer); err != nil { if err := beacon.startSlasherDB(cliCtx, clearer); err != nil {

View File

@@ -969,7 +969,7 @@ func TestFindPeers_NodeDeduplication(t *testing.T) {
cache.SubnetIDs.EmptyAllCaches() cache.SubnetIDs.EmptyAllCaches()
defer cache.SubnetIDs.EmptyAllCaches() defer cache.SubnetIDs.EmptyAllCaches()
ctx := context.Background() ctx := t.Context()
// Create LocalNodes and manipulate sequence numbers // Create LocalNodes and manipulate sequence numbers
localNode1 := createTestNodeWithID(t, "node1") localNode1 := createTestNodeWithID(t, "node1")
@@ -1193,8 +1193,6 @@ func TestFindPeers_received_bad_existing_node(t *testing.T) {
cache.SubnetIDs.EmptyAllCaches() cache.SubnetIDs.EmptyAllCaches()
defer cache.SubnetIDs.EmptyAllCaches() defer cache.SubnetIDs.EmptyAllCaches()
ctx := context.Background()
// Create LocalNode with same ID but different sequences // Create LocalNode with same ID but different sequences
localNode1 := createTestNodeWithID(t, "testnode") localNode1 := createTestNodeWithID(t, "testnode")
node1_seq1 := localNode1.Node() // Get current node node1_seq1 := localNode1.Node() // Get current node
@@ -1213,7 +1211,7 @@ func TestFindPeers_received_bad_existing_node(t *testing.T) {
MaxPeers: 30, MaxPeers: 30,
}, },
genesisValidatorsRoot: bytesutil.PadTo([]byte{'A'}, 32), genesisValidatorsRoot: bytesutil.PadTo([]byte{'A'}, 32),
peers: peers.NewStatus(ctx, &peers.StatusConfig{ peers: peers.NewStatus(t.Context(), &peers.StatusConfig{
PeerLimit: 30, PeerLimit: 30,
ScorerParams: &scorers.Config{}, ScorerParams: &scorers.Config{},
}), }),
@@ -1243,7 +1241,7 @@ func TestFindPeers_received_bad_existing_node(t *testing.T) {
service.dv5Listener = testp2p.NewMockListener(localNode, iter) service.dv5Listener = testp2p.NewMockListener(localNode, iter)
// Run findPeers - node1_seq1 gets processed first, then callback marks peer bad, then node1_seq2 fails // Run findPeers - node1_seq1 gets processed first, then callback marks peer bad, then node1_seq2 fails
ctxWithTimeout, cancel := context.WithTimeout(ctx, 1*time.Second) ctxWithTimeout, cancel := context.WithTimeout(t.Context(), 1*time.Second)
defer cancel() defer cancel()
result, err := service.findPeers(ctxWithTimeout, 3) result, err := service.findPeers(ctxWithTimeout, 3)

View File

@@ -1,3 +1,5 @@
# gazelle:ignore
load("@prysm//tools/go:def.bzl", "go_library", "go_test") load("@prysm//tools/go:def.bzl", "go_library", "go_test")
go_library( go_library(
@@ -63,8 +65,8 @@ go_library(
"//beacon-chain/rpc/core:go_default_library", "//beacon-chain/rpc/core:go_default_library",
"//beacon-chain/startup:go_default_library", "//beacon-chain/startup:go_default_library",
"//beacon-chain/state:go_default_library", "//beacon-chain/state:go_default_library",
"//beacon-chain/state/stategen:go_default_library",
"//beacon-chain/state/state-native:go_default_library", "//beacon-chain/state/state-native:go_default_library",
"//beacon-chain/state/stategen:go_default_library",
"//beacon-chain/sync:go_default_library", "//beacon-chain/sync:go_default_library",
"//config/features:go_default_library", "//config/features:go_default_library",
"//config/fieldparams:go_default_library", "//config/fieldparams:go_default_library",
@@ -81,7 +83,7 @@ go_library(
"//crypto/rand:go_default_library", "//crypto/rand:go_default_library",
"//encoding/bytesutil:go_default_library", "//encoding/bytesutil:go_default_library",
"//encoding/ssz:go_default_library", "//encoding/ssz:go_default_library",
"//genesis:go_default_library", "//genesis:go_default_library",
"//math:go_default_library", "//math:go_default_library",
"//monitoring/tracing:go_default_library", "//monitoring/tracing:go_default_library",
"//monitoring/tracing/trace:go_default_library", "//monitoring/tracing/trace:go_default_library",
@@ -181,7 +183,6 @@ common_deps = [
"@org_golang_google_protobuf//types/known/emptypb:go_default_library", "@org_golang_google_protobuf//types/known/emptypb:go_default_library",
] ]
# gazelle:ignore
go_test( go_test(
name = "go_default_test", name = "go_default_test",
timeout = "moderate", timeout = "moderate",

View File

@@ -29,12 +29,19 @@ func TestConstructGenericBeaconBlock(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
r1, err := eb.Block.HashTreeRoot() r1, err := eb.Block.HashTreeRoot()
require.NoError(t, err) require.NoError(t, err)
result, err := vs.constructGenericBeaconBlock(b, nil, primitives.ZeroWei()) bundle := &enginev1.BlobsBundleV2{
KzgCommitments: [][]byte{{1, 2, 3}},
Proofs: [][]byte{{4, 5, 6}},
Blobs: [][]byte{{7, 8, 9}},
}
result, err := vs.constructGenericBeaconBlock(b, bundle, primitives.ZeroWei())
require.NoError(t, err) require.NoError(t, err)
r2, err := result.GetFulu().Block.HashTreeRoot() r2, err := result.GetFulu().Block.HashTreeRoot()
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, r1, r2) require.Equal(t, r1, r2)
require.Equal(t, result.IsBlinded, false) require.Equal(t, result.IsBlinded, false)
require.DeepEqual(t, bundle.Blobs, result.GetFulu().GetBlobs())
require.DeepEqual(t, bundle.Proofs, result.GetFulu().GetKzgProofs())
}) })
// Test for Electra version // Test for Electra version

View File

@@ -0,0 +1,3 @@
### Added
- Warm data columns storage cache at start.
- Add `--data-column-path` flag.

View File

@@ -65,6 +65,7 @@ var appFlags = []cli.Flag{
flags.SlotsPerArchivedPoint, flags.SlotsPerArchivedPoint,
flags.DisableDebugRPCEndpoints, flags.DisableDebugRPCEndpoints,
flags.SubscribeToAllSubnets, flags.SubscribeToAllSubnets,
flags.SubscribeAllDataSubnets,
flags.HistoricalSlasherNode, flags.HistoricalSlasherNode,
flags.ChainID, flags.ChainID,
flags.NetworkID, flags.NetworkID,
@@ -86,7 +87,6 @@ var appFlags = []cli.Flag{
flags.BeaconDBPruning, flags.BeaconDBPruning,
flags.PrunerRetentionEpochs, flags.PrunerRetentionEpochs,
flags.EnableBuilderSSZ, flags.EnableBuilderSSZ,
flags.SubscribeAllDataSubnets,
cmd.MinimalConfigFlag, cmd.MinimalConfigFlag,
cmd.E2EConfigFlag, cmd.E2EConfigFlag,
cmd.RPCMaxPageSizeFlag, cmd.RPCMaxPageSizeFlag,
@@ -144,6 +144,7 @@ var appFlags = []cli.Flag{
flags.SlasherFlag, flags.SlasherFlag,
flags.JwtId, flags.JwtId,
storage.BlobStoragePathFlag, storage.BlobStoragePathFlag,
storage.DataColumnStoragePathFlag,
storage.BlobRetentionEpochFlag, storage.BlobRetentionEpochFlag,
storage.BlobStorageLayout, storage.BlobStorageLayout,
bflags.EnableExperimentalBackfill, bflags.EnableExperimentalBackfill,

View File

@@ -61,3 +61,12 @@ func TestConfigureBlobRetentionEpoch(t *testing.T) {
_, err = blobRetentionEpoch(cliCtx) _, err = blobRetentionEpoch(cliCtx)
require.ErrorIs(t, err, errInvalidBlobRetentionEpochs) require.ErrorIs(t, err, errInvalidBlobRetentionEpochs)
} }
func TestDataColumnStoragePath_FlagSpecified(t *testing.T) {
app := cli.App{}
set := flag.NewFlagSet("test", 0)
set.String(DataColumnStoragePathFlag.Name, "/blah/blah", DataColumnStoragePathFlag.Usage)
cliCtx := cli.NewContext(&app, set, nil)
storagePath := dataColumnStoragePath(cliCtx)
assert.Equal(t, "/blah/blah", storagePath)
}

View File

@@ -127,6 +127,7 @@ var appHelpFlagGroups = []flagGroup{
storage.BlobRetentionEpochFlag, storage.BlobRetentionEpochFlag,
storage.BlobStorageLayout, storage.BlobStorageLayout,
storage.BlobStoragePathFlag, storage.BlobStoragePathFlag,
storage.DataColumnStoragePathFlag,
}, },
}, },
{ // Flags relevant to configuring local block production or external builders such as mev-boost. { // Flags relevant to configuring local block production or external builders such as mev-boost.