Issue #219: Provide a list of peers and a list of addresses in the ID object.

Fix cluster-ctl to show right number of peers

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
This commit is contained in:
Hector Sanjuan 2017-11-10 16:09:45 +01:00
parent 289890ad6c
commit 2a616aeddb
3 changed files with 46 additions and 34 deletions

View File

@ -230,27 +230,29 @@ func (ids *IPFSIDSerial) ToIPFSID() IPFSID {
// ID holds information about the Cluster peer
type ID struct {
ID peer.ID
Addresses []ma.Multiaddr
ClusterPeers []ma.Multiaddr
Version string
Commit string
RPCProtocolVersion protocol.ID
Error string
IPFS IPFSID
ID peer.ID
Addresses []ma.Multiaddr
ClusterPeers []peer.ID
ClusterPeersAddresses []ma.Multiaddr
Version string
Commit string
RPCProtocolVersion protocol.ID
Error string
IPFS IPFSID
//PublicKey crypto.PubKey
}
// IDSerial is the serializable ID counterpart for RPC requests
type IDSerial struct {
ID string `json:"id"`
Addresses MultiaddrsSerial `json:"addresses"`
ClusterPeers MultiaddrsSerial `json:"cluster_peers"`
Version string `json:"version"`
Commit string `json:"commit"`
RPCProtocolVersion string `json:"rpc_protocol_version"`
Error string `json:"error"`
IPFS IPFSIDSerial `json:"ipfs"`
ID string `json:"id"`
Addresses MultiaddrsSerial `json:"addresses"`
ClusterPeers []string `json:"cluster_peers"`
ClusterPeersAddresses MultiaddrsSerial `json:"cluster_peers_addresses"`
Version string `json:"version"`
Commit string `json:"commit"`
RPCProtocolVersion string `json:"rpc_protocol_version"`
Error string `json:"error"`
IPFS IPFSIDSerial `json:"ipfs"`
//PublicKey []byte
}
@ -261,16 +263,22 @@ func (id ID) ToSerial() IDSerial {
// pkey, _ = id.PublicKey.Bytes()
//}
peers := make([]string, len(id.ClusterPeers), len(id.ClusterPeers))
for i, p := range id.ClusterPeers {
peers[i] = peer.IDB58Encode(p)
}
return IDSerial{
ID: peer.IDB58Encode(id.ID),
//PublicKey: pkey,
Addresses: MultiaddrsToSerial(id.Addresses),
ClusterPeers: MultiaddrsToSerial(id.ClusterPeers),
Version: id.Version,
Commit: id.Commit,
RPCProtocolVersion: string(id.RPCProtocolVersion),
Error: id.Error,
IPFS: id.IPFS.ToSerial(),
Addresses: MultiaddrsToSerial(id.Addresses),
ClusterPeers: peers,
ClusterPeersAddresses: MultiaddrsToSerial(id.ClusterPeersAddresses),
Version: id.Version,
Commit: id.Commit,
RPCProtocolVersion: string(id.RPCProtocolVersion),
Error: id.Error,
IPFS: id.IPFS.ToSerial(),
}
}
@ -285,8 +293,14 @@ func (ids IDSerial) ToID() ID {
// id.PublicKey = pkey
//}
peers := make([]peer.ID, len(ids.ClusterPeers), len(ids.ClusterPeers))
for i, p := range ids.ClusterPeers {
peers[i], _ = peer.IDB58Decode(p)
}
id.Addresses = ids.Addresses.ToMultiaddrs()
id.ClusterPeers = ids.ClusterPeers.ToMultiaddrs()
id.ClusterPeers = peers
id.ClusterPeersAddresses = ids.ClusterPeersAddresses.ToMultiaddrs()
id.Version = ids.Version
id.Commit = ids.Commit
id.RPCProtocolVersion = protocol.ID(ids.RPCProtocolVersion)

View File

@ -590,15 +590,13 @@ func (c *Cluster) ID() api.ID {
return api.ID{
ID: c.id,
//PublicKey: c.host.Peerstore().PubKey(c.id),
Addresses: addrs,
// TODO: These are not peers but addresses. There could be
// several addresses for a single peer. Do we want to provide
// only PIDs? Another key in this object for addresses?
ClusterPeers: c.peerManager.addresses(peers),
Version: Version,
Commit: Commit,
RPCProtocolVersion: RPCProtocol,
IPFS: ipfsID,
Addresses: addrs,
ClusterPeers: peers,
ClusterPeersAddresses: c.peerManager.addresses(peers),
Version: Version,
Commit: Commit,
RPCProtocolVersion: RPCProtocol,
IPFS: ipfsID,
}
}

View File

@ -81,7 +81,7 @@ func textFormatPrintIDSerial(obj *api.IDSerial) {
return
}
fmt.Printf("%s | %d peers\n", obj.ID, len(obj.ClusterPeers))
fmt.Printf("%s | Sees %d other peers\n", obj.ID, len(obj.ClusterPeers)-1)
addrs := make(sort.StringSlice, 0, len(obj.Addresses))
for _, a := range obj.Addresses {
addrs = append(addrs, string(a))