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

Side by Side Diff: go/src/infra/gae/libs/wrapper/memory/context.go

Issue 1143053004: Simplify memory package interface. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: switch to blasters Created 5 years, 6 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package memory 5 package memory
6 6
7 import ( 7 import (
8 "errors"
8 "infra/gae/libs/wrapper" 9 "infra/gae/libs/wrapper"
9 "math/rand" 10 "math/rand"
10 "sync" 11 "sync"
11 12
12 "golang.org/x/net/context" 13 "golang.org/x/net/context"
13 14
14 "appengine/datastore" 15 "appengine/datastore"
15 ) 16 )
16 17
17 type memContextObj interface { 18 type memContextObj interface {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 return true 86 return true
86 } 87 }
87 88
88 func (m memContext) applyTxn(rnd *rand.Rand, txnCtxObj memContextObj) { 89 func (m memContext) applyTxn(rnd *rand.Rand, txnCtxObj memContextObj) {
89 txnCtx := txnCtxObj.(memContext) 90 txnCtx := txnCtxObj.(memContext)
90 for i := range m { 91 for i := range m {
91 m[i].applyTxn(rnd, txnCtx[i]) 92 m[i].applyTxn(rnd, txnCtx[i])
92 } 93 }
93 } 94 }
94 95
95 // Enable adds a new memory context to c. This new memory context will have 96 // Use adds implementations for the following gae/wrapper interfaces to the
96 // a zeroed state. 97 // context:
97 func Enable(c context.Context) context.Context { 98 // * wrapper.Datastore
98 » return context.WithValue( 99 // * wrapper.TaskQueue
100 // * wrapper.Memcache
101 // * wrapper.GlobalInfo
102 //
103 // These can be retrieved with the "gae/wrapper".Get functions.
104 //
105 // The implementations are all backed by an in-memory implementation, and start
106 // with an empty state.
107 //
108 // Using this more than once per context.Context will cause a panic.
109 func Use(c context.Context) context.Context {
110 » if c.Value(memContextKey) != nil {
111 » » panic(errors.New("memory.Use: called twice on the same Context") )
112 » }
113 » c = context.WithValue(
99 context.WithValue(c, memContextKey, newMemContext()), 114 context.WithValue(c, memContextKey, newMemContext()),
100 giContextKey, &globalInfoData{}) 115 giContextKey, &globalInfoData{})
101 } 116 » return useTQ(useDS(useMC(useGI(c))))
102
103 // Use calls ALL of this packages Use* methods on c. This enables all
104 // gae/wrapper Get* api's.
105 func Use(c context.Context) context.Context {
106 » return UseTQ(UseDS(UseMC(UseGI(c))))
107 } 117 }
108 118
109 func cur(c context.Context) (p memContext) { 119 func cur(c context.Context) (p memContext) {
110 p, _ = c.Value(memContextKey).(memContext) 120 p, _ = c.Value(memContextKey).(memContext)
111 return 121 return
112 } 122 }
113 123
114 type memContextKeyType int 124 type memContextKeyType int
115 125
116 var memContextKey memContextKeyType 126 var memContextKey memContextKeyType
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 txnMC.Lock() 161 txnMC.Lock()
152 defer txnMC.Unlock() 162 defer txnMC.Unlock()
153 163
154 if curMC.canApplyTxn(txnMC) { 164 if curMC.canApplyTxn(txnMC) {
155 curMC.applyTxn(wrapper.GetMathRand(d.c), txnMC) 165 curMC.applyTxn(wrapper.GetMathRand(d.c), txnMC)
156 } else { 166 } else {
157 return datastore.ErrConcurrentTransaction 167 return datastore.ErrConcurrentTransaction
158 } 168 }
159 return nil 169 return nil
160 } 170 }
OLDNEW
« no previous file with comments | « go/src/infra/gae/libs/wrapper/gae/taskqueue.go ('k') | go/src/infra/gae/libs/wrapper/memory/datastore.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698