feat: make the CoreAPI expose a streaming pin interface

This commit was moved from ipfs/interface-go-ipfs-core@f976af7ba6

This commit was moved from ipfs/boxo@6eb5c9791b
This commit is contained in:
Michael Muré 2019-11-27 21:40:22 +01:00 committed by Michael Muré
parent 1fc9cffa40
commit e3b5686710
4 changed files with 34 additions and 14 deletions

View File

@ -14,6 +14,9 @@ type Pin interface {
// Type of the pin
Type() string
// if not nil, an error happened. Everything else should be ignored.
Err() error
}
// PinStatus holds information about pin health
@ -41,7 +44,7 @@ type PinAPI interface {
Add(context.Context, path.Path, ...options.PinAddOption) error
// Ls returns list of pinned objects on this node
Ls(context.Context, ...options.PinLsOption) ([]Pin, error)
Ls(context.Context, ...options.PinLsOption) (<-chan Pin, error)
// Rm removes pin for object specified by the path
Rm(context.Context, path.Path, ...options.PinRmOption) error

View File

@ -225,7 +225,7 @@ func (tp *TestSuite) TestBlockPin(t *testing.T) {
t.Fatal(err)
}
pins, err := api.Pin().Ls(ctx)
pins, err := accPins(api.Pin().Ls(ctx))
if err != nil {
return
}

View File

@ -67,7 +67,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) {
t.Fatal(err)
}
list, err := api.Pin().Ls(ctx)
list, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
@ -89,7 +89,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) {
t.Fatal(err)
}
list, err = api.Pin().Ls(ctx)
list, err = accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
@ -141,7 +141,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Fatal(err)
}
list, err := api.Pin().Ls(ctx)
list, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
@ -150,7 +150,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected pin list len: %d", len(list))
}
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Direct())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Direct()))
if err != nil {
t.Fatal(err)
}
@ -163,7 +163,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected path, %s != %s", list[0].Path().String(), path.IpfsPath(nd2.Cid()).String())
}
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Recursive())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Recursive()))
if err != nil {
t.Fatal(err)
}
@ -176,7 +176,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected path, %s != %s", list[0].Path().String(), path.IpldPath(nd3.Cid()).String())
}
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Indirect())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Indirect()))
if err != nil {
t.Fatal(err)
}
@ -390,21 +390,21 @@ func getThreeChainedNodes(t *testing.T, ctx context.Context, api iface.CoreAPI,
func assertPinTypes(t *testing.T, ctx context.Context, api iface.CoreAPI, recusive, direct, indirect []cidContainer) {
assertPinLsAllConsistency(t, ctx, api)
list, err := api.Pin().Ls(ctx, opt.Pin.Type.Recursive())
list, err := accPins(api.Pin().Ls(ctx, opt.Pin.Type.Recursive()))
if err != nil {
t.Fatal(err)
}
assertPinCids(t, list, recusive...)
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Direct())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Direct()))
if err != nil {
t.Fatal(err)
}
assertPinCids(t, list, direct...)
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Indirect())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Indirect()))
if err != nil {
t.Fatal(err)
}
@ -454,7 +454,7 @@ func assertPinCids(t *testing.T, pins []iface.Pin, cids ...cidContainer) {
// assertPinLsAllConsistency verifies that listing all pins gives the same result as listing the pin types individually
func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.CoreAPI) {
t.Helper()
allPins, err := api.Pin().Ls(ctx)
allPins, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
@ -485,7 +485,7 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core
}
for typeStr, pinProps := range typeMap {
pins, err := api.Pin().Ls(ctx, pinProps.PinLsOption)
pins, err := accPins(api.Pin().Ls(ctx, pinProps.PinLsOption))
if err != nil {
t.Fatal(err)
}
@ -505,3 +505,20 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core
}
}
}
func accPins(pins <-chan iface.Pin, err error) ([]iface.Pin, error) {
if err != nil {
return nil, err
}
var result []iface.Pin
for pin := range pins {
if pin.Err() != nil {
return nil, pin.Err()
}
result = append(result, pin)
}
return result, nil
}

View File

@ -542,7 +542,7 @@ func (tp *TestSuite) TestAddPinned(t *testing.T) {
t.Fatal(err)
}
pins, err := api.Pin().Ls(ctx)
pins, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}