| Index: impl/prod/raw_datastore.go
|
| diff --git a/impl/prod/raw_datastore.go b/impl/prod/raw_datastore.go
|
| index 9543ecc26ea490516f5a154a3078d5746ddc3408..bc835c03bcca53d58e87991bbe4e8056804a983a 100644
|
| --- a/impl/prod/raw_datastore.go
|
| +++ b/impl/prod/raw_datastore.go
|
| @@ -16,14 +16,19 @@ import (
|
| // by gae.GetDS(c)
|
| func useRDS(c context.Context) context.Context {
|
| return ds.SetRawFactory(c, func(ci context.Context) ds.RawInterface {
|
| - return rdsImpl{ci, info.Get(ci).GetNamespace()}
|
| + return rdsImpl{ci, AEContext(ci), info.Get(ci).GetNamespace()}
|
| })
|
| }
|
|
|
| ////////// Datastore
|
|
|
| type rdsImpl struct {
|
| - context.Context
|
| + // userCtx is the context that has the luci/gae services and user objects in
|
| + // it.
|
| + userCtx context.Context
|
| +
|
| + // aeCtx is the context with the appengine connection information in it.
|
| + aeCtx context.Context
|
|
|
| ns string
|
| }
|
| @@ -47,19 +52,19 @@ func idxCallbacker(err error, amt int, cb func(idx int, err error)) error {
|
| }
|
|
|
| func (d rdsImpl) AllocateIDs(incomplete *ds.Key, n int) (start int64, err error) {
|
| - par, err := dsF2R(d, incomplete.Parent())
|
| + par, err := dsF2R(d.aeCtx, incomplete.Parent())
|
| if err != nil {
|
| return
|
| }
|
|
|
| - start, _, err = datastore.AllocateIDs(d, incomplete.Kind(), par, n)
|
| + start, _, err = datastore.AllocateIDs(d.aeCtx, incomplete.Kind(), par, n)
|
| return
|
| }
|
|
|
| func (d rdsImpl) DeleteMulti(ks []*ds.Key, cb ds.DeleteMultiCB) error {
|
| - keys, err := dsMF2R(d, ks)
|
| + keys, err := dsMF2R(d.aeCtx, ks)
|
| if err == nil {
|
| - err = datastore.DeleteMulti(d, keys)
|
| + err = datastore.DeleteMulti(d.aeCtx, keys)
|
| }
|
| return idxCallbacker(err, len(ks), func(_ int, err error) {
|
| cb(err)
|
| @@ -68,12 +73,12 @@ func (d rdsImpl) DeleteMulti(ks []*ds.Key, cb ds.DeleteMultiCB) error {
|
|
|
| func (d rdsImpl) GetMulti(keys []*ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMultiCB) error {
|
| vals := make([]datastore.PropertyLoadSaver, len(keys))
|
| - rkeys, err := dsMF2R(d, keys)
|
| + rkeys, err := dsMF2R(d.aeCtx, keys)
|
| if err == nil {
|
| for i := range keys {
|
| - vals[i] = &typeFilter{d, ds.PropertyMap{}}
|
| + vals[i] = &typeFilter{d.aeCtx, ds.PropertyMap{}}
|
| }
|
| - err = datastore.GetMulti(d, rkeys, vals)
|
| + err = datastore.GetMulti(d.aeCtx, rkeys, vals)
|
| }
|
| return idxCallbacker(err, len(keys), func(idx int, err error) {
|
| if pls := vals[idx]; pls != nil {
|
| @@ -85,13 +90,13 @@ func (d rdsImpl) GetMulti(keys []*ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMul
|
| }
|
|
|
| func (d rdsImpl) PutMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) error {
|
| - rkeys, err := dsMF2R(d, keys)
|
| + rkeys, err := dsMF2R(d.aeCtx, keys)
|
| if err == nil {
|
| rvals := make([]datastore.PropertyLoadSaver, len(vals))
|
| for i, val := range vals {
|
| - rvals[i] = &typeFilter{d, val}
|
| + rvals[i] = &typeFilter{d.aeCtx, val}
|
| }
|
| - rkeys, err = datastore.PutMulti(d, rkeys, rvals)
|
| + rkeys, err = datastore.PutMulti(d.aeCtx, rkeys, rvals)
|
| }
|
| return idxCallbacker(err, len(keys), func(idx int, err error) {
|
| k := (*ds.Key)(nil)
|
| @@ -115,7 +120,7 @@ func (d rdsImpl) fixQuery(fq *ds.FinalizedQuery) (*datastore.Query, error) {
|
|
|
| for prop, vals := range fq.EqFilters() {
|
| if prop == "__ancestor__" {
|
| - p, err := dsF2RProp(d, vals[0])
|
| + p, err := dsF2RProp(d.aeCtx, vals[0])
|
| if err != nil {
|
| return nil, err
|
| }
|
| @@ -123,7 +128,7 @@ func (d rdsImpl) fixQuery(fq *ds.FinalizedQuery) (*datastore.Query, error) {
|
| } else {
|
| filt := prop + "="
|
| for _, v := range vals {
|
| - p, err := dsF2RProp(d, v)
|
| + p, err := dsF2RProp(d.aeCtx, v)
|
| if err != nil {
|
| return nil, err
|
| }
|
| @@ -134,7 +139,7 @@ func (d rdsImpl) fixQuery(fq *ds.FinalizedQuery) (*datastore.Query, error) {
|
| }
|
|
|
| if lnam, lop, lprop := fq.IneqFilterLow(); lnam != "" {
|
| - p, err := dsF2RProp(d, lprop)
|
| + p, err := dsF2RProp(d.aeCtx, lprop)
|
| if err != nil {
|
| return nil, err
|
| }
|
| @@ -142,7 +147,7 @@ func (d rdsImpl) fixQuery(fq *ds.FinalizedQuery) (*datastore.Query, error) {
|
| }
|
|
|
| if hnam, hop, hprop := fq.IneqFilterHigh(); hnam != "" {
|
| - p, err := dsF2RProp(d, hprop)
|
| + p, err := dsF2RProp(d.aeCtx, hprop)
|
| if err != nil {
|
| return nil, err
|
| }
|
| @@ -187,7 +192,7 @@ func (d rdsImpl) Run(fq *ds.FinalizedQuery, cb ds.RawRunCB) error {
|
| return err
|
| }
|
|
|
| - t := q.Run(d)
|
| + t := q.Run(d.aeCtx)
|
|
|
| cfunc := func() (ds.Cursor, error) {
|
| return t.Cursor()
|
| @@ -212,13 +217,15 @@ func (d rdsImpl) Count(fq *ds.FinalizedQuery) (int64, error) {
|
| if err != nil {
|
| return 0, err
|
| }
|
| - ret, err := q.Count(d)
|
| + ret, err := q.Count(d.aeCtx)
|
| return int64(ret), err
|
| }
|
|
|
| func (d rdsImpl) RunInTransaction(f func(c context.Context) error, opts *ds.TransactionOptions) error {
|
| ropts := (*datastore.TransactionOptions)(opts)
|
| - return datastore.RunInTransaction(d, f, ropts)
|
| + return datastore.RunInTransaction(d.aeCtx, func(aeCtx context.Context) error {
|
| + return f(context.WithValue(d.userCtx, prodContextKey, aeCtx))
|
| + }, ropts)
|
| }
|
|
|
| func (d rdsImpl) Testable() ds.Testable {
|
|
|