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

Side by Side Diff: service/memcache/memcache.go

Issue 1270063003: Make the rest of the services have a similar raw/user interface structure. (Closed) Base URL: https://github.com/luci/gae.git@add_datastore
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package memcache
6
7 import (
8 "github.com/luci/luci-go/common/errors"
9 "golang.org/x/net/context"
10 )
11
12 type memcacheImpl struct{ RawInterface }
13
14 var _ Interface = (*memcacheImpl)(nil)
15
16 func (m *memcacheImpl) Add(item Item) error {
17 return errors.SingleError(m.AddMulti([]Item{item}))
18 }
19
20 func (m *memcacheImpl) Set(item Item) error {
21 return errors.SingleError(m.SetMulti([]Item{item}))
22 }
23
24 func (m *memcacheImpl) Get(item Item) error {
25 return errors.SingleError(m.GetMulti([]Item{item}))
26 }
27
28 func (m *memcacheImpl) Delete(key string) error {
29 return errors.SingleError(m.DeleteMulti([]string{key}))
30 }
31
32 func (m *memcacheImpl) CompareAndSwap(item Item) error {
33 return errors.SingleError(m.CompareAndSwapMulti([]Item{item}))
34 }
35
36 func multiCall(items []Item, inner func(items []Item, cb RawCB) error) error {
37 lme := errors.LazyMultiError{Size: len(items)}
38 i := 0
39 err := inner(items, func(err error) {
40 lme.Assign(i, err)
41 i++
42 })
43 if err == nil {
44 err = lme.Get()
45 }
46 return err
47 }
48
49 func (m *memcacheImpl) AddMulti(items []Item) error {
50 return multiCall(items, m.RawInterface.AddMulti)
51 }
52
53 func (m *memcacheImpl) SetMulti(items []Item) error {
54 return multiCall(items, m.RawInterface.SetMulti)
55 }
56
57 func (m *memcacheImpl) CompareAndSwapMulti(items []Item) error {
58 return multiCall(items, m.RawInterface.CompareAndSwapMulti)
59 }
60
61 func (m *memcacheImpl) DeleteMulti(keys []string) error {
62 lme := errors.LazyMultiError{Size: len(keys)}
63 i := 0
64 err := m.RawInterface.DeleteMulti(keys, func(err error) {
65 lme.Assign(i, err)
66 i++
67 })
68 if err == nil {
69 err = lme.Get()
70 }
71 return err
72 }
73
74 func (m *memcacheImpl) GetMulti(items []Item) error {
75 lme := errors.LazyMultiError{Size: len(items)}
76 i := 0
77 keys := make([]string, len(items))
78 for i, itm := range items {
79 keys[i] = itm.Key()
80 }
81 err := m.RawInterface.GetMulti(keys, func(item Item, err error) {
82 if !lme.Assign(i, err) {
83 items[i].SetAll(item)
84 }
85 i++
86 })
87 if err == nil {
88 err = lme.Get()
89 }
90 return err
91 }
92
93 func (m *memcacheImpl) Increment(key string, delta int64, initialValue uint64) ( newValue uint64, err error) {
94 return m.RawInterface.Increment(key, delta, &initialValue)
95 }
96
97 func (m *memcacheImpl) IncrementExisting(key string, delta int64) (newValue uint 64, err error) {
98 return m.RawInterface.Increment(key, delta, nil)
99 }
100
101 func (m *memcacheImpl) Raw() RawInterface { return m.RawInterface }
102
103 // Get gets the current memcache implementation from the context.
104 func Get(c context.Context) Interface {
105 return &memcacheImpl{GetRaw(c)}
106 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698