OLD | NEW |
| (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 featureBreaker | |
6 | |
7 import ( | |
8 "golang.org/x/net/context" | |
9 | |
10 mc "github.com/luci/gae/service/memcache" | |
11 ) | |
12 | |
13 type mcState struct { | |
14 *state | |
15 | |
16 mc.Interface | |
17 } | |
18 | |
19 func (m *mcState) Get(key string) (ret mc.Item, err error) { | |
20 err = m.run(func() (err error) { | |
21 ret, err = m.Interface.Get(key) | |
22 return | |
23 }) | |
24 return | |
25 } | |
26 | |
27 func (m *mcState) GetMulti(keys []string) (ret map[string]mc.Item, err error) { | |
28 err = m.run(func() (err error) { | |
29 ret, err = m.Interface.GetMulti(keys) | |
30 return | |
31 }) | |
32 return | |
33 } | |
34 | |
35 func (m *mcState) Add(item mc.Item) error { | |
36 return m.run(func() error { return m.Interface.Add(item) }) | |
37 } | |
38 | |
39 func (m *mcState) Set(item mc.Item) error { | |
40 return m.run(func() error { return m.Interface.Set(item) }) | |
41 } | |
42 | |
43 func (m *mcState) Delete(key string) error { | |
44 return m.run(func() error { return m.Interface.Delete(key) }) | |
45 } | |
46 | |
47 func (m *mcState) CompareAndSwap(item mc.Item) error { | |
48 return m.run(func() error { return m.Interface.CompareAndSwap(item) }) | |
49 } | |
50 | |
51 func (m *mcState) AddMulti(items []mc.Item) error { | |
52 return m.run(func() error { return m.Interface.AddMulti(items) }) | |
53 } | |
54 | |
55 func (m *mcState) SetMulti(items []mc.Item) error { | |
56 return m.run(func() error { return m.Interface.SetMulti(items) }) | |
57 } | |
58 | |
59 func (m *mcState) DeleteMulti(keys []string) error { | |
60 return m.run(func() error { return m.Interface.DeleteMulti(keys) }) | |
61 } | |
62 | |
63 func (m *mcState) Flush() error { | |
64 return m.run(func() error { return m.Interface.Flush() }) | |
65 } | |
66 | |
67 func (m *mcState) CompareAndSwapMulti(items []mc.Item) error { | |
68 return m.run(func() error { return m.Interface.CompareAndSwapMulti(items
) }) | |
69 } | |
70 | |
71 func (m *mcState) Increment(key string, delta int64, initialValue uint64) (newVa
lue uint64, err error) { | |
72 err = m.run(func() (err error) { | |
73 newValue, err = m.Interface.Increment(key, delta, initialValue) | |
74 return | |
75 }) | |
76 return | |
77 } | |
78 | |
79 func (m *mcState) IncrementExisting(key string, delta int64) (newValue uint64, e
rr error) { | |
80 err = m.run(func() (err error) { | |
81 newValue, err = m.Interface.IncrementExisting(key, delta) | |
82 return | |
83 }) | |
84 return | |
85 } | |
86 | |
87 func (m *mcState) Stats() (ret *mc.Statistics, err error) { | |
88 err = m.run(func() (err error) { | |
89 ret, err = m.Interface.Stats() | |
90 return | |
91 }) | |
92 return | |
93 } | |
94 | |
95 // FilterMC installs a counter mc filter in the context. | |
96 func FilterMC(c context.Context, defaultError error) (context.Context, FeatureBr
eaker) { | |
97 state := newState(defaultError) | |
98 return mc.AddFilters(c, func(ic context.Context, rds mc.Interface) mc.In
terface { | |
99 return &mcState{state, rds} | |
100 }), state | |
101 } | |
OLD | NEW |