Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: service/datastore/datastore.go

Issue 1844183003: Don't filter "Stop" error in raw interface. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Count filter doesn't count Stop as error. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « impl/prod/raw_datastore.go ('k') | service/datastore/raw_interface.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package datastore 5 package datastore
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "io" 9 "io"
10 "io/ioutil" 10 "io/ioutil"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 } 140 }
141 141
142 case !hasErr && !hasCursorCB: 142 case !hasErr && !hasCursorCB:
143 cb = func(v reflect.Value, _ CursorCB) error { 143 cb = func(v reflect.Value, _ CursorCB) error {
144 cbVal.Call([]reflect.Value{v}) 144 cbVal.Call([]reflect.Value{v})
145 return nil 145 return nil
146 } 146 }
147 } 147 }
148 148
149 if isKey { 149 if isKey {
150 » » return d.RawInterface.Run(fq, func(k *Key, _ PropertyMap, gc Cur sorCB) error { 150 » » err = d.RawInterface.Run(fq, func(k *Key, _ PropertyMap, gc Curs orCB) error {
151 return cb(reflect.ValueOf(k), gc) 151 return cb(reflect.ValueOf(k), gc)
152 }) 152 })
153 } else {
154 err = d.RawInterface.Run(fq, func(k *Key, pm PropertyMap, gc Cur sorCB) error {
155 itm := mat.newElem()
156 if err := mat.setPM(itm, pm); err != nil {
157 return err
158 }
159 mat.setKey(itm, k)
160 return cb(itm, gc)
161 })
153 } 162 }
154 163 » return filterStop(err)
155 » return d.RawInterface.Run(fq, func(k *Key, pm PropertyMap, gc CursorCB) error {
156 » » itm := mat.newElem()
157 » » if err := mat.setPM(itm, pm); err != nil {
158 » » » return err
159 » » }
160 » » mat.setKey(itm, k)
161 » » return cb(itm, gc)
162 » })
163 } 164 }
164 165
165 func (d *datastoreImpl) Count(q *Query) (int64, error) { 166 func (d *datastoreImpl) Count(q *Query) (int64, error) {
166 fq, err := q.Finalize() 167 fq, err := q.Finalize()
167 if err != nil { 168 if err != nil {
168 return 0, err 169 return 0, err
169 } 170 }
170 return d.RawInterface.Count(fq) 171 return d.RawInterface.Count(fq)
171 } 172 }
172 173
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 if t.Elem().Kind() != reflect.Struct { 243 if t.Elem().Kind() != reflect.Struct {
243 return errors.New("does not point to a struct") 244 return errors.New("does not point to a struct")
244 } 245 }
245 return nil 246 return nil
246 } 247 }
247 248
248 func (d *datastoreImpl) ExistsMulti(keys []*Key) (BoolList, error) { 249 func (d *datastoreImpl) ExistsMulti(keys []*Key) (BoolList, error) {
249 lme := errors.NewLazyMultiError(len(keys)) 250 lme := errors.NewLazyMultiError(len(keys))
250 ret := make(BoolList, len(keys)) 251 ret := make(BoolList, len(keys))
251 i := 0 252 i := 0
252 » err := d.RawInterface.GetMulti(keys, nil, func(_ PropertyMap, err error) error { 253 » err := filterStop(d.RawInterface.GetMulti(keys, nil, func(_ PropertyMap, err error) error {
253 if err == nil { 254 if err == nil {
254 ret[i] = true 255 ret[i] = true
255 } else if err != ErrNoSuchEntity { 256 } else if err != ErrNoSuchEntity {
256 lme.Assign(i, err) 257 lme.Assign(i, err)
257 } 258 }
258 i++ 259 i++
259 return nil 260 return nil
260 » }) 261 » }))
261 if err != nil { 262 if err != nil {
262 return ret, err 263 return ret, err
263 } 264 }
264 return ret, lme.Get() 265 return ret, lme.Get()
265 } 266 }
266 267
267 func (d *datastoreImpl) Exists(k *Key) (bool, error) { 268 func (d *datastoreImpl) Exists(k *Key) (bool, error) {
268 ret, err := d.ExistsMulti([]*Key{k}) 269 ret, err := d.ExistsMulti([]*Key{k})
269 return ret[0], errors.SingleError(err) 270 return ret[0], errors.SingleError(err)
270 } 271 }
(...skipping 21 matching lines...) Expand all
292 mat := parseMultiArg(slice.Type()) 293 mat := parseMultiArg(slice.Type())
293 294
294 keys, pms, err := mat.GetKeysPMs(d.aid, d.ns, slice, true) 295 keys, pms, err := mat.GetKeysPMs(d.aid, d.ns, slice, true)
295 if err != nil { 296 if err != nil {
296 return err 297 return err
297 } 298 }
298 299
299 lme := errors.NewLazyMultiError(len(keys)) 300 lme := errors.NewLazyMultiError(len(keys))
300 i := 0 301 i := 0
301 meta := NewMultiMetaGetter(pms) 302 meta := NewMultiMetaGetter(pms)
302 » err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error ) error { 303 » err = filterStop(d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap , err error) error {
303 if !lme.Assign(i, err) { 304 if !lme.Assign(i, err) {
304 lme.Assign(i, mat.setPM(slice.Index(i), pm)) 305 lme.Assign(i, mat.setPM(slice.Index(i), pm))
305 } 306 }
306 i++ 307 i++
307 return nil 308 return nil
308 » }) 309 » }))
309 310
310 if err == nil { 311 if err == nil {
311 err = lme.Get() 312 err = lme.Get()
312 } 313 }
313 return err 314 return err
314 } 315 }
315 316
316 func (d *datastoreImpl) PutMulti(src interface{}) error { 317 func (d *datastoreImpl) PutMulti(src interface{}) error {
317 slice := reflect.ValueOf(src) 318 slice := reflect.ValueOf(src)
318 mat := parseMultiArg(slice.Type()) 319 mat := parseMultiArg(slice.Type())
319 320
320 keys, vals, err := mat.GetKeysPMs(d.aid, d.ns, slice, false) 321 keys, vals, err := mat.GetKeysPMs(d.aid, d.ns, slice, false)
321 if err != nil { 322 if err != nil {
322 return err 323 return err
323 } 324 }
324 325
325 lme := errors.NewLazyMultiError(len(keys)) 326 lme := errors.NewLazyMultiError(len(keys))
326 i := 0 327 i := 0
327 » err = d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) erro r { 328 » err = filterStop(d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) error {
328 if !lme.Assign(i, err) && key != keys[i] { 329 if !lme.Assign(i, err) && key != keys[i] {
329 mat.setKey(slice.Index(i), key) 330 mat.setKey(slice.Index(i), key)
330 } 331 }
331 i++ 332 i++
332 return nil 333 return nil
333 » }) 334 » }))
334 335
335 if err == nil { 336 if err == nil {
336 err = lme.Get() 337 err = lme.Get()
337 } 338 }
338 return err 339 return err
339 } 340 }
340 341
341 func (d *datastoreImpl) DeleteMulti(keys []*Key) (err error) { 342 func (d *datastoreImpl) DeleteMulti(keys []*Key) (err error) {
342 lme := errors.NewLazyMultiError(len(keys)) 343 lme := errors.NewLazyMultiError(len(keys))
343 i := 0 344 i := 0
344 » extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) error { 345 » extErr := filterStop(d.RawInterface.DeleteMulti(keys, func(internalErr e rror) error {
345 lme.Assign(i, internalErr) 346 lme.Assign(i, internalErr)
346 i++ 347 i++
347 return nil 348 return nil
348 » }) 349 » }))
349 err = lme.Get() 350 err = lme.Get()
350 if err == nil { 351 if err == nil {
351 err = extErr 352 err = extErr
352 } 353 }
353 return 354 return
354 } 355 }
355 356
356 func (d *datastoreImpl) Raw() RawInterface { 357 func (d *datastoreImpl) Raw() RawInterface {
357 return d.RawInterface 358 return d.RawInterface
358 } 359 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 } 433 }
433 } 434 }
434 435
435 if isRoot(currentDir) { 436 if isRoot(currentDir) {
436 return nil, fmt.Errorf("datastore: failed to find index YAML file") 437 return nil, fmt.Errorf("datastore: failed to find index YAML file")
437 } 438 }
438 439
439 currentDir = filepath.Dir(currentDir) 440 currentDir = filepath.Dir(currentDir)
440 } 441 }
441 } 442 }
443
444 func filterStop(err error) error {
445 if err == Stop {
446 err = nil
447 }
448 return err
449 }
OLDNEW
« no previous file with comments | « impl/prod/raw_datastore.go ('k') | service/datastore/raw_interface.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698