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

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

Issue 1230303003: Revert "Refactor current GAE abstraction library to be free of the SDK*" (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « go/src/infra/gae/libs/wrapper/mathrand.go ('k') | go/src/infra/gae/libs/wrapper/memory/README.md » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: go/src/infra/gae/libs/wrapper/memcache.go
diff --git a/go/src/infra/gae/libs/wrapper/memcache.go b/go/src/infra/gae/libs/wrapper/memcache.go
new file mode 100644
index 0000000000000000000000000000000000000000..c9d13f3968039f3861e0471420ecf2563f798c91
--- /dev/null
+++ b/go/src/infra/gae/libs/wrapper/memcache.go
@@ -0,0 +1,106 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package wrapper
+
+import (
+ "golang.org/x/net/context"
+
+ "appengine/memcache"
+)
+
+// MCSingleReadWriter is the interface for interacting with a single
+// memcache.Item at a time. See appengine.memcache for more details.
+type MCSingleReadWriter interface {
+ Add(item *memcache.Item) error
+ Set(item *memcache.Item) error
+ Get(key string) (*memcache.Item, error)
+ Delete(key string) error
+ CompareAndSwap(item *memcache.Item) error
+}
+
+// MCIncrementer is the interface for atomically incrementing a numeric
+// memcache entry. See appengine.memcache for more details.
+type MCIncrementer interface {
+ Increment(key string, delta int64, initialValue uint64) (newValue uint64, err error)
+ IncrementExisting(key string, delta int64) (newValue uint64, err error)
+}
+
+// MCMultiReadWriter is the interface for doing batched memcache
+// operations. See appengine.memcache for more details.
+type MCMultiReadWriter interface {
+ MCSingleReadWriter
+
+ AddMulti(items []*memcache.Item) error
+ SetMulti(items []*memcache.Item) error
+ GetMulti(keys []string) (map[string]*memcache.Item, error)
+ DeleteMulti(keys []string) error
+ CompareAndSwapMulti(items []*memcache.Item) error
+}
+
+// MCFlusher is the interface for wiping the whole memcache server.
+// See appengine.memcache for more details.
+type MCFlusher interface {
+ Flush() error
+}
+
+// MCStatter is the interface for gathering statistics about the
+// memcache server. See appengine.memcache for more details.
+type MCStatter interface {
+ Stats() (*memcache.Statistics, error)
+}
+
+// MCCodec is the interface representing what you can do with a memcache.Codec
+// after it's been inflated with InflateCodec. It mirrors
+// appengine.memcache.Codec.
+type MCCodec interface {
+ // would use MCSingleReadWriter, but Get has a different signature.
+ Add(item *memcache.Item) error
+ Set(item *memcache.Item) error
+ Get(key string, v interface{}) (*memcache.Item, error)
+ CompareAndSwap(item *memcache.Item) error
+
+ AddMulti(items []*memcache.Item) error
+ SetMulti(items []*memcache.Item) error
+ CompareAndSwapMulti(items []*memcache.Item) error
+}
+
+// MCCodecInflater binds a Memcache to a memcache.Codec.
+type MCCodecInflater interface {
+ InflateCodec(m memcache.Codec) MCCodec
+}
+
+// Memcache is the full interface to the memcache service.
+type Memcache interface {
+ MCMultiReadWriter
+ MCIncrementer
+ MCFlusher
+ MCStatter
+ MCCodecInflater
+}
+
+// MCFactory is the function signature for factory methods compatible with
+// SetMCFactory.
+type MCFactory func(context.Context) Memcache
+
+// GetMC gets the current memcache implementation from the context.
+func GetMC(c context.Context) Memcache {
+ if f, ok := c.Value(memcacheKey).(MCFactory); ok && f != nil {
+ return f(c)
+ }
+ return nil
+}
+
+// SetMCFactory sets the function to produce Memcache instances, as returned by
+// the GetMC method.
+func SetMCFactory(c context.Context, mcf MCFactory) context.Context {
+ return context.WithValue(c, memcacheKey, mcf)
+}
+
+// SetMC sets the current Memcache object in the context. Useful for testing
+// with a quick mock. This is just a shorthand SetMCFactory invocation to set
+// a factory which always returns the same object.
+func SetMC(c context.Context, mc Memcache) context.Context {
+ return SetMCFactory(c, func(context.Context) Memcache { return mc })
+}
« no previous file with comments | « go/src/infra/gae/libs/wrapper/mathrand.go ('k') | go/src/infra/gae/libs/wrapper/memory/README.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698