From a2ce37d52d6f9cca1724840e1a1c9ca98a018e3e Mon Sep 17 00:00:00 2001 From: Kishan Mohanbhai Sagathiya Date: Wed, 6 Nov 2019 10:14:59 +0530 Subject: [PATCH] If pin is not part of the pinset mark it as unpinned --- cluster.go | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/cluster.go b/cluster.go index 00f3aa95..480ed0bf 100644 --- a/cluster.go +++ b/cluster.go @@ -1682,18 +1682,46 @@ func (c *Cluster) globalPinInfoCid(ctx context.Context, comp, method string, h c ctx, span := trace.StartSpan(ctx, "cluster/globalPinInfoCid") defer span.End() + gpin := &api.GlobalPinInfo{ + Cid: h, + PeerMap: make(map[string]*api.PinInfo), + } var dests []peer.ID var err error var allocatedEverywhere bool + if c.config.FollowerMode { // during follower mode return status only on self peer dests = []peer.ID{c.host.ID()} } else { pin, err := c.PinGet(ctx, h) if err != nil { - logger.Error(err) - return nil, err + if err != state.ErrNotFound { + logger.Error(err) + return nil, err + } + + // If pin is not part of the pinset, mark it unpinned + members, err := c.consensus.Peers(ctx) + if err != nil { + logger.Error(err) + return nil, err + } + + for _, member := range members { + gpin.PeerMap[peer.IDB58Encode(member)] = &api.PinInfo{ + Cid: h, + Peer: member, + PeerName: member.String(), + Status: api.TrackerStatusUnpinned, + TS: time.Now(), + } + } + + return gpin, nil + } + if len(pin.Allocations) > 0 { dests = pin.Allocations } else { @@ -1721,11 +1749,6 @@ func (c *Cluster) globalPinInfoCid(ctx context.Context, comp, method string, h c rpcutil.CopyPinInfoToIfaces(replies), ) - gpin := &api.GlobalPinInfo{ - Cid: h, - PeerMap: make(map[string]*api.PinInfo), - } - for i, r := range replies { e := errs[i]