From 3f2a62b5e2e7f527a4a7ee39ea3e41fbf4a0c7b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 13 Aug 2020 13:18:14 +0200 Subject: [PATCH 1/3] cli: net reachability command --- api/api_common.go | 7 +++++++ api/apistruct/struct.go | 6 ++++++ cli/net.go | 26 ++++++++++++++++++++++++++ node/impl/common/common.go | 19 +++++++++++++++++++ 4 files changed, 58 insertions(+) diff --git a/api/api_common.go b/api/api_common.go index aa63e9815..0c20d0ad9 100644 --- a/api/api_common.go +++ b/api/api_common.go @@ -6,6 +6,7 @@ import ( "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" "github.com/filecoin-project/go-jsonrpc/auth" @@ -28,6 +29,7 @@ type Common interface { NetDisconnect(context.Context, peer.ID) error NetFindPeer(context.Context, peer.ID) (peer.AddrInfo, error) NetPubsubScores(context.Context) ([]PubsubScore, error) + NetAutoNatStatus(context.Context) (NatInfo, error) // MethodGroup: Common @@ -65,3 +67,8 @@ type Version struct { func (v Version) String() string { return fmt.Sprintf("%s+api%s", v.Version, v.APIVersion.String()) } + +type NatInfo struct { + Reachability network.Reachability + PublicAddr ma.Multiaddr +} diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index 5be189c98..49a0c2afc 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -49,6 +49,7 @@ type CommonStruct struct { NetDisconnect func(context.Context, peer.ID) error `perm:"write"` NetFindPeer func(context.Context, peer.ID) (peer.AddrInfo, error) `perm:"read"` NetPubsubScores func(context.Context) ([]api.PubsubScore, error) `perm:"read"` + NetAutoNatStatus func(context.Context) (api.NatInfo, error) `perm:"read"` ID func(context.Context) (peer.ID, error) `perm:"read"` Version func(context.Context) (api.Version, error) `perm:"read"` @@ -331,6 +332,7 @@ func (c *CommonStruct) AuthNew(ctx context.Context, perms []auth.Permission) ([] func (c *CommonStruct) NetPubsubScores(ctx context.Context) ([]api.PubsubScore, error) { return c.Internal.NetPubsubScores(ctx) } + func (c *CommonStruct) NetConnectedness(ctx context.Context, pid peer.ID) (network.Connectedness, error) { return c.Internal.NetConnectedness(ctx, pid) } @@ -355,6 +357,10 @@ func (c *CommonStruct) NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInf return c.Internal.NetFindPeer(ctx, p) } +func (c *CommonStruct) NetAutoNatStatus(ctx context.Context) (api.NatInfo, error) { + return c.Internal.NetAutoNatStatus(ctx) +} + // ID implements API.ID func (c *CommonStruct) ID(ctx context.Context) (peer.ID, error) { return c.Internal.ID(ctx) diff --git a/cli/net.go b/cli/net.go index 2e35f552f..e960a7234 100644 --- a/cli/net.go +++ b/cli/net.go @@ -24,6 +24,7 @@ var netCmd = &cli.Command{ NetId, netFindPeer, netScores, + netReachability, }, } @@ -202,3 +203,28 @@ var netFindPeer = &cli.Command{ return nil }, } + +var netReachability = &cli.Command{ + Name: "reachability", + Usage: "Print information about reachability from the internet", + Action: func(cctx *cli.Context) error { + api, closer, err := GetAPI(cctx) + if err != nil { + return err + } + defer closer() + + ctx := ReqContext(cctx) + + i, err := api.NetAutoNatStatus(ctx) + if err != nil { + return err + } + + fmt.Println("AutoNAT status: ", i.Reachability.String()) + if i.PublicAddr != nil { + fmt.Println("Public address: ", i.PublicAddr.String()) + } + return nil + }, +} diff --git a/node/impl/common/common.go b/node/impl/common/common.go index 1d2695b6e..89078dd39 100644 --- a/node/impl/common/common.go +++ b/node/impl/common/common.go @@ -2,6 +2,7 @@ package common import ( "context" + basichost "github.com/libp2p/go-libp2p/p2p/host/basic" "sort" "strings" @@ -28,6 +29,7 @@ type CommonAPI struct { fx.In APISecret *dtypes.APIAlg + RawHost lp2p.RawHost Host host.Host Router lp2p.BaseIpfsRouting Sk *dtypes.ScoreKeeper @@ -113,6 +115,23 @@ func (a *CommonAPI) NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInfo, return a.Router.FindPeer(ctx, p) } +func (a *CommonAPI) NetAutoNatStatus(ctx context.Context) (i api.NatInfo, err error) { + autonat := a.RawHost.(*basichost.BasicHost).AutoNat + + var maddr ma.Multiaddr + if autonat.Status() == network.ReachabilityPublic { + maddr, err = autonat.PublicAddr() + if err != nil { + return api.NatInfo{}, err + } + } + + return api.NatInfo{ + Reachability: autonat.Status(), + PublicAddr: maddr, + }, nil +} + func (a *CommonAPI) ID(context.Context) (peer.ID, error) { return a.Host.ID(), nil } From 069c39fc1281a402d614503980b292bf5677e544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 13 Aug 2020 13:44:03 +0200 Subject: [PATCH 2/3] Add reachability info to miner info all --- cli/net.go | 4 ++-- cmd/lotus-storage-miner/info_all.go | 5 +++++ node/impl/common/common.go | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cli/net.go b/cli/net.go index e960a7234..c3928a5b8 100644 --- a/cli/net.go +++ b/cli/net.go @@ -24,7 +24,7 @@ var netCmd = &cli.Command{ NetId, netFindPeer, netScores, - netReachability, + NetReachability, }, } @@ -204,7 +204,7 @@ var netFindPeer = &cli.Command{ }, } -var netReachability = &cli.Command{ +var NetReachability = &cli.Command{ Name: "reachability", Usage: "Print information about reachability from the internet", Action: func(cctx *cli.Context) error { diff --git a/cmd/lotus-storage-miner/info_all.go b/cmd/lotus-storage-miner/info_all.go index 4b81bf37c..be9377816 100644 --- a/cmd/lotus-storage-miner/info_all.go +++ b/cmd/lotus-storage-miner/info_all.go @@ -63,6 +63,11 @@ var infoAllCmd = &cli.Command{ return err } + fmt.Println("\n#: Reachability") + if err := lcli.NetReachability.Action(cctx); err != nil { + return err + } + // Very Verbose info fmt.Println("\n#: Peers") if err := lcli.NetPeers.Action(cctx); err != nil { diff --git a/node/impl/common/common.go b/node/impl/common/common.go index 89078dd39..73abea8fb 100644 --- a/node/impl/common/common.go +++ b/node/impl/common/common.go @@ -2,7 +2,6 @@ package common import ( "context" - basichost "github.com/libp2p/go-libp2p/p2p/host/basic" "sort" "strings" @@ -13,6 +12,7 @@ import ( "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" swarm "github.com/libp2p/go-libp2p-swarm" + basichost "github.com/libp2p/go-libp2p/p2p/host/basic" ma "github.com/multiformats/go-multiaddr" "go.uber.org/fx" "golang.org/x/xerrors" From 3b23ab952bccf79033373d4ee8ba3108ba67d2e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 13 Aug 2020 13:44:43 +0200 Subject: [PATCH 3/3] gofmt --- chain/events/state/diff_adt.go | 5 ++--- chain/events/state/diff_adt_test.go | 8 +++----- chain/events/state/predicates.go | 13 +++++-------- cli/net.go | 4 ++-- cmd/lotus-chainwatch/processor/common_actors.go | 2 +- 5 files changed, 13 insertions(+), 19 deletions(-) diff --git a/chain/events/state/diff_adt.go b/chain/events/state/diff_adt.go index 9e66eede3..1b921dd9e 100644 --- a/chain/events/state/diff_adt.go +++ b/chain/events/state/diff_adt.go @@ -41,7 +41,7 @@ func DiffAdtArray(preArr, curArr *adt.Array, out AdtArrayDiff) error { } // no modification - if !bytes.Equal(prevVal.Raw,curVal.Raw) { + if !bytes.Equal(prevVal.Raw, curVal.Raw) { if err := out.Modify(uint64(i), prevVal, curVal); err != nil { return err } @@ -95,13 +95,12 @@ func DiffAdtMap(preMap, curMap *adt.Map, out AdtMapDiff) error { } // no modification - if !bytes.Equal(prevVal.Raw,curVal.Raw) { + if !bytes.Equal(prevVal.Raw, curVal.Raw) { if err := out.Modify(key, prevVal, curVal); err != nil { return err } } - return curMap.Delete(k) }); err != nil { return err diff --git a/chain/events/state/diff_adt_test.go b/chain/events/state/diff_adt_test.go index a430d2de7..56a03bf33 100644 --- a/chain/events/state/diff_adt_test.go +++ b/chain/events/state/diff_adt_test.go @@ -71,7 +71,6 @@ func TestDiffAdtArray(t *testing.T) { assert.EqualValues(t, []byte{1}, changes.Removed[1].val) } - func TestDiffAdtMap(t *testing.T) { ctxstoreA := newContextStore() ctxstoreB := newContextStore() @@ -128,14 +127,13 @@ func TestDiffAdtMap(t *testing.T) { } type TestDiffMap struct { - Added []adtMapDiffResult + Added []adtMapDiffResult Modified []TestAdtMapDiffModified - Removed []adtMapDiffResult + Removed []adtMapDiffResult } var _ AdtMapDiff = &TestDiffMap{} - func (t *TestDiffMap) AsKey(key string) (adt.Keyer, error) { k, err := adt.ParseUIntKey(key) if err != nil { @@ -218,7 +216,7 @@ type adtMapDiffResult struct { type TestAdtMapDiffModified struct { From adtMapDiffResult - To adtMapDiffResult + To adtMapDiffResult } type adtArrayDiffResult struct { diff --git a/chain/events/state/predicates.go b/chain/events/state/predicates.go index 544ff7b14..bf85f1f1a 100644 --- a/chain/events/state/predicates.go +++ b/chain/events/state/predicates.go @@ -649,22 +649,20 @@ type AddressPair struct { } type InitActorAddressChanges struct { - Added []AddressPair + Added []AddressPair Modified []AddressChange - Removed []AddressPair + Removed []AddressPair } type AddressChange struct { From AddressPair - To AddressPair + To AddressPair } type DiffInitActorStateFunc func(ctx context.Context, oldState *init_.State, newState *init_.State) (changed bool, user UserData, err error) - - func (i *InitActorAddressChanges) AsKey(key string) (adt.Keyer, error) { - addr , err := address.NewFromBytes([]byte(key)) + addr, err := address.NewFromBytes([]byte(key)) if err != nil { return nil, err } @@ -720,7 +718,7 @@ func (i *InitActorAddressChanges) Modify(key string, from, to *typegen.Deferred) ID: fromIDAddr, PK: pkAddr, }, - To: AddressPair{ + To: AddressPair{ ID: toIDAddr, PK: pkAddr, }, @@ -786,4 +784,3 @@ func (sp *StatePredicates) OnAddressMapChange() DiffInitActorStateFunc { return true, addressChanges, nil } } - diff --git a/cli/net.go b/cli/net.go index c3928a5b8..7a2474bf4 100644 --- a/cli/net.go +++ b/cli/net.go @@ -205,8 +205,8 @@ var netFindPeer = &cli.Command{ } var NetReachability = &cli.Command{ - Name: "reachability", - Usage: "Print information about reachability from the internet", + Name: "reachability", + Usage: "Print information about reachability from the internet", Action: func(cctx *cli.Context) error { api, closer, err := GetAPI(cctx) if err != nil { diff --git a/cmd/lotus-chainwatch/processor/common_actors.go b/cmd/lotus-chainwatch/processor/common_actors.go index b2e86ddc2..3fbdbf170 100644 --- a/cmd/lotus-chainwatch/processor/common_actors.go +++ b/cmd/lotus-chainwatch/processor/common_actors.go @@ -176,7 +176,7 @@ func (p Processor) storeActorAddresses(ctx context.Context, actors map[cid.Cid]A for _, updates := range addressesToUpdate { if _, err := updateTx.Exec( fmt.Sprintf("update id_address_map set id=%s, address=%s where id=%s and address=%s", updates.New.ID, updates.New.PK, updates.Old.ID, updates.Old.PK), - ); err != nil { + ); err != nil { return err } }