github.com/pachyderm/pachyderm@v1.13.4/src/server/pkg/storage/fileset/index_resolver.go (about) 1 package fileset 2 3 import ( 4 "context" 5 6 "github.com/pachyderm/pachyderm/src/client/pkg/errors" 7 "github.com/pachyderm/pachyderm/src/server/pkg/storage/fileset/index" 8 ) 9 10 // NewIndexResolver creates a file set that resolves index entries. 11 func (s *Storage) NewIndexResolver(fs FileSet) FileSet { 12 return &indexResolver{ 13 s: s, 14 fs: fs, 15 } 16 } 17 18 type indexResolver struct { 19 s *Storage 20 fs FileSet 21 } 22 23 func (ir *indexResolver) Iterate(ctx context.Context, cb func(File) error, _ ...bool) error { 24 iter := NewIterator(ctx, ir.fs) 25 w := ir.s.newWriter(ctx, "", WithNoUpload(), WithIndexCallback(func(idx *index.Index) error { 26 f, err := iter.Next() 27 if err != nil { 28 return err 29 } 30 if f.Index().Path != idx.Path { 31 return errors.Errorf("index resolver paths out of sync") 32 } 33 return cb(newFileReader(ctx, ir.s.ChunkStorage(), idx)) 34 })) 35 if err := CopyFiles(ctx, w, ir.fs); err != nil { 36 return err 37 } 38 return w.Close() 39 }