Skip to content

Commit

Permalink
fix panic on start with —no-p2p
Browse files Browse the repository at this point in the history
  • Loading branch information
fredcarle committed Aug 8, 2022
1 parent f2ae179 commit 57dd095
Showing 1 changed file with 24 additions and 17 deletions.
41 changes: 24 additions & 17 deletions cli/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (

ma "github.com/multiformats/go-multiaddr"
httpapi "github.com/sourcenetwork/defradb/api/http"
"github.com/sourcenetwork/defradb/client"
"github.com/sourcenetwork/defradb/config"
badgerds "github.com/sourcenetwork/defradb/datastore/badger/v3"
"github.com/sourcenetwork/defradb/db"
Expand Down Expand Up @@ -71,12 +72,12 @@ var startCmd = &cobra.Command{
return nil
},
RunE: func(cmd *cobra.Command, args []string) error {
n, err := start(cmd.Context())
n, db, err := start(cmd.Context())
if err != nil {
return err
}

wait(cmd.Context(), n)
wait(cmd.Context(), n, db)

return nil
},
Expand Down Expand Up @@ -131,7 +132,7 @@ func init() {
rootCmd.AddCommand(startCmd)
}

func start(ctx context.Context) (*node.Node, error) {
func start(ctx context.Context) (*node.Node, client.DB, error) {
log.FeedbackInfo(ctx, "Starting DefraDB service...")

var rootstore ds.Batching
Expand All @@ -154,7 +155,7 @@ func start(ctx context.Context) (*node.Node, error) {
}

if err != nil {
return nil, fmt.Errorf("failed to open datastore: %w", err)
return nil, nil, fmt.Errorf("failed to open datastore: %w", err)
}

var options []db.Option
Expand All @@ -168,7 +169,7 @@ func start(ctx context.Context) (*node.Node, error) {

db, err := db.NewDB(ctx, rootstore, options...)
if err != nil {
return nil, fmt.Errorf("failed to create database: %w", err)
return nil, nil, fmt.Errorf("failed to create database: %w", err)
}

// init the p2p node
Expand All @@ -184,15 +185,15 @@ func start(ctx context.Context) (*node.Node, error) {
if err != nil {
n.Close() //nolint:errcheck
db.Close(ctx)
return nil, fmt.Errorf("failed to start P2P node: %w", err)
return nil, nil, fmt.Errorf("failed to start P2P node: %w", err)
}

// parse peers and bootstrap
if len(cfg.Net.Peers) != 0 {
log.Debug(ctx, "Parsing bootstrap peers", logging.NewKV("Peers", cfg.Net.Peers))
addrs, err := netutils.ParsePeers(strings.Split(cfg.Net.Peers, ","))
if err != nil {
return nil, fmt.Errorf("failed to parse bootstrap peers %v: %w", cfg.Net.Peers, err)
return nil, nil, fmt.Errorf("failed to parse bootstrap peers %v: %w", cfg.Net.Peers, err)
}
log.Debug(ctx, "Bootstrapping with peers", logging.NewKV("Addresses", addrs))
n.Boostrap(addrs)
Expand All @@ -201,29 +202,29 @@ func start(ctx context.Context) (*node.Node, error) {
if err := n.Start(); err != nil {
n.Close() //nolint:errcheck
db.Close(ctx)
return nil, fmt.Errorf("failed to start P2P listeners: %w", err)
return nil, nil, fmt.Errorf("failed to start P2P listeners: %w", err)
}

MtcpAddr, err := ma.NewMultiaddr(cfg.Net.TCPAddress)
if err != nil {
return nil, fmt.Errorf("failed to parse multiaddress: %w", err)
return nil, nil, fmt.Errorf("failed to parse multiaddress: %w", err)
}
addr, err := netutils.TCPAddrFromMultiAddr(MtcpAddr)
if err != nil {
return nil, fmt.Errorf("failed to parse TCP address: %w", err)
return nil, nil, fmt.Errorf("failed to parse TCP address: %w", err)
}

rpcTimeoutDuration, err := cfg.Net.RPCTimeoutDuration()
if err != nil {
return nil, fmt.Errorf("failed to parse RPC timeout duration: %w", err)
return nil, nil, fmt.Errorf("failed to parse RPC timeout duration: %w", err)
}

server := grpc.NewServer(grpc.KeepaliveParams(keepalive.ServerParameters{
MaxConnectionIdle: rpcTimeoutDuration,
}))
tcplistener, err := gonet.Listen("tcp", addr)
if err != nil {
return nil, fmt.Errorf("failed to listen on TCP address %v: %w", addr, err)
return nil, nil, fmt.Errorf("failed to listen on TCP address %v: %w", addr, err)
}

netService := netapi.NewService(n.Peer)
Expand All @@ -237,9 +238,15 @@ func start(ctx context.Context) (*node.Node, error) {
}()
}

s := http.NewServer(db, http.WithAddress(cfg.API.Address), http.WithPeerID(n.PeerID().String()))
sOpt := []func(*http.Server){
http.WithAddress(cfg.API.Address),
}
if n != nil {
sOpt = append(sOpt, http.WithPeerID(n.PeerID().String()))
}
s := http.NewServer(db, sOpt...)
if err := s.Listen(ctx); err != nil {
return nil, fmt.Errorf("failed to listen on TCP address %v: %w", s.Addr, err)
return nil, nil, fmt.Errorf("failed to listen on TCP address %v: %w", s.Addr, err)
}

// run the server in a separate goroutine
Expand All @@ -264,11 +271,11 @@ func start(ctx context.Context) (*node.Node, error) {
}
}()

return n, nil
return n, db, nil
}

// wait waits for an interrupt signal to close the program.
func wait(ctx context.Context, n *node.Node) {
func wait(ctx context.Context, n *node.Node, db client.DB) {
// setup signal handlers
signalCh := make(chan os.Signal, 1)
signal.Notify(signalCh, os.Interrupt)
Expand All @@ -278,6 +285,6 @@ func wait(ctx context.Context, n *node.Node) {
if n != nil {
n.Close() //nolint:errcheck
}
n.DB.Close(ctx)
db.Close(ctx)
os.Exit(0)
}

0 comments on commit 57dd095

Please sign in to comment.