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

Side by Side Diff: go/src/infra/gae/libs/wrapper/memory/key.go

Issue 1229503007: Roll infra/go/src/github.com/luci/luci-go/ to b85c6dd748361e8244122faac44b5beefcd2db37. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: fix tests Created 5 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
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 memory 5 package memory
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "errors" 9 "errors"
10 "fmt" 10 "fmt"
11 11
12 "github.com/golang/protobuf/proto" 12 "github.com/golang/protobuf/proto"
13 » "github.com/luci/luci-go/common/funnybase" 13 » "github.com/luci/luci-go/common/cmpbin"
14 "github.com/mjibson/goon" 14 "github.com/mjibson/goon"
15 15
16 "appengine" 16 "appengine"
17 "appengine/datastore" 17 "appengine/datastore"
18 "appengine_internal" 18 "appengine_internal"
19 basepb "appengine_internal/base" 19 basepb "appengine_internal/base"
20 ) 20 )
21 21
22 const keyNumToksReasonableLimit = 50 22 const keyNumToksReasonableLimit = 50
23 23
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 func keyFromByteString(nso nsOption, d string, ns string) (*datastore.Key, error ) { 107 func keyFromByteString(nso nsOption, d string, ns string) (*datastore.Key, error ) {
108 return readKey(bytes.NewBufferString(d), nso, ns) 108 return readKey(bytes.NewBufferString(d), nso, ns)
109 } 109 }
110 110
111 func writeKey(buf *bytes.Buffer, nso nsOption, k *datastore.Key) { 111 func writeKey(buf *bytes.Buffer, nso nsOption, k *datastore.Key) {
112 // namespace ++ #tokens ++ [tok.kind ++ tok.stringID ++ tok.intID?]* 112 // namespace ++ #tokens ++ [tok.kind ++ tok.stringID ++ tok.intID?]*
113 namespace, toks := keyToToks(k) 113 namespace, toks := keyToToks(k)
114 if nso == withNS { 114 if nso == withNS {
115 writeString(buf, namespace) 115 writeString(buf, namespace)
116 } 116 }
117 » funnybase.WriteUint(buf, uint64(len(toks))) 117 » cmpbin.WriteUint(buf, uint64(len(toks)))
118 for _, tok := range toks { 118 for _, tok := range toks {
119 writeString(buf, tok.kind) 119 writeString(buf, tok.kind)
120 writeString(buf, tok.stringID) 120 writeString(buf, tok.stringID)
121 if tok.stringID == "" { 121 if tok.stringID == "" {
122 » » » funnybase.WriteUint(buf, tok.intID) 122 » » » cmpbin.WriteUint(buf, tok.intID)
123 } 123 }
124 } 124 }
125 } 125 }
126 126
127 func readKey(buf *bytes.Buffer, nso nsOption, ns string) (*datastore.Key, error) { 127 func readKey(buf *bytes.Buffer, nso nsOption, ns string) (*datastore.Key, error) {
128 namespace := ns 128 namespace := ns
129 if nso == withNS { 129 if nso == withNS {
130 err := error(nil) 130 err := error(nil)
131 if namespace, err = readString(buf); err != nil { 131 if namespace, err = readString(buf); err != nil {
132 return nil, err 132 return nil, err
133 } 133 }
134 } 134 }
135 135
136 » numToks, err := funnybase.ReadUint(buf) 136 » numToks, _, err := cmpbin.ReadUint(buf)
137 if err != nil { 137 if err != nil {
138 return nil, err 138 return nil, err
139 } 139 }
140 if numToks > keyNumToksReasonableLimit { 140 if numToks > keyNumToksReasonableLimit {
141 return nil, fmt.Errorf("readKey: tried to decode huge key of len gth %d", numToks) 141 return nil, fmt.Errorf("readKey: tried to decode huge key of len gth %d", numToks)
142 } 142 }
143 143
144 toks := make([]*keyTok, numToks) 144 toks := make([]*keyTok, numToks)
145 for i := uint64(0); i < numToks; i++ { 145 for i := uint64(0); i < numToks; i++ {
146 tok := &keyTok{} 146 tok := &keyTok{}
147 if tok.kind, err = readString(buf); err != nil { 147 if tok.kind, err = readString(buf); err != nil {
148 return nil, err 148 return nil, err
149 } 149 }
150 if tok.stringID, err = readString(buf); err != nil { 150 if tok.stringID, err = readString(buf); err != nil {
151 return nil, err 151 return nil, err
152 } 152 }
153 if tok.stringID == "" { 153 if tok.stringID == "" {
154 » » » if tok.intID, err = funnybase.ReadUint(buf); err != nil { 154 » » » if tok.intID, _, err = cmpbin.ReadUint(buf); err != nil {
155 return nil, err 155 return nil, err
156 } 156 }
157 if tok.intID == 0 { 157 if tok.intID == 0 {
158 return nil, errors.New("readKey: decoded key wit h empty stringID and empty intID") 158 return nil, errors.New("readKey: decoded key wit h empty stringID and empty intID")
159 } 159 }
160 } 160 }
161 toks[i] = tok 161 toks[i] = tok
162 } 162 }
163 163
164 return toksToKey(namespace, toks), nil 164 return toksToKey(namespace, toks), nil
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 // keyCouldBeValid is like keyValid, but it allows for the possibility that the 227 // keyCouldBeValid is like keyValid, but it allows for the possibility that the
228 // last token of the key is Incomplete(). It returns true if the Key will become 228 // last token of the key is Incomplete(). It returns true if the Key will become
229 // valid once it recieves an automatically-assigned ID. 229 // valid once it recieves an automatically-assigned ID.
230 func keyCouldBeValid(ns string, k *datastore.Key, opt keyValidOption) bool { 230 func keyCouldBeValid(ns string, k *datastore.Key, opt keyValidOption) bool {
231 // adds an id to k if it's incomplete. 231 // adds an id to k if it's incomplete.
232 if k.Incomplete() { 232 if k.Incomplete() {
233 k = newKey(ns, k.Kind(), "", 1, k.Parent()) 233 k = newKey(ns, k.Kind(), "", 1, k.Parent())
234 } 234 }
235 return keyValid(ns, k, opt) 235 return keyValid(ns, k, opt)
236 } 236 }
OLDNEW
« no previous file with comments | « go/src/infra/gae/libs/wrapper/memory/datastore_query.go ('k') | go/src/infra/gae/libs/wrapper/memory/plist.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698