From f845d8ef6f7a0cef691be2f4e44969194cf2c2e8 Mon Sep 17 00:00:00 2001 From: Godefroy Ponsinet Date: Wed, 20 Mar 2019 17:42:57 +0100 Subject: [PATCH] fix(network): handler sometimes not set Signed-off-by: Godefroy Ponsinet --- client/react-native/desktop/Makefile | 2 +- core/network/config/config.go | 11 +++++ core/network/driver.go | 3 ++ core/network/network.go | 69 ++++++++++++---------------- core/node/network.go | 3 ++ 5 files changed, 47 insertions(+), 41 deletions(-) diff --git a/client/react-native/desktop/Makefile b/client/react-native/desktop/Makefile index 01a3522e4e..d98eef5a6d 100644 --- a/client/react-native/desktop/Makefile +++ b/client/react-native/desktop/Makefile @@ -4,7 +4,7 @@ deps: GOPROXY=https://goproxy.berty.io GO111MODULE=on go mod vendor GO111MODULE=off go get -u github.com/asticode/go-astilectron-bundler/... -build: +build: clean GOPROXY=https://goproxy.berty.io GO111MODULE=on go mod vendor sed s%TMPL_MAKEFILE_PATH%$(MAKEFILE_DIR)%g bundler.json.tmpl > bundler.json cp -rf $(MAKEFILE_DIR)/../web/build $(MAKEFILE_DIR)/../desktop/resources/app diff --git a/core/network/config/config.go b/core/network/config/config.go index 560ba22189..d7c07a1edf 100644 --- a/core/network/config/config.go +++ b/core/network/config/config.go @@ -121,26 +121,33 @@ func (cfg *Config) Override(override *Config) error { // Apply applies the given options to the config, returning the first error // encountered (if any). func (cfg *Config) Apply(ctx context.Context, opts ...Option) error { + // reset config + cfg.Config = libp2p_config.Config{} + libp2pOpts := []libp2p_config.Option{} + logger().Debug("apply 0") for _, opt := range opts { if err := opt(cfg); err != nil { return err } } + logger().Debug("apply 1") if cfg.OverridePersist { if err := cfg.OverridePersistConfig(); err != nil { return err } } + logger().Debug("apply 2") if cfg.Persist { if err := cfg.ApplyPersistConfig(); err != nil { return err } } + logger().Debug("apply 21") // add ws transport if cfg.WS { libp2pOpts = append(libp2pOpts, libp2p.Transport(ws.New)) @@ -182,6 +189,7 @@ func (cfg *Config) Apply(ctx context.Context, opts ...Option) error { libp2pOpts = append(libp2pOpts, libp2p.EnableRelay(circuit.OptActive, circuit.OptDiscovery)) } + logger().Debug("apply 22") // private network if cfg.SwarmKey != "" { prot, err := pnet.NewProtector(strings.NewReader(cfg.SwarmKey)) @@ -191,6 +199,7 @@ func (cfg *Config) Apply(ctx context.Context, opts ...Option) error { libp2pOpts = append(libp2pOpts, libp2p.PrivateNetwork(prot)) } + logger().Debug("apply 3") // identity if cfg.Identity != "" { bytes, err := base64.StdEncoding.DecodeString(cfg.Identity) @@ -212,6 +221,7 @@ func (cfg *Config) Apply(ctx context.Context, opts ...Option) error { libp2pOpts = append(libp2pOpts, libp2p.NATPortMap()) + logger().Debug("apply 4") // override libp2p configuration err := cfg.Config.Apply(append(libp2pOpts, libp2p.FallbackDefaults)...) if err != nil { @@ -220,6 +230,7 @@ func (cfg *Config) Apply(ctx context.Context, opts ...Option) error { // override conn manager + logger().Debug("apply 5") // override ping service cfg.Config.DisablePing = true return nil diff --git a/core/network/driver.go b/core/network/driver.go index 7e7818a124..17a47fd459 100644 --- a/core/network/driver.go +++ b/core/network/driver.go @@ -261,6 +261,8 @@ func (net *Network) SendTo(ctx context.Context, pi pstore.PeerInfo, e *entity.En } func (net *Network) handleEnvelope(s inet.Stream) { + logger().Debug(fmt.Sprintf("NETWORK ADDR HANDLE %p %+v", net, net)) + logger().Debug("receiving envelope") if net.handler == nil { logger().Error("handler is not set") return @@ -317,6 +319,7 @@ func (net *Network) Join(ctx context.Context, contactID string) error { } func (net *Network) OnEnvelopeHandler(f func(context.Context, *entity.Envelope) (*entity.Void, error)) { + logger().Debug(fmt.Sprintf("ON_ENVELOPE_HANDLER %p", f)) net.handler = f } diff --git a/core/network/network.go b/core/network/network.go index 1177bcacda..c0db885b81 100644 --- a/core/network/network.go +++ b/core/network/network.go @@ -2,6 +2,7 @@ package network import ( "context" + "fmt" "sync" "berty.tech/core/entity" @@ -41,35 +42,49 @@ func New(ctx context.Context, opts ...config.Option) (*Network, error) { tracer := tracing.EnterFunc(ctx) defer tracer.Finish() - ctx, cancel := context.WithCancel(ctx) + net := &Network{} + + if err := net.new(ctx, opts...); err != nil { + return nil, err + } + return net, nil +} +func (net *Network) new(ctx context.Context, opts ...config.Option) error { var err error - net := &Network{ + ctx, cancel := context.WithCancel(ctx) + + new := &Network{ config: &config.Config{}, updating: &sync.Mutex{}, shutdown: cancel, cache: NewNoopCache(), } - if err := net.config.Apply(ctx, opts...); err != nil { + if net.updating != nil { + new.updating = net.updating + } + + if err := new.config.Apply(ctx, opts...); err != nil { cancel() - return nil, err + return err } - net.host, err = net.config.NewNode(ctx) + new.host, err = new.config.NewNode(ctx) if err != nil { cancel() - return nil, err + return err } - if net.Config().PeerCache { - net.cache = NewPeerCache(net.host) - } + *net = *new net.init(ctx) - return net, nil + if net.Config().PeerCache { + net.cache = NewPeerCache(net.host) + } + return nil } func (net *Network) init(ctx context.Context) { @@ -88,38 +103,14 @@ func (net *Network) Update(ctx context.Context, opts ...config.Option) error { net.updating.Lock() defer net.updating.Unlock() - ctx, cancel := context.WithCancel(ctx) - - var err error + swap := *net - update := &Network{ - config: &config.Config{}, - updating: net.updating, - handler: net.handler, - shutdown: cancel, - cache: NewNoopCache(), - } - - if err := update.config.Apply(ctx, append([]config.Option{WithConfig(net.config)}, opts...)...); err != nil { - cancel() + if err := net.new(ctx, append([]config.Option{WithConfig(net.config)}, opts...)...); err != nil { return err } - update.host, err = update.config.NewNode(ctx) - if err != nil { - cancel() - return err - } - - if update.Config().PeerCache { - net.cache = NewPeerCache(update.host) - } - - net.Close(ctx) - - *net = *update - - net.init(ctx) + logger().Debug(fmt.Sprintf("NETWORK ADDR %p %+v, swap: %p %+v", net, net, &swap, swap)) + swap.Close(ctx) return nil } @@ -127,7 +118,6 @@ func (net *Network) Update(ctx context.Context, opts ...config.Option) error { func (net *Network) Close(ctx context.Context) error { tracer := tracing.EnterFunc(ctx) defer tracer.Finish() - net.shutdown() // FIXME: save cache to speedup next connections @@ -140,6 +130,5 @@ func (net *Network) Close(ctx context.Context) error { logger().Error("p2p close error", zap.Error(err)) } } - return nil } diff --git a/core/node/network.go b/core/node/network.go index 2872ec4392..63d8368eb3 100644 --- a/core/node/network.go +++ b/core/node/network.go @@ -2,6 +2,7 @@ package node import ( "context" + "fmt" "berty.tech/core/network" network_metric "berty.tech/core/network/metric" @@ -38,6 +39,8 @@ func (n *Node) UseNetworkDriver(ctx context.Context, driver network.Driver) erro // configure network n.networkDriver.OnEnvelopeHandler(n.HandleEnvelope) + logger().Debug(fmt.Sprintf("NETWORK ADDR NODE %p %+v", n.networkDriver, n.networkDriver)) + _ = n.networkDriver.Join(ctx, n.UserID()) // FIXME: subscribe to every owned device IDs