diff --git a/cluster.go b/cluster.go index 997cbd18..708e6b41 100644 --- a/cluster.go +++ b/cluster.go @@ -486,24 +486,29 @@ func (c *Cluster) globalPinInfoSlice(method string) ([]GlobalPinInfo, error) { } } + erroredPeers := make(map[peer.ID]string) for i, r := range replies { if e := errs[i]; e != nil { logger.Errorf("%s: error in broadcast response from %s: %s ", c.host.ID(), members[i], e) - i := []PinInfo{ - PinInfo{ - CidStr: "*", - Peer: members[i], - IPFS: ClusterError, - TS: time.Now(), - Error: e.Error(), - }, - } - mergePins(i) + erroredPeers[members[i]] = e.Error() } else { mergePins(r) } } + // Merge any errors + for p, msg := range erroredPeers { + for c, _ := range fullMap { + fullMap[c].Status[p] = PinInfo{ + CidStr: c, + Peer: p, + IPFS: ClusterError, + TS: time.Now(), + Error: msg, + } + } + } + for _, v := range fullMap { infos = append(infos, v) } diff --git a/ipfscluster.go b/ipfscluster.go index a23b6201..791a9892 100644 --- a/ipfscluster.go +++ b/ipfscluster.go @@ -94,6 +94,8 @@ func (st IPFSStatus) String() string { switch st { case Bug: return "bug" + case ClusterError: + return "cluster_error" case PinError: return "pin_error" case UnpinError: diff --git a/rest_api.go b/rest_api.go index b21aa1d8..f8170c74 100644 --- a/rest_api.go +++ b/rest_api.go @@ -78,7 +78,8 @@ type unpinResp struct { } type statusInfo struct { - IPFS string `json:"ipfs"` + IPFS string `json:"ipfs"` + Error string `json:"error,omitempty"` } type statusCidResp struct { @@ -420,7 +421,8 @@ func transformPinToStatusCid(p GlobalPinInfo) statusCidResp { s.Status = make(map[string]statusInfo) for k, v := range p.Status { s.Status[k.Pretty()] = statusInfo{ - IPFS: v.IPFS.String(), + IPFS: v.IPFS.String(), + Error: v.Error, } } return s