diff --git a/compconfig.go b/compconfig.go index 00e27aa..3d22a6b 100644 --- a/compconfig.go +++ b/compconfig.go @@ -23,6 +23,9 @@ type SequentialRouter struct { type ProvideManyRouter interface { ProvideMany(ctx context.Context, keys []multihash.Multihash) error +} + +type ReadyAbleRouter interface { Ready() bool } diff --git a/compparallel.go b/compparallel.go index ccdb7f4..0a3acd2 100644 --- a/compparallel.go +++ b/compparallel.go @@ -57,11 +57,16 @@ func (r *composableParallel) Provide(ctx context.Context, cid cid.Cid, provide b func (r *composableParallel) ProvideMany(ctx context.Context, keys []multihash.Multihash) error { return executeParallel(ctx, r.routers, func(ctx context.Context, r routing.Routing) error { - pm, ok := r.(ProvideManyRouter) - if !ok { - return nil + if pm, ok := r.(ProvideManyRouter); ok { + return pm.ProvideMany(ctx, keys) } - return pm.ProvideMany(ctx, keys) + + for _, k := range keys { + if err := r.Provide(ctx, cid.NewCidV1(cid.Raw, k), true); err != nil { + return err + } + } + return nil }, ) } @@ -70,7 +75,7 @@ func (r *composableParallel) ProvideMany(ctx context.Context, keys []multihash.M // If some of them are not ready, this method will return false. func (r *composableParallel) Ready() bool { for _, ro := range r.routers { - pm, ok := ro.Router.(ProvideManyRouter) + pm, ok := ro.Router.(ReadyAbleRouter) if !ok { continue } diff --git a/compsequential.go b/compsequential.go index 78939f3..4fad013 100644 --- a/compsequential.go +++ b/compsequential.go @@ -48,11 +48,16 @@ func (r *composableSequential) Provide(ctx context.Context, cid cid.Cid, provide func (r *composableSequential) ProvideMany(ctx context.Context, keys []multihash.Multihash) error { return executeSequential(ctx, r.routers, func(ctx context.Context, r routing.Routing) error { - pm, ok := r.(ProvideManyRouter) - if !ok { - return nil + if pm, ok := r.(ProvideManyRouter); ok { + return pm.ProvideMany(ctx, keys) } - return pm.ProvideMany(ctx, keys) + + for _, k := range keys { + if err := r.Provide(ctx, cid.NewCidV1(cid.Raw, k), true); err != nil { + return err + } + } + return nil }, ) } @@ -61,7 +66,7 @@ func (r *composableSequential) ProvideMany(ctx context.Context, keys []multihash // If some of them are not ready, this method will return false. func (r *composableSequential) Ready() bool { for _, ro := range r.routers { - pm, ok := ro.Router.(ProvideManyRouter) + pm, ok := ro.Router.(ReadyAbleRouter) if !ok { continue }