Unverified Commit f976af7b authored by Michael Muré's avatar Michael Muré Committed by Michael Muré

feat: make the CoreAPI expose a streaming pin interface

parent 7bbf5bb0
...@@ -14,6 +14,9 @@ type Pin interface { ...@@ -14,6 +14,9 @@ type Pin interface {
// Type of the pin // Type of the pin
Type() string Type() string
// if not nil, an error happened. Everything else should be ignored.
Err() error
} }
// PinStatus holds information about pin health // PinStatus holds information about pin health
...@@ -41,7 +44,7 @@ type PinAPI interface { ...@@ -41,7 +44,7 @@ type PinAPI interface {
Add(context.Context, path.Path, ...options.PinAddOption) error Add(context.Context, path.Path, ...options.PinAddOption) error
// Ls returns list of pinned objects on this node // 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 removes pin for object specified by the path
Rm(context.Context, path.Path, ...options.PinRmOption) error Rm(context.Context, path.Path, ...options.PinRmOption) error
......
...@@ -225,7 +225,7 @@ func (tp *TestSuite) TestBlockPin(t *testing.T) { ...@@ -225,7 +225,7 @@ func (tp *TestSuite) TestBlockPin(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
pins, err := api.Pin().Ls(ctx) pins, err := accPins(api.Pin().Ls(ctx))
if err != nil { if err != nil {
return return
} }
......
...@@ -67,7 +67,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) { ...@@ -67,7 +67,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
list, err := api.Pin().Ls(ctx) list, err := accPins(api.Pin().Ls(ctx))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -89,7 +89,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) { ...@@ -89,7 +89,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
list, err = api.Pin().Ls(ctx) list, err = accPins(api.Pin().Ls(ctx))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -141,7 +141,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) { ...@@ -141,7 +141,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
list, err := api.Pin().Ls(ctx) list, err := accPins(api.Pin().Ls(ctx))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -150,7 +150,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) { ...@@ -150,7 +150,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected pin list len: %d", len(list)) 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -163,7 +163,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) { ...@@ -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()) 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -176,7 +176,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) { ...@@ -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()) 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -390,21 +390,21 @@ func getThreeChainedNodes(t *testing.T, ctx context.Context, api iface.CoreAPI, ...@@ -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) { func assertPinTypes(t *testing.T, ctx context.Context, api iface.CoreAPI, recusive, direct, indirect []cidContainer) {
assertPinLsAllConsistency(t, ctx, api) 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
assertPinCids(t, list, recusive...) 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
assertPinCids(t, list, direct...) 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -454,7 +454,7 @@ func assertPinCids(t *testing.T, pins []iface.Pin, cids ...cidContainer) { ...@@ -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 // 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) { func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.CoreAPI) {
t.Helper() t.Helper()
allPins, err := api.Pin().Ls(ctx) allPins, err := accPins(api.Pin().Ls(ctx))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -485,7 +485,7 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core ...@@ -485,7 +485,7 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core
} }
for typeStr, pinProps := range typeMap { 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -505,3 +505,20 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core ...@@ -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
}
...@@ -542,7 +542,7 @@ func (tp *TestSuite) TestAddPinned(t *testing.T) { ...@@ -542,7 +542,7 @@ func (tp *TestSuite) TestAddPinned(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
pins, err := api.Pin().Ls(ctx) pins, err := accPins(api.Pin().Ls(ctx))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment