Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add flag to allow reading bootstrap nodes from a file #6351

Merged
merged 47 commits into from
Jun 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
b1d11d0
parent c837dfb2f26d82abf4dfbd184189d57c5b0ddedf
dv8silencer Jun 22, 2020
977dcbe
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 22, 2020
77e9233
Refactor so that boot node reading is in its own function. Added test
dv8silencer Jun 23, 2020
0fc7f9f
Added period
dv8silencer Jun 23, 2020
84a7aaf
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
01abde2
Edit Bazel to include go-yaml dep
dv8silencer Jun 23, 2020
33a959b
Help Bazel build successfully
dv8silencer Jun 23, 2020
542fb6b
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
eb0a658
bazel run //:gazella -- fix
dv8silencer Jun 23, 2020
c29bad4
Handle error from YAML parser to address build checks
dv8silencer Jun 23, 2020
01b14e9
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
557762f
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
a374c0b
Updated flags.go to refine the Usage for the BootStrapNodeFile flag
dv8silencer Jun 23, 2020
d55e880
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
0492cad
Utilize stdlib TempFile to avoid polluting
dv8silencer Jun 23, 2020
1fa4617
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
5b9f3ff
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
9e16668
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
886dd7f
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
3f85246
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
f0898a9
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 23, 2020
0a1fb62
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 24, 2020
8ef8057
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 24, 2020
65418fc
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 24, 2020
885e354
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 24, 2020
8d51d93
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 24, 2020
6a4a7cc
merge master into this branch
dv8silencer Jun 24, 2020
3b1a7c7
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 24, 2020
60585fb
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
7fa3d31
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
5ec6e9d
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
346e359
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
cc43387
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
c979c9e
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
e50b258
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
c782e13
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 25, 2020
a7923fa
Changed bootstrap-node to StringSlice flag to allow multiple nodes to…
dv8silencer Jun 26, 2020
97597f6
Refactored to create separate readbootNodes function and added a test…
dv8silencer Jun 26, 2020
6f28169
More cleaning up
dv8silencer Jun 26, 2020
2b41366
Changed wording in the cli help for --bootstrap-node
dv8silencer Jun 26, 2020
b5d8dee
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 26, 2020
6bd15cb
Since we are taking YAML files, got rid of .enr check and instead we …
dv8silencer Jun 26, 2020
94a8fb2
Merge with dv8silencer/tempissue6316
dv8silencer Jun 26, 2020
a2d48c7
Correct spacing
dv8silencer Jun 26, 2020
4ce0fff
Changed how we check for YAML file vs CLI-direct ENR
dv8silencer Jun 26, 2020
4c0714d
Minor: Changed to 1 string from concatenating 2
dv8silencer Jun 26, 2020
d492828
Merge branch 'master' into dv8s-iss6316
dv8silencer Jun 26, 2020
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
1 change: 1 addition & 0 deletions beacon-chain/node/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ go_library(
"@com_github_pkg_errors//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@com_github_urfave_cli_v2//:go_default_library",
"@in_gopkg_yaml_v2//:go_default_library",
],
)

Expand Down
31 changes: 24 additions & 7 deletions beacon-chain/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import (
"github.com/prysmaticlabs/prysm/shared/version"
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"
"gopkg.in/yaml.v2"
)

