MCPcopy
hub / github.com/NVIDIA/aistore / iteratePrefix

Method iteratePrefix

xs/multiobj.go:137–193  ·  view source on GitHub ↗
(smap *cluster.Smap, prefix string, wi lrwi)

Source from the content-addressed store, hash-verified

135}
136
137func (r *lriterator) iteratePrefix(smap *cluster.Smap, prefix string, wi lrwi) error {
138 var (
139 objList *cmn.BucketList
140 err error
141 bck = r.xctn.Bck()
142 )
143 if err := bck.Init(r.t.Bowner()); err != nil {
144 return err
145 }
146 bremote := bck.IsRemote()
147 if !bremote {
148 smap = nil // not needed
149 } else if bck.IsHTTP() {
150 return fmt.Errorf("cannot list bucket %s for prefix %q (plain HTTP buckets are not list-able) - use alternative templating",
151 bck, prefix)
152 }
153 msg := &apc.ListObjsMsg{Prefix: prefix, Props: apc.GetPropsStatus}
154 for {
155 if r.xctn.IsAborted() || r.xctn.Finished() {
156 break
157 }
158 if bremote {
159 objList, _, err = r.t.Backend(bck).ListObjects(bck, msg)
160 } else {
161 walk := objwalk.NewWalk(r.ctx, r.t, bck, msg)
162 objList, err = walk.DefaultLocalObjPage()
163 }
164 if err != nil {
165 return err
166 }
167 for _, be := range objList.Entries {
168 if !be.IsStatusOK() {
169 continue
170 }
171 if r.xctn.IsAborted() || r.xctn.Finished() {
172 return nil
173 }
174 lom := cluster.AllocLOM(be.Name)
175 err := r.do(lom, wi, smap)
176 if err != nil {
177 cluster.FreeLOM(lom)
178 return err
179 }
180 if r.freeLOM {
181 cluster.FreeLOM(lom)
182 }
183 }
184
185 // Stop when the last page is reached.
186 if objList.ContinuationToken == "" {
187 break
188 }
189 // Update `ContinuationToken` for the next request.
190 msg.ContinuationToken = objList.ContinuationToken
191 }
192 return nil
193}
194

Callers 1

iterateRangeMethod · 0.95

Calls 15

DefaultLocalObjPageMethod · 0.95
doMethod · 0.95
NewWalkFunction · 0.92
AllocLOMFunction · 0.92
FreeLOMFunction · 0.92
IsStatusOKMethod · 0.80
BckMethod · 0.65
InitMethod · 0.65
BownerMethod · 0.65
IsAbortedMethod · 0.65
FinishedMethod · 0.65
ListObjectsMethod · 0.65

Tested by

no test coverage detected