| Index: impl/memory/datastore_data.go
|
| diff --git a/impl/memory/datastore_data.go b/impl/memory/datastore_data.go
|
| index cf6aa5b907816de62ad80d54c6071cb472881df7..7793ac913730723b868f174dad79a59dbf250ced 100644
|
| --- a/impl/memory/datastore_data.go
|
| +++ b/impl/memory/datastore_data.go
|
| @@ -11,7 +11,6 @@ import (
|
| "sync/atomic"
|
|
|
| ds "github.com/luci/gae/service/datastore"
|
| - "github.com/luci/gae/service/datastore/dskey"
|
| "github.com/luci/gae/service/datastore/serialize"
|
| "github.com/luci/luci-go/common/errors"
|
| "golang.org/x/net/context"
|
| @@ -81,16 +80,16 @@ func (d *dataStoreData) catchupIndexes() {
|
|
|
| /////////////////////////// indexes(dataStoreData) ////////////////////////////
|
|
|
| -func groupMetaKey(key ds.Key) []byte {
|
| - return keyBytes(dskey.New("", "", "__entity_group__", "", 1, dskey.Root(key)))
|
| +func groupMetaKey(key *ds.Key) []byte {
|
| + return keyBytes(ds.NewKey("", "", "__entity_group__", "", 1, key.Root()))
|
| }
|
|
|
| -func groupIDsKey(key ds.Key) []byte {
|
| - return keyBytes(dskey.New("", "", "__entity_group_ids__", "", 1, dskey.Root(key)))
|
| +func groupIDsKey(key *ds.Key) []byte {
|
| + return keyBytes(ds.NewKey("", "", "__entity_group_ids__", "", 1, key.Root()))
|
| }
|
|
|
| func rootIDsKey(kind string) []byte {
|
| - return keyBytes(dskey.New("", "", "__entity_root_ids__", kind, 0, nil))
|
| + return keyBytes(ds.NewKey("", "", "__entity_root_ids__", kind, 0, nil))
|
| }
|
|
|
| func curVersion(ents *memCollection, key []byte) int64 {
|
| @@ -118,33 +117,33 @@ func incrementLocked(ents *memCollection, key []byte) int64 {
|
| return ret
|
| }
|
|
|
| -func (d *dataStoreData) entsKeyLocked(key ds.Key) (*memCollection, ds.Key) {
|
| +func (d *dataStoreData) entsKeyLocked(key *ds.Key) (*memCollection, *ds.Key) {
|
| coll := "ents:" + key.Namespace()
|
| ents := d.head.GetCollection(coll)
|
| if ents == nil {
|
| ents = d.head.SetCollection(coll, nil)
|
| }
|
|
|
| - if dskey.Incomplete(key) {
|
| + if key.Incomplete() {
|
| idKey := []byte(nil)
|
| if key.Parent() == nil {
|
| - idKey = rootIDsKey(key.Kind())
|
| + idKey = rootIDsKey(key.Last().Kind)
|
| } else {
|
| idKey = groupIDsKey(key)
|
| }
|
| id := incrementLocked(ents, idKey)
|
| - key = dskey.New(key.AppID(), key.Namespace(), key.Kind(), "", id, key.Parent())
|
| + key = ds.NewKey(key.AppID(), key.Namespace(), key.Last().Kind, "", id, key.Parent())
|
| }
|
|
|
| return ents, key
|
| }
|
|
|
| -func (d *dataStoreData) putMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) {
|
| +func (d *dataStoreData) putMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) {
|
| for i, k := range keys {
|
| pmap, _ := vals[i].Save(false)
|
| dataBytes := serialize.ToBytes(pmap)
|
|
|
| - k, err := func() (ret ds.Key, err error) {
|
| + k, err := func() (ret *ds.Key, err error) {
|
| d.rwlock.Lock()
|
| defer d.rwlock.Unlock()
|
|
|
| @@ -168,7 +167,7 @@ func (d *dataStoreData) putMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds.Put
|
| }
|
| }
|
|
|
| -func getMultiInner(keys []ds.Key, cb ds.GetMultiCB, getColl func() (*memCollection, error)) error {
|
| +func getMultiInner(keys []*ds.Key, cb ds.GetMultiCB, getColl func() (*memCollection, error)) error {
|
| ents, err := getColl()
|
| if err != nil {
|
| return err
|
| @@ -191,16 +190,15 @@ func getMultiInner(keys []ds.Key, cb ds.GetMultiCB, getColl func() (*memCollecti
|
| return nil
|
| }
|
|
|
| -func (d *dataStoreData) getMulti(keys []ds.Key, cb ds.GetMultiCB) error {
|
| - getMultiInner(keys, cb, func() (*memCollection, error) {
|
| +func (d *dataStoreData) getMulti(keys []*ds.Key, cb ds.GetMultiCB) error {
|
| + return getMultiInner(keys, cb, func() (*memCollection, error) {
|
| s := d.takeSnapshot()
|
|
|
| return s.GetCollection("ents:" + keys[0].Namespace()), nil
|
| })
|
| - return nil
|
| }
|
|
|
| -func (d *dataStoreData) delMulti(keys []ds.Key, cb ds.DeleteMultiCB) {
|
| +func (d *dataStoreData) delMulti(keys []*ds.Key, cb ds.DeleteMultiCB) {
|
| toDel := make([][]byte, 0, len(keys))
|
| for _, k := range keys {
|
| toDel = append(toDel, keyBytes(k))
|
| @@ -245,7 +243,7 @@ func (d *dataStoreData) canApplyTxn(obj memContextObj) bool {
|
| prop, err := serialize.ReadProperty(bytes.NewBufferString(rk), serialize.WithContext, "", "")
|
| memoryCorruption(err)
|
|
|
| - k := prop.Value().(ds.Key)
|
| + k := prop.Value().(*ds.Key)
|
|
|
| entKey := "ents:" + k.Namespace()
|
| mkey := groupMetaKey(k)
|
| @@ -271,11 +269,11 @@ func (d *dataStoreData) applyTxn(c context.Context, obj memContextObj) {
|
| err := error(nil)
|
| k := m.key
|
| if m.data == nil {
|
| - d.delMulti([]ds.Key{k},
|
| + d.delMulti([]*ds.Key{k},
|
| func(e error) { err = e })
|
| } else {
|
| - d.putMulti([]ds.Key{m.key}, []ds.PropertyMap{m.data},
|
| - func(_ ds.Key, e error) { err = e })
|
| + d.putMulti([]*ds.Key{m.key}, []ds.PropertyMap{m.data},
|
| + func(_ *ds.Key, e error) { err = e })
|
| }
|
| impossible(err)
|
| }
|
| @@ -298,7 +296,7 @@ func (d *dataStoreData) endTxn() {}
|
| /////////////////////////////// txnDataStoreData ///////////////////////////////
|
|
|
| type txnMutation struct {
|
| - key ds.Key
|
| + key *ds.Key
|
| data ds.PropertyMap
|
| }
|
|
|
| @@ -358,8 +356,8 @@ func (td *txnDataStoreData) run(f func() error) error {
|
| //
|
| // Returns an error if this key causes the transaction to cross too many entity
|
| // groups.
|
| -func (td *txnDataStoreData) writeMutation(getOnly bool, key ds.Key, data ds.PropertyMap) error {
|
| - rk := string(keyBytes(dskey.Root(key)))
|
| +func (td *txnDataStoreData) writeMutation(getOnly bool, key *ds.Key, data ds.PropertyMap) error {
|
| + rk := string(keyBytes(key.Root()))
|
|
|
| td.Lock()
|
| defer td.Unlock()
|
| @@ -385,7 +383,7 @@ func (td *txnDataStoreData) writeMutation(getOnly bool, key ds.Key, data ds.Prop
|
| return nil
|
| }
|
|
|
| -func (td *txnDataStoreData) putMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) {
|
| +func (td *txnDataStoreData) putMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) {
|
| for i, k := range keys {
|
| func() {
|
| td.parent.Lock()
|
| @@ -399,7 +397,7 @@ func (td *txnDataStoreData) putMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds
|
| }
|
| }
|
|
|
| -func (td *txnDataStoreData) getMulti(keys []ds.Key, cb ds.GetMultiCB) error {
|
| +func (td *txnDataStoreData) getMulti(keys []*ds.Key, cb ds.GetMultiCB) error {
|
| return getMultiInner(keys, cb, func() (*memCollection, error) {
|
| err := error(nil)
|
| for _, key := range keys {
|
| @@ -412,7 +410,7 @@ func (td *txnDataStoreData) getMulti(keys []ds.Key, cb ds.GetMultiCB) error {
|
| })
|
| }
|
|
|
| -func (td *txnDataStoreData) delMulti(keys []ds.Key, cb ds.DeleteMultiCB) error {
|
| +func (td *txnDataStoreData) delMulti(keys []*ds.Key, cb ds.DeleteMultiCB) error {
|
| for _, k := range keys {
|
| err := td.writeMutation(false, k, nil)
|
| if cb != nil {
|
| @@ -422,7 +420,7 @@ func (td *txnDataStoreData) delMulti(keys []ds.Key, cb ds.DeleteMultiCB) error {
|
| return nil
|
| }
|
|
|
| -func keyBytes(key ds.Key) []byte {
|
| +func keyBytes(key *ds.Key) []byte {
|
| return serialize.ToBytes(ds.MkProperty(key))
|
| }
|
|
|
| @@ -435,7 +433,3 @@ func rpm(data []byte) (ds.PropertyMap, error) {
|
| return serialize.ReadPropertyMap(bytes.NewBuffer(data),
|
| serialize.WithContext, "", "")
|
| }
|
| -
|
| -type keyitem interface {
|
| - Key() ds.Key
|
| -}
|
|
|