Index: go/src/infra/gae/libs/wrapper/memory/memcache.go |
diff --git a/go/src/infra/gae/libs/wrapper/memory/memcache.go b/go/src/infra/gae/libs/wrapper/memory/memcache.go |
index 9876e7cbe9544859e24f054ec1519e75af655d83..19c2eebd6b75d395a2ce3cdca67b0d30997cab4b 100644 |
--- a/go/src/infra/gae/libs/wrapper/memory/memcache.go |
+++ b/go/src/infra/gae/libs/wrapper/memory/memcache.go |
@@ -17,6 +17,8 @@ import ( |
) |
type memcacheData struct { |
+ wrapper.BrokenFeatures |
+ |
lock sync.Mutex |
items map[string]*unsafe.Item |
casID uint64 |
@@ -26,9 +28,6 @@ type memcacheData struct { |
// implementation of {wrapper.Memcache, wrapper.Testable}. |
type memcacheImpl struct { |
wrapper.Memcache |
- wrapper.BrokenFeatures |
- |
- // TODO(riannucci): bind+use namespace too |
data *memcacheData |
timeNow func() time.Time |
@@ -52,13 +51,15 @@ func useMC(c context.Context) context.Context { |
ns := curGID(ic).namespace |
mcd, ok := mcdMap[ns] |
if !ok { |
- mcd = &memcacheData{items: map[string]*unsafe.Item{}} |
+ mcd = &memcacheData{ |
+ BrokenFeatures: wrapper.BrokenFeatures{ |
+ DefaultError: commonErrors.ErrServerErrorMC}, |
+ items: map[string]*unsafe.Item{}} |
mcdMap[ns] = mcd |
} |
return &memcacheImpl{ |
wrapper.DummyMC(), |
- wrapper.BrokenFeatures{DefaultError: commonErrors.ErrServerErrorMC}, |
mcd, |
func() time.Time { return wrapper.GetTimeNow(ic) }, |
} |
@@ -104,9 +105,17 @@ func (m *memcacheImpl) retrieve(key string) (*unsafe.Item, bool) { |
return ret, ok |
} |
+func (m *memcacheImpl) BreakFeatures(err error, features ...string) { |
+ m.data.BreakFeatures(err, features...) |
+} |
+ |
+func (m *memcacheImpl) UnbreakFeatures(features ...string) { |
+ m.data.UnbreakFeatures(features...) |
+} |
+ |
// Add implements context.MCSingleReadWriter.Add. |
func (m *memcacheImpl) Add(i *memcache.Item) error { |
- if err := m.IsBroken(); err != nil { |
+ if err := m.data.IsBroken(); err != nil { |
return err |
} |
@@ -122,7 +131,7 @@ func (m *memcacheImpl) Add(i *memcache.Item) error { |
// CompareAndSwap implements context.MCSingleReadWriter.CompareAndSwap. |
func (m *memcacheImpl) CompareAndSwap(item *memcache.Item) error { |
- if err := m.IsBroken(); err != nil { |
+ if err := m.data.IsBroken(); err != nil { |
return err |
} |
@@ -143,7 +152,7 @@ func (m *memcacheImpl) CompareAndSwap(item *memcache.Item) error { |
// Set implements context.MCSingleReadWriter.Set. |
func (m *memcacheImpl) Set(i *memcache.Item) error { |
- if err := m.IsBroken(); err != nil { |
+ if err := m.data.IsBroken(); err != nil { |
return err |
} |
@@ -156,7 +165,7 @@ func (m *memcacheImpl) Set(i *memcache.Item) error { |
// Get implements context.MCSingleReadWriter.Get. |
func (m *memcacheImpl) Get(key string) (*memcache.Item, error) { |
- if err := m.IsBroken(); err != nil { |
+ if err := m.data.IsBroken(); err != nil { |
return nil, err |
} |
@@ -171,7 +180,7 @@ func (m *memcacheImpl) Get(key string) (*memcache.Item, error) { |
// Delete implements context.MCSingleReadWriter.Delete. |
func (m *memcacheImpl) Delete(key string) error { |
- if err := m.IsBroken(); err != nil { |
+ if err := m.data.IsBroken(); err != nil { |
return err |
} |