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

Side by Side Diff: luci_config/appengine/backend/datastore/ds.go

Issue 2963503003: [errors] Greatly simplify common/errors package. (Closed)
Patch Set: fix nits Created 3 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 | « logdog/server/service/service.go ('k') | luci_config/appengine/backend/memcache/cache.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 2016 The LUCI Authors. All rights reserved. 1 // Copyright 2016 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 datastore 5 package datastore
6 6
7 import ( 7 import (
8 "time" 8 "time"
9 9
10 "github.com/luci/luci-go/appengine/datastorecache" 10 "github.com/luci/luci-go/appengine/datastorecache"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 // Always ask for full content. 136 // Always ask for full content.
137 key.Content = true 137 key.Content = true
138 } 138 }
139 139
140 // Encode our caching key, and use this for our datastore cache key. 140 // Encode our caching key, and use this for our datastore cache key.
141 // 141 //
142 // This gets recoded in dsCacheHandler's "Refresh" to identify the cache 142 // This gets recoded in dsCacheHandler's "Refresh" to identify the cache
143 // operation that is being performed. 143 // operation that is being performed.
144 encKey, err := caching.Encode(&key) 144 encKey, err := caching.Encode(&key)
145 if err != nil { 145 if err != nil {
146 » » return nil, errors.Annotate(err).Reason("failed to encode cache key").Err() 146 » » return nil, errors.Annotate(err, "failed to encode cache key").E rr()
147 } 147 }
148 148
149 // Construct a cache handler. 149 // Construct a cache handler.
150 v, err := cache.Get(dc.WithHandler(c, l, 0), encKey) 150 v, err := cache.Get(dc.WithHandler(c, l, 0), encKey)
151 if err != nil { 151 if err != nil {
152 return nil, err 152 return nil, err
153 } 153 }
154 154
155 // Decode our response. 155 // Decode our response.
156 if v.Schema != dsCacheSchema { 156 if v.Schema != dsCacheSchema {
157 » » return nil, errors.Reason("response schema (%(resp)q) doesn't ma tch current (%(cur)q)"). 157 » » return nil, errors.Reason("response schema (%q) doesn't match cu rrent (%q)",
158 » » » D("resp", v.Schema).D("cur", dsCacheSchema).Err() 158 » » » v.Schema, dsCacheSchema).Err()
159 } 159 }
160 160
161 cacheValue, err := caching.DecodeValue(v.Data) 161 cacheValue, err := caching.DecodeValue(v.Data)
162 if err != nil { 162 if err != nil {
163 » » return nil, errors.Annotate(err).Reason("failed to decode cached value").Err() 163 » » return nil, errors.Annotate(err, "failed to decode cached value" ).Err()
164 } 164 }
165 165
166 // Prune any responses that are not permitted for the supplied Authority . 166 // Prune any responses that are not permitted for the supplied Authority .
167 switch key.Op { 167 switch key.Op {
168 case caching.OpGetAll: 168 case caching.OpGetAll:
169 if len(cacheValue.Items) > 0 { 169 if len(cacheValue.Items) > 0 {
170 // Shift over any elements that can't be accessed. 170 // Shift over any elements that can't be accessed.
171 ptr := 0 171 ptr := 0
172 for _, itm := range cacheValue.Items { 172 for _, itm := range cacheValue.Items {
173 if dc.accessConfigSet(c, origAuthority, itm.Conf igSet) { 173 if dc.accessConfigSet(c, origAuthority, itm.Conf igSet) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 // operation. This is used for cron operations. 243 // operation. This is used for cron operations.
244 loaderTimeout time.Duration 244 loaderTimeout time.Duration
245 } 245 }
246 246
247 func (dch *dsCacheHandler) FailOpen() bool { return dch.fa ilOpen } 247 func (dch *dsCacheHandler) FailOpen() bool { return dch.fa ilOpen }
248 func (dch *dsCacheHandler) RefreshInterval([]byte) time.Duration { return dch.re freshInterval } 248 func (dch *dsCacheHandler) RefreshInterval([]byte) time.Duration { return dch.re freshInterval }
249 func (dch *dsCacheHandler) Refresh(c context.Context, key []byte, v datastorecac he.Value) (datastorecache.Value, error) { 249 func (dch *dsCacheHandler) Refresh(c context.Context, key []byte, v datastorecac he.Value) (datastorecache.Value, error) {
250 // Decode the key into our caching key. 250 // Decode the key into our caching key.
251 var ck caching.Key 251 var ck caching.Key
252 if err := caching.Decode(key, &ck); err != nil { 252 if err := caching.Decode(key, &ck); err != nil {
253 » » return v, errors.Annotate(err).Reason("failed to decode cache ke y").Err() 253 » » return v, errors.Annotate(err, "failed to decode cache key").Err ()
254 } 254 }
255 255
256 var cv *caching.Value 256 var cv *caching.Value
257 if v.Schema == dsCacheSchema && len(v.Data) > 0 { 257 if v.Schema == dsCacheSchema && len(v.Data) > 0 {
258 // We have a currently-cached value, so decode it into "cv". 258 // We have a currently-cached value, so decode it into "cv".
259 var err error 259 var err error
260 if cv, err = caching.DecodeValue(v.Data); err != nil { 260 if cv, err = caching.DecodeValue(v.Data); err != nil {
261 » » » return v, errors.Annotate(err).Reason("failed to decode cache value").Err() 261 » » » return v, errors.Annotate(err, "failed to decode cache v alue").Err()
262 } 262 }
263 } 263 }
264 264
265 // Apply our timeout, if configured (influences urlfetch). 265 // Apply our timeout, if configured (influences urlfetch).
266 if dch.loaderTimeout > 0 { 266 if dch.loaderTimeout > 0 {
267 var cancelFunc context.CancelFunc 267 var cancelFunc context.CancelFunc
268 c, cancelFunc = clock.WithTimeout(c, dch.loaderTimeout) 268 c, cancelFunc = clock.WithTimeout(c, dch.loaderTimeout)
269 defer cancelFunc() 269 defer cancelFunc()
270 } 270 }
271 271
272 // Perform a cache load on this value. 272 // Perform a cache load on this value.
273 cv, err := dch.loader(c, ck, cv) 273 cv, err := dch.loader(c, ck, cv)
274 if err != nil { 274 if err != nil {
275 » » return v, errors.Annotate(err).Reason("failed to load cache valu e").Err() 275 » » return v, errors.Annotate(err, "failed to load cache value").Err ()
276 } 276 }
277 277
278 keyDesc := ck.String() 278 keyDesc := ck.String()
279 valueDesc := cv.Description() 279 valueDesc := cv.Description()
280 log.Infof(c, "Loaded [%s]: %s", keyDesc, valueDesc) 280 log.Infof(c, "Loaded [%s]: %s", keyDesc, valueDesc)
281 281
282 // Encode the resulting cache value. 282 // Encode the resulting cache value.
283 if v.Data, err = cv.Encode(); err != nil { 283 if v.Data, err = cv.Encode(); err != nil {
284 » » return v, errors.Annotate(err).Reason("failed to encode cache va lue").Err() 284 » » return v, errors.Annotate(err, "failed to encode cache value").E rr()
285 } 285 }
286 v.Schema = dsCacheSchema 286 v.Schema = dsCacheSchema
287 v.Description = keyDesc + ": " + valueDesc 287 v.Description = keyDesc + ": " + valueDesc
288 return v, nil 288 return v, nil
289 } 289 }
290 290
291 func (dch *dsCacheHandler) Locker(c context.Context) datastorecache.Locker { 291 func (dch *dsCacheHandler) Locker(c context.Context) datastorecache.Locker {
292 if dch.lockerFunc != nil { 292 if dch.lockerFunc != nil {
293 return dch.lockerFunc(c) 293 return dch.lockerFunc(c)
294 } 294 }
295 return nil 295 return nil
296 } 296 }
297 297
298 // CronLoader returns a caching.Loader implementation to be used 298 // CronLoader returns a caching.Loader implementation to be used
299 // by the Cron task. 299 // by the Cron task.
300 func CronLoader(b backend.B) caching.Loader { 300 func CronLoader(b backend.B) caching.Loader {
301 return func(c context.Context, k caching.Key, v *caching.Value) (*cachin g.Value, error) { 301 return func(c context.Context, k caching.Key, v *caching.Value) (*cachin g.Value, error) {
302 return caching.CacheLoad(c, b, k, v) 302 return caching.CacheLoad(c, b, k, v)
303 } 303 }
304 } 304 }
OLDNEW
« no previous file with comments | « logdog/server/service/service.go ('k') | luci_config/appengine/backend/memcache/cache.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698