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

Side by Side Diff: impl/prod/raw_datastore.go

Issue 1957953002: Add cloud datastore implementation. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Adjust minimum coverage. Created 4 years, 5 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/cloud/info.go ('k') | pre-commit-go.yml » ('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 LUCI Authors. All rights reserved. 1 // Copyright 2015 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 package prod 5 package prod
6 6
7 import ( 7 import (
8 ds "github.com/luci/gae/service/datastore" 8 ds "github.com/luci/gae/service/datastore"
9 "github.com/luci/luci-go/common/errors" 9 "github.com/luci/luci-go/common/errors"
10 "golang.org/x/net/context" 10 "golang.org/x/net/context"
(...skipping 21 matching lines...) Expand all
32 32
33 type rdsImpl struct { 33 type rdsImpl struct {
34 // userCtx is the context that has the luci/gae services and user object s in 34 // userCtx is the context that has the luci/gae services and user object s in
35 // it. 35 // it.
36 userCtx context.Context 36 userCtx context.Context
37 37
38 // aeCtx is the context with the appengine connection information in it. 38 // aeCtx is the context with the appengine connection information in it.
39 aeCtx context.Context 39 aeCtx context.Context
40 } 40 }
41 41
42 func idxCallbacker(err error, amt int, cb func(idx int, err error)) error { 42 func idxCallbacker(err error, amt int, cb func(idx int, err error) error) error {
43 if err == nil { 43 if err == nil {
44 for i := 0; i < amt; i++ { 44 for i := 0; i < amt; i++ {
45 » » » cb(i, nil) 45 » » » if err := cb(i, nil); err != nil {
46 » » » » return err
47 » » » }
46 } 48 }
47 return nil 49 return nil
48 } 50 }
49 err = errors.Fix(err) 51 err = errors.Fix(err)
50 me, ok := err.(errors.MultiError) 52 me, ok := err.(errors.MultiError)
51 if ok { 53 if ok {
52 for i, err := range me { 54 for i, err := range me {
53 » » » cb(i, err) 55 » » » if err := cb(i, err); err != nil {
56 » » » » return err
57 » » » }
54 } 58 }
55 return nil 59 return nil
56 } 60 }
57 return err 61 return err
58 } 62 }
59 63
60 func (d rdsImpl) AllocateIDs(keys []*ds.Key, cb ds.NewKeyCB) error { 64 func (d rdsImpl) AllocateIDs(keys []*ds.Key, cb ds.NewKeyCB) error {
61 // Map keys by entity type. 65 // Map keys by entity type.
62 entityMap := make(map[string][]int) 66 entityMap := make(map[string][]int)
63 for i, key := range keys { 67 for i, key := range keys {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 104 }
101 } 105 }
102 return nil 106 return nil
103 } 107 }
104 108
105 func (d rdsImpl) DeleteMulti(ks []*ds.Key, cb ds.DeleteMultiCB) error { 109 func (d rdsImpl) DeleteMulti(ks []*ds.Key, cb ds.DeleteMultiCB) error {
106 keys, err := dsMF2R(d.aeCtx, ks) 110 keys, err := dsMF2R(d.aeCtx, ks)
107 if err == nil { 111 if err == nil {
108 err = datastore.DeleteMulti(d.aeCtx, keys) 112 err = datastore.DeleteMulti(d.aeCtx, keys)
109 } 113 }
110 » return idxCallbacker(err, len(ks), func(_ int, err error) { 114 » return idxCallbacker(err, len(ks), func(_ int, err error) error {
111 » » cb(err) 115 » » return cb(err)
112 }) 116 })
113 } 117 }
114 118
115 func (d rdsImpl) GetMulti(keys []*ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMul tiCB) error { 119 func (d rdsImpl) GetMulti(keys []*ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMul tiCB) error {
116 vals := make([]datastore.PropertyLoadSaver, len(keys)) 120 vals := make([]datastore.PropertyLoadSaver, len(keys))
117 rkeys, err := dsMF2R(d.aeCtx, keys) 121 rkeys, err := dsMF2R(d.aeCtx, keys)
118 if err == nil { 122 if err == nil {
119 for i := range keys { 123 for i := range keys {
120 vals[i] = &typeFilter{d.aeCtx, ds.PropertyMap{}} 124 vals[i] = &typeFilter{d.aeCtx, ds.PropertyMap{}}
121 } 125 }
122 err = datastore.GetMulti(d.aeCtx, rkeys, vals) 126 err = datastore.GetMulti(d.aeCtx, rkeys, vals)
123 } 127 }
124 » return idxCallbacker(err, len(keys), func(idx int, err error) { 128 » return idxCallbacker(err, len(keys), func(idx int, err error) error {
125 if pls := vals[idx]; pls != nil { 129 if pls := vals[idx]; pls != nil {
126 » » » cb(pls.(*typeFilter).pm, err) 130 » » » return cb(pls.(*typeFilter).pm, err)
127 » » } else {
128 » » » cb(nil, err)
129 } 131 }
132 return cb(nil, err)
130 }) 133 })
131 } 134 }
132 135
133 func (d rdsImpl) PutMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.NewKeyCB) error { 136 func (d rdsImpl) PutMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.NewKeyCB) error {
134 rkeys, err := dsMF2R(d.aeCtx, keys) 137 rkeys, err := dsMF2R(d.aeCtx, keys)
135 if err == nil { 138 if err == nil {
136 rvals := make([]datastore.PropertyLoadSaver, len(vals)) 139 rvals := make([]datastore.PropertyLoadSaver, len(vals))
137 for i, val := range vals { 140 for i, val := range vals {
138 rvals[i] = &typeFilter{d.aeCtx, val} 141 rvals[i] = &typeFilter{d.aeCtx, val}
139 } 142 }
140 rkeys, err = datastore.PutMulti(d.aeCtx, rkeys, rvals) 143 rkeys, err = datastore.PutMulti(d.aeCtx, rkeys, rvals)
141 } 144 }
142 » return idxCallbacker(err, len(keys), func(idx int, err error) { 145 » return idxCallbacker(err, len(keys), func(idx int, err error) error {
143 k := (*ds.Key)(nil) 146 k := (*ds.Key)(nil)
144 if err == nil { 147 if err == nil {
145 k = dsR2F(rkeys[idx]) 148 k = dsR2F(rkeys[idx])
146 } 149 }
147 » » cb(k, err) 150 » » return cb(k, err)
148 }) 151 })
149 } 152 }
150 153
151 func (d rdsImpl) fixQuery(fq *ds.FinalizedQuery) (*datastore.Query, error) { 154 func (d rdsImpl) fixQuery(fq *ds.FinalizedQuery) (*datastore.Query, error) {
152 ret := datastore.NewQuery(fq.Kind()) 155 ret := datastore.NewQuery(fq.Kind())
153 156
154 start, end := fq.Bounds() 157 start, end := fq.Bounds()
155 if start != nil { 158 if start != nil {
156 ret = ret.Start(start.(datastore.Cursor)) 159 ret = ret.Start(start.(datastore.Cursor))
157 } 160 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 func (d rdsImpl) RunInTransaction(f func(c context.Context) error, opts *ds.Tran sactionOptions) error { 268 func (d rdsImpl) RunInTransaction(f func(c context.Context) error, opts *ds.Tran sactionOptions) error {
266 ropts := (*datastore.TransactionOptions)(opts) 269 ropts := (*datastore.TransactionOptions)(opts)
267 return datastore.RunInTransaction(d.aeCtx, func(c context.Context) error { 270 return datastore.RunInTransaction(d.aeCtx, func(c context.Context) error {
268 return f(context.WithValue(d.userCtx, prodContextKey, c)) 271 return f(context.WithValue(d.userCtx, prodContextKey, c))
269 }, ropts) 272 }, ropts)
270 } 273 }
271 274
272 func (d rdsImpl) Testable() ds.Testable { 275 func (d rdsImpl) Testable() ds.Testable {
273 return nil 276 return nil
274 } 277 }
OLDNEW
« no previous file with comments | « impl/cloud/info.go ('k') | pre-commit-go.yml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698