| 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
|
| }
|
|
|
|
|