From 7ed02a8e62ecc232c39c12507a46de0a5931b036 Mon Sep 17 00:00:00 2001 From: Louis Thibault Date: Mon, 6 Jun 2022 11:34:10 -0400 Subject: [PATCH] Fix error due to closed discovery channel. --- go.sum | 2 - internal/cmd/client/client.go | 3 -- internal/cmd/client/discover.go | 79 ++++++++++++++++++++------------- internal/cmd/client/ls.go | 2 + internal/cmd/client/pubsub.go | 4 ++ 5 files changed, 55 insertions(+), 35 deletions(-) diff --git a/go.sum b/go.sum index cb9eb88d..270db20f 100644 --- a/go.sum +++ b/go.sum @@ -1156,8 +1156,6 @@ github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:Yko github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w= github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= -github.com/wetware/casm v0.0.0-20220512172652-17b91add6bac h1:rJWzpDzccchJUCnRRP3RQGHrHGHD71Ty77zMldY64Ww= -github.com/wetware/casm v0.0.0-20220512172652-17b91add6bac/go.mod h1:/hPIOdeX+Pnfn6PwHXvT3DTxMovLBY/4+diXleCY9/s= github.com/wetware/casm v0.0.0-20220526201835-0f6ca66923d5 h1:yRT6iHjOedGAtIEFwSdR/kcrGIfGMf+rzEMwMKg1cqo= github.com/wetware/casm v0.0.0-20220526201835-0f6ca66923d5/go.mod h1:/hPIOdeX+Pnfn6PwHXvT3DTxMovLBY/4+diXleCY9/s= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= diff --git a/internal/cmd/client/client.go b/internal/cmd/client/client.go index 3f195b5d..d284dc3d 100644 --- a/internal/cmd/client/client.go +++ b/internal/cmd/client/client.go @@ -45,8 +45,5 @@ func Command() *cli.Command { }, }, Subcommands: subcommands, - - Before: setup(), - After: teardown(), } } diff --git a/internal/cmd/client/discover.go b/internal/cmd/client/discover.go index fdec8782..93172175 100644 --- a/internal/cmd/client/discover.go +++ b/internal/cmd/client/discover.go @@ -7,11 +7,14 @@ import ( "time" "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p-core/discovery" "github.com/libp2p/go-libp2p-core/peer" libp2pquic "github.com/libp2p/go-libp2p-quic-transport" "github.com/multiformats/go-multiaddr" "github.com/urfave/cli/v2" + "github.com/wetware/casm/pkg/boot/socket" bootutil "github.com/wetware/casm/pkg/boot/util" + logutil "github.com/wetware/ww/internal/util/log" ) func Discover() *cli.Command { @@ -45,6 +48,9 @@ func Discover() *cli.Command { } func discover(c *cli.Context) error { + logger = logutil.New(c). + WithField("limit", c.Int("num")) + h, err := libp2p.New( libp2p.NoTransports, libp2p.NoListenAddrs, @@ -53,55 +59,68 @@ func discover(c *cli.Context) error { return err } - discoverer, err := bootutil.DialString(h, c.String("discover")) + discoverer, err := bootutil.DialString(h, c.String("discover"), + socket.WithLogger(logger)) if err != nil { return err } - ctx, cancel := context.WithTimeout(c.Context, time.Duration(c.Duration("timeout"))) + ctx, cancel := context.WithTimeout(c.Context, c.Duration("timeout")) defer cancel() - infos, err := discoverer.FindPeers(ctx, c.String("ns")) + infos, err := discoverer.FindPeers(ctx, c.String("ns"), + discovery.Limit(c.Int("num"))) if err != nil { return err } - discovered := make([]peer.AddrInfo, 0, c.Int("num")) - for i := 0; i < c.Int("num"); i++ { - select { - case info := <-infos: - err := setP2pAddress(info) - if err != nil { + for info := range infos { + as, err := peer.AddrInfoToP2pAddrs(&info) + if err != nil { + return err + } + + print := printer(c) + for _, addr := range as { + if err = print(addr); err != nil { return err } - discovered = append(discovered, info) - case <-ctx.Done(): } } - // print results + return ctx.Err() +} + +func printer(c *cli.Context) func(multiaddr.Multiaddr) error { if c.Bool("json") { - jsonOutput, err := json.Marshal(discovered) - if err != nil { - return nil - } - fmt.Println(string(jsonOutput)) - } else { - for _, info := range discovered { - fmt.Println(info.String()) - } + return jsonPrinter(c) } - return ctx.Err() + return textPrinter(c) } -func setP2pAddress(info peer.AddrInfo) error { - for i := range info.Addrs { - maddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/p2p/%s", info.ID.String())) - if err != nil { - return err - } - info.Addrs[i] = info.Addrs[i].Encapsulate(maddr) +func jsonPrinter(c *cli.Context) func(multiaddr.Multiaddr) error { + enc := json.NewEncoder(c.App.Writer) + + return func(maddr multiaddr.Multiaddr) error { + return enc.Encode(maddr) } - return nil } + +func textPrinter(c *cli.Context) func(multiaddr.Multiaddr) error { + return func(maddr multiaddr.Multiaddr) error { + _, err := fmt.Fprintln(c.App.Writer, maddr) + return err + } +} + +// func setP2pAddress(info peer.AddrInfo) error { +// for i := range info.Addrs { +// maddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/p2p/%s", info.ID.String())) +// if err != nil { +// return err +// } +// info.Addrs[i] = info.Addrs[i].Encapsulate(maddr) +// } +// return nil +// } diff --git a/internal/cmd/client/ls.go b/internal/cmd/client/ls.go index fcc5ffdd..02c67a67 100644 --- a/internal/cmd/client/ls.go +++ b/internal/cmd/client/ls.go @@ -20,6 +20,8 @@ func Ls() *cli.Command { EnvVars: []string{"OUTPUT_JSON"}, }, }, + Before: setup(), + After: teardown(), Action: ls(), } } diff --git a/internal/cmd/client/pubsub.go b/internal/cmd/client/pubsub.go index 9227dec6..eea950de 100644 --- a/internal/cmd/client/pubsub.go +++ b/internal/cmd/client/pubsub.go @@ -21,6 +21,8 @@ func Publish() *cli.Command { Required: true, }, }, + Before: setup(), + After: teardown(), Action: publish(), } } @@ -42,6 +44,8 @@ func Subscribe() *cli.Command { Usage: "format output as hex", }, }, + Before: setup(), + After: teardown(), Action: subscribe(), } }