var log = logrus.WithField("prefix", "node")
Expand Down Expand Up @@ -114,7 +115,7 @@ func NewBeaconNode(cliCtx *cli.Context) (*BeaconNode, error) {
}
if cliCtx.IsSet(cmd.BootstrapNode.Name) {
c := params.BeaconNetworkConfig()
c.BootstrapNodes = strings.Split(cliCtx.String(cmd.BootstrapNode.Name), ",")
c.BootstrapNodes = cliCtx.StringSlice(cmd.BootstrapNode.Name)
params.OverrideBeaconNetworkConfig(c)
}
if cliCtx.IsSet(flags.ContractDeploymentBlock.Name) {
Expand Down Expand Up @@ -315,16 +316,32 @@ func (b *BeaconNode) startStateGen() {
b.stateGen = stategen.New(b.db, b.stateSummaryCache)
}

func readbootNodes(fileName string) ([]string, error) {
fileContent, err := ioutil.ReadFile(fileName)
if err != nil {
return nil, err
}
listNodes := make([]string, 0)
err = yaml.Unmarshal(fileContent, &listNodes)
if err != nil {
return nil, err
}
return listNodes, nil
}

func (b *BeaconNode) registerP2P(cliCtx *cli.Context) error {
// Bootnode ENR may be a filepath to an ENR file.
bootnodeAddrs := params.BeaconNetworkConfig().BootstrapNodes
for i, addr := range bootnodeAddrs {
if filepath.Ext(addr) == ".enr" {
b, err := ioutil.ReadFile(addr)
// Bootnode ENR may be a filepath to a YAML file
bootnodesTemp := params.BeaconNetworkConfig().BootstrapNodes //actual CLI values
bootnodeAddrs := make([]string, 0) //dest of final list of nodes
for _, addr := range bootnodesTemp {
if filepath.Ext(addr) == ".yaml" {
fileNodes, err := readbootNodes(addr)
if err != nil {
return err
}
bootnodeAddrs[i] = string(b)
bootnodeAddrs = append(bootnodeAddrs, fileNodes...)
} else {
bootnodeAddrs = append(bootnodeAddrs, addr)
}
}

Expand Down
32 changes: 32 additions & 0 deletions beacon-chain/node/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package node
import (
"flag"
"fmt"
"io/ioutil"
"os"
"testing"

Expand Down Expand Up @@ -47,3 +48,34 @@ func TestNodeClose_OK(t *testing.T) {
t.Log(err)
}
}

func TestBootStrapNodeFile(t *testing.T) {
file, err := ioutil.TempFile(testutil.TempDir(), "bootstrapFile")
if err != nil {
t.Fatalf("Error in TempFile call: %v", err)
}
defer func() {
if err := os.Remove(file.Name()); err != nil {
t.Log(err)
}
}()

sampleNode0 := "- enr:-Ku4QMKVC_MowDsmEa20d5uGjrChI0h8_KsKXDmgVQbIbngZV0i" +
"dV6_RL7fEtZGo-kTNZ5o7_EJI_vCPJ6scrhwX0Z4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD" +
"1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQJxCnE6v_x2ekgY_uo" +
"E1rtwzvGy40mq9eD66XfHPBWgIIN1ZHCCD6A"
sampleNode1 := "- enr:-TESTNODE2"
sampleNode2 := "- enr:-TESTNODE3"
err = ioutil.WriteFile(file.Name(), []byte(sampleNode0+"\n"+sampleNode1+"\n"+sampleNode2), 0644)
if err != nil {
t.Fatalf("Error in WriteFile call: %v", err)
}
nodeList, err := readbootNodes(file.Name())
if err != nil {
t.Fatalf("Error in readbootNodes call: %v", err)
}
if nodeList[0] != sampleNode0[2:] || nodeList[1] != sampleNode1[2:] || nodeList[2] != sampleNode2[2:] {
// nodeList's YAML parsing will have removed the leading "- "
t.Fatalf("TestBootStrapNodeFile failed. Nodes do not match")
}
}
6 changes: 3 additions & 3 deletions shared/cmd/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ var (
Usage: "Connect with this peer. This flag may be used multiple times.",
}
// BootstrapNode tells the beacon node which bootstrap node to connect to
BootstrapNode = &cli.StringFlag{
BootstrapNode = &cli.StringSliceFlag{
Name: "bootstrap-node",
Usage: "The address of bootstrap node. Beacon node will connect for peer discovery via DHT. Multiple nodes can be separated with a comma",
Value: "enr:-Ku4QMKVC_MowDsmEa20d5uGjrChI0h8_KsKXDmgVQbIbngZV0idV6_RL7fEtZGo-kTNZ5o7_EJI_vCPJ6scrhwX0Z4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQJxCnE6v_x2ekgY_uoE1rtwzvGy40mq9eD66XfHPBWgIIN1ZHCCD6A",
Usage: "The address of bootstrap node. Beacon node will connect for peer discovery via DHT. Multiple nodes can be passed by using the flag multiple times but not comma-separated. You can also pass YAML files containing multiple nodes.",
Value: cli.NewStringSlice("enr:-Ku4QMKVC_MowDsmEa20d5uGjrChI0h8_KsKXDmgVQbIbngZV0idV6_RL7fEtZGo-kTNZ5o7_EJI_vCPJ6scrhwX0Z4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpD1pf1CAAAAAP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQJxCnE6v_x2ekgY_uoE1rtwzvGy40mq9eD66XfHPBWgIIN1ZHCCD6A"),
}
// RelayNode tells the beacon node which relay node to connect to.
RelayNode = &cli.StringFlag{
Expand Down