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

Unified Diff: go/src/infra/gae/libs/wrapper/memory/memcache.go

Issue 986553002: A simple memcache lock for appengine. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@meta
Patch Set: rebase Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
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
}

Powered by Google App Engine
This is Rietveld 408576698