github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/cmd/bacalhau/simulator.go (about) 1 package bacalhau 2 3 import ( 4 "fmt" 5 6 "github.com/filecoin-project/bacalhau/pkg/devstack" 7 "github.com/filecoin-project/bacalhau/pkg/jobstore/inmemory" 8 "github.com/filecoin-project/bacalhau/pkg/libp2p" 9 "github.com/filecoin-project/bacalhau/pkg/node" 10 "github.com/filecoin-project/bacalhau/pkg/system" 11 "github.com/multiformats/go-multiaddr" 12 "github.com/rs/zerolog/log" 13 "github.com/spf13/cobra" 14 ) 15 16 func newSimulatorCmd() *cobra.Command { 17 return &cobra.Command{ 18 Use: "simulator", 19 Short: "Run the bacalhau simulator", 20 RunE: func(cmd *cobra.Command, args []string) error { 21 return runSimulator(cmd) 22 }, 23 } 24 } 25 26 func runSimulator(cmd *cobra.Command) error { 27 ctx := cmd.Context() 28 cm := ctx.Value(systemManagerKey).(*system.CleanupManager) 29 //Cleanup manager ensures that resources are freed before exiting: 30 datastore := inmemory.NewJobStore() 31 libp2pHost, err := libp2p.NewHost(9075) //nolint:gomnd 32 if err != nil { 33 Fatal(cmd, fmt.Sprintf("Error creating libp2p host: %s", err), 1) 34 } 35 cm.RegisterCallback(libp2pHost.Close) 36 37 // print out simulator multi-address 38 p2pAddr, err := multiaddr.NewMultiaddr("/p2p/" + libp2pHost.ID().String()) 39 if err != nil { 40 Fatal(cmd, fmt.Sprintf("Error creating p2p multiaddr: %s", err), 1) 41 } 42 fullAddr := libp2pHost.Addrs()[0].Encapsulate(p2pAddr) 43 log.Ctx(ctx).Info().Msgf("Simulator reachable at: %s", fullAddr) 44 log.Ctx(ctx).Info().Msgf("You can run: bacalhau devstack --simulator-addr \"%s\"", fullAddr) 45 46 // Create node config from cmd arguments 47 nodeConfig := node.NodeConfig{ 48 CleanupManager: cm, 49 JobStore: datastore, 50 Host: libp2pHost, 51 HostAddress: "0.0.0.0", 52 APIPort: apiPort, 53 ComputeConfig: node.NewComputeConfigWithDefaults(), 54 RequesterNodeConfig: node.NewRequesterConfigWithDefaults(), 55 SimulatorNodeID: libp2pHost.ID().String(), 56 IsComputeNode: true, 57 IsRequesterNode: true, 58 } 59 node, err := node.NewNode(ctx, nodeConfig, devstack.NewNoopNodeDependencyInjector()) 60 if err != nil { 61 Fatal(cmd, fmt.Sprintf("Error creating node: %s", err), 1) 62 } 63 // Start node 64 err = node.Start(ctx) 65 if err != nil { 66 Fatal(cmd, fmt.Sprintf("Error starting node: %s", err), 1) 67 } 68 69 <-ctx.Done() // block until killed 70 return nil 71 }