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

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

Issue 1240573002: Reland: Refactor current GAE abstraction library to be free of the SDK* (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: expand coverage range to fit 32bit test expectations 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/gae/mathrand.go ('k') | go/src/infra/gae/libs/gae/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/gae/memcache.go
diff --git a/go/src/infra/gae/libs/gae/memcache.go b/go/src/infra/gae/libs/gae/memcache.go
new file mode 100644
index 0000000000000000000000000000000000000000..63d4f1fd58c92289ce48f1ec90908fb3b6d73568
--- /dev/null
+++ b/go/src/infra/gae/libs/gae/memcache.go
@@ -0,0 +1,79 @@
+// 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 gae
+
+import (
+ "time"
+
+ "golang.org/x/net/context"
+)
+
+// MCItem is a wrapper around *memcache.Item. Note that the Set* methods all
+// return the original MCItem (e.g. they mutate the original), due to
+// implementation constraints. They return the original item to allow easy
+// chaining, e.g.:
+// itm := gae.MC(c).NewItem("foo").SetValue([]byte("stuff"))
+type MCItem interface {
+ Key() string
+ Value() []byte
+ Object() interface{}
+ Flags() uint32
+ Expiration() time.Duration
+
+ SetKey(string) MCItem
+ SetValue([]byte) MCItem
+ SetObject(interface{}) MCItem
+ SetFlags(uint32) MCItem
+ SetExpiration(time.Duration) MCItem
+}
+
+// Memcache is the full interface to the memcache service.
+type Memcache interface {
+ NewItem(key string) MCItem
+
+ Add(item MCItem) error
+ Set(item MCItem) error
+ Get(key string) (MCItem, error)
+ Delete(key string) error
+ CompareAndSwap(item MCItem) error
+
+ AddMulti(items []MCItem) error
+ SetMulti(items []MCItem) error
+ GetMulti(keys []string) (map[string]MCItem, error)
+ DeleteMulti(keys []string) error
+ CompareAndSwapMulti(items []MCItem) error
+
+ Increment(key string, delta int64, initialValue uint64) (newValue uint64, err error)
+ IncrementExisting(key string, delta int64) (newValue uint64, err error)
+
+ Flush() error
+
+ Stats() (*MCStatistics, error)
+}
+
+// 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/gae/mathrand.go ('k') | go/src/infra/gae/libs/gae/memory/README.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698