Skip to content

Commit 14c6c14

Browse files
fix info.peers intermittent exception on benched peers
1 parent 637e364 commit 14c6c14

File tree

6 files changed

+285
-27
lines changed

6 files changed

+285
-27
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ rosetta-data
1919
data
2020
.vscode*
2121
__debug_bin*
22-
build_docker.sh
22+
build_docker.sh
23+
.idea

server/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,5 +120,6 @@ check-mainnet-construction:
120120
rosetta-cli check:construction --configuration-file=rosetta-cli-conf/mainnet/config.json
121121

122122
mocks:
123+
# go install github.com/vektra/mockery/[email protected]
123124
rm -rf mocks;
124125
mockery --dir client --all --case underscore --outpkg client --output mocks/client;

server/client/client.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package client
22

33
import (
44
"context"
5+
"github.com/ava-labs/avalanchego/ids"
6+
"github.com/ava-labs/avalanchego/network/peer"
7+
"github.com/ava-labs/avalanchego/utils/json"
58
"math/big"
69
"strings"
710

@@ -34,12 +37,50 @@ type Client interface {
3437
TxPoolContent(context.Context) (*TxPoolContent, error)
3538
GetNetworkName(context.Context, ...rpc.Option) (string, error)
3639
Peers(context.Context, ...rpc.Option) ([]info.Peer, error)
40+
// Peers_v1_11 enables info.peers RPC call compatible with v1.11.
41+
// Once the dependencies are upgraded, this should be replaced with Peers.
42+
Peers_v1_11(context.Context, []ids.NodeID, ...rpc.Option) ([]Peer_v1_11, error)
3743
GetContractInfo(ethcommon.Address, bool) (string, uint8, error)
3844
CallContract(context.Context, interfaces.CallMsg, *big.Int) ([]byte, error)
3945
}
4046

47+
type clientFix struct {
48+
requester rpc.EndpointRequester
49+
}
50+
51+
func newClientFix(uri string) *clientFix {
52+
return &clientFix{
53+
requester: rpc.NewEndpointRequester(
54+
uri+"/ext/info",
55+
"info",
56+
),
57+
}
58+
}
59+
60+
type Peer_v1_11 struct {
61+
peer.Info
62+
63+
Benched []string `json:"benched"`
64+
}
65+
66+
type PeersReply_v1_11 struct {
67+
// Number of elements in [Peers]
68+
NumPeers json.Uint64 `json:"numPeers"`
69+
// Each element is a peer
70+
Peers []Peer_v1_11 `json:"peers"`
71+
}
72+
73+
func (cf *clientFix) Peers_v1_11(ctx context.Context, nodeIDs []ids.NodeID, options ...rpc.Option) ([]Peer_v1_11, error) {
74+
res := &PeersReply_v1_11{}
75+
err := cf.requester.SendRequest(ctx, "peers", &info.PeersArgs{
76+
NodeIDs: nodeIDs,
77+
}, res, options...)
78+
return res.Peers, err
79+
}
80+
4181
type client struct {
4282
info.Client
83+
*clientFix
4384
*EthClient
4485
*ContractClient
4586
}
@@ -55,6 +96,7 @@ func NewClient(ctx context.Context, endpoint string) (Client, error) {
5596

5697
return client{
5798
Client: info.NewClient(endpoint),
99+
clientFix: newClientFix(endpoint),
58100
EthClient: eth,
59101
ContractClient: NewContractClient(eth.Client),
60102
}, nil

server/mapper/peers.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package mapper
22

33
import (
4+
"github.com/ava-labs/avalanche-rosetta/client"
45
"github.com/coinbase/rosetta-sdk-go/types"
56

67
"github.com/ava-labs/avalanchego/api/info"
@@ -27,3 +28,25 @@ func Peers(peers []info.Peer) []*types.Peer {
2728

2829
return result
2930
}
31+
32+
func Peers_v1_11(peers []client.Peer_v1_11) []*types.Peer {
33+
result := make([]*types.Peer, len(peers))
34+
35+
for idx, peer := range peers {
36+
result[idx] = &types.Peer{
37+
PeerID: peer.ID.String(),
38+
Metadata: map[string]interface{}{
39+
"ip": peer.IP,
40+
"public_ip": peer.PublicIP,
41+
"version": peer.Version,
42+
"last_sent": peer.LastSent,
43+
"last_received": peer.LastReceived,
44+
"benched": peer.Benched,
45+
"observed_uptime": peer.ObservedUptime,
46+
"tracked_subnets": peer.TrackedSubnets,
47+
},
48+
}
49+
}
50+
51+
return result
52+
}

0 commit comments

Comments
 (0)