diff --git a/pin/indirect.go b/pin/indirect.go index b15b720ee..9e67bc2c9 100644 --- a/pin/indirect.go +++ b/pin/indirect.go @@ -65,3 +65,7 @@ func (i *indirectPin) Decrement(k util.Key) { func (i *indirectPin) HasKey(k util.Key) bool { return i.blockset.HasKey(k) } + +func (i *indirectPin) Set() set.BlockSet { + return i.blockset +} diff --git a/pin/pin.go b/pin/pin.go index 1d840c6bc..371497da6 100644 --- a/pin/pin.go +++ b/pin/pin.go @@ -33,7 +33,9 @@ type Pinner interface { Unpin(util.Key, bool) error Flush() error GetManual() ManualPinner - Set() set.BlockSet + DirectKeys() []util.Key + IndirectKeys() []util.Key + RecursiveKeys() []util.Key } // ManualPinner is for manually editing the pin structure @@ -208,9 +210,19 @@ func LoadPinner(d ds.Datastore, dserv mdag.DAGService) (Pinner, error) { return p, nil } -// Set returns a blockset of directly pinned keys -func (p *pinner) Set() set.BlockSet { - return p.directPin +// DirectKeys returns a slice containing the directly pinned keys +func (p *pinner) DirectKeys() []util.Key { + return p.directPin.GetKeys() +} + +// IndirectKeys returns a slice containing the indirectly pinned keys +func (p *pinner) IndirectKeys() []util.Key { + return p.indirPin.Set().GetKeys() +} + +// RecursiveKeys returns a slice containing the recursively pinned keys +func (p *pinner) RecursiveKeys() []util.Key { + return p.recursePin.GetKeys() } // Flush encodes and writes pinner keysets to the datastore