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

Side by Side Diff: filter/txnBuf/txnbuf_test.go

Issue 1434873003: Fix races in txnBuf (Closed) Base URL: https://github.com/luci/gae.git@race_tests
Patch Set: fix stuff Created 5 years, 1 month 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
« no previous file with comments | « filter/txnBuf/state.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 txnBuf 5 package txnBuf
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "fmt" 9 "fmt"
10 "math/rand" 10 "math/rand"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 240
241 // now we see it 241 // now we see it
242 So(3, fooShouldHave(ds), 10, 20, 30, 40) 242 So(3, fooShouldHave(ds), 10, 20, 30, 40)
243 return nil 243 return nil
244 }, &datastore.TransactionOptions{XG: true}), Sho uldBeNil) 244 }, &datastore.TransactionOptions{XG: true}), Sho uldBeNil)
245 245
246 // 2 because we are simulating a transaction fai lure 246 // 2 because we are simulating a transaction fai lure
247 So(under.PutMulti.Total(), ShouldEqual, 2) 247 So(under.PutMulti.Total(), ShouldEqual, 2)
248 So(under.DeleteMulti.Total(), ShouldEqual, 2) 248 So(under.DeleteMulti.Total(), ShouldEqual, 2)
249 249
250 » » » » // 'over' Put operations are amplified because t he inner transaction 250 » » » » So(over.PutMulti.Total(), ShouldEqual, 8)
251 » » » » // commits go through the 'over' filter on the o uter transaction. So it's
252 » » » » // # Puts + # inner txns, times 2 because we are simulating a failed
253 » » » » // transaction.
254 » » » » So(over.PutMulti.Total(), ShouldEqual, 10)
255 251
256 So(7, fooShouldHave(ds)) 252 So(7, fooShouldHave(ds))
257 So(3, fooShouldHave(ds), 10, 20, 30, 40) 253 So(3, fooShouldHave(ds), 10, 20, 30, 40)
258 }) 254 })
259 255
260 Convey("can allocate IDs from an inner transaction", fun c() { 256 Convey("can allocate IDs from an inner transaction", fun c() {
261 nums := []int64{4, 8, 15, 16, 23, 42} 257 nums := []int64{4, 8, 15, 16, 23, 42}
262 k := (*datastore.Key)(nil) 258 k := (*datastore.Key)(nil)
263 So(ds.RunInTransaction(func(c context.Context) e rror { 259 So(ds.RunInTransaction(func(c context.Context) e rror {
264 ds := datastore.Get(c) 260 ds := datastore.Get(c)
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 827
832 vals = []*Foo{} 828 vals = []*Foo{}
833 So(ds.GetAll(q, &vals), ShouldBe Nil) 829 So(ds.GetAll(q, &vals), ShouldBe Nil)
834 So(vals, ShouldResemble, []*Foo{ foo1, projectData[0], foo7}) 830 So(vals, ShouldResemble, []*Foo{ foo1, projectData[0], foo7})
835 831
836 return nil 832 return nil
837 }, nil), ShouldBeNil) 833 }, nil), ShouldBeNil)
838 834
839 vals = []*Foo{} 835 vals = []*Foo{}
840 So(ds.GetAll(q, &vals), ShouldBeNil) 836 So(ds.GetAll(q, &vals), ShouldBeNil)
841 » » » » » So(vals, ShouldResemble, []*Foo{foo1, pr ojectData[0], foo7}) 837 » » » » » So(vals, ShouldResembleV, []*Foo{foo1, p rojectData[0], foo7})
842 838
843 return nil 839 return nil
844 }, nil), ShouldBeNil) 840 }, nil), ShouldBeNil)
845 841
846 vals := []*Foo{} 842 vals := []*Foo{}
847 So(ds.GetAll(q, &vals), ShouldBeNil) 843 So(ds.GetAll(q, &vals), ShouldBeNil)
848 So(vals, ShouldResemble, []*Foo{foo1, projectDat a[0], foo7}) 844 So(vals, ShouldResemble, []*Foo{foo1, projectDat a[0], foo7})
849 845
850 }) 846 })
851 847
852 Convey("start transaction from inside query", func() { 848 Convey("start transaction from inside query", func() {
853 _, _, ds := mkds(projectData) 849 _, _, ds := mkds(projectData)
854 So(ds.RunInTransaction(func(c context.Context) e rror { 850 So(ds.RunInTransaction(func(c context.Context) e rror {
855 ds := datastore.Get(c) 851 ds := datastore.Get(c)
856 852
857 q := datastore.NewQuery("Foo").Ancestor( root) 853 q := datastore.NewQuery("Foo").Ancestor( root)
858 return ds.Run(q, func(pm datastore.Prope rtyMap, _ datastore.CursorCB) bool { 854 return ds.Run(q, func(pm datastore.Prope rtyMap, _ datastore.CursorCB) bool {
859 So(ds.RunInTransaction(func(c co ntext.Context) error { 855 So(ds.RunInTransaction(func(c co ntext.Context) error {
856 ds := datastore.Get(c)
860 pm["Value"] = append(pm[ "Value"], datastore.MkProperty("wat")) 857 pm["Value"] = append(pm[ "Value"], datastore.MkProperty("wat"))
861 return ds.Put(pm) 858 return ds.Put(pm)
862 }, nil), ShouldBeNil) 859 }, nil), ShouldBeNil)
863 return true 860 return true
864 }) 861 })
865 }, &datastore.TransactionOptions{XG: true}), Sho uldBeNil) 862 }, &datastore.TransactionOptions{XG: true}), Sho uldBeNil)
866 863
867 So(ds.Run(datastore.NewQuery("Foo"), func(pm dat astore.PropertyMap, _ datastore.CursorCB) bool { 864 So(ds.Run(datastore.NewQuery("Foo"), func(pm dat astore.PropertyMap, _ datastore.CursorCB) bool {
868 val := pm["Value"] 865 val := pm["Value"]
869 So(val[len(val)-1].Value(), ShouldResemb le, "wat") 866 So(val[len(val)-1].Value(), ShouldResemb le, "wat")
870 return true 867 return true
871 }), ShouldBeNil) 868 }), ShouldBeNil)
872 }) 869 })
873 870
874 }) 871 })
875 872
876 }) 873 })
877 874
878 } 875 }
OLDNEW
« no previous file with comments | « filter/txnBuf/state.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698