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

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

Issue 1541183002: Make setting a Memcache Item with a nil Value OK (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 years 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/prod/everything_test.go ('k') | no next file » | 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 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 prod 5 package prod
6 6
7 import ( 7 import (
8 "time" 8 "time"
9 9
10 mc "github.com/luci/gae/service/memcache" 10 mc "github.com/luci/gae/service/memcache"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 // and passes along an error. 67 // and passes along an error.
68 func mcR2FErr(i *memcache.Item, err error) (mc.Item, error) { 68 func mcR2FErr(i *memcache.Item, err error) (mc.Item, error) {
69 if err != nil { 69 if err != nil {
70 return nil, err 70 return nil, err
71 } 71 }
72 return mcItem{i}, nil 72 return mcItem{i}, nil
73 } 73 }
74 74
75 // mcF2R (MC fake-to-real) converts a mc.Item. i must originate from inside 75 // mcF2R (MC fake-to-real) converts a mc.Item. i must originate from inside
76 // this package for this function to work (see the panic message for why). 76 // this package for this function to work (see the panic message for why).
77 //
78 // If the item's Value == nil, it will be copied and replaced with []byte{}.
77 func mcF2R(i mc.Item) *memcache.Item { 79 func mcF2R(i mc.Item) *memcache.Item {
78 if mci, ok := i.(mcItem); ok { 80 if mci, ok := i.(mcItem); ok {
81 if mci.i.Value == nil {
82 ret := *mci.i
83 ret.Value = []byte{}
84 return &ret
85 }
79 return mci.i 86 return mci.i
80 } 87 }
81 panic( 88 panic(
82 "you may not use other mc.Item implementations with this " + 89 "you may not use other mc.Item implementations with this " +
83 "implementation of gae.Memcache, since it will cause all CompareAndSwap " + 90 "implementation of gae.Memcache, since it will cause all CompareAndSwap " +
84 "operations to fail. Please use the NewItem api instead. ") 91 "operations to fail. Please use the NewItem api instead. ")
85 } 92 }
86 93
87 // mcMF2R (MC multi-fake-to-real) converts a slice of mc.Item to a slice of 94 // mcMF2R (MC multi-fake-to-real) converts a slice of mc.Item to a slice of
88 // *memcache.Item. 95 // *memcache.Item.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 return memcache.Flush(m.aeCtx) 158 return memcache.Flush(m.aeCtx)
152 } 159 }
153 160
154 func (m mcImpl) Stats() (*mc.Statistics, error) { 161 func (m mcImpl) Stats() (*mc.Statistics, error) {
155 stats, err := memcache.Stats(m.aeCtx) 162 stats, err := memcache.Stats(m.aeCtx)
156 if err != nil { 163 if err != nil {
157 return nil, err 164 return nil, err
158 } 165 }
159 return (*mc.Statistics)(stats), nil 166 return (*mc.Statistics)(stats), nil
160 } 167 }
OLDNEW
« no previous file with comments | « impl/prod/everything_test.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